18

我编写了自己的 ASCII DXF 文件解析器,但在某些特定文档中遇到了省略号的问题。

似乎没有定义开始和结束参数的角度方向(顺时针或逆时针)的“组代码”。在大多数情况下,它是逆时针的,但并非在所有情况下......

为简化起见,这是一个视觉示例:

椭圆1 椭圆2

如您所见,第一个的起始角度为 135,第二个的起始角度为 45...但是,椭圆似乎是相同的(半圆,在左侧)...这是因为第一个是顺时针的,第二个是逆时针的。。。

显然,它们在 AutoCAD 中正确显示,但使用我的解析器,它们看起来像这样:

椭圆3

只是因为我不知道角度是用CW还是CCW表示......

我错过了组代码还是什么?

信息:在 AutoCAD 中,我可以看到第一个椭圆“短轴端点”是 [200, -200, 0],而第二个是 [-200, 200, 0],我想这就是 AutoCAD 知道角度是 CW 或 CCW ......但我在 DXF 文件中只有“长轴端点”和“长短轴比”(一个数字)

以下是与此示例对应的 DXF 文件:http ://www.woofiles.com/dl-279966-ZvoMjamr-c.dxf

4

2 回答 2

6

已解决:我忘了考虑挤压矢量

当它为负数 (0,0,-1) 时,必须将角度视为 CCW 而不是 CW(反之亦然)

于 2013-09-05T08:09:29.493 回答
4

椭圆可能不在 2D XY 平面中,因此仅使用拉伸方向的 Z 分量的符号是不安全的。这是 3D 椭圆的更通用方法:

1) 在 XY 平面上创建一个椭圆,长轴在 +X 方向,从起始参数(组代码 41)逆时针旋转到结束参数(组代码 42)。首先确保结束参数大于开始参数,如果不是,则添加 2pi。然后,您可以使用以下方法计算每个点:

X = [length of major radius] * cos(angle)
Y = [length of minor radius] * sin(angle)

2)将其旋转到这个新的坐标系:

Direction of new X axis = endpoint of major axis
Direction of new Z axis = extrusion direction
Direction of new Y axis = [new Z axis] cross product [new X axis]

您可以通过对这些向量进行归一化并制作一个 3x3 变换矩阵来做到这一点,其中每列包含一个向量,然后将此矩阵乘以在步骤 1 中创建的椭圆中的每个点。

于 2013-09-11T03:08:08.643 回答