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 #图形空间方法2acadmod = acad.ActiveDocument.ModelSpace  # 图形空间 方法1acadpaper = 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、Polyline多段线

# Polyline 多段线
plinepnts = [3, 0, 8, 0, 11, 4, 0, 4]
plinepnts = aDouble ( plinepnts )
polylneobj = acadmod.AddLightweightPolyline ( plinepnts )
polylneobj.setBulge ( 2, 0.5 ) # polylneobj.setBulge(index ,value ) 设置圆弧,index 为序号,value为半径
print ( polylneobj )  # 返回9.999 注:注意取小数
# """

如图

6.4、Text 文本

# Text 文本
Textstr = "CC我的果冻"
Texth = 2.5
Textpoint = APoint ( 10, 10 )
textobj = acadmod.AddText ( Textstr, Textpoint, Texth )
print ( textobj )  #

如图(略)

6.5、产生一个三维对象(略)Sphere

obj = acadmod.AddSphere(center,radius)

6.6、统计文本,含MText及Text

# 统计文本,含MText及Text
print ( acadmod.Count )
s = 0
for i in range ( acadmod.Count ):if acadmod.Item ( i ).EntityName == "AcDbText" or acadmod.Item ( i ).EntityName == "AcDbMText":print ( acadmod.Item ( i ).textString ) #获取text及Mtext文本内容方法为.textStrings += 1 #递增
print ( s )  #

6.7、取得最后一个实体对象,并删除

# 取得最后一个实体对象,并删除
obj= acadmod.Item ( acadmod.Count-1 )
obj.Delete()

6.8、通过点击画直线

# 通过点击画直线
point0 = APoint ( 1, 1 )
point1 = acaduti.GetPoint ( point0, "请选取第一个点" )  # point0 为基点,格式需要,如果不定义point0则无法输出后续提示文本
point2 = acaduti.GetPoint ( APoint ( point1 ), "请选取第二个点" )
print ( point1, point2 )
lineobj = acadmod.AddLine ( APoint ( point1 ), APoint ( point2 ) ) #注,通过取得的集合,要转换成cad点位才可能正常使用
# """

6.9、输入关键字

# 输入关键字
acaduti.InitializeUserInput ( 128, "Triangle Rectangle Circle" ) #注:可接受关键字的用户输入方法有: GetKeyword, GetInteger, GetReal, GetDistance,
# GetAngle, GetOrientation, GetPoint, 和 GetCorner定义输入的内容类别,具体参考见列表
str2 = acaduti.GetKeyword ( "请在CAD内输入关键字" )
print ( str2 ) #取出关键字

6.10、取得选择集

# 取得选择集
try:acaddoc.SelectionSets.Item ( "SS1" ).Delete #注:新建选择集无法重名,必需删前一个
except:ssget1 = acaddoc.SelectionSets.Add("SS1")ssget1.SelectOnScreen()print(ssget1)

6.11、块处理

# 块处理
point1 = APoint ( 10, 20 )
blockobj = acaddoc.Blocks.Add ( point1, "ci_block_obj" )  # 创建块,名字为"ci_block_obj"
blockobj.AddCircle ( point1, 1 )  # 给块加个圆
xscale, yscale, zscyle = 1.0, 1.0, 1.0
angle1 = 30.0
blockrefobj = acadmod.InsertBlock ( point1, "ci_block_obj",xscale, yscale, zscyle , angle1 ) #插入块

6.12、焦点切换(略)

第三章:基础入门(略)

第四章:简单的AutoCADActiveX编程

1、基础编号知识

