官方文档:https://ezdxf.readthedocs.io/en/master/howto/index.html
一般先决条件:
import ezdxf
doc = ezdxf.readfile("your_dxf_file.dxf")
msp = doc.modelspace()
ezdxf有一个接口来获取和设置标头变量:
doc.header['VarName'] = value
value = doc.header['VarName']
使用此头变量设置CAD应用程序的默认单元,打开DXF文件。此设置与ezdxfAPI调用,对于长度值和坐标是不单位的,对于角度(在大多数情况下)是十进制度。
成套绘图单元:
$度量值控制当前绘图是否使用帝国或公制舱口模式和线型文件:
doc.header['$MEASUREMENT'] = 1
0 | 英语 |
---|---|
1 | 公制 |
$LUNITS设置用于创建对象的线性单元格式:
doc.header['$LUNITS'] = 2
1 | 科学 |
---|---|
2 | 十进制(默认) |
3 | 工程学 |
4 | 建筑 |
5 | 分数 |
$AUNITS为角度设置单元格式:
doc.header['$AUNITS'] = 0
0 | 十进制 |
---|---|
1 | 度/分/秒 |
2 | 格蕾 |
3 | 弧度 |
$INSUNITS设置AutoCAD设计中心块的默认绘图单元:
doc.header['$INSUNITS'] = 6
0 | 无单位 |
---|---|
1 | 寸 |
2 | 脚 |
3 | 迈尔斯 |
4 | 毫米 |
5 | 厘米 |
6 | 米计 |
7 | 公里 |
8 | 微英寸 |
9 | 米尔斯 |
10 | 院子 |
11 | 安格罗斯 |
12 | 纳米级 |
13 | 微米 |
14 | 分度表 |
15 | 曲目 |
16 | 高度计 |
17 | 千兆 |
18 | 天文单位 |
19 | 光年 |
20 | Parsecs |
21 | 美国调查脚 |
22 | 美国调查英寸 |
23 | 美国调查场 |
24 | 美国调查英里 |
DXF文件是纯文本文件,您可以使用每个处理较大文件的文本编辑器打开这个文件。但是要快速获得你想要的信息并不是一件容易的事。
创建一个更具可读性的HTML文件(DXF漂亮打印机):
这将生成一个HTML文件。您的dxf_file.html与普通的DXF文件和DXF句柄相比,DXF实体之间的链接布局更好,这简化了DXF实体之间的导航。
在0.8.3版中更改:自ezdxf以来v0.8.3,一个名为dxfpp将添加到Python脚本路径:
usage: dxfpp [-h] [-o] [-r] [-x] [-l] FILE [FILE ...]
positional arguments:
FILE DXF files pretty print
optional arguments:
-h, --help show this help message and exit
-o, --open open generated HTML file with the default web browser
-r, --raw raw mode - just print tags, no DXF structure interpretation
-x, --nocompile don't compile points coordinates into single tags (only in
raw mode)
-l, --legacy legacy mode - reorders DXF point coordinates
若要显示以CAD应用程序窗口为中心的模型空间的任意位置,请将’*Active’Vport到这个位置。DXF属性dxf.center定义模型空间中的位置,dxf.height指定要查看的模型空间的区域。快捷功能:
doc.set_modelspace_vport(height=10, center=(10, 10))
Autodesk Web服务A 360似乎比AutoCAD桌面应用程序更挑剔,使用ezdxf支持的最新DXF版本可能会有所帮助,ezdxf支持的版本是DXF R2018(AC 1032)。
ezdxf如果不自动在实体中定位模型空间的主视图,则必须在TrueView 2020中执行“缩放到扩展”命令:
在Autodesk在线查看器中:
将这一行添加到代码中以重新定位主视图,调整中心(在模型空间坐标中)和高度(在绘图单元中)对您的需求的参数:
doc.set_modelspace_vport(height=10, center=(0, 0))
如果要添加具有与现有绘图相对路径的XREFS和图像,并且它们没有立即在AutoCAD中显示,请更改标头变量。 P R O J E C T N A M E = ′ ′ 到 ( 不 太 ) 解 决 这 个 问 题 。 用 于 d x f r 2004 及 更 高 版 本 的 e z d x f 模 板 有 PROJECTNAME=''到(不太)解决这个问题。用于dxf r 2004及更高版本的ezdxf模板有 PROJECTNAME=′′到(不太)解决这个问题。用于dxfr2004及更高版本的ezdxf模板有PROJECTNAME=’'作为默认值。
感谢大卫·布斯:
如果IMAGEDEF中的文件名包含完整路径(在AutoCAD中是绝对的),那么它将在加载时显示,否则在使用XREF管理器手动重新加载之前它不会显示(报告不可读)。
解决方法(在加载时显示图像)似乎是将完整的文件路径保存在DXF中,或者将其保存为DWG。
到目前为止,还没有在加载时显示具有相对路径的图像的解决方案。
若要显示以CAD应用程序窗口为中心的模型空间的任意位置,请将’*Active’Vport到这个位置。DXF属性dxf.center定义模型空间中的位置,dxf.height指定要查看的模型空间的区域。快捷功能:
doc.set_modelspace_vport(height=10, center=(10, 10))
一般先决条件:
import ezdxf
doc = ezdxf.readfile("your_dxf_file.dxf")
msp = doc.modelspace()
块引用(Insert)可以具有附加属性(Attrib),这些都是简单的文本注释,并在块引用后面附加了一个关联的标记。
迭代所有附加的属性:
# get all INSERT entities with entity.dxf.name == "Part12"
blockrefs = msp.query('INSERT[name=="Part12"]')
if len(blockrefs):
entity = blockrefs[0] # process first entity found
for attrib in entity.attribs:
if attrib.dxf.tag == "diameter": # identify attribute by tag
attrib.dxf.text = "17mm" # change attribute content
按标记获取属性:
diameter = entity.get_attrib('diameter')
if diameter is not None:
diameter.dxf.text = "17mm"
将XDATA添加为元组列表(组代码、值)set_xdata(),如果已经存在,则覆盖数据:
doc.appids.new('YOUR_APPID') # IMPORTANT: create an APP ID entry
circle = msp.add_circle((10, 10), 100)
circle.set_xdata(
'YOUR_APPID',
[
(1000, 'your_web_link.org'),
(1002, '{'),
(1000, 'some text'),
(1002, '{'),
(1071, 1),
(1002, '}'),
(1002, '}')
])
有关组代码的含义,请参见dxf参考部分。数字阶参考的DXF群码,有效组码在1000-1071范围内。
方法get_xdata()将实体的扩展数据返回为Tags对象。
一般来说Dimension样式和配置属性存储在Dimstyle实体,但是可以单独重写每个维度实体的每个属性,则由DimstyleOverride对象,如以下示例所示:
for dimension in msp.query('DIMENSION'):
dimstyle_override = dimension.override() # requires v0.12
dimtol = dimstyle_override['dimtol']
if dimtol:
print(f'{str(dimension)} has tolerance values:')
dimtp = dimstyle_override['dimtp']
dimtm = dimstyle_override['dimtm']
print(f'Upper tolerance: {dimtp}')
print(f'Lower tolerance: {dimtm}')
这个DimstyleOverride对象返回基础DIMSTYLE对象的值,如果维度中的值未被覆盖,或None如果该值既没有在DIMSTYLE中定义,也没有在维度中定义。
与上面相同,DimstyleOverride对象还支持重写DIMSTYLE值。但是,仅仅覆盖这些值并不会影响维度实体的图形表示,因为CAD应用程序只显示关联的匿名块,其中包含维度实体上的图形表示为简单的DXF实体。呼叫render方法DimstyleOverride对象重新创建此图形表示形式。ezdxf,但是ezdxf 不支持所有维度类型和DIMVARS,以及结果会有所不同来自AutoCAD或BricsCAD渲染。
dimstyle_override = dimension.override()
dimstyle_override.set_tolerance(0.1)
# delete associated geometry block
del doc.blocks[dimension.dxf.geometry]
# recreate geometry block
dimstyle_override.render()