开源改变世界!!

切片STL #901

推推 grbl 2年前 (2023-02-01) 183次浏览
关闭
Harvie 打开了这个问题 2018 年 7 月 3 日 · 20条评论
关闭

切片STL#901

Harvie 打开了这个问题 2018 年 7 月 3 日 · 20条评论

注释

切片STL #901
合作者

python 中的 STL 切片器编写器可能足以集成到 bCNC 中:

https://github.com/matthewelse/pySlice

我们只需要从 STL 中提取二维轮廓(层交叉切割),然后我们就可以使用 bCNC 在这些轮廓上创建操作。

切片STL #901
合作者作者

有一个非常令人印象深刻的 python 库,叫做 PyMesh:

https://pymesh.readthedocs.io/en/latest/index.html
https://github.com/qnzhou/PyMesh

它可以读取/写入 .obj、.off、.ply、.stl、.mesh (MEDIT)、.msh (Gmsh) 和 .node/.face/.ele (Tetgen) 格式的 2D 和 3D 网格。

https://pymesh.readthedocs.io/en/latest/basic.html#loading-mesh

它有简单的 API,返回包含单个切片路径的对象:

https://pymesh.readthedocs.io/en/latest/api_geometry_processing.html#slicing-mesh

我想我们可以在 10 行代码中进行基本的 2D 切片……

切片STL #901
合作者作者
切片STL #901
合作者作者

我使用 meshcut 库成功地将网格切片为 g 代码!

切片STL #901

PoC代码:

"""
Basic usage example on a ply mesh. Note that this require a closed, manifold
input mesh.
"""
##
import os
import numpy as np
import itertools
import utils
import ply

import meshcut

if __name__ == '__main__':
    example_fname = "/home/harvie/Temp/meshcut/examples/data/mesh.ply"
    with open(example_fname) as f:
        verts, faces, _ = ply.load_ply(f)

    plane_orig = (0.02, 0, 0) #vyska
    plane_norm = (1, 0, 0)

    contours = meshcut.cross_section(verts, faces, plane_orig, plane_norm)

    for contour in contours:
        print("(---------------)")
        #print(contour)
	first = contour[0]
	print("g0 x%f y%f"%(first[1],first[2]))
	for segment in contour:
		print("g1 x%f y%f"%(segment[1],segment[2]))
	print("g1 x%f y%f"%(first[1],first[2]))
切片STL #901
合作者作者
哈维 评论了 2018 年 7 月 11 日  

我有第一个版本的插件!目前它只对 ASCII PLY 网格进行切片。可以支持 STL。

切片STL #901

切片STL #901

切片STL #901

切片STL #901
合作者作者

哇!我刚刚意识到创建真正的 3D 刀具路径来切割 3d 模型是多么容易。我认为一旦我们获得可靠的切片我们就可以做到……现在它需要一些调整……

切片STL #901
合作者作者

目前我正在尝试解决根本没有被切割的孔的问题:julienr/meshcut#3

Harvie 向 Harvie/bCNC 添加了引用此问题的提交 2018 年 7 月 11 日

Harvie 向 Harvie/bCNC 添加了引用此问题的提交 2018 年 7 月 11 日

切片STL #901
合作者作者
哈维 评论了 2018 年 7 月 11 日  

现在我们有两种模式。

切片STL #901

非平面:

切片STL #901

平坦的:

切片STL #901

Harvie 向 Harvie/bCNC 添加了引用此问题的提交 2018 年 7 月 11 日

Harvie 向 Harvie/bCNC 添加了引用此问题的提交 2018 年 7 月 11 日

Harvie 向 Harvie/bCNC 添加了引用此问题的提交 2018 年 7 月 11 日

Harvie 向 Harvie/bCNC 添加了引用此问题的提交 2018 年 7 月 12 日

切片STL #901

这看起来很酷,如果我的小型 meshcut 库有帮助,我很高兴 :)

切片STL #901
合作者作者

#937

向切片器插件添加了基本的网格操作:

切片STL #901

添加了 3D 切片(对未来的 3D 凸轮工作很有用):

切片STL #901

切片STL #901

切片STL #901
合作者作者
哈维 评论了 2018 年 8 月 19 日  

@julienr事实上,我刚刚在切片 sphere.stl(由您的库提供)时发现了错误,例如。在 Y 层 0、-2、-4 等等。您可以看到半圆形内外的细线,它们不应该出现在这些地方:

切片STL #901

它用于以下设置:

plane_norm = (0, 1, 0)
#and three of these:
plane_orig = (0, 0, 0)
plane_orig = (0, -2, 0)
plane_orig = (0, -4, 0)

直接在 bCNC 中,您可以使用以下设置启动它:

切片STL #901

你认为你可以检查发生了什么吗?

无论如何感谢您的工作!它可能会将 bCNC 带到全新的水平!

切片STL #901

我试图在 bCNC 中重现,这是我所做的:

  • 打开切片网格插件
  • 按照屏幕截图设置参数
  • 点击“Slice Mesh”运行插件

