基于Python AutoCAD ActiveX 二次开发,pyautocad应用技术

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) &#13
返回值: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 = (((x ** 2 + y ** 2) ** 0.5) ** 2 + z ** 2) ** 0.5
print ( dist ) # 返回9.999 注:注意取小数

 

6.2、代码转换,连接CAD(略)

6.3、Pol

  • 41
    点赞
  • 233
    收藏
    觉得还不错? 一键收藏
  • 39
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值