AutoCAD DXF

司机简称

DXF

Driver built-in by default

This driver is built-in by default

DXF是一种ASCII格式,用于在不同软件包之间交换AutoCAD图形。OGR支持读取所有最新版本的AutoCAD生成的DXF文件,并编写与AutoCAD 2004及更高版本兼容的DXF文件。

DXF文件被认为没有通过OGR的地理参考信息。

驱动程序功能

Supports Create()

This driver supports the GDALDriver::Create() operation

Supports VirtualIO

This driver supports virtual I/O operations (/vsimem/, etc.)

DXF阅读器

默认情况下,文件的所有内容都表示为一个名为“entities”的OGR层。功能都将具有以下通用字段:

  • 图层:DXF图层的名称。默认图层为“0”。

  • PaperSpace:1如果实体位于布局(图纸空间)上,则为空。

  • 子类:可用时,实体所属类的列表。

  • ExtendedEntity(GDAL<=2.2.x):所有扩展实体属性的值都附加到单个文本字段中(如果可用)。

  • RawCodeValues(GDAL>=2.3.0):仅当配置选项 DXF_INCLUDE_RAW_CODE_VALUES 设置为TRUE。包含DXF读取器未处理的所有组码和值的字符串列表。

  • 线型:可用时,用于此实体的线型。

  • entity handle:十六进制实体句柄。一种功能id。

  • 文本:标签的文本。

支持的实体

