from pyautocad import Autocad, APoint
import numpy
import tkinter as tk
from tkinter import filedialog, messagebox
from decimal import Decimal
import datetime
today = datetime.date.today()
now = datetime.datetime.now()print(now.hour,type(now.hour))'''打开选择文件夹对话框'''
window = tk.Tk()
window.title( "勘测定界坐标导入1.0  by: 放放风" )
window.geometry( '490x170+800+200' )  # 290 160为窗口大小,+1000 +10 定义窗口弹出时的默认展示位置# window.resizable( 0, 0 )
window['background'] = 'DimGray'def about():tk.messagebox.showinfo( '关于', "勘测定界坐标导入1.0\n \n\nby:放放风 2021.01.23 \n更多功能请联系:cemo9960@outlook.com" )menubar = tk.Menu( window )
file_menu = tk.Menu( menubar, tearoff=False )
menubar.add_command( label='关于', command=about )
window.config( menu=menubar )
r_value = tk.IntVar()class Variable:def __init__(self):self.one = ""self.File_path = ""self.File_name = ""self.Save_path = ""self.pnts = Noneself.layer = Noneself.r = Noneself.cp = Noneself.gd_name = Nonedef r_print(self):#获取单选框值self.r = r_value.get()def get_gravity_point(self,points):"""@brief      获取多边形的重心点@param      points  The points@return     The center of gravity point."""if len( points ) <= 2:return list()area = Decimal( 0.0 )x, y = Decimal( 0.0 ), Decimal( 0.0 )for i in range( len( points ) ):lng = Decimal( points[i][0] )lat = Decimal( points[i][1] )nextlng = Decimal( points[i - 1][0] )nextlat = Decimal( points[i - 1][1] )tmp_area = (nextlng * lat - nextlat * lng) / Decimal( 2.0 )area += tmp_areax += tmp_area * (lng + nextlng) / Decimal( 3.0 )y += tmp_area * (lat + nextlat) / Decimal( 3.0 )x = x / areay = y / areaself.cp = APoint(float( x ), float( y ))def open(self):  # 打开文本File_path = filedialog.askopenfilenames( filetypes=[("文本", "txt")], title="选择需要导入的文本" )  # 获取需要转换的规划文件绝对路径if not File_path:tk.messagebox.showinfo( '警告', "请选择文本!" )else:self.File_path = File_pathdef formatting(self, path, r):  # 转换constant = float(text1_var.get())#获取输入框中的常数with open( path ) as f:#打开文本p = []c = []val = f.readlines()#读取文本行if r == 2:#二调val = [x.split( "," ) for x in val]#按,分割列表中的字符for s in val[:-1]:#循环列表A = float( s[0] ) - constant  # x扣除常数B = float( s[1][:-1] ) #yc.append([A,B])p.append( APoint( A, B ) )#添加点Ax,Bypnts = numpy.array( [m for n in p for m in n], dtype=numpy.float )#转一维矩阵self.cp = cself.pnts = pntsself.layer = "二调图斑" #cad图层elif r == 1: #规划tb = [] #列表中J1位置n = []  # 两个j1中间的值text = [] #所有文本中两个j1中间的值d = []count = 0 #计数for s in val: #循环文本列表if "J1" in s: #如果J1在s内tb.append( val.index( s ) ) #获取J1在文本中的位置for q in range( int(len( tb ) / 2) ): #循环位置 1,2  3,4  5,6 共3次text.append( val[tb[count]:tb[count + 1]] )count += 2for r in text:for w in r:k = w.split( "," )A = float( k[4] )B = float( k[5] ) - constant  # 扣除常数d.append([B,A])n.append( APoint( B, A ) )p.append( n )c.append(d)n = []d = []self.cp = cself.pnts = pself.layer = "规划图斑"elif r == 3: #供地,同上tb = []text = []n = []count = 0d = []gd_name = []for s in val:if "@" in s:tb.append( val.index( s ) )gd_name.append("地块"+s.split(",")[0])self.gd_name = gd_namefor q in range( len( tb ) ):if q < len( tb ) - 1:text.append( val[tb[count] + 1:tb[count + 1] - 1] )count += 1if q == len( tb ) - 1:text.append( val[tb[count] + 1:-1] )for r in text:for w in r:k = w.split( "," )A = float( k[2] )B = float( k[3] ) - constantn.append( APoint( B, A ) )d.append([B,A])p.append( n )c.append(d)n = []d = []self.cp = cself.pnts = pself.layer = "供地图斑"myobject = Variable()def map():myobject.open()# 连接cadacad = Autocad( create_if_not_exists=True )if 5 < now.hour < 10:acad.prompt( '早安,打工人!' )elif 10 < now.hour < 14:acad.prompt( '午安,打工人!' )elif 14 < now.hour < 18:acad.prompt( '下午好,打工人!' )elif now.hour > 18:acad.prompt( '晚安,打工人!' )for path in myobject.File_path:myobject.formatting( path, myobject.r )name = path.split("/")[-1][:-4]# 设定图层layerobj = acad.ActiveDocument.Layers.Add( myobject.layer )acad.ActiveDocument.ActiveLayer = layerobj# 多段线颜色ClrNum = 1layerobj.color = ClrNum# 画线if myobject.r == 3 or myobject.r == 1:for pnts in myobject.pnts:pnts = numpy.array( [m for n in pnts for m in n], dtype=numpy.float )pnts = Autocad.aDouble( pnts )pline_obj = acad.model.AddPolyLine( pnts )pline_obj.Closed = True  # 闭合多段线if myobject.r == 1:for c in myobject.cp:myobject.get_gravity_point(c)text = acad.model.AddText( "{0}".format( name ), myobject.cp, 1.5 )if myobject.r == 3:n = 0for c in myobject.cp:myobject.get_gravity_point(c)text = acad.model.AddText( "{0}".format( myobject.gd_name[n] ), myobject.cp, 1.5 )n += 1n = 0else:pnts = Autocad.aDouble( myobject.pnts )pline_obj = acad.model.AddPolyLine( pnts )pline_obj.Closed = True  # 闭合多段线myobject.get_gravity_point(myobject.cp)text = acad.model.AddText( "{0}".format( name ), myobject.cp, 1.5 )# 保存acad.ActiveDocument.Application.preferences.OpenSave.AutoSaveInterval = 0.51tk.messagebox.showinfo( '提示', "转换成功,请检查数据" )tk.Radiobutton( window, text='规划坐标', variable=r_value, value=1, command=myobject.r_print , width=12).grid( row=1, column=0 )
tk.Radiobutton( window, text='二调坐标', variable=r_value, value=2, command=myobject.r_print , width=12).grid( row=2, column=0 )
tk.Radiobutton( window, text='供地坐标', variable=r_value, value=3, command=myobject.r_print , width=12).grid( row=3, column=0 )lable1 = tk.Label(window, text="[  扣除40  ]", width=15).grid(row=0, column=0)
text1_var = tk.StringVar()  # 获取text_1输入的值
text1_var.set(r'40000000')
text1 = tk.Entry(window, textvariable=text1_var, bd=5).grid(row=0, column=1)tk.Button( window, text="导入cad", width=15, height=1, command=map, bg="Silver" ).grid( row=5, column=0 )text20 = tk.Text(window, width=50, height=12)
text20.grid(row=1, column=1, rowspan=5, columnspan=2)
text20.tag_config("tag_1", backgroun="yellow", foreground="red")text20.insert("insert","1.导入时须打开cad!\n\n2.规划:cad中地块编号为文本名称;支持导入合并坐标\n\n""3.二调:同上,不支持合并坐标导入\n\n""4.供地:cad中地块编号为【地块】+ 地块编号\n\n")text20.insert("end", "5.更多功能请联系:\ncemo9960@outlook.com", "tag_1")window.mainloop()#text = acad.model.AddText("{0}".format(text), p, 15)

