首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于ezdxf的DXF生成:包含样条拟合点的折线

基于ezdxf的DXF生成:包含样条拟合点的折线
EN

Stack Overflow用户
提问于 2020-09-01 05:45:09
回答 1查看 1.3K关注 0票数 1

我正在开发一个程序,其中一个要求是以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生成这样一个折线,但是很难从样条拟合点生成一个封闭的折线。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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近似为点的示例,可由多线实体使用:

代码语言:javascript
运行
复制
bspline = spline.construction_tool()
msp.add_polyline3d(bpline.approximate(segments=20))

样条实体是三维实体,如果要将样条压缩到xy平面,请移除z轴:

代码语言:javascript
运行
复制
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')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63682014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档