autocad python二次开发_基于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 # 图纸空间

#注:简写对象

如图:

cd0cbef6a78acf309c6b5bb0a10d766e.png

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 )

如图:

8d00b8d536cc8567c44421c4f60e45b6.png

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、Polyline多段线

# Polyline 多段线

plinepnts = [3, 0, 8, 0, 11, 4, 0, 4]

plinepnts = aDouble ( plinepnts )

po

  • 2
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值