勘测定界坐标导入cad相关推荐

  1. 勘测定界土地利用现状表生成—(依据地块和权属统计)

    勘测定界项目涉及土地利用现状统计工作,包括根据用地范围,统计不同权属.不同土地利用类型的土地面积.利用python结合ArcGIS提供arcpy站点包开发一个工具批量按地块.按权属生成土地利用现状表. ...

  2. CASS坐标导入并展点显示

    之前搞了一次测绘实习,虽然我很不情愿的在搞,不过最后搞完画图还是很有意思的.在这里介绍使用CAD加南方CASS的简单方法. 一.操作环境 1.操作系统:Windows 7 2.操作软件:AUTO CA ...

  3. tfw文件如何导入cad_教你三维家3d设计软件如何导入cad文件

    一.导入CAD户型图的,注意点:CAD图要求:除墙体外,其它线段不可出现,(如:门.柱子.窗.阳台.标注.家具.植物.摆件等)且墙体线条要闭合,保存DXF格式. 第一步:点击户型图--本地上传CAD图 ...

  4. GIS实用小技巧(一)-如何将RTK测量数据导入CAD中?

    攻略1:RTK测量数据导入CAD 首先,RTK测量数据需要先在手簿上设置好导出格式dxf,dxf文件分有三种类型:dxf文件-点名和坐标(*.dxf).dxf文件-高程(编码)(*.dxf).dxf文 ...

  5. rtk采点后如何导入cad_ZEMAX:如何导入CAD物体

    概述 这篇文章介绍了如何将STL.IGES.STEP和SAT等格式的CAD(计算机辅助设计,Computer Aided Design)物体导入到OpticStudio中. CAD文件的格式一般与您所 ...

  6. Revit导入CAD图纸,要提前优化图纸,你做到了吗?

    我们在Revit建模的过程中,大都会导入或者链接CAD图纸,作为参照底图来建立模型,但是由于CAD图纸图面信息比较多,在我们作图的时候会影响软件运行速度. 那么我们在Revit导入CAD图纸之前要做什 ...

  7. 关于PADS 9.5导入CAD图(dxf文件)的说明

    关于PADS 9.5导入dxf文件的说明 一.前言 在使用PADS layout画PCB时,需要将公司LOGO图案放到PCB面板上,但是PADS不支持直接将图片格式(jpg,png,bmp等)的文件导 ...

  8. matlab曲线导入cad,MATLAB导入CAD数据.docx

    MATLAB导入CAD数据 用AutoCAD绘制平面公式曲线(如渐开线.心形线).空间公式曲线(如螺旋线)以及公式曲面(如马鞍形曲面)是比较困难的,一般情况下,需要用AutoCAD开发程序编程,但多数 ...

  9. lisp倒入excel数据画图_将excel数据导入CAD画图的方法

    将 EXCEL 的数据导入 CAD 里绘图的方法 这是用 CAD 的 VBA ( cad 里的 lisp 功能也可以实现)的方法.此例是要完成如何在 CAD 中画出如下图 所示的坐标的图形-- 3D ...

  10. 分枝定界图解(含 Real-Time Loop Closure in 2D LIDAR SLAM论文部分解读及BB代码部分解读)

    分枝定界图解 网上对分枝定界的解读很多都是根据这篇必不可少的论文<Real-Time Loop Closure in 2D LIDAR SLAM>来的. 分枝定界是一种深度优先的树形搜索方 ...

