我正在开发一个程序,其中一个要求是以DXF作为输入。输入仅限于2D情况。程序本身在C++/Qt中,但是要测试它,我需要一些示例DXF输入。样条导入已经实现,下一步是增加样条拟合点或控制点的折线。我决定使用Python/ezdxf生成这样的polyline,因为我没有Autocad。
我的第一种方法是利用add_spline_control_frame
从fit点创建样条,然后将其转换为polyline。问题是没有从样条转换到polyline (虽然我想我在文档中看到了它,但是找不到它)。
目前的方法是用add_polyline2d(points)
制作多边形,使每个点与DXF标志字段相等,8
(样条拟合创建的样条顶点)。问题是点必须是DXFVertex
类型(docs状态Vertex
,但不存在),并且该类型对于ezdxf是私有的。
请分享解决我所面临的ezdxf问题或初始问题的方法。
我试着用LibreCAD生成这样一个折线,但是很难从样条拟合点生成一个封闭的折线。
发布于 2020-09-01 14:54:26
在DXF AutoCAD中添加样条实体之前,AutoCAD就使用了由多线实体创建B样条的能力。Autodesk没有记录这个特性的使用情况,ezdxf也没有以任何方式促进它的使用。
如果可以,可以使用样条实体,但是如果必须使用DXF R12,则ezdxf中有一个帮助器类来创建这样的样条ezdxf.render.R12Spline
和一个使用示例这里。
但是您会感到失望的是,BricsCAD和AutoCAD显示了一个非常明显的多边形结构:
因为不仅控制点,而且近似的曲线点都必须存储为多边形点,为了得到一条平滑的曲线,你必须使用很多的逼近点,然后你也可以用一条规则的折线作为近似。我假定控制点的存储只是为了保持样条可编辑。
我所知道的关于这个主题的所有信息都记录在r12spline.py文件中。如果您找到了一个更好的方法来创建平滑的B样条为DXF R12与较少的近似值点,请告诉我。
将样条实体spline
近似为点的示例,可由多线实体使用:
bspline = spline.construction_tool()
msp.add_polyline3d(bpline.approximate(segments=20))
样条实体是三维实体,如果要将样条压缩到xy平面,请移除z轴:
xy_pts = [p.xy for p in bpline.approximate(segments=20)]
msp.add_polyline2d(xy_pts)
# or as LWPOLYLINE entity:
msp.add_lwpolyline(xy_pts, format='xy')
https://stackoverflow.com/questions/63682014
复制相似问题