JAVA生产解析DXF;DXF-LIB

发布时间 2023-11-29 14:25:14作者: 酷酷的洛克

DXF-LIB

DXF解析参考资料:DXF 格式 - 中文参考手册

项目地址

GitHUB地址

GitEE地址

DXF 文件解析组件

这是一个可以解析dxf文件的jar包,目前支持解析的图形有点、圆、直线、ARC弧线、多线段、单行文本、多行文本、图元

将其解析为几何数据和点线数据,存储在DxfResolverImpl的baseStructureMap中,按类型(KEY)分为

public interface EntityNameConstant {
    /**
     * 点的名称
     */
    String POINT_NAME = "POINT";
    /**
     * 文本的名称
     */
    String TEXT_NAME = "TEXT";

    /**
     * 线的名称
     */
    String LINE_NAME = "LINE";

    /**
     * 弧线的名称
     */
    String ARC_NAME = "ARC";

    /**
     * 圆的名称
     */
    String CIRCLE_NAME = "CIRCLE";

    /**
     * 多线段
     */
    String POLY_LINE_NAME = "POLY_LINE";
}

包内提供了转换工具类DxfLineTransformationImpl.java
将几何点转为几何线pointTransform、将几何圆转为点圆circleTransform
将几何弧线转为点弧线arcTransform、将几何线、转换为点线数据lineTransform
将几何多线段、转为点多线段数据polyLineTransform

例:

public class ParseDxf {
    @Test
    public void parseDxfFile() {
        try {
            DxfResolver build = ParseDXF.build("E:\\test\\白马2000-3-108.dxf");
            // DxfResolver builtd = ParseDXF.build(new FileInputStream("E:\\test\\白马2000-3-108.dxf"));
            Map<String, List<GeometricModel>> structureMap = build.getStructureMap();
            System.out.println(structureMap);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

该库内有一个DXF转KML的例子,可参考查看 GenerateKml.java


生成DXF文件

dxf文件处理库,可以创建、加载dxf文件,并向其中添加新的图元。目前可以添加进去的图元有:

Arc、Circle 、Line 、LwPolyLine 、Text 、Ellipse 、Ray 、XLine

创建一个新的dxf文件

public class GemerateDxf {

    String url = "E:\\test\\te223st.dxf";

    @Test
    public void testWrite() {
        try (DxfDocWriter dxfDocWriter = new DxfDocWriter()) {
            Color color = new Color(255, 255, 255);

            // 创建多段线实体
            DxfLwPolyLine dxfLwPolyLine = new DxfLwPolyLine();
            java.util.List<java.util.List<Double>> points = new ArrayList<>();
            List<Double> point = new ArrayList();
            double x = 100;
            double y = 100;
            double z = 100;
            point.add(x);
            point.add(y);
            point.add(z);
            points.add(point);
            dxfLwPolyLine.setHeight(100D);

            x = 1000;
            y = 1000;
            z = 1000;
            point = new ArrayList();
            point.add(x);
            point.add(y);
            point.add(z);
            points.add(point);
            dxfLwPolyLine.setColor(color);

            x = 1100;
            y = 3000;
            z = 2500;
            point = new ArrayList();
            point.add(x);
            point.add(y);
            point.add(z);
            points.add(point);
            dxfLwPolyLine.addPoints(points);
            dxfLwPolyLine.setClose(true);
            dxfLwPolyLine.setAlpha(100);
            dxfLwPolyLine.setSolid(true);
            dxfLwPolyLine.setSolidColor(color);
            dxfDocWriter.addEntity(dxfLwPolyLine);

            // 创建圆弧
            DxfArc dxfArc = new DxfArc();

            dxfArc.setColor(color);
            dxfArc.setHeight(200D);
            dxfArc.setStartAngle(10);
            dxfArc.setEndAngel(160.0);
            dxfArc.setCenter(new Vector3(200.0, 100.0, 0.0));
            dxfArc.setRadius(new BigDecimal(200));
            dxfDocWriter.addEntity(dxfArc);

            // 创建圆
            DxfCircle dxfCircle = new DxfCircle();

            dxfCircle.setColor(new Color(100, 10, 150));
            dxfCircle.setHeight(300D);
            dxfCircle.setCenter(new Vector3(100.00, 100.00, 0.0));
            dxfCircle.setRadius(new BigDecimal(100));
            dxfCircle.setSolid(true);
            dxfCircle.setAlpha(100);
            dxfCircle.setSolidColor(new Color(100, 60, 70));
            dxfDocWriter.addEntity(dxfCircle);

            // 创建点
            DxfPoint dxfPoint = new DxfPoint();
            dxfPoint.setPoint(new Vector3(300.00, 300.0, 300.0));
            dxfPoint.setHeight(300D);
            dxfPoint.setColor(color);
            dxfDocWriter.addEntity(dxfPoint);

            // 创建文本
            DxfText dxfText = new DxfText();

            dxfText.setStartPoint(100, 200, 300);
            dxfText.setText("1234");
            dxfText.setColor(color);
            dxfText.setHigh(30);
            dxfText.setAlpha(100);
            dxfText.setSolidAlpha(50);

            dxfDocWriter.addEntity(dxfText);

            // 创建椭圆
            DxfEllipse dxfEllipse = new DxfEllipse();
            dxfEllipse.setClose(true);
            dxfEllipse.setColor(color);
            dxfEllipse.setCenterPoint(200, 200, 0);
            dxfEllipse.setMajorAxisPoint(600, 200, 0);
            dxfEllipse.setShortAxisScale(0.5);
            dxfDocWriter.addEntity(dxfEllipse);

            // 创建线段
            DxfLine dxfLine = new DxfLine();
            dxfLine.setStartPoint(1000, 1000, 0);
            dxfLine.setEndPoint(2000, 2000, 0);
            dxfLine.setColor(color);
            dxfDocWriter.addEntity(dxfLine);

            // 创建射线
            DxfRay dxfRay = new DxfRay();
            dxfRay.setStart(-100, -100, 0);
            dxfRay.setDirection(-200, -200, 0);
            dxfRay.setColor(color);
            dxfDocWriter.addEntity(dxfRay);

            dxfDocWriter.save(url, true);
        }
    }
}

加载一个已经存在的文件

public class TestReadDxfFile {
    public static void main(String[] args) {
        try (DxfDocWriter dxfDocWriter = new DxfDocument(path)) {
            // body code, same as before code
        } 
    }
}

DXF格式详解

DXF(Drawing Exchange Format)是由AutoCAD开发的一种用于存储和交换计算机辅助设计(CAD)数据的文件格式。
DXF文件是以文本形式存储的,也可以选择以二进制形式存储。以下是DXF文件的基本结构和一些常见的标签:

DXF 文件本质上由代码及关联值对组成。代码(通常称为组码)表明其后的值的类型。使用这些组码和值对,可以将 DXF 文件组织到由记录组成的区域中,
这些记录由组码和数据项目组成。在 DXF 文件中,每个组码和值都各占一行。

每段都以一个后跟字符串 SECTION 的组码 0 开始,其后是组码 2 和表示该段名称的字符串(例如,HEADER)。每段都由定义其元素的组码和值组成。每段都以一个后跟字符串 ENDSEC 的组码 0 结束。

DXF 格式 - 中文参考手册

DXF 文件完整的结构如下:

1. HEADER 段。包含图形的基本信息。它由 AutoCAD 数据库版本号和一些系统变量组成。每个参数都包含一个变量名称及其关联的值。
2. CLASSES 段。包含应用程序定义的类的信息,这些类的实例出现在数据库的 BLOCKS、ENTITIES 和 OBJECTS 段中。类定义在类的层次结构中是固定不变的。
3. TABLES 段。包含以下符号表的定义:
    1. APPID(应用程序标识表)
    2. BLOCK_RECORD(块参照表)
    3. DIMSTYLE(标注样式表)
    4. LAYER(图层表)
    5. LTYPE(线型表)
    6. STYLE(文字样式表)
    7. UCS(用户坐标系表)
    8. VIEW(视图表)
    9. VPORT(视口配置表) 
4. BLOCKS 段。包含构成图形中每个块参照的块定义和图形图元。
5. ENTITIES 段。包含图形中的图形对象(图元),其中包括块参照(插入图元)。
6. OBJECTS 段。包含图形中的非图形对象。除图元、符号表记录以及符号表以外的所有对象都存储在此段。OBJECTS 段中的条目样例是包含多线样式和组的词典。
7. THUMBNAILIMAGE 段。包含图形的预览图像数据。此段为可选。

组码值类型参考 (DXF)

根据下面的组码范围表,组码将相关值的类型定义为整数、浮点数或字符串。

组码值类型
代码范围 组值类型
0-9 字符串(随着从 AutoCAD 2000 起引入了扩展符号名称,字数限制已由 255 个字符扩大到 2049 个单字节字符,不包括行末的换行符)
10-39 双精度三维点值
40-59 双精度浮点值
60-79 16 位整数值
90-99 32 位整数值
100 字符串(最多 255 个字符;对于 Unicode 字符串,字符数要少一些)
102 字符串(最多 255 个字符;对于 Unicode 字符串,字符数要少一些)
105 表示 16 进制 (hex) 句柄值的字符串
110-119 双精度浮点值
120-129 双精度浮点值
130-139 双精度浮点值
140-149 双精度标量浮点值
160-169 64 位整数值
170-179 16 位整数值
210-239 双精度浮点值
270-279 16 位整数值
280-289 16 位整数值
290-299 布尔标志值
300-309 任意字符串
310-319 表示二进制数据块的十六进制值的字符串
320-329 表示 16 进制句柄值的字符串
330-369 表示十六进制对象 ID 的字符串
370-379 16 位整数值
380-389 16 位整数值
390-399 表示 16 进制句柄值的字符串
400-409 16 位整数值
410-419 字符串
420-429 32 位整数值
430-439 字符串
440-449 32 位整数值
450-459 长整数
460-469 双精度浮点值
470-479 字符串
480-481 表示 16 进制句柄值的字符串
999 注释(字符串)
1000-1009 字符串(与 0-9 代码范围的限制相同)
1010-1059 双精度浮点值
1060-1070 16 位整数值
1071 32 位整数值

参考来源: DXF 参考手册: 组码值类型 (autodesk.com)

按数字次序排列的 DXF 组码参考

下表列出了组码或组码范围以及组码值的解释。在此表中,“固定”表明组码始终具有相同的用途。如果组码不固定,则其用途取决于上下文。

按 数 字 次 序 排 列 的 组 码
组码 说明
-5 APP:永久反应器链
-4 APP:条件运算符(ssget 一起使用)
-3 APP:扩展数据 (XDATA) 标记(固定)
-2 APP:图元名参照(固定)
-1 APP:图元名。每次打开图形时,图元名都会发生变化,从不保存(固定)
0 表示图元类型的字符串(固定)
1 图元的主文字值
2 名称(属性标记、块名等)
3-4 其他文字或名称值
5 图元句柄;最多 16 个十六进制数字的字符串(固定)
6 线型名(固定)
7 文字样式名(固定)
8 图层名(固定)
9 DXF:变量名称标识符(仅在 DXF 文件的 HEADER 段中使用)
10 主要点;直线或文字图元的起点、圆的圆心,等等DXF:主要点的 X 值(后跟 YZ 值代码 20 和 30)APP:三维点(三个实数的列表)
11-18 其他点DXF:其他点的 X 值(后跟 Y 值代码 21-28 和 Z 值代码 31-38)APP:三维点(三个实数的列表)
20, 30 DXF:主要点的 Y 值和 Z
21-28, 31-37 DXF:其他点的 Y 值和 Z
38 DXF:如果非零,则为图元的标高
39 如果非零,则为图元的厚度(固定)
40-48 双精度浮点值(文字高度、缩放比例等)
48 线型比例;双精度浮点标量值;默认值适用于所有图元类型
49 重复的双精度浮点值。一个图元的可变长度表(例如,LTYPE 表中的虚线长度)中可能会出现多个 49 组。7x 组始终出现在第一个 49 组之前,用以指定表的长度
50-58 角度(在 DXF 文件中以度为单位,在 AutoLISP 和 ObjectARX 应用程序中以弧度为单位)
60 图元可见性;整数值;未赋值或值为 0 时表示可见;值为 1 时表示不可见
62 颜色号(固定)
66 “后跟图元”标志(固定)
67 空间 — 模型空间或图纸空间(固定)
68 APP:指示视口是处于打开状态但在屏幕上完全不可见,还是未激活或处于关闭状态
69 APP:视口标识号
70-78 整数值,例如重复计数、标志位或模式
90-99 32 位整数值
100 子类数据标记(将派生类名作为字符串)从其他具体类派生的所有对象和图元类必须具有此标记。子类数据标记用于分离由同一对象的继承链中的不同类定义的数据。对于从 ObjectARX 派生的每个不同的具体类的 DXF 名称来说,这是必须满足的额外要求(参见* 子类标记*
102 控制字符串,后跟“{<任意名称>”或“}”。与扩展数据 1002 组码类似,不同之处在于当字符串以“{”开始时,其后可跟任意字符串,字符串的解释取决于应用程序。唯一允许的另外一个控制字符串是作为组结束符的“}”。除了执行图形核查操作期间外,AutoCAD 不会解释这些字符串。它们供应用程序使用
105 DIMVAR 符号表条目的对象句柄
110 UCS 原点(仅当将代码 72 设定为 1 时才显示)DXF:X 值;APP:三维点
111 UCS X 轴(仅当将代码 72 设定为 1 时才显示)DXF:X 值;APP:三维矢量
112 UCS Y 轴(仅当将代码 72 设定为 1 时才显示)DXF:X 值;APP:三维矢量
120-122 DXF:UCS 原点的 Y 值,UCS X 轴和 UCS Y
130-132 DXF:UCS 原点的 Z 值,UCS X 轴和 UCS Y
140-149 双精度浮点值(例如点、标高和 DIMSTYLE 设置)
170-179 16 位整数值,例如表示 DIMSTYLE 设置的标志位
210 拉伸方向(固定)DXF:拉伸方向的 X 值APP:三维拉伸方向矢量
220, 230 DXF:拉伸方向的 Y 值和 Z
270-279 16 位整数值
280-289 16 位整数值
290-299 布尔标志值
300-309 任意字符串
310-319 具有相同表示和 1004 组码限制的任意二进制块:用最大长度为 254 个字符的十六进制字符串表示最大长度为 127 个字节的数据块
320-329 任意对象句柄;“按原样”获取的句柄值。它们在 INSERT 和 XREF 操作期间不进行转换
330-339 软指针句柄;指向同一个 DXF 文件或图形中的其他对象的任意软指针。在 INSERT 和 XREF 操作期间进行转换
340-349 硬指针句柄;指向同一个 DXF 文件或图形中的其他对象的任意硬指针。在 INSERT 和 XREF 操作期间进行转换
350-359 软所有者句柄;指向同一个 DXF 文件或图形中的其他对象的任意软所有者指针。在 INSERT 和 XREF 操作期间进行转换
360-369 硬所有者句柄;指向同一个 DXF 文件或图形中的其他对象的任意硬所有者指针。在 INSERT 和 XREF 操作期间进行转换
370-379 线宽枚举值 (AcDb::LineWeight)。作为 16 位整数存储和移动。自定义非图元对象可以使用整个范围内的组码,但图元类只能在其表示中使用 371-379 DXF 组码,因为 AutoCAD 和 AutoLISP 都始终假定 370 组码是图元的线宽。这使 370 组码与其他“通用”图元字段具有相同的行为
380-389 PlotStyleName 类型枚举 (AcDb::PlotStyleNameType)。作为 16 位整数存储和移动。自定义非图元对象可以使用整个范围内的组码,但图元类只能在其表示中使用 381-389 DXF 组码,原因与上述线宽范围相同
390-399 表示 PlotStyleName 对象的句柄值的字符串,本质上是硬指针,但范围不同,更容易处理向后兼容。作为对象 ID(在 DXF 文件中为句柄)和 AutoLISP 中的特殊类型存储和移动。自定义非图元对象可以使用整个范围内的组码,但图元类只能在其表示中使用 391-399 DXF 组码,原因与上述线宽范围相同
400-409 16 位整数
410-419 字符串
420-427 32 位整数值。与真彩色一同使用时,表示 24 位颜色值的 32 位整数。高阶字节(8 位)为 0;低阶字节为包含“蓝色”值 (0-255)、然后是“绿色”值的无符号字符;次高阶字节是“红色”值。将此整数值转换为十六进制值将得到以下位掩码:0x00RRGGBB。例如,红色200、绿色100 和蓝色==50 的真彩色为 0x00C86432,而在 DXF 中以十进制表示则为 13132850
430-437 字符串;用于真彩色时,则为表示颜色名称的字符串
440-447 32 位整数值。用于真彩色时,表示透明度值
450-459 长整数
460-469 双精度浮点值
470-479 字符串
480-481 硬指针句柄;指向同一个 DXF 文件或图形中的其他对象的任意硬指针。在 INSERT 和 XREF 操作期间进行转换
999 DXF:999 组码指示后面的行是注释字符串。SAVEAS 不会在 DXF 输出文件中包含这样的组,但 OPEN 则包括这些组并忽略注释。可以使用 999 组在您编辑的 DXF 文件中包含注释
1000 扩展数据中的 ASCII 字符串(最多可以包含 255 个字节)
1001 扩展数据的注册应用程序名(最多可以包含 31 个字节的 ASCII 字符串)
1002 扩展数据控制字符串(“{”或“}”)
1003 扩展数据图层名
1004 扩展数据中的字节数据块(最多可以包含 127 个字节)
1005 扩展数据中的图元句柄;最多可以包含 16 个十六进制数字的字符串
1010 扩展数据中的点DXF:X 值(后跟 1020 和 1030 组)APP:三维点
1020, 1030 DXF:点的 Y 值和 Z
1011 扩展数据中的三维世界空间位置DXF:X 值(后跟 1021 和 1031 组)APP:三维点
1021, 1031 DXF:世界空间位置的 Y 值和 Z
1012 扩展数据中的三维世界空间位移DXF:X 值(后跟 1022 和 1032 组)APP:三维矢量
1022, 1032 DXF:世界空间位移的 Y 值和 Z
1013 扩展数据中的三维空间方向DXF:X 值(后跟 1022 和 1032 组)APP:三维矢量
1023, 1033 DXF:世界空间方向的 YZ
1040 扩展数据双精度浮点值
1041 扩展数据距离值
1042 扩展数据缩放比例
1070 扩展数据 16 位有符号整数
1071 扩展数据 32 位有符号长整数

DXF 文件中的图元组码 (DXF)

以下是 DXF 文件 ENTITIES 段的样例:

0SECTION2ENTITIES ENTITIES 段的开始
0
<图元类型>
5
<句柄>
330
<指向所有者的指针>
100
AcDbEntity
8
<图层>
100
AcDb
<类名>
.. <数据>.
每个图元定义一个条目
0
ENDSEC
ENTITIES 段的结束

POINT (点图元)

以下组码适用于点图元。

POINT 组码
组码 说明
100 子类标记 (AcDbPoint)
10 点位置(在 WCS 中)DXF:X 值;APP:三维点
20, 30 DXF:点位置的 Y 值和 Z 值(在 WCS 中)
39 厚度(可选;默认值 = 0)
210 拉伸方向(可选;默认值 = 0, 0, 1)DXF:X 值;APP:三维矢量
220, 230 DXF:拉伸方向的 Y 值和 Z 值(可选)
50 绘制点时所使用的 UCS 的 X 轴的角度(可选;默认值 = 0);当 PDMODE 非零时使用

LINE (直线图元)

以下组码适用于直线图元。

LINE 组码
组码 说明
100 子类标记 (AcDbLine)
39 厚度(可选;默认值 = 0)
10 起点(在 WCS 中)DXF:X 值;APP:三维点
20, 30 DXF:起点的 Y 值和 Z 值(在 WCS 中)
11 端点(在 WCS 中)DXF:X 值;APP:三维点
21, 31 DXF:端点的 Y 值和 Z 值(在 WCS 中)
210 拉伸方向(可选;默认值 = 0, 0, 1)DXF:X 值;APP:三维矢量
220, 230 DXF:拉伸方向的 Y 值和 Z 值(可选)

LWPOLYLINE (多段线图元)

以下组码适用于优化多段线图元。

WPOLYLINE 组码
组码 说明
100 子类标记 (AcDbPolyline)
90 顶点数
70 多段线标志(按位编码);默认值为 0:1 = 关闭;128 = Plinegen
43 固定宽度(可选;默认值 = 0)。如果设定为可变宽度(代码 40 和/或 41),则不使用
38 标高(可选;默认值 = 0)
39 厚度(可选;默认值 = 0)
10 顶点坐标(在 OCS 中),多个条目;每个顶点一个条目DXF:X 值;APP:二维点
20 DXF:顶点坐标的 Y 值(在 OCS 中),多个条目;每个顶点一个条目
91 顶点标识符
40 起点宽度(多个条目;每个顶点一个条目)(可选;默认值 = 0;多个条目)。如果设定为固定宽度(代码 43),则不使用
41 端点宽度(多个条目;每个顶点一个条目)(可选;默认值 = 0;多个条目)。如果设定为固定宽度(代码 43),则不使用
42 凸度(多个条目;每个顶点一个条目)(可选;默认值 = 0)
210 拉伸方向(可选;默认值 = 0, 0, 1)DXF:X 值;APP:三维矢量
220, 230 DXF:拉伸方向的 Y 值和 Z 值(可选)

POLYLINE (多段线图元)

以下组码适用于多段线图元。

POLYLINE 组码
组码 说明
100 子类标记(AcDb2dPolyline 或 AcDb3dPolyline)
66 已废弃;以前是“后跟图元标志”(可选;如果存在则忽略)
10 DXF:始终为 0APP:“虚拟”点;X 值和 Y 值始终为 0,Z 值是多段线的标高(二维时在 OCS 中,三维时在 WCS 中)
20 DXF:始终为 0
30 DXF:多段线的标高(二维时在 OCS 中,三维时在 WCS 中)
39 厚度(可选;默认值 = 0)
70 多段线标志(按位编码;默认值 = 0):1 = 这是一个闭合多段线(或按 M 方向闭合的多边形网格)2 = 已添加曲线拟合顶点4 = 已添加样条曲线拟合顶点8 = 这是一条三维多段线16 = 这是一个三维多边形网格32 = 多边形网格以 N 方向闭合64 = 多段线是一个多面网格128 = 线型图案在该多段线顶点的周围连续生成
40 默认起点宽度(可选;默认值 = 0)
41 默认端点宽度(可选;默认值 = 0)
71 多边形网格 M 顶点计数(可选;默认值 = 0)
72 多边形网格 N 顶点计数(可选;默认值 = 0)
73 平滑曲面 M 密度(可选;默认值 = 0)
74 平滑曲面 N 密度(可选;默认值 = 0)
75 曲线和平滑曲面类型(可选;默认值 = 0);整数代码,非按位编码:0 = 不拟合平滑曲面5 = 二次 B 样条曲面6 = 三次 B 样条曲面8 = Bezier 曲面
210 拉伸方向(可选;默认值 = 0, 0, 1)DXF:X 值;APP:三维矢量
220, 230 DXF:拉伸方向的 Y 值和 Z 值(可选)

多段线图元后面将跟随应用程序 ID 为“AUTOCAD_POSTSCRIPT_FIGURE”的扩展数据。它包含与 PostScript 图像和 PostScript 填充信息相关的信息。

CIRCLE (圆图元)

以下组码适用于圆图元。

CIRCLE 组码
组码 说明
100 子类标记 (AcDbCircle)
39 厚度(可选;默认值 = 0)
10 中心点(在 OCS 中)DXF:X 值;APP:三维点
20, 30 DXF:中心点的 Y 值和 Z 值(在 OCS 中)
40 半径
210 拉伸方向(可选;默认值 = 0, 0, 1)DXF:X 值;APP:三维矢量
220, 230 DXF:拉伸方向的 Y 值和 Z 值(可选)

ARC (圆弧图元)

以下组码适用于圆弧图元。

ARC 组码
组码 说明
100 子类标记 (AcDbCircle)
39 厚度(可选;默认值 = 0)
10 中心点(在 OCS 中)DXF:X 值;APP:三维点
20, 30 DXF:中心点的 Y 值和 Z 值(在 OCS 中)
40 半径
100 子类标记 (AcDbArc)
50 起点角度
51 端点角度
210 拉伸方向(可选;默认值 = 0, 0, 1)DXF:X 值;APP:三维矢量
220, 230 DXF:拉伸方向的 Y 值和 Z 值(可选)

ELLIPSE (椭圆图元)

以下组码适用于椭圆图元。

ELLIPSE 组码
组码 说明
100 子类标记 (AcDbEllipse)
10 中心点(在 WCS 中)DXF:X 值;APP:三维点
20, 30 DXF:中心点的 Y 值和 Z 值(在 WCS 中)
11 相对于中心的长轴端点(在 WCS 中)DXF:X 值;APP:三维点
21, 31 DXF:相对于中心的长轴端点的 Y 值和 Z 值(在 WCS 中)
210 拉伸方向(可选;默认值 = 0, 0, 1)DXF:X 值;APP:三维矢量
220, 230 DXF:拉伸方向的 Y 值和 Z 值(可选)
40 短轴与长轴的比例
41 起点参数 (对于闭合椭圆,该值为 0.0)
42 端点参数 (对于闭合椭圆,该值为 2pi)

HELIX (螺旋图元)

以下组码适用于螺旋图元。

HELIX 组码
组码 说明
样条曲线数据
100 子类标记 (AcDbHelix)
90 主版本号
91 维护版本号
10, 20, 30 轴基点
11, 21, 31 起点
12, 22, 32 轴矢量
40 半径
41 圈数
42 圈高
290 左右手习惯;0 = 左手,1 = 右手
280 约束类型0 = 约束圈高1 = 约束圈数2 = 约束高度

SPLINE (曲线图元)

以下组码适用于样条曲线图元。

SPLINE 组码
组码 说明
100 子类标记 (AcDbSpline)
210 法向矢量(如果样条曲线为非平面型,则省略)DXF:X 值;APP:三维矢量
220, 230 DXF:法向矢量的 Y 值和 Z 值(可选)
70 样条曲线标志(按位编码):1 = 闭合样条曲线2 = 周期性样条曲线4 = 有理样条曲线8 = 平面16 = 线性(同时还设置平面位)
71 样条曲线的阶数
72 节点数
73 控制点数
74 拟合点数(如果有)
42 节点公差(默认值 = 0.0000001)
43 控制点公差(默认值 = 0.0000001)
44 拟合公差(默认值 = 0.0000000001)
12 起点切向 — 可以省略(在 WCS 中)DXF:X 值;APP:三维点
22, 32 DXF:起点切向的 Y 值和 Z 值 — 可以省略(在 WCS 中)
13 端点切向 — 可以省略(在 WCS 中)DXF:X 值;APP:三维点
23, 33 DXF:端点切向的 Y 值和 Z 值 — 可以省略(在 WCS 中)
40 节点值(每个节点一个条目)
41 权值(如果不为 1);对于多组对,如果均不为 1,则出现。
10 控制点(在 WCS 中);每个控制点一个条目DXF:X 值;APP:三维点
20, 30 DXF:控制点的 Y 值和 Z 值(在 WCS 中);每个控制点一个条目
11 拟合点(在 WCS 中);每个拟合点一个条目DXF:X 值;APP:三维点
21, 31 DXF:拟合点的 Y 值和 Z 值(在 WCS 中);每个拟合点一个条目