更新日期: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
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 = (((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文本内容方法为.textString
s += 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、焦点切换(略)
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 )
# """
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、图纸空间的设置(略)
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 # 修改多行文字高度
# """
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、创建工具栏(略)