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 = (((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、焦点切换(略)

第三章:基础入门(略)

第四章:简单的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数据库编程

附录:参考函数列表

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

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

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

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

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

  3. python自动化测试开发_基于python的selenium2自动化测试从基础到实战(Python3、selenium2、自动化测试、web测试)...

    Selenium2是目前比较流行的一款针对web页面测试的自动化测试工具,他的前身是Selenium .Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozi ...

  4. python编程控制机器人_基于Python开发的微信图灵机器人

    在过去的几个月中,由于在新生群中回答问题费时费力,同时又有许多重复而又有固定答案的回答,我受到一些知乎文章的启发,维护了一个基于itchat的群聊机器人.从刚开始接入图灵机器人时只会尬聊的机器人,之后 ...

  5. python信用评分卡_基于Python的信用评分卡模型分析(二)

    上一篇文章基于Python的信用评分卡模型分析(一)已经介绍了信用评分卡模型的数据预处理.探索性数据分析.变量分箱和变量选择等.接下来我们将继续讨论信用评分卡的模型实现和分析,信用评分的方法和自动评分 ...

  6. python 蓝牙开发_基于python实现蓝牙通信代码实例

    这篇文章主要介绍了基于python实现蓝牙通信代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 安装和示例 linux下安装 sudo apt ...

  7. python制作二维码_基于Python生成个性二维码过程详解

    一.问题描述 通过调用MyQR模块来实现生成个人所需二维码. 安装: pip install myqr 二.代码实现 1.普通二维码 from MyQR import myqr # 普通二维码 myq ...

  8. python人脸识别库_基于Python的face_recognition库实现人脸识别

    Python Python开发 Python语言 基于Python的face_recognition库实现人脸识别 一.face_recognition库简介 face_recognition是Pyt ...

  9. python生成json接口_基于python的Flask框架写json接口并且结合eolinker进行接口测试

    一.前言 很多时候为了提高软件开发的效率,后端程序人员理想状态下应该编写程序测试接口供前端程序人员进行测试,以便前端的开发.笔者由于项目的需求近期尝试学习了一下测试接口的编写,以Python+Flas ...

最新文章

  1. PHP 实现无限分类
  2. 【swjtu】数据结构实验8_平衡二叉排序树
  3. linux常用查看硬件设备信息命令
  4. Nature子刊:Neuropixels 探针单神经元分辨率的大规模神经记录
  5. 网络爬虫:分离生产者和消费者来优化爬虫程序
  6. Xamarin简介与Xamarin支持MVC设计模式
  7. 在 Xunit 中使用依赖注入
  8. HDU 3785 寻找大富翁(sort排序或优先队列)
  9. java - 水仙花数
  10. android 蓝牙连接obd,Android蓝牙连接汽车OBD设备
  11. 前端人最需要的学习资料有哪些?我现在免费送给你!
  12. 计算机与特殊教育,计算机与信息工程学院特殊教育学院支教活动举行
  13. Android设置状态栏为白底黑字
  14. 方便使用FFMPEG的经验
  15. 黄聪:WordPress图片插件:Auto Highslide修改版(转)
  16. ArcGIS Runtime SDK for Android 加载shp数据,中文乱码问题
  17. 诺顿误杀事件造成“疑似病毒大爆发”恐慌
  18. 2021/9/7 ad9361 SPI 通信与数据接口
  19. el-select 多选取值_Python实战—Lasso回归选取关键特征
  20. 解决火狐,谷歌,ie兼容性问题

热门文章

  1. 由于找不到opencv_world412d.dll,无法继续执行代码
  2. Ubuntu 14.04安装Python3
  3. mysql存储过程事务和捕获异常信息
  4. iOS项目的命名规范
  5. Java WEB之过滤器
  6. 第六章例题二叉树层次遍历
  7. 学渣的心酸(求职篇)
  8. STM32F4 LTDC学习
  9. 开发extjs常用的插件
  10. 第16 17章节-Python3.5-Django知识点整理 15