我正在尝试在 dxf 文件中以编程方式创建样条曲线。我需要使用拟合点,因为曲线需要通过指定点。我知道我还需要使用控制点。是否有一个公式来计算这些应该是什么?它是一个具有四个拟合点的闭合样条曲线。
提前致谢!
我认为这不是一件容易的事。除了控制点之外,您还需要确定节点。这里有一个声称支持样条曲线的 DXF 阅读器/查看器(用 C++ 编写)。也许你可以通过阅读代码找到一些信息。
AutoCAD 使用 NURBS,它们是近似曲线(曲线仅通过第一个和最后一个点)。在用户界面中,样条被插值(曲线通过拟合点),因此在读取/写入 DXF 文件时会进行平移。如果您创建一个有 4 个拟合点的闭合点,您将看到 DXF 文件中有 7 个控制点:
使用折线来近似样条曲线会更容易。这是折线的示例(从 0,0 -> 100, 0 -> 100, 50 开始的 L 形)
0
LWPOLYLINE
5
D5
330
70
100
AcDbEntity
8
0
100
AcDbPolyline
90
3
70
0
43
0.0
10
0.0
20
0.0
10
100.0
20
0.0
10
100.0
20
50.0
要从拟合点计算控制点的位置,您可以查阅此页面(第 24 和第 25 节)。实际上,您需要反转 Casteljau 算法(对于 Bezier 曲线;我不知道它对于 NURBS 是如何工作的)。
虽然我很欣赏这是一个老问题,但我想我会分享我的经验。我发现您可以仅使用拟合点而不使用控制点将样条曲线写入 DXF 文件。我只使用开放样条线完成了此操作,并且它可能(或可能确实)随版本而变化。
SECTION
2
ENTITIES
0
SPLINE
8
Outline
100
AcDbSpline
70
1032
71
3
72
0
73
0
74
6
44
0.000000001
11
33.98654201387437
21
0.0
31
0.0
11
35.68732510673189
21
0.36908328878159574
31
0.0
11
37.37659045005916
21
1.0707740721032477
31
0.0
11
39.04265824154412
21
2.0149195037916585
31
0.0
11
40.67371568762629
21
3.1732042281057
31
0.0
11
42.25786591112497
21
4.5302062466715505
31
0.0
组码 70 位值 1024 允许拟合点。我在AutoCAD 论坛帖子中发现了这一小块信息。我还没有遇到它在其他地方引用过。位值 1 是闭合样条,8 是平面。我的 1032 值显然是平面的,适合点而不是封闭的。
组码 74 是拟合点的数量。
组码 44 是配合点公差。
组码 11、21、31 是拟合点的 x、y、z 坐标。
请参阅参考手册。