支持以下实体类型:

  • 点:生成简单的点几何特征。

  • 多行文字,文字:生成具有标签样式信息的点要素。样式字符串可以包括以下参数:f s t a c w p dx dy bo it。文本定位可能与CAD软件不完全匹配(尤其是多行文字的垂直对齐),因为计算精确位置需要GDAL知道字体度量。默认情况下,字符转义(如%%p)在适用的情况下被接受,而多行文字控制序列(如\宽x.xx;被剥离。要禁用此行为并检索原始文本值,请设置配置选项 DXF_TRANSLATE_ESCAPE_SEQUENCES 错误的。

  • LINE,POLYLINE,LWPOLYLINE:转换为线字符串。将对圆角多段线(设置了顶点凸出属性的多段线)进行镶嵌。单顶点多段线将转换为点。多面体网格被转换为多面体几何体。

  • 多行:

    • (GDAL>=2.3.0)转换为多行。仅重建几何图形;忽略应用于多线内单个线元素的样式。填充颜色和开始/结束大写也被忽略。

    • (GDAL<=2.2.x)不支持。

  • 圆、椭圆、圆弧、样条曲线(GDAL>=2.3.0)螺旋:转换为线串,将曲线细分为线段。(GDAL>=2.3.0)具有非零“厚度”(圆柱体)的圆近似为多面体曲面。

  • 插入:默认情况下,插入所引用的块定义将作为复合几何图形插入(例如,包含多行的块的多行线,或包含点和线的块的几何集合)。如果块包含文字或多行文字实体,则它们不会合并到复合几何图形中,而是作为单独的要素返回。

    有三个配置选项可用于控制插入实体的行为:

    • DXF_MERGE_BLOCK_GEOMETRIES :为避免将块合并到复合几何图形中,DXFU MERGEU BLOCKU GEOMETRICS config选项可设置为FALSE。如果需要保留块中各个线条图元的样式(例如颜色),请使用此选项。

    • DXF_INLINE_BLOCKS :见下文。

    • (GDAL>=2.3.0) DXF_FEATURE_LIMIT_PER_BLOCK :单个块中插入的最大特征数。设置为-1表示无限制。默认为10000。

  • ATTDEF,属性:

    • (GDAL>=2.3.0)属性(ATTRIB)被视为文本实体,块内的属性定义(ATTDEF)被忽略。当DXF_INLINE_BLOCKS为false时,行为不同(参见下文)。

    • (GDAL<=2.2.x)ATTDEF实体被视为文本。不支持ATTRIB实体。

  • 图案填充:直线和圆弧边界作为多边形几何图形收集,但当前不努力表示图案填充实体的填充样式。

    (GDAL>=2.3.0)的 DXF_HATCH_TOLERANCE “配置”选项确定查找要添加到图案填充边界的下一个零部件时使用的公差。

    (GDAL<=2.2.x)仅正确转换直线和多段线边界路径。

  • 3DFACE,SOLID,(GDAL>=2.3.0)跟踪:转换为多边形,只有一个不同顶点(转换为点)或两个不同顶点(转换为线串)的实体和跟踪实体除外。

  • 尺寸:

    • (GDAL>=2.3.0)DXF格式允许每个维度实体引用“匿名”块(其名称以 * D) 包含维度几何图形的。如果存在,则此匿名块将内联到所需位置。否则,简单的维度渲染器将发生回退,该渲染器将线性维度分解为多行特征。箭头(如果存在)将转换为一个或多个附加功能。回退渲染器将渲染非线性维度,就像它们是线性的一样。

    • (GDAL<=2.2.x)维度被转换为文本的多行和点。

  • 领导者,多重领导者:

    • (GDAL>=2.3.0)引线转换为线串(引线)或多行线(多重引线)。箭头(如果存在)将转换为一个或多个附加功能。多重引线实体的文字将转换为带标签的点要素。多重引线的块内容视为插入。样条曲线引线被细分为线段。

    • (GDAL<=2.2.x)不支持。

  • 三维实体、区域、实体、曲面:见下文。

在转换实体时,通过OGR特征样式信息合理地尝试保留颜色、线宽(线宽)、线型、文本大小和方向。目前没有努力保留复杂的线型(包括文本或形状)或填充样式。

将圆弧、椭圆、圆和圆角多段线近似为线串的方法是将圆弧拆分为不超过阈值角度的子圆弧。此角度是使用 OGR_ARC_STEPSIZE 配置选项。默认为4度。您还可以设置 OGR_ARC_MAX_GAP 配置选项,以强制插值曲线上相邻点之间的最大距离。将此选项设置为0(默认值)表示不应用最大距离。

对于样条曲线,插值多段线为每个控制点包含八个顶点。

对象坐标系(OCS)也称为“拉伸”,除尺寸、引线和多重引线外,根据DXF规范适用于其的所有实体。这三种实体类型目前也缺乏对立面的支持;几何图形将始终是二维的。

DXF_INLINE_BLOCKS

默认行为是插入图元与它们参照的块的几何图形一起分解。但是,如果 DXF_INLINE_BLOCKS 如果将configuration选项设置为值FALSE,则行为与此处所述的不同。

  • 新的图层将被称为“块”。它将包含文件中定义的每个块的一个或多个要素。除了通常的字段外,它们还将有一个块字段,指示它们是哪个块的一部分。(注意,在GDAL 2.2.x和之前的版本中,这个字段被称为BlockName。)

  • (GDAL>=2.3.0)块层中的ATTDEF实体将有一个AttributeTag字段,给出ATTDEF实体的标记。

  • 实体层将有几个新字段:

    • block name:被引用块的名称。

    • 块比例:X、Y和Z比例因子。

    • 方块角:方块的角度,单位为度。

    • BlockOCSNormal(GDAL>=2.3.0):插入实体的对象坐标系(OCS)的单位法向量。

    • BlockOCSCoords(GDAL>=2.3.0):插入点的OCS坐标。

    • block attributes(GDAL>=2.3.0):与此块关联的属性的文本内容。此字符串列表中的每个条目都包含一个属性标记,后跟一个空格,后跟该属性的文本(可能为空)。

  • 插入实体将用相应的信息填充这些新字段(对于所有其他实体,这些信息为空)。

  • 插入实体不会内联块几何图形,而是具有插入点的点几何图形。

其目的是在禁用DXF_INLINE_块的情况下,块参照将保持为参照,并且原始块定义将通过块图层可用。导出时,此配置将导致创建类似的块。

3D扩展性

DXF文件可能包含3DSOLID、REGION、BODY和SURFACE实体,这些实体包含专有Autodesk ShapeManager(ASM)格式的三维建模数据,该格式与ACIS格式具有广泛的兼容性。GDAL无法将这些实体转换为OGR几何体,因此默认情况下会跳过它们。

从gdal2.3.0开始 DXF_3D_EXTENSIBLE_MODE 配置选项可以设置为TRUE,以将这些实体和存储在字段中的原始ASM数据包括在一起,从而允许与商业转换工具的互操作性。此选项添加两个新字段:

  • ASM data:包含ASM数据的二进制字段。

  • ASMTransform:包含12个实值的列主列表,表示要应用于实体的仿射变换。

此功能仅适用于AutoCAD 2013(AC1027)格式及更高版本的DXF文件。

字符编码

通常,DXF文件采用ANSI_/Win1252编码。GDAL/OGR试图在读取时将其转换为UTF-8,在写入时将其转换回ANSIӤ1252。DXF文件还可以有一个头字段($DWGCODEPAGE),指示文件的编码。试图用它将其他代码页重新编码为UTF-8。这是否有效将取决于代码页命名,以及GDAL/OGR是否是针对iconv库构建的,用于字符重新编码。

在某些情况下,DXF文件中的$DWGCODEPAGE设置将是错误的,或者OGR无法识别。可以手动编辑,也可以 DXF_ENCODING 配置变量可用于重写OGR在转码中使用的id。DXFu ENCODING的值应该是CPLRecode()支持的编码名称(即iconv名称),而不是DXF$DWGCODEPAGE名称。使用DXFU编码名称“UTF-8”将避免在读取文本时对其重新编码的任何尝试。


DXF编写器

DXF文件是以AutoCAD 2004格式编写的。从$GDAL廑u DATA/header.dxf文件中写入一个标准头(直到ENTITIES关键字),并在实体之后添加$GDAL廑u DATA/trailer.dxf文件。只有一个OGR层可以用来创建输出文件(但是可以创建许多DXF层-见下文)。

  • 具有标签样式的点要素基于样式信息编写为多行文字实体。

  • 没有标签样式的点要素将作为点实体写入。

  • LineString和MultiLineString功能将作为一个或多个LWPOLYLINE实体写入,在多边形环的情况下闭合。如果几何图形没有恒定的高程,则会写入多段线实体。努力保持线条宽度和颜色。

  • 默认情况下,多边形、三角形和多边形特征将作为图案填充图元写入。要将这些要素改为多段线/多段线图元,请设置“配置”选项 DXF_WRITE_HATCH 错误的。如果几何图形没有恒定高程,则可能需要执行此操作,因为DXF图案填充图元不能表示此类几何图形。

只读取样式字符串中的第一个工具(笔、画笔等)。可以理解以下样式字符串参数:

工具

可用于几何图形类型

支持的参数

PEN

点(多)线串

颜色(c);宽度(w);虚线图案(p)

BRUSH

(多)多边形,三角形

前景色(fc)

SYMBOL

Point

颜色(c)

LABEL

Point

GDAL>=2.3.0:文本(t);字体名称(f);字体大小(s),视为大写
高度;粗体(bo);斜体(it);文本颜色(c);x和y偏移(dx,
dy;角度(a);锚点(p);拉伸(w)
GDAL<=2.2.x:文本(t);字号(s),视为大写高度;文本
颜色(c);角度(a);定位点(p)

数据集创建支持以下数据集创建选项:

  • HEADER= 文件名 :重写使用的头文件-代替位于GDAL_数据目录中的header.dxf。

  • TRAILER= 文件名 :替代位于GDAL_数据目录中的trailer.dxf使用的尾部文件。

头和尾模板可以是完整的DXF文件。驱动程序将扫描它们并只提取所需的部分(实体部分之前或之后的部分)。

块参照

除了“实体”层之外,还可以将“块”层导出到DXF,以便在输出文件中生成实际的DXF块定义。如果为实体提供了块名,也可以编写插入实体。要使此项工作正常进行,以下条件适用:

  • 可以创建“块”层,并且必须在实体层之前创建。

  • 块图层中的实体应填充块字段。(注意,在GDAL 2.2.x和更早版本中,这个属性被称为BlockName。)

  • 要在实体层中作为插入写入的对象应具有点几何图形和块名字段集。您还可以设置BlockAngle、BlockScale、BlockOCSNormal和BlockOCSCoords(有关详细信息,请参见上面的DXF_INLINE_BLOCKS下)。如果BlockOCSCoords设置为3个实数的列表,则将其用作块的位置;在这种情况下,将忽略点几何图形的位置。

  • 如果模板头中已经定义了块(名称),则无论块层中是否提供了新定义,都将使用该块(名称)。

其目的是,将DXF_INLINE_块设置为FALSE时,从DXF到DXF的简单转换将近似地再现原始块,并将INSERT实体保留为INSERT实体,而不是分解它们。

图层定义

写入实体时,如果填充了Layer字段,则该字段用于设置写入实体层。如果该层尚未在模板头中定义,则将引入一个新的层定义,并从默认层(“0”)的定义中复制。

线型定义

在编写线条几何图形时,以下规则适用于线型(虚线图案)定义。

  • 如果“线型”字段是在已写入的要素上设置的,并且该线型已在模板标题中定义,则将从实体中引用它。如果样式字符串具有与标题中定义的线型成比例的“p”图案,则会写入线型比例值。

  • 如果已设置“线型”字段,但未在标题模板中定义线型,则如果要素具有带笔工具的OGR样式字符串和“p”图案设置,则将添加定义。

  • 如果要素没有线型字段集,但它确实有带有“p”图案集的钢笔工具的OGR样式字符串,则将在输出文件中创建自动命名的线型。或者,如果先前创建了适当的线型,则将引用该线型,如果需要,将使用线型比例。

其目的是在写入DXF时保留“点-短划线”样式模式,并且可以在标题模板中预定义特定的线型,并在需要时使用线型字段进行引用。

假设模式使用“g”(地理参考)单位来定义线型。如果没有,DXF模式的缩放可能是错误的-可能是非常错误的。

单位

GDAL使用设置为“英制-英寸”的测量单位写入DXF文件。如果需要更改单位,请编辑 $MEASUREMENT$INSUNITS 标题模板中的变量。


也见

List of known issues

AutoCAD 2000 DXF Reference

AutoCAD 2014 DXF Reference