# """
# 创建剖面线,填充
curlinetype = acaddoc.ActiveLinetype #取当前线型
entline = acaddoc.Linetypes.Add("CENTER") # 从文件"acad.lin"添加线型
try :acaddoc.Linetypes.Load ( "CENTER", "acad.lin" )  # 从文件"acad.lin"加载线型
except:pass
finally:acaddoc.ActiveLinetype = entline
patternName = "ANSI31"
PatternType = 0
assocVar = False
hatchObj = acadmod.AddHatch ( PatternType, patternName, assocVar ) # 定义填充对象
hatchObj.LinetypeScale = 6  #填充比例
hatchObj.PatternScale = 2 # 填充问距
point1 = APoint ( 175, 125, 0 )
outerLoop = acadmod.AddCircle ( point1, 80 ) # 画个圆
hatchObj.AppendOuterLoop ( outerLoop )  # 异常 ,'发生意:对象数组无效', 待解决
hatchObj.Evaluate
acaddoc.Regen ( True )
# """

第五章:创建和编辑AutoCAD对象

1、创建二维对象

注:在ActiveX自动操作中只提供一种方法来创建圆,该方法就是使用圆心和半径。

2、创建直线

(1)AddLine:通过两点创建线。

(2)AddLightweightPolyline:通过顶点的列表创建二维细多段线。

# AddLightweightPolyline
points = [2, 4, 4, 2, 6, 4]  # 三个点位
points = aDouble ( points )  # 转换对cad可识别坐标
obj = acadmod.AddLightweightPolyline ( points )  # 画图

(3)AddMLine:创建复线。

(4)AddPolyline:创建二维或三维多段线。

3、创建Pline对象 (略)

4、创建点对象

point1 = APoint ( 40, 40 )
pointObj = acadmod.AddPoint ( point1 )
acaddoc.SetVariable("PDMODE", 34) # PDSIZE用来控制点形状的大小,PDMODE值为0和1时除外。PDSIZE设定为0时,则按5%的屏幕高度生成点。
acaddoc.SetVariable("PDSIZE", 1) #PDSIZE为正值时指定点形状的绝对大小,负值时被理解为视口大小的百分比。

5、创建实体填充区域

point1 = APoint ( 40, 40 )
point2 = APoint ( 40, 50 )
point3 = APoint ( 50, 40 )
point4 = APoint ( 50, 40 )
obj = acadmod.AddSolid ( point1, point2, point3,point4 )

6、创建面域(略)

7、选择对象

创建命名的选择,使用Add方法。该方法只需要单独一个参数,就是选择集的名称。

用户可通过使用以下的方法添加对象到活动的选择集:

(1)Addltem:添加一个或多个对象到指定的选择集。

(2)Select:选择对象并将其放入活动的选择集中。用户可选择所有对象、矩形窗选区域或矩形框选区域的对象、多边形窗选区域或多边形框选区域的对象、栅选的对象、最近创建的对象、最近选择集的对象。

(3)SelectAtPoint:选择通过给定点的对象并将其放入活动的选择集中。

(4)SelectByPolygon:通过栅选的对象并将其放入活动的选择集中。

(5)SelectOnScreen:提示用户从屏幕中拾取对象并将其添加到活动的选择中。

# 创建选择集
try:ssget1 = acaddoc.SelectionSets.Add ( "NewSelectionSet" ) #新增 "NewSelectionSet" 图层
except:print(f"该选择集已经存在%s")ssget1 = acaddoc.SelectionSets ( "NewSelectionSet" ) # 如果"NewSelectionSet"图层存在删除该图层ssget1.Delete
# 选择对象,并将每一对象的颜色改为蓝色
try:ssget1 = acaddoc.SelectionSets.Add ( "SS1" ) #新增 "NewSelectionSet" 图层ssget1.SelectOnScreen
except:print(f"该选择集已经存在%s")ssget1 = acaddoc.SelectionSets ( "SS1" ) # 如果"SS1"图层存在删除该图层ssget1.Clear() # 如果"SS1"图层存在删除该图层ssget1.SelectOnScreen() # 在CAD内选择对象for i in ssget1:i.Color = 5 #注:acBlue 无法使用,原因未知,颜色索引号的取值范围为[0,256]i.Update

附表:

8、过滤对象

用户可用过滤器列表通过属性限制选择集,如通过颜色或对象类型。例如,可以只复制电路板图形中的红色对象或确定图层中的对象。

注:过滤器只识别直接分配给对象的颜色或线型,而非继承于图层的颜色或线型。

