python|python 在测绘作业中的一些小应用(与cad交互)-1

【python|python 在测绘作业中的一些小应用(与cad交互)-1】虽然笔者已经基本上告别了本科的测绘工程专业,但是笔者的本科同学他们在实际作业中难免会遇到一些批量化、重复性劳动问题,如果会编程,写上一个小脚本,无疑会提高工作效率。
下面是笔者本科同学处理测量数据时遇到的问题,笔者通过python与CAD的交互完美的解决了!
问题1:提取断面上地性线上的高程
问题2:场平设计高程,十字丝交点的坐标(x,y,z)
首先,python 作为一个胶水语言,与各行各业的接口是无与伦比,与cad的接口库有:autocad、dxfgrabber、dxfwrite。笔者目前就知道这三个,孤陋寡闻。如有兴趣,可以关注freecad,一个开源的python 与cad软件。
笔者程序使用的是dxfgrabber库,读取dxf文件。
对于第一个问题:笔者写了一个GUI

from PyQt5 importQtWidgets from cass import Ui_MainWindow from PyQt5.QtWidgets import QFileDialog import dxfgrabber class height(QtWidgets.QMainWindow,Ui_MainWindow): def __init__(self): super(height,self).__init__() self.setupUi(self) self.openfile.triggered.connect(self.o1) self.extract_h.triggered.connect(self.e1) self.save_txt.triggered.connect(self.s1) def o1(self): self.file,ok=QFileDialog.getOpenFileName(self,"打开",None,"*.dxf") def e1(self): dxf=dxfgrabber.readfile(self.file) h1=[] c=[] allGCD=[h for h in dxf.entities if h.layer=='GCD'] alldmx=[line for line in dxf.entities if line.layer=='dmx'] l1=[line for line in alldmx if line.dxftype=='LINE'] for heigh in allGCD: h1.append(heigh.insert) for i in l1: c.append([i.start,i.end]) #计算每个线的斜率 k1=[] for i in range(len(c)): k1.append((c[i][1][1]-c[i][0][1])/(c[i][1][0]-c[i][0]0])) #计算高程点与直线的斜率,#,以所有线的起点为基准,判断每个高程点和起点连线的斜率与所有线的斜率,如果相同,则高程点再地性线上 k2=[] for i in range(len(c)): for j in range(len(h1)): k3=(h1[j][1]-c[i][0][1])/(h1[j][0]-c[i][0][0]) if abs(k3)-abs(k1[i])>-0.2 and abs(k3)-abs(k1[i])<0.2: k2.append(j) self.allresult_h=[] for i in k2: self.allresult_h.append(h1[i]) def s1(self): path,ok=QFileDialog.getSaveFileName(self,"保存结果",None,"*.txt") with open(path,'w') as file: for line in self.allresult_h: for i in line: file.writelines(str(i)+',') file.writelines('\n') if __name__=='__main__': import sys app=QtWidgets.QApplication(sys.argv) myapp=height() myapp.show() app.exec_()

python|python 在测绘作业中的一些小应用(与cad交互)-1
文章图片

“`

    推荐阅读