然后它似乎运行了一段时间,但之后我在 3D 视图中看不到任何结果。我必须点击其他地方吗?

我尝试使用1_stl_sphere_cut.pymeshcut 的示例进行重现,但它似乎在那里工作:

切片STL #901

(这是 plane_norm = (0, 1, 0))

我必须使用 y 介于 0 和 1 之间的 plane_orig,否则,平面不会与球体相交。也许在 bCNC 中,球体具有不同的原点/比例?

切片STL #901
合作者作者
哈维 评论了 2018 年 8 月 29 日  

@julienr我从侧面与球体相交。stl 实际上是半球。这意味着它不会沿 Z 轴扩展到负值。但在 Y 中确实如此。也许我的轴混淆了。我说的是那个半圆切片。正如您在 meshlab 中看到的:

切片STL #901

如果我从侧面切几片,就会出现问题。你可以在切片中看到很多虚线和伪影(青绿色突出显示),而应该只有几个半圆(如灰色的):

切片STL #901

但是,即使在您的屏幕截图中似乎也存在一些差距:

切片STL #901

切片STL #901

屏幕截图中的差距只是绘图时最后一点没有连接到第一点,所以我认为这不是问题所在。

我试图在 bCNC 中重现该问题,但我有点迷茫(我以前没有使用过 bCNC)。你能给我重现你得到的结果的确切步骤吗?当我运行切片网格插件时,我得到的只是一个球体,但我没有像你那样看到切片。

另外,我怎样才能像你的截图一样显示黄色的切片列表?

另一种选择是,如果您可以使用sphere.stlmeshcut 中包含的脚本通过脚本重现它,这可能有助于调试。

切片STL #901
合作者作者
哈维 评论了 2018 年 9 月 7 日  

@julienr单击编辑器选项卡:
切片STL #901

我已经在使用来自 meshcut 的 sphere.stl。啊。抱歉,这只是同名文件。请等一下。我正在使用这个:sphere.stl.zip

我会尝试切片你的 sphere.stl …

切片STL #901
合作者作者

我试过使用 meshcut 存储库中的 sphere.stl,问题非常相似。这是我的设置:

切片STL #901

例如。层 y0.75 非常糟糕:

切片STL #901

切片STL #901
合作者作者
哈维 评论了 2018 年 9 月 8 日  

我刚刚发现从 3D STL 生成 3D g 代码的怪异方法这远非精确,但它很容易做到,所以我不得不这样做。现在我用 minz 标签标记所有 Z 切片,所以当你选择它们并将它们标记为“岛”时,你将自动在每个切片中获得正确的高度。这意味着当我做平口袋或“压平”并切割它时,这些岛会导致 3D 模型印在压平代码上:

切片STL #901

切片STL #901

切片STL #901

结果看起来很糟糕,但我在大约 10 分钟内设法添加了此功能:-)

切片STL #901

使用更高的步距,它看起来更平滑:

切片STL #901

这种方法甚至比大多数 3D CAM 用于粗加工策略的方法更糟糕,因为显然它会创建阶梯而不是平滑曲线,但仍然需要大量时间才能完成,因为它使用的是通常用于精加工路径的平行刀具路径。此外,电磨偏移在 Z 方向上不正确。这更多的是实验。但我认为这是在 bCNC 中完成的第一个 3D CAM 操作,当我排除高度图插件时:-)

顺便说一句,我认为这是对岛切割代码的良好测试,因为它处理了很多与许多重叠岛相交的刀具路径:-D

切片STL #901

@Harvie感谢您的解释,成功地在我的 meshcut 示例中重现了!我打开julienr/meshcut#7是为了不让我的调试进度污染这个问题。当我设法修复它时,我会在这里通知你。

切片STL #901
合作者作者

@julienr非常感谢你!
顺便说一句,我正在努力降低 meshcut 的依赖性。目前我设法摆脱了其中的一些。例如:在这里我设法使用 numpy 向量化而不是 scipy 来计算空间距离:

https://github.com/Harvie/bCNC/blob/master/plugins/slicemesh.py
(我会称这个插件为“meshcut”,但是bCNC以与libs相同的方式导入插件,所以有冲突,导致meshcut库导入而不是插件文件本身,所以我不得不将它重命名为 slicemesh 以便可以导入库和插件)

并设法消除了 stl.py 中对“枚举”库的需求:

https://github.com/Harvie/bCNC/blob/master/lib/stl/stl.py

我的长期计划是尽量减少解析 PLY 和 STL 文件所需的基础设施,并添加对二进制 PLY 文件的支持(目前仅支持 ASCII PLY)。

切片STL #901

@Harvie我确实在切片代码中发现了一个错误,并将一些修复推送给了 master。现在应该工作得更好。

切片STL #901
合作者作者

实现了 STL 切片。如果有意愿在其上实现 3D CAM,我们可以单独开一个 issue。