使用过滤器机制,必须提供用于分类的过滤器类型和过滤器数据。过滤器类型是指定使用哪种过滤的代码。AutoCADActiveX自动操作使用DXF组码来指定过滤器类型。

# 选择所有的文本对象,并将每一对象的颜色改为蓝色
acaddoc.SelectionSets.Item ( "SS1" ).Delete  # 新增 "SS1" 图层
ssget1 = acaddoc.SelectionSets ( "SS1" )  # 如果"SS1"图层存在删除该图层
ssget1.Clear ()  # 如果"SS1"图层存在删除该图层
# ssget1.SelectOnScreen (  )  #
# ssget1.SelectOnScreen ( 8,"TEXT"  )  #  注: #'参数 FilterType (位于 SelectOnScreen 中) 无效' 原因未知
corner1 = APoint ( 30, 30, 0 )
corner2 = APoint ( 40, 40, 0 )
ssget1.select ( 4 , corner1, corner2 )
# Window  代码0:选择完全在矩形区域内的所有对象,矩形对角由 Point1 和 Point2 定义。
# Crossing 代码1:选择在矩形区域内和与矩形区域相交的对象,矩形对角由 Point1 和 Point2 定义。
# Previous 代码3:选择最近的选择集。如果用户在图纸空间和模型空间之间进行切换并试图使用选择集,该模式将被忽略。
# Last 代码4:选择最近生成的可见对象。
# All 代码5:选择所有对象。for i in ssget1:i.Color = 5  # 注:acBlue 无法 使用,原因未知,颜色索引号的取值范围为[0,256]i.Update

20191106更新,注:关于FilterType 、FilterData无效原因:

# 调试数组,使其可以在vb环境下使用,注:python 中提供了list窗口,可以当作数组使用。
# 但列表中的元素可以是任何对象,因此列表中保存的是对象的指针,这样一来,为了保存一个简单的列表。就需要三个指针和三个整数对象。
# 这是与VB主意数组区别最大的地方,故需要用Numpy进行转换
# python 喟然也提供了array模块,但其只支持一维数组,不支持多维数组,也没有各种去处函数。因而不适合数值运算。

关于python语言comtypes接口传递VARIANT(变体)数据处理方法如下:

# 例:VB内要求语法如下:object.SetXData XDataType, XData
# XDataType , XData ariant[变体] (短整数数组); 仅用于输入
point1.SetXData ( array.array ( "h", [1001, 1070] ), ['Test_Application1', 600] )
# 例2:VB内要求语法如下:object.SelectOnScreen [FilterType][, FilterData]
# FilterType----ariant[变体] (短整数数组); 仅用于输入; 可选项指定使用的过滤器类型的 DXF 组码。
# FilterData----ariant[变体] (短整数数组); 仅用于输入; 可选项过滤器的值。
ssget1.SelectOnScreen ( array.array ( "h", [0] ), ['Line'] )

9、复制对象

# 创建复制对象
point1 = APoint ( 30, 30 )
point2 = APoint ( 40, 30 )
radius1 = 10
radius2 = 5
ciobj1 = acadmod.AddCircle ( point1, radius1 )
ciobj2 = acadmod.AddCircle ( point1, radius2 )
print ( array.array ( 'i', [0, 1, 2, 3, 4, 6, 7, 8, 9, 100] ) )
print ( np.array ( [ciobj1, ciobj2], dtype="O" ) )
obj2 = np.array ( [ciobj1, ciobj2] )
# ciobj1.radius ( 111.1 ) # BUG TypeError: 'float' object is not callable 浮点数无法被传递
# copyobjs = acaddoc.CopyObjects ( obj2 )  # BUG2 对象无法被调整用 AttributeError: module 'numpy.ctypeslib' has no attribute '_typecodes'
# """
# doc1 = GetBestInterface ( acad.Application.Documents.Add () )
circle = acadmod.AddCircle ( APoint ( 0.0, 0.0 ), 1.0 )
obj = acadmod.Item ( acadmod.Count - 1 )  # 取得刚画的矩形
obj.Color = 3  # 改颜色
acaddoc.SendCommand ( "_COPYBASE 0,0\n\r" )
acaddoc.SendCommand ( "_PASTECLIP 0,0\n\r" )
# 简单粗暴的复制

