Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在python(或C+;+;)中,用减法将一个实体扫过另一个实体_C++_Python_Geometry_Cad - Fatal编程技术网

C++ 在python(或C+;+;)中,用减法将一个实体扫过另一个实体

C++ 在python(或C+;+;)中,用减法将一个实体扫过另一个实体,c++,python,geometry,cad,C++,Python,Geometry,Cad,我正在尝试编写一个简单的程序,它可以让我用一个带有特殊切割头的路由器在一块木板上连续切割一系列图形。我正试图找到一个几何体库,它能够通过扫描其他三维实体来减去修改三维形状或实体 具体来说,我希望能够定义一个矩形实体(木板),然后定义一个位轮廓形状,并对矩形实体进行切割(有时在直线上,有时在圆弧上)。有人知道有什么可以做到这一点吗?也许Python级别可以满足您的要求。也是一个有趣的选择

我正在尝试编写一个简单的程序,它可以让我用一个带有特殊切割头的路由器在一块木板上连续切割一系列图形。我正试图找到一个几何体库,它能够通过扫描其他三维实体来减去修改三维形状或实体


具体来说,我希望能够定义一个矩形实体(木板),然后定义一个位轮廓形状,并对矩形实体进行切割(有时在直线上,有时在圆弧上)。有人知道有什么可以做到这一点吗?

也许Python级别可以满足您的要求。

也是一个有趣的选择警告:学习曲线很长


更新:我最近进行了试验,到目前为止,我对试验结果感到满意。你可以很容易地从木板上减去切口,得到你想要的结果。

HeeksCAD可能会帮你完成这项工作

我们正在使用

非常强大且简单的库。

看起来它可能能够使用。(请参阅页面下方的“滑动”部分。)

到目前为止,我所看到的使用Minkowski和的唯一限制是,如果在3D路径中扫掠一个对象,您似乎无法同时旋转该对象。(我可能错了。)例如,如果您尝试在旋转圆柱体的外表面上使用路由器或铣削钻头模拟切割路径,例如铣床上的第四轴或第五轴转盘,则在扫掠时旋转将是有用的。但最初的问题是关于沿2D路径扫描3D对象,模拟一块木头等平面上的切割,所以这个限制可能对我很重要,但对我来说并不重要

CGAL由使用。OpenSCAD有一个minkowski()原语,它似乎使用CGAL 3D minkowski功能。OpenSCAD可能能够提供一个快速的可行性测试,以及一个长期的刀具路径可视化解决方案。(上次我看这个时,我并不这么认为,但那可能是OpenSCAD的一个旧版本。)

CGAL是C++,开源,双许可。到目前为止,我发现了两个python绑定:

  • --未维护
  • --实验性的,不完整的,不确定是否包括3D Minkowski

虽然不完全是一个库,但实现这一点的一种方法可能是在大多数库都支持的二维到三维拉伸功能的基础上进行构建。进行此操作的暂定算法可能是:

  • 以2D形状获取钻头轮廓(您可能已经有了)
  • 沿作为刀具路径的直线或圆弧拉伸该轮廓,创建作为切割形状的三维实体
  • 在每个顶点(例如,直线路径连接曲线路径的位置),对钻头轮廓进行“旋转挤出”或“旋转挤出”以生成拐角半径——大多数库也应支持此操作
  • 从2开始重复,直到完成所有刀轨
  • 执行CSG布尔减法(工件-刀具路径集)

  • 该算法似乎充满了边缘情况,但到目前为止我还没有想到任何边缘情况。我想知道为什么,如果是这么简单的话,没有更多的包已经在做了

    另一种选择是,您可以查看SketchUpRubyAPI。据我所知,这实际上是一个很难解决的问题。我已经查阅了下面列出的大多数软件包的文档和API,但还没有找到一种方法,可以通过布尔减法操作将三维实体扫过另一个实体。到目前为止,我发现最接近的是一些软件包支持的2D到3D拉伸。好的,CGAL(下图)看起来可以做到这一点。OpenSCAD可能会,但仍在寻找。Carve-CSG目前似乎不可用——没有下载,授权页面上写着“请联系”,等等。啊——好多了。谢谢阿格内尔。好的,浏览一下Carve源代码和文档,看起来生成切割形状的唯一方法是沿着路径挤出2D切割钻头轮廓,然后用某种旋转钻头轮廓固定顶点,就像我在其他答案中描述的那样。我有这个权利吗,或者你知道更直接的雕刻方法吗?我没有看到像CGAL的Minkowski求和之类的东西,但也许它叫做其他东西…我不认为有更直接的方法。你所描述的似乎就是它。写在pythonOCC之上,因此基于OpenCascade。专有,仅限C++/C#,Mac/Windows。似乎不支持扫描三维对象;最接近的似乎是沿曲线的二维拉伸。就我所知,这一次看起来最有希望。我已经使用了PythonOCC和FreeCAD,但仍然无法判断OpenCascade是否可以进行三维扫描,或者是否必须通过二维拉伸将其组合在一起。仍然在看。实际上,“最有希望”可能太强了——如果我能在5分钟后编辑评论,我会把它删掉。CGAL看起来也不错——请参见我的CGAL/Minkowski答案。