AutoCAD应用程序开发系列
基于Python AutoCAD ActiveX 二次开发技术
主要库:pyautocad==0.2.0
内容#:基于Python AutoCAD ActiveX 二次开发,学习笔记
更新日期:2019-11-07
写在前面,先感谢
https://blog.csdn.net/Hulunbuir/article/details/83715279 # Python pyautocad库 使用简介
https://blog.csdn.net/Tong_T/article/details/83029695 # Python3操作AutoCAD
上述两篇文章点醒,于我开了一扇新世界的大门。
笔者作为一个传输设计行业从业人员,需大量用到AUTOCAD,然而Pyautocad库所提供的实例较少,无法满足工程设计自动化、信息化要求。注:本文大量实例参考来源为VBA + AutoCADActiveX。
遇到问题,便要解决问题。主要参考文件如下:
1、AutoCADActiveX和VBA.pdf
2、AutoCADActiveX和VBA参考明经翻译版).chm # 注该文档为国内明经论坛基于acadauto.chm翻译详解版
3、acadauto.chm
4、acad_aag.chm
5、AutoCADActiveX二次开发技术.pdf
经查阅相应文献,重现了《AutoCADActiveX二次开发技术》一书内的所有案例、要点。
版权声明:本文为CSDN博主「qq_44792233」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44792233/article/details/102946651
论坛QQ群:101190324
前言
目录:
第一章:Autocad的概述——略
第二章:AutoCAD ActiveX Automation概述
1、什么是AutoCAD ActiveX
2、AutoCAD ActiveX Automation的基础
3、AutoCAD ActiveX Automation的开发技术基础
3.1、Application 对象
3.2、Document对象
3.3、Collection 对象
3.4、图形对象和非图形对象
3.5 、Preferences、Plot 和Utility对象
4、访问对象层次
直接引用对象:
if __name__ == '__main__':
acad = Autocad ( create_if_not_exists=False )
acad.prompt ( "Hello! AutoCAD from pyautocad." )
acaddoc = acad.ActiveDocument # 文档
acadapp = acad.ActiveDocument.Application # 应用程序
# acadmod=acad.model #图形空间方法2
acadmod = acad.ActiveDocument.ModelSpace # 图形空间 方法1
acadpaper = acad.ActiveDocument.PaperSpace # 图纸空间
#注:简写对象
如图:
5、集合对象操作
acaddoc.regen #重新生成模型U
acadapp.Update#更新模型 不可用why
5.1、新建图层并添加
layer1 = acaddoc.Layers.Add("MyNewLayer")
5.2、在集合中查找对象
layer1 = acaddoc.Layers.Add("MyNewLayer")
print(acaddoc.Layers.count)
for i in range(acaddoc.Layers.count):
print(acaddoc.Layers.Item(i).Name) 
返回值:0,MyNewLayer
5.3、查找图层为“ABC“的对象
try:
layerabc = acaddoc.Layers.Item ( "ABC" )
except :
print("未找到%s该图层"%"ABC")
返回值:未找到ABC该图层
5.4、删除图层中的对象
# 删除图层内的对象
try:
layerabc = acaddoc.Layers.Item ( "MyNewLayer" )
layerabc.Delete
except :
print("未找到%s该图层"%"MyNewLayer")
6、属性、方法和变量
# 定义数组,画曲线
point1 = APoint ( 0.5, 0.5 )
point2 = APoint ( 0.5, 0.5 )
Pnt1 = APoint ( 1, 1 )
Pnt2 = APoint ( 5, 5 )
Pnt3 = APoint ( 10, 0 )
SplinePnts = np.array ( [Pnt1, Pnt2, Pnt3] )
print ( SplinePnts ) # 返回数列列表
# list_1 = [[1, 2], [3, 4, 5], [6, 7], [8], [9]] 取出列表嵌套
# list_2 = sum ( list_1, [] )
# print ( list_2 )
SplinePnts = SplinePnts.reshape ( 1, SplinePnts.shape[0] * SplinePnts.shape[1] )[0]
print ( SplinePnts ) # 返回数列数列取出嵌套
SplinePnts = aDouble ( SplinePnts )
print ( SplinePnts ) # 返回值 array('d', [1.0, 1.0, 0.0, 5.0, 5.0, 0.0, 10.0, 0.0, 0.0]) 注:activex认可的列表类型
startTan = APoint ( 1, -10 )
endTan = APoint ( 1, -5 )
SplineObj = acadmod.AddSpline ( SplinePnts, point1, point2 )
如图:
6.1、计算两点之间的距离
# 在cad内取两点,并计算出两闪之间的距离
point0 = APoint ( 1, 1 )
point1 = acaduti.GetPoint ( point0, "请选取第一个点" ) # point0 为基点,格式需要,如果不定义point0则无法输出后续提示文本
point2 = acaduti.GetPoint ( APoint ( point1 ), "请选取第二个点" )
print ( point1, point2 ) # 返回 (27.52961261004657, 2.076389051527485, 0.0) (42.26598855138491, 15.752497838362387, 0.0)
# 计算两点之间的距离
x = point1[0] - point2[0]
y = point1[1] - point2[1]
z = point1[2] - point2[2]
dist =