python读取cad元素_python3读取autocad图形⽂件.py实例废话不多说,看代码吧!
'''
待完善。
此代码实现了,根据标注⽂本的
属性,数值,位置,及 容差,
去判断 设计 和 实测两图中的同⼀位置的尺⼨。
如果是同⼀位置的尺⼨,则进⾏⽐较,
并把结果存成表格,到运⾏此代码的当前⽬录。
此代码运⾏时,要读取的 dwg⽂件 必须处于打开状态。
且 不能在 移动(pan) 模式。
启动代码:
python dwg_measurements_comparison4.py [8]
其中,8代表,判定两图尺⼨为同⼀尺⼨的最⼤距离,
单位:⽶(图上单位)。⾃⼰决定具体是多少。
注意:
启动此代码后,⾸先要在cad软件中打开 对⽐图,
当该图读完后,提⽰切换到实测图时,请在cad软件中切换。
切换完成后,回车,即可。
包的安装:
pip install pyautocad
注:
1.该操作会⾃动安装 comtypes模块。
2.如要使⽤tables 命令,要另外安装xlrd 和 tablib
'''
from pyautocad import Autocad
import sys
ib.tables import Table
import re
acad = Autocad(create_if_not_exists=True)
def getDescription_Measurement_TextPositions():
'''
此函数⽤于读取 实测图 的尺⼨标注的 属性,尺⼨,尺⼨位置。
并返回结果。
⽬前实测图带属性,对⽐图不带。
'''
print('正在读取 ', acad.doc.Name, ' ...')
description_measurement_textPositions = []
for obj in acad.iter_objects('Dimension'):
description_measurement_textPositions.append(
(obj.GetXData("MyDimDist")[1][1],
round(obj.Measurement,2),
obj.TextPosition)
)
return description_measurement_textPositions
def getMeasurement_TextPositions():
'''
此函数⽤于读取 对⽐图 的尺⼨,尺⼨位置。
并返回结果。
'''
print('正在读取 ', acad.doc.Name, ' ...')
measurements_textPositions = []
for a in acad.iter_objects('Dimension'):
measurements_textPositions.append((round(a.Measurement,2), a.TextPosition))
return measurements_textPositions
def isTheSameMeasurement(point1,point2,tolerance):
'''
point1, 类似这样(82.37, (81953.97462829649, 276686.2885731713, 0.0)),
82.37,代表标注的尺⼨,后边代表,该尺⼨在图上显⽰的位置坐标。
point2, 类似这样('车间⼆;长', 82.44, (81951.56923143109, 276679.7827104012, 0.0))此函数通过 两个标注的距离来判断,
两个尺⼨,是否是同⼀位置处的尺⼨。
是,return True
否,return False
tolerance,设计/实测图的同⼀位置两个尺⼨标注允许的距离差。
即,在这个距离差之内,认为是同⼀个对象的尺⼨,可以进⾏⽐对。
'''
p1x = point1[1][0]
p1y = point1[1][1]
p2x = point2[2][0]
p2y = point2[2][1]
d = ((p1x - p2x) ** 2 + (p1y - p2y) ** 2) ** 0.5 if d < tolerance:
return True
else:
return False
def handleData(lst):
'''
此函数⽤于处理读取到的原始数据,
把原始数据分成三类:
长,宽,间距 三个列表如下:
lengthLst,widthLst,distanceLst,
并返回。
'''
lengthLst = []
widthLst = []
distanceLst = []
for i in lst:
key = i[0].split(';')[1]
if key == '间距':
distanceLst.append(i)
elif key == '长':
lengthLst.append(i)
elif key == '宽':
widthLst.append(i)
return lengthLst,widthLst,distanceLst
def handleLengthWidth(lengthLst,widthLst): '''
此函数⽤于处理长度列表和宽度列表,
组合成⼀个列表,即报告中需要的数据结构。
其中,连廊只有宽度,需单独处理。
'''
tableContents = []
tableName = '竣⼯建(构)筑物满外尺⼨对⽐表'
tableHead = ['\\', '发证长度', '实测长度', '长度差值(允许误差值)', '发证宽度', '实测宽度', '宽度差值(允许误差值)'
]
tableContents.append(tableHead)
# 处理连廊尺⼨。
for w in widthLst:
keyW = w[0].split(';')[0]
if re.match('连廊', keyW):
w2 = [keyW]
tableContents.append(w2)
# 处理同时有长宽的尺⼨。
for l in lengthLst:
keyL = l[0].split(';')[0]
for w in widthLst:
keyW = w[0].split(';')[0]
if keyL == keyW:
w2 = w[1:]
l[0] = l[0].split(';')[0]
tableContents.append(l)
break
tableContents.sort()
return tableName,tableContents
def handleDistance(distanceLst):
'''
此函数⽤于处理建筑物 间距尺⼨。
'''
tableContents = []
tableName = '竣⼯建(构)筑物间距对⽐表'
tableHead = [
'\\', '发证间距', '实测间距',
'差值', '允许误差值'
]
tableContents.append(tableHead)
for dl in distanceLst:
dl[0] = dl[0][:-3]
new = dl[-1][6:-1]
dl[-1] = dl[-1][:5]
dl.append(new)
tableContents.append(dl)
tableContents.sort()
return tableName,tableContents
def handleDJ():
'''
此函数⽤于处理地界特征点。
'''
tableContents = []
tableName = '⽤地界址坐标表'
tableHead = [
'点号', 'X坐标(⽶)', 'Y坐标(⽶)'
]
tableContents.append(tableHead)
area = 0
for obj in acad.iter_objects("PolyLine"):
if obj.Layer == 'DJHX':
area = '%.1f' % obj.Area
t = obj.Coordinates
if 0 in t:python怎么读文件夹下的文件夹
DJHX = [('%.3f' % t[i], '%.3f' % t[i+1], t[i+2]) for i in range(0,len(t),3)] else:
DJHX = [('%.3f' % t[i], '%.3f' % t[i+1], 0) for i in range(0,len(t),2)] break
for i in range(len(DJHX)):
tableContents.append(['J' + str(i + 1), DJHX[i][1], DJHX[i][0]])

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。