from pyautocad import Autocadpyacad = Autocad(create_if_not_exists=True)pyacad.prompt("Hello! Autocad from pyautocad.")print(pyacad.doc.Name)
pyautocad包可以用任何版本的cad进行操作,实际上接口都是一样的。
第一行:自动连接上cad,只要cad界面是打开的,就创建了一个<pyautocad.api.Autocad> 对象。这个对象连接最近打开的cad文件。如果此时还没有打开cad,将会创建一个新的dwg文件,并自动开启cad软件。
第二行:acad.prompt() 用来在cad命令行下打印文字。
第三行:打印刚调取的CAD名字。
import pythoncomimport win32com.clientimport mathwincad = win32com.client.Dispatch("AutoCAD.Application")doc = wincad.ActiveDocumentdoc.Utility.Prompt("Hello! Autocad from pywin32com.\n")msp = doc.ModelSpaceprint(doc.Name)
我个人习惯于使用第一种方法。
startPoint = APoint(5, 25)endPoint = APoint(25, 35) # z坐标可空缺,空缺时系统默认其为0,即点Pnt1在CAD中坐标为(5,25,0); # 系统自动将各坐标转化为双精度浮点数。LineObj = acad.model.AddLine(startPoint, endPoint)
#圆CircleCenter = APoint(10, 10)CircleObj = acad.model.AddCircle(CircleCenter, 5) #圆心,半径# AddCircle(圆心, 半径)#圆弧ArcCenter = APoint(20, 10)ArcObj = acad.model.AddRectangle(ArcCenter, 5, math.radians(-60), math.radians(60))# AddArc(圆心,半径,始边角度(弧度制),终边角度(弧度制))#椭圆EllCenter = APoint(40, 10, 0)majAxis = APoint(5, 0, 0)EllObj = acad.model.AddEllipse(EllCenter, majAxis, 0.5)# 该椭圆以EllCenter为椭圆中心,长轴一端点为(45, 10, 0),且短轴长度为长轴的0.5倍;
grip = APoint(20, 20)blockObj = acad.ActiveDocument.Blocks.Add(grip, "Block") # 新建块的名称为"Block"; # grip为块定位夹点所在位置。
center = APoint(0, 0)radius = 10CircleObj = blockObj.AddCircle(center, radius)center = APoint(40, 10)majAxis = APoint(10, 0, 0)EllObj = blockObj.AddEllipse(center, majAxis, 0.5)
#插入点的坐标位置insertionPnt1 = APoint(y, x) #插入块1"block"和块2"block2"RetVal = acad.model.InsertBlock(insertionPnt1, "block", 1, 1, 1, 0 )RetVal = acad.model.InsertBlock(insertionPnt1, "block2", 1, 1, 1, 0 )
insertionPnt = APoint(10, 0)RetVal = acad.model.InsertBlock(insertionPnt, "D:\AutoCAD\Harbin.dwg", 1, 1, 1, 0 ) # 外部文件名尽量与当前文件中的各块名称不同; # 插入后外部文件名将作为其在当前文件中的块名; # 外部文件的坐标原点为其作为块的定位夹点。
textString = "Harb Insti of Tec"insertPnt = APoint(0, 0)height = 2.5textObj = acad.model.AddText(textString, insertPnt, height) # textString:文本内容;height:字高; # 系统默认对齐夹点位于文字基线左侧; # 采用系统默认对齐方式时,insertPnt为对齐夹点的位置坐标; # 当用户自定义对齐方式时,insertPnt以对齐方式中的为准。
AlignNum = 7textObj.Alignment = AlignNum # AlignNum为对齐夹点位置标识号,其取值范围为[0,14]; # 0 基线左对齐、1 基线居中对齐、2 基线右对齐; # 7 表示对齐夹点位于 top cennter;insertPnt = APoint(0, 10)textObj.TextAlignmentPoint = insertPnt # 设置对齐夹点在图纸空间中的绝对位置,可为任意一已知点; # 若用户自定义对齐方式,则需设置此项。
BasePoint = insertPntScaleFactor = 5textObj.ScaleFactor = 5 # 水平方向文本缩放,即只缩放字宽(x方向),不缩放字高(y方向); # ScaleFactor为比例系数,非负,>1为放大,<1为缩小。宽度因子textObj.ScaleEntity(BasePoint, ScaleFactor) # 两个方向同步缩放; # 基点与insertPnt重合,文字放大后对齐夹点位置保持不变。
txtStyleObj = acad.ActiveDocument.TextStyles.Add("HIT_TxtStyle")
acad.ActiveDocument.ActiveTextStyle = acad.ActiveDocument.TextStyles.Item("Standard")
acad.ActiveDocument.ActiveTextStyle.SetFont("楷体", False, False, 1, 0 or 0) # acad.ActiveDocument.ActiveTextStyle.SetFont(Typeface, Bold, Italic, charSet, PitchandFamily) # Typeface 字体名称; # Bold 加粗,布尔值,False为不加粗字体; # Italic 倾斜,布尔值,False为倾斜字体; # CharSet 字体字符集,1为默认字符集; # PitchAndFamily 字节及笔画形式。
acad.ActiveDocument.TextStyles.Item("HIT_TxtStyle").SetFont("宋体", False, False, 1, 0 or 0)
txtStyleObj.ObliqueAngle = math.radians(30) # 倾斜角度变化范围为[-85,85],取正值时右偏。
联系客服