如何使用拟合点创建 dxf 样条曲线?

How do I create a dxf spline curve using fitpoints?

我正在尝试在 dxf 文件中以编程方式创建样条曲线。我需要使用拟合点,因为曲线需要通过指定的点。我知道我还需要使用控制点。有没有公​​式可以计算这些应该是什么?它是一个有四个拟合点的闭合样条。

提前致谢!

我觉得这不是一件容易的事。除了控制点,您还需要确定节点。有一个 DXF reader/viewer here(用 C++ 编写)声称支持样条曲线。也许你可以通过阅读代码找到一些信息。

AutoCAD 使用 NURBS,它是近似曲线(曲线仅通过第一个点和最后一个点)。在用户界面中,样条曲线是插值的(曲线通过拟合点),因此在 reading/writing DXF 文件时会进行平移。如果您创建一个具有 4 个拟合点的闭合点,您将看到 DXF 文件中有 7 个控制点:

使用多段线来近似样条曲线会更容易。这是折线的示例(L 形从 0,0 -> 100, 0 -> 100, 50 开始)

  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

要根据拟合点计算控制点的位置,您可以参考此 page(§24 和 §25)。事实上,您需要反转 Casteljau 算法(对于贝塞尔曲线;我不知道它如何用于 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

Group code 70 位值 1024 允许拟合到点。我在 AutoCAD forum post 上找到了这个小信息。我还没有在其他任何地方引用过它。位值为 1 是 Closed spline,8 是 Planar。我的1032这个值明显是平面的,贴合点,没有闭合。

组码74为拟合点数

组码44为拟合点公差。

组码11,21,31为拟合点的x,y,z坐标

reference manual