一、绘制图像并标注
将长度标注为:L = 670
将半径标注为:R = 24
二、读取图中信息
1. 导入文件
import ezdxf
# Load the DXF file
doc = ezdxf.readfile("Label.dxf")
entity_types = set(entity.dxftype() for entity in doc.modelspace())
print("DXF 文件中的实体类型:", entity_types)
"""
DXF 文件中的实体类型: {'LINE', 'DIMENSION', 'CIRCLE'}
"""
2. 读取信息
先读标注
# 获取模型空间中的所有 DIMENSION 实体
dimensions = doc.modelspace().query("DIMENSION")
# 遍历所有 DIMENSION 实体并打印参数
for dim in dimensions:
# 打印 DIMENSION 实体的类型
print("dimstyle:", dim.dxf.dimstyle)
print("dimtype:", dim.dxf.dimtype)
print("defpoint:", dim.dxf.defpoint)
print("defpoint2:", dim.dxf.defpoint2)
print("defpoint3:", dim.dxf.defpoint3)
print("defpoint4:", dim.dxf.defpoint4)
print("defpoint5:", dim.dxf.defpoint5)
print("angle:", dim.dxf.angle)
print("leader_length:", dim.dxf.leader_length)
print("text_midpoint:", dim.dxf.text_midpoint)
print("actual_measurement,实际测量值:", dim.dxf.actual_measurement)
print("get_measurement,测量值:", dim.get_measurement())
print("text:", dim.dxf.text)
print("Handle:", dim.dxf.owner)
print()
"""
dimstyle: ISO-25
dimtype: 32
defpoint: (669.9052567329467, 74.48915876587853, 0.0)
defpoint2: (-0.094743267053218, 47.86374808520349, 0.0)
defpoint3: (669.9052567329467, 47.86374808520349, 0.0)
defpoint4: (0.0, 0.0, 0.0)
defpoint5: (0.0, 0.0, 0.0)
angle: 0
leader_length: None
text_midpoint: (334.9052567329468, 85.11415876587851, 0.0)
actual_measurement,实际测量值: 670.0
get_measurement,测量值: 669.9999999999999
text: {\H8x;L}
Handle: 1F
dimstyle: ISO-25
dimtype: 164
defpoint: (-0.0947432670532216, 23.86374808520342, 0.0)
defpoint2: (0.0, 0.0, 0.0)
defpoint3: (0.0, 0.0, 0.0)
defpoint4: (-17.68950307374088, 40.18626098441625, 0.0)
defpoint5: (0.0, 0.0, 0.0)
angle: 0
leader_length: 0.0
text_midpoint: (-38.54651609668507, 59.53513916442173, 0.0)
actual_measurement,实际测量值: 24.00000000000003
get_measurement,测量值: 24.000000000000018
text: {\H8x;R}
Handle: 1F
"""
读出来的参数:text,是之后绑定实体所必需的。
再读实体
# 遍历 DXF 文件中的所有实体
for entity in doc.modelspace():
# 输出实体类型
print("实体类型:", entity.dxftype())
print("Handle:", entity.dxf.handle)
# 根据实体类型输出参数
if entity.dxftype() == "LINE":
print("起点坐标:", entity.dxf.start)
print("终点坐标:", entity.dxf.end)
elif entity.dxftype() == "CIRCLE":
print("圆心坐标:", entity.dxf.center)
print("半径:", entity.dxf.radius)
elif entity.dxftype() == "ARC":
print("圆心坐标:", entity.dxf.center)
print("半径:", entity.dxf.radius)
print("起始角度:", entity.dxf.start_angle)
print("终止角度:", entity.dxf.end_angle)
elif entity.dxftype() == "LWPOLYLINE":
vertices = entity.get_points("xy")
print("顶点坐标列表:", vertices)
elif entity.dxftype() == "POLYLINE":
vertices = entity.get_points("xy")
print("顶点坐标列表:", vertices)
print("是否封闭:", entity.closed)
elif entity.dxftype() == "TEXT":
print("文本内容:", entity.dxf.text)
print("插入点坐标:", entity.dxf.insert)
print("高度:", entity.dxf.height)
print("旋转角度:", entity.dxf.rotation)
print("对齐