import math
import win32com.client
import pythoncom
from tkinter import messagebox
import numpy
import tkinter as tk
from os import system
window0 = tk.Tk()
window0.title("引线注记及坐标提取")
window0.geometry('520x150+1500+200')
window0.resizable(0, 0)def rrd(point,f):if f == 0:point = str(int(f))elif f>0:SP = str(numpy.around(point,f))sy = SP.split(".")n = len(sy[1])if n<f:sj = f - npoint = sy[0]+"."+sy[1]+"0"*sjelse:point = SPelif f<0:passreturn pointdef List_format_conversion(A,step=2,deduction=None):new_list = []for counte in range(0,len(A),step):new_list.append(list(A[counte:counte+step])[:deduction])return new_listdef vtpnt(x, y, z=0):"""坐标点转化为浮点数"""return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))def vtobj(obj):"""转化为对象数组"""return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, obj)def vtFloat(list):"""列表转化为浮点数"""return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, list)def vtInt(list):"""列表转化为整数"""return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_I2, list)def vtVariant(list):"""列表转化为变体"""return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_VARIANT, list)def minCoord(lineCoord):minX = min(lineCoord)minCoordNum = lineCoord.index(minX)  # 查找最左侧树木坐标lineCoordminCoordX = lineCoord[minCoordNum]  # 最小XlineCoordminCoordY = lineCoord[minCoordNum + 1]  # 最小YlineCoord.remove(lineCoordminCoordX)lineCoord.remove(lineCoordminCoordY)return lineCoord,lineCoordminCoordX,lineCoordminCoordYdef get_distance_from_point_to_line(point, line_point1, line_point2):#对于两点坐标为同一点时,返回点与点的距离if line_point1 == line_point2:point_array = numpy.array(point )point1_array = numpy.array(line_point1)return numpy.linalg.norm(point_array -point1_array )#计算直线的三个参数A = line_point2[1] - line_point1[1]B = line_point1[0] - line_point2[0]C = (line_point1[1] - line_point2[1]) * line_point1[0] + \(line_point2[0] - line_point1[0]) * line_point1[1]#根据点到直线的距离公式计算距离distance = numpy.abs(A * point[0] + B * point[1] + C) / (numpy.sqrt(A**2 + B**2))return distance
def openSLT():r1 = float(text1_var.get())r2 = float(text2_var.get())r3 = float(text3_var.get())acad = win32com.client.Dispatch("AutoCAD.Application")doc = acad.ActiveDocumentdoc.ActiveSelectionSet.Clear()mp = doc.ModelSpacetry:doc.SelectionSets.Item("ss1").Delete()  # 删除指定的选择集except:doc.Utility.Prompt("\n醉后不知天在水\n满船清梦压星河\n")v = doc.SelectionSets.Add("ss1")  # 添加名字为sd的选择集v.SelectOnScreen()wenben = []for txtkuai in v:if txtkuai.ObjectName == "AcDbText":zhuji  = [list(txtkuai.InsertionPoint),txtkuai.TextString]wenben.append(zhuji)with open("树木属性.txt","w") as f:for kuai in v:if kuai.ObjectName == "AcDbPolyline":txtWrite = []bianhao = ""zhonglei = ""lineCoord = list(kuai.Coordinates)lineCoord, minX,minY = minCoord(lineCoord)txtWrite.append(rrd(minX,3))txtWrite.append(rrd(minY, 3))lineCoord, minX2, minY2 = minCoord(lineCoord)for w in wenben:if "S" not in w[1] :d = math.sqrt((minX2 - w[0][0])**2 + ( minY2 - (w[0][1]+r3))**2)d2 = get_distance_from_point_to_line([w[0][0],w[0][1]+r3],[minX2,minY2],lineCoord)else:d = math.sqrt((minX2 - w[0][0]) ** 2 + (minY2 - (w[0][1] + 0)) ** 2)d2 = get_distance_from_point_to_line(w[0], [minX2, minY2], lineCoord)if abs(d) < r1 and abs(d2) <r2:if "S" not in w[1] :txtWrite.append(w[1])else:txtWrite.insert(0,w[1])we = ",".join(txtWrite) + "\n"f.write(we)f.close()messagebox.showinfo("提示","提取完成,请检查数据")system("start 树木属性.txt")tk.Button(window0, text="选择", width=20, height=1, command=openSLT, bg="Azure").grid(row=3, column=0)lable1 = tk.Label(window0, text="[  横向容差  ]", width=15).grid(row=0, column=0)
text1_var = tk.StringVar()  # 获取text_1输入的值
text1_var.set(r'1.5')
text1 = tk.Entry(window0, textvariable=text1_var, bd=5).grid(row=0, column=1)lable2 = tk.Label(window0, text="[  纵向容差  ]", width=15).grid(row=1, column=0)
text2_var = tk.StringVar()  # 获取text_1输入的值
text2_var.set(r'0.5')
text2 = tk.Entry(window0, textvariable=text2_var, bd=5).grid(row=1, column=1)lable3= tk.Label(window0, text="[  纵向偏移值  ]", width=15).grid(row=2, column=0)
text3_var = tk.StringVar()  # 获取text_1输入的值
text3_var.set(r'1.26')
text3 = tk.Entry(window0, textvariable=text3_var, bd=5).grid(row=2, column=1)text20 = tk.Text(window0, width=35, height=15)
text20.grid(row=0, column=3, rowspan=10, columnspan=1)
text20.tag_config("tag_1", backgroun="yellow", foreground="red")text20.insert("insert","请输入横向、纵向容差值\n纵向偏移值\n默认横向1.5m\n纵向:0.5m\n偏移值:1.26\n\n\n")text20.insert("end", "作者:崔中浩\n邮箱:cemo9960@outlook.com\n2021/08/20", "tag_1")window0.mainloop()

