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

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

from PyQt5 import  QtWidgets
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,CAD,批量提取断面上地性线上的高程点)