10、偏移对象

# """
# 偏移对象:obj.Offset(float)
point1 = APoint ( 30, 30 )
radius1 = 10
ciobj1 = acadmod.AddCircle ( point1, radius1 )
try:offsetObj = ciobj1.Offset ( 6 )# BUG传递数据会提示Keyerror但不影响画图。
except KeyError:pass
# offsetObj ( 0 ).Color = 1
# """
plpnts = [1, 1, 1, 2, 2, 2, 3, 2, 4, 4, 4, 1]
plpnts = aDouble ( plpnts )
plobj = acadmod.AddLightWeightPolyline ( plpnts )
try:offsetObj = plobj.Offset ( 0.8 )  # BUG传递数据会提示Keyerror但不影响画图。
except KeyError:pass
# """

11、删除对象

# """
ciobj1.delete

12、阵列对象

# 阵列对象:obj.ArrayPolar() ,ciobj1.ArrayRectangular
point1 = APoint ( 2, 2 )
radius1 = 1
ciobj1 = acadmod.AddCircle ( point1, radius1 )
# acadapp.ZoomAll()
point2 = APoint ( 10, 10 )
try:retObj = ciobj1.ArrayPolar ( 36, 2, point2 )  # 圆型阵列
except:pass
# ciobj1.ArrayRectangular ( numberOfRows, numberOfColumns, numberOfLevels, distanceBwtnRows, distanceBwtnColumns, distanceBwtnLevels )
# 矩型阵列
try:retObj = ciobj1.ArrayRectangular ( 4, 4, 2, 1, 1, 1 )
except:pass

13、移动对象

# 移动对象:obj.move(point1, point2)
point1 = APoint ( 2, 2 )
radius1 = 1
ciobj1 = acadmod.AddCircle ( point1, radius1 )
# acadapp.ZoomAll()
point2 = APoint ( 6, 2 )
ciobj1.move ( point1, point2 )

14、旋转对象

# 旋转对象:obj.Rotate( basePoint, rotationAngle )
plpnts = [1, 1, 0, 1, 2, 0, 4, 2, 0, 4, 1, 0, 1, 1, 0]  # 画一个矩形方法1
plpnts = aDouble ( plpnts )
plobj = acadmod.AddPolyline ( plpnts )
acaddoc.SendCommand ( "rec" + chr ( 13 ) + "5,5" + " 8,6" + chr ( 13 ) )  # 注,一切通过activex 不可用bug的方法均可尝试直接调用cad命令行操作
obj = acadmod.Item ( acadmod.Count - 1 )  #取得刚画的矩形
obj.Color = 111  # 改颜色
basePoint = APoint(5,5)
rotationAngle = np.pi*0.5  # 注autocad 内旋转角度用pi 表示,例pi =180 ,pi*0.5 = 90
obj.Rotate( basePoint, rotationAngle ) #obj.Rotate( basePoint, rotationAngle )

15、延伸和修剪对象

# 延伸和修剪对象:
startpoint = APoint ( 10, 10 )
endpoint = APoint ( 30, 10 )
lineobj = acadmod.addline ( startpoint, endpoint )  # 画条直接,长20
endpoint = APoint ( 50, 10 )  # 改终点
lineobj.endpoint = endpoint  # 长度改为40

16、编辑样条曲线

# """
# 修改样条曲线:
startpoint = APoint ( 0.5, 0.5 )
endpoint = APoint ( 0.5, 0.5 )
point1 = APoint ( 1, 1 )
point2 = APoint ( 5, 5 )
point3 = APoint ( 10, 7 )
SplinePnts = np.array ( [point1, point2, point3] )
SplinePnts = SplinePnts.reshape ( 1, SplinePnts.shape[0] * SplinePnts.shape[1] )[0]
SplinePnts = aDouble ( SplinePnts )
splobj = acadmod.addspline ( SplinePnts, startpoint, endpoint )  # 画条样条曲线
controlPoint = APoint ( 0, 3 )
splobj.SetControlPoint ( 0, controlPoint )  # 修改样条曲线第一个基点
# """