cad引线上下注记及左侧端点坐标提取相关推荐

  1. FME实现CAD文件复杂注记

    FME往CAD文件添加注记 目标 实现步骤 生成管段图形 生成注记点位置 生成注记 写入cad文件 目标 按照客户要求将提供的MDB表格生成cad线和注记,具体要求见下图: 要求点: 1,在管段的两端 ...

  2. CAD引线标注文字大小怎么调整?

    CAD设计过程中,当图纸中的引线文字大小不合适时,可以根据自身需求调整CAD引线标注文字大小吗?如果可以的话,那么,CAD引线标注文字大小怎么调整呢?下面,和小编一起来了解一下浩辰CAD软件中调整CA ...

  3. 如何对CAD图纸上的图形进行单独保存起来

    在CAD中打开,如何对CAD图纸上的图形进行单独保存起来呢?小伙伴们知道要怎么来进行操作吗?相信很多的小伙伴们都想要知道,那下面小编就来教教大家具体操作方法,想要了解的朋友也可以来看看,希望对你们有帮 ...

  4. 《华尔街日报》制造商纷纷在仿真软件上下注

    <华尔街日报>制造商纷纷在仿真软件上下注 图-医疗设备制造商BostonScientific的首席信息官说,该公司使用仿真模拟软件可视化生产线,预测瓶颈,优化生产周期. 制造商纷纷在仿真软 ...

  5. 史上最好记的神经网络结构速记表(上)

    本文讲的是史上最好记的神经网络结构速记表(上), 新的神经网络结构不断涌现,我们很难一一掌握.哪怕一开始只是记住所有的简称( DCIGN,BiLSTM,DCGAN ),也会让同学们吃不消. 所以我决定 ...

  6. 手机日历上怎么记加班?日历便签可记录加班时间

    对于很多上班族来说,加班肯定是不陌生的,不过有的工作加班需求少,但是也有一部分工作加班是常有的事.加班的准确记录对职场人士来说事关工资的多少,所以需要用心去记录每次加班.有的网友表示,为了更加直观的看 ...

  7. 获取PCB板上的焊点以及线路端点

    原文链接:https://blog.csdn.net/akadiao/article/details/80651895 要求 获取PCB板上的焊点以及线路端点,如图: 函数 涉及到的主要函数有: ac ...

  8. 有什么便签软件是可以在电脑和手机上同步记日记的?

    记日记是个非常好的习惯,除了锻炼我们的写作水平外,在日记中总结我们的工作,还让我们得以在总结当天工作的基础上,提前布置明天的工作.那么,方便写日记的便签有哪些呢?需要那种在手机和电脑上同步记日记的便签 ...

  9. js判断点在线上位置,距离各端点距离算法

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/gisdoer/article/details/80995311 判断点在线上位置,距离各端点距离算法 ...

最新文章

  1. 网络编程学习笔记(udp_connect函数)
  2. Qt Creator创建项目
  3. C#三层架构第五课之DBUtil层设计
  4. SAP Commerce Cloud如何针对Spartacus进行安装
  5. mysql 查询时间转换_数据库查询时日期的转换
  6. Linux源码安装mysql 5.6.12(cmake编译)
  7. win8改win7 教程
  8. java 遗传算法_[原]遗传算法Java实现源代码
  9. lcp mysql cluster_Mysql Cluster 非root用户启动ndbd节点报错
  10. 【带着canvas去流浪(11)】Three.js入门学习笔记
  11. excell之如何添加下拉菜单,测试用例配置优先级
  12. [图:知识竞赛题库PPT制作] 为上海棒约翰餐饮管理有限公司定制的的知识竞赛题目及展示界面-PPT格式-双屏展示。
  13. 2018年计算机基础应用教程,全国计算机等级考试一级教程:计算机基础及Photoshop应用(2018年版)...
  14. 捷宇高拍仪D系列 javaweb集成进项目
  15. oracle删除lob对象,ORACLE LOB大对象处理
  16. PyTorch Python API:FX || Intro
  17. 《靠谱》里提到的书目
  18. DRM系列(7)之drmModeAtomicCommit底层流程
  19. 如何系统掌握产品功能改进方案?
  20. 2023武汉集训总结

热门文章

  1. MSP430学习总结(二)——GPIO
  2. 云呐|动环监测系统,动环监控系统的组成
  3. cyq.data oracle序列,CYQ.Data 数据框架 使用篇二 MAction 数据查询
  4. html5禁止手机横竖屏,【Web前端问题】js 能禁止手机横竖屏切换吗
  5. WLAN密码忘记了怎么办?
  6. 解读服务器命名规则背后的秘密
  7. WPSOffice2003另类裁图技巧(转)
  8. php关闭warn,PHP warn、notice 有关问题的解决方案
  9. 分布式系统接口如何保证幂等性
  10. hadoop 在 Linux下的安装配置与集群配置(3台机)