最新文章

  1. 百行代码打造一个DI容器(支持瞬时生命周期、单利生命周期、构造函数自动注入、属性自动注入、字段自动注入)...
  2. Oracle-awrddrpt.sql比较两个AWR差异报告
  3. 【WEB安全】Xstream最新反序列化poc执行报错问题
  4. swal如何加入html语言,Sweet Alert弹窗点击确定后执行页面跳转等操作
  5. shell脚本1——变量 $、read、``
  6. Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf_爱过了就好_新浪博客
  7. Windows XP / 2003 / Vista 原版光盘镜像(下载)及其主要特征
  8. android c callstack,[MTK] 如何在android native code 打callstack
  9. qemu-nbd挂载虚拟机镜像文件系统
  10. 力扣刷题-动态规划算法3:完全背包问题
  11. C语言经典实例006:输出一个正方形
  12. 定时将redis数据存入mysql_Python定时从Mysql提取数据存入Redis的实现
  13. 20 个 Laravel Eloquent 必备的实用技巧 1
  14. 首师大附中科创教育平台 我的刷题记录 3120 LJX的校园:入学典礼
  15. Android开发之如何自定义垂直方向的SeekBar
  16. 【unity】 untiy中如何导出FBX
  17. 导航系统设计专题(六)——松组合导航系统与紧组合导航系统
  18. CF597 (Div. 2)题解
  19. 微信小程序开发入门教程(七)
  20. linux画平面图软件,画平面图最简单软件.docx

热门文章

  1. 使用JAVA文件上传的几种方式
  2. 扇贝python课程免费_购买扇贝python后,未有任何提示和提醒,突然停止课程服务。...
  3. java wmic_wmic
  4. 计算机操作员高级教学大纲,计算机操作员课程教学大纲.doc
  5. pano2vr怎么制作漫游_如何制作全景图?Pano2VR制作FLASH全景图教程
  6. android自动生成cardview,CardView
  7. php微信公众号群发,php实现微信公众号无限群发,php信公众群发
  8. IRedMail迁移方案
  9. cad批量 谷歌翻译lisp_LISP批量打开CAD图操作
  10. python多行注释出错_python 有多行注释运行报错