17、尺寸标注

# 尺寸标注:
definingPoint = acaduti.GetPoint ( APoint ( 0, 0 ), "选择被标注点:" )
leaderEndPoint = acaduti.GetPoint ( APoint ( definingPoint ), "选择标注文字显示位置点:" )
print ( definingPoint, leaderEndPoint )
# 定义关键词
kwordList = "True False"
# ’允许键入回车键
useXAxis = acaduti.InitializeUserInput ( 2, kwordList )  # 取得稍后返回的关键信息
if useXAxis == None:useXAxis = True
else:useXAxis = False
returnString = acaduti.GetKeyword ( "显示X坐标True / 显示Y坐标 < True >:" )  # 在cad命令行显示提示信息
# 根据关键词确定显示被标注点的X坐标或Y坐标
print ( useXAxis )
oldOSMODE = acaddoc.GetVariable ( "OSMODE" )
print ( (definingPoint, leaderEndPoint, False) )
dimObj = acadmod.AddDimOrdinate ( APoint ( definingPoint ), APoint ( leaderEndPoint ), False )  # 新增引线,显示X轴坐标或Y轴坐标
acaddoc.SetVariable ( "OSMODE", oldOSMODE )
dimObj.ArrowheadSize = 5.5  # 引线样式,箭头大小
dimObj.TextHeight = 7  # 引线样式,引线高度
dimObj.TextGap = 2.5  # 引线样式,文本间隙
dimObj.DecimalSeparator = "."  # 引线样式,小数分隔符

18、图纸空间的设置(略)

第六章:AutoCAD对象

1、阴影对象,即:h 填充对象

# """
# 阴影对象,即:h 填充对象
plpnts = apoint_xyz ( APoint ( 5, 0 ), APoint ( 5, 5 ), APoint ( 0, 5 ), APoint ( 0, 0 ), APoint ( 5, 0 ) )  # apint to xyz
plpnts = aDouble ( plpnts )
plobj = acadmod.AddPolyline ( plpnts )  # 画正方形
circleobj = acadmod.AddCircle ( APoint ( 5, 0 ), 5 )
PatternType = 0  # 图案常数:0,为选择那些定义在 acad.pat 文件中的图案名称。1,使用当前线线型定义的线图案。2,从 acad.pat 文件名的其它 PAT 中选择图案名称。
PatternName = "ANSI31"  # 图案名字
Associativity = True  # 图案填充为关联与否
hatchobj = acadmod.AddHatch ( PatternType, PatternName, Associativity )
acaddoc.SendCommand ( "h" + chr ( 13 ) + "1,1" + chr ( 13 )  + chr ( 13 ) )  # 注,一切通过activex 不可用bug的方法均可尝试直接调用cad命令行操作
# hatchobj.AppendOuterLoop ( circleobj )  # 矩形 对象数组无效 why? BUG 重像,对象数组无法传递。
# hatchobj.Evaluate
# acadapp.Regen ( True )
# """编辑阴影(略)

2、图层对象

# """
# 图层
layname = acaddoc.ActiveLayer.Name  # 当前图层
print ( layname )
acaddoc.ActiveLayer.Plottable = False  # 设置当前图层属性为不打印
laynum = acaddoc.Layers.Count  # 图层数量
print ( laynum )
layobj = acaddoc.Layers.Add ( "ABC" )  # 新建图层
layobj.color = 5  # 改图层颜色
# XXXobj.Layer = "ABC" #指定XXXOBJ 图层,修改对象图层。
layobj.layeron = False  # 关闭图层
layobj.delete()  # 删除图层
# """

3、颜色对象

AutoCAD颜色索引表:

使用方法(略)

4、线型对象

try:acaddoc.Linetypes.Load ( "CENTER", "acad.lin" )
except _ctypes.COMError:print ( "{}线型已存在".format ( "CENTER" ) )

5、文本对象

文本样式对照表:

# """
# 文本对象
# point1 = acaduti.GetPoint ( APoint ( 0, 0 ), "请选文本插入点" )  # 选择点
textObj = acadmod.addtext ( "hello word!", APoint ( 10, 10 ), "2.5" )  # 插入文本
# 左对齐文字
textObj.Alignment = 0  # 左对齐,默认值
textObj.Alignment = 1  # 中心对齐,
textObj.Alignment = 2  # 右对齐
MTextObj = acadmod.AddMText( APoint ( 10, 10 ), "10", "cccccccccccccccc") #多行文字
MTextObj.height = 2.5 # 修改多行文字高度
# """

第七章:设置AutoCAD环境

1、图形对象

# 图形对象
dwgname = r"d:\1.dwg"
try:acadapp.Documents.open ( dwgname )  # 打开文件
except:print ( "未找到文件" )
acaddoc.save  # 保存文件
acaddoc.saveas ( "1.dwg" )  # 另存为文件
a = input ( "是否保存文件Y/N" )
if a == "Y":acaddoc.save  # 保存文件
else:pass
#设置autocad窗口大小(略)
acadapp.WindowState = "0" # 窗口最大化
acadapp.WindowState = "1" # 窗口最小化

2、控制图形显示

缩放图形(略)

视图操作(略)

更新窗口(updata,regen)

3、构造线

obj = acadmod.addxline ( APoint ( 5, 0 ), APoint ( 6, 8 ) )

4、打印面积

acaddoc.SendCommand ( "rec 0,0\n 1,3\n" )
obj = acadmod.Item ( acadmod.Count - 1 )  # 取得刚画的矩形
obj.closed = True  # 改为封闭图形
print ( obj.area )  # 打印出面积

5、取得用户输入(用户交互)

# 获取用户输入
# GetString
strobj = acaduti.getstring ( 1, "请输入内容:" )
print ( strobj )
# GetPoint
pointobj = acaduti.GetPoint ( APoint ( 0, 0 ), "请选择点:" )
print ( pointobj )
# GetKeyWord
acaduti.InitializeUserInput ( 128, "keyword1,keyword2" )
keyobj = acaduti.GetKeyword ( "提示关键字:" )
print ( keyobj )
# GetInteger
ingobj = acaduti.GetInteger ( "提示输入整数:" )
print ( ingobj )

第八章:定制个性菜单和工具栏

1、创建菜单(略)

2、创建工具栏(略)

第九章:三维绘图(略)

第十章:创建实例程序(待更新)

第十一章:参数化图形的设计(待更新

第十二章:自动加载图形(待更新)

第十三章:显示对象信息编程

第十四章:对层的操作编程

第十五章:AutoCAD Automation 对象

第十六章:加载DVB工程编程

第十七章:在AutoCAD环境中调用DLL编程

第十八章:AutoCAD二次开发实例

第十九章:AutoCAD和Access数据库编程

附录:参考函数列表

基于Python AutoCAD ActiveX 二次开发,pyautocad应用技术相关推荐

  1. autocad python二次开发_基于Python AutoCAD ActiveX 二次开发,pyautocad应用技术

    AutoCAD应用程序开发系列 基于Python AutoCAD ActiveX 二次开发技术 主要库:pyautocad==0.2.0 内容#:基于Python AutoCAD ActiveX 二次 ...

  2. python在材料模拟中的应用_基于Python的ABAQUS二次开发及在板料快速冲压成形模拟中的应用...

    2009 doi :10 1 3969/ j 1 issn 1 1007 2 2012 1 2009 1 04 1 013 基于 Python 的 ABAQUS 二次开发及在板料快速 冲压成形模拟中的 ...

  3. python对abaqus本构二次开发_基于Python的Abaqus二次开发实例讲解

    第 1 页 共 11 页 基于 Python 的 Abaqus 二次开发实例讲解 ( asian58 2013.6.26 ) 基于 Python 的 Abaqus 的二次开发便捷之处在于: 1 .所有 ...

  4. abaqus生成odb文件_【前沿技术】基于Python的ABAQUS二次开发在飞机蒙皮锤铆中的应用...

    基于Python的ABAQUS 二次开发在飞机 蒙皮锤铆中的应用 在飞机蒙皮铆接技术中,锤铆是用一个小冲击力循环累计施加到铆钉使之变形的过程.根据锤铆铆接工艺和铆枪结构原理,铆钉的塑性变形是由铆枪的活 ...

  5. 基于Python的DELMIA二次开发(一):创建零件

    基于Python的delmia二次开发系列 文章目录 前言 一.基础概念 1.对象.集合.属性.方法 2.继承.聚合 二.Python连接Delmia 三.简单示例 前言 delmia和catia属同 ...

  6. 基于Python的ArcGIS二次开发实验实习教程

    基于Python的ArcGIS二次开发实验实习教程. ISBN编号: 9787307221772 原价(定价): 39元, 武汉大学出版社 天猫正版链接: https://detail.tmall.c ...

  7. 基于python的abaqus二次开发_基于PYTHON的ABAQUS二次开发实例讲解

    第 1 页 共 11 页 基于 Python 的 Abaqus 二次开发实例讲解 ( asian58 2013.6.26 ) 基于 Python 的 Abaqus 的二次开发便捷之处在于: 1 .所有 ...

  8. 基于python 的 ansys 二次开发-----借助pyansys安装包。

    基于python实现ansys的二次开发需要安装pyansys模块.主要通过输入apdl命令流实现对ansys的控制. pip install pyansys pip install pyvista ...

  9. 基于Python的Solidworks二次开发小尝试(一)

    文章目录 前言 一.自我理解 二.使用步骤 1.建立 Python 与 SolidWorks 之间的关联 2.通过录制宏获取vb代码 总结 前言 第一次运用python对solidworks进行二次开 ...

最新文章

  1. 《告别失控:软件开发团队管理必读》一一2.6 代系特点
  2. 【源资讯 第37期】一个时代的终结 —— 再见, Flash !
  3. 【报错笔记】Eclipse导入Maven项目时pom.xml报错,项目上有红感叹号。
  4. SAFE: Similarity-Aware Multi-Modal Fake News Detection-学习笔记
  5. Java中Thread类的方法简介
  6. Visusl Studio——包含目录、库目录、附加包含目录、附加库目录、附加依赖项之详解
  7. 阶段面试题_关于文案、交易系统、付费渗透率、阶段性目标的面试题解答
  8. javascript事件处理
  9. 【知识分享】汽车搭载的车载摄像头分类
  10. 电子科技大学 计算机学院 夏令营,2018年电子科技大学全校各学院保研夏令营通知信息大汇总...
  11. java统计字数_Java 8的字数统计
  12. word2007 去背景底色
  13. Android图形图像处理,主流app开发工具
  14. WIN10英文改中文
  15. php 分页样式css样式,thinkphp5分页CSS样式代码
  16. 跟风“涨价”,品牌老化,为何“0糖”的奥利奥不被消费者买账?
  17. php 可以将图片分类吗,PHP图片处理教程.ppt
  18. 数仓建设(离线和实时)
  19. 3D点云生成的扩散概率模型(CVPR 2021)
  20. html 获取登录状态,登录后如何获取HTML代码?

热门文章

  1. 某行“软件最佳实践与沙盘演练”企业内训开始!
  2. 微信小程序开发费用制作费用是多少?
  3. 全国计算机等级三级数据库技术知识点
  4. Google Play邮件提示: 您必须声明您的广告 AD_ID 权限
  5. prototype全解全析
  6. 巡线机器人 - PID控制 - 安卓设置
  7. 【工业互联网】刘亚威:工业互联网联盟与工业4.0平台的合作始末
  8. 新一年TurboGate邮件网关再次提醒小心勒索邮件
  9. 什么是vps?vps和代理ip的本质区别?
  10. RedisUtils和 RedisConfig代码封装如下