python 使用pyautocad操作AutoCAD

一、python 連接AutoCAD的兩種基本方法

1、使用pyautocad

from pyautocad import Autocad
pyacad = Autocad(create_if_not_exists=True)
pyacad.prompt("Hello! Autocad from pyautocad.")
print(pyacad.doc.Name)

pyautocad包可以用任何版本的cad進(jìn)行操作,實(shí)際上接口都是一樣的。
第一行:自動連接上cad,只要cad界面是打開的,就創(chuàng)建了一個<pyautocad.api.Autocad> 對象。這個對象連接最近打開的cad文件。如果此時還沒有打開cad,將會創(chuàng)建一個新的dwg文件,并自動開啟cad軟件。
第二行:acad.prompt() 用來在cad命令行下打印文字。
第三行:打印剛調(diào)取的CAD名字。

2、使用pywin32

import pythoncom
import win32com.client
import math

wincad = win32com.client.Dispatch("AutoCAD.Application")
doc = wincad.ActiveDocument
doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")
msp = doc.ModelSpace
print(doc.Name)

我個人習(xí)慣于使用第一種方法。

二、pyautocad畫點(diǎn)線等

1、創(chuàng)建點(diǎn)及直線

startPoint = APoint(5, 25)
endPoint = APoint(25, 35)
    # z坐標(biāo)可空缺,空缺時系統(tǒng)默認(rèn)其為0,即點(diǎn)Pnt1在CAD中坐標(biāo)為(5,25,0);
    # 系統(tǒng)自動將各坐標(biāo)轉(zhuǎn)化為雙精度浮點(diǎn)數(shù)。
LineObj = acad.model.AddLine(startPoint, endPoint)

2、畫圓、圓弧等

#圓
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為橢圓中心,長軸一端點(diǎn)為(45, 10, 0),且短軸長度為長軸的0.5倍;

三、插入圖塊

3.1創(chuàng)建塊

grip = APoint(20, 20)
blockObj = acad.ActiveDocument.Blocks.Add(grip, "Block")
          # 新建塊的名稱為"Block";
          # grip為塊定位夾點(diǎn)所在位置。

3.2添加圖元到塊

center = APoint(0, 0)
radius = 10
CircleObj = blockObj.AddCircle(center, radius)
center = APoint(40, 10)
majAxis = APoint(10, 0, 0)
EllObj = blockObj.AddEllipse(center, majAxis, 0.5)

3.3插入當(dāng)前圖中的塊

#插入點(diǎn)的坐標(biāo)位置
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 )

3.4外部文件作為塊插入

insertionPnt = APoint(10, 0)
RetVal = acad.model.InsertBlock(insertionPnt, "D:\AutoCAD\Harbin.dwg", 1, 1, 1, 0 )
          # 外部文件名盡量與當(dāng)前文件中的各塊名稱不同;
          # 插入后外部文件名將作為其在當(dāng)前文件中的塊名;
          # 外部文件的坐標(biāo)原點(diǎn)為其作為塊的定位夾點(diǎn)。

四、單行文字

4.1插入單行文字

textString = "Harb Insti of Tec"
insertPnt = APoint(0, 0)
height = 2.5
textObj = acad.model.AddText(textString, insertPnt, height)
          # textString:文本內(nèi)容;height:字高;
          # 系統(tǒng)默認(rèn)對齊夾點(diǎn)位于文字基線左側(cè);
          # 采用系統(tǒng)默認(rèn)對齊方式時,insertPnt為對齊夾點(diǎn)的位置坐標(biāo);
          # 當(dāng)用戶自定義對齊方式時,insertPnt以對齊方式中的為準(zhǔn)。

4.2對齊方式

AlignNum = 7
textObj.Alignment = AlignNum
    # AlignNum為對齊夾點(diǎn)位置標(biāo)識號,其取值范圍為[0,14];
    # 0 基線左對齊、1 基線居中對齊、2 基線右對齊;
    # 7 表示對齊夾點(diǎn)位于 top cennter;
insertPnt = APoint(0, 10)
textObj.TextAlignmentPoint = insertPnt
    # 設(shè)置對齊夾點(diǎn)在圖紙空間中的絕對位置,可為任意一已知點(diǎn);
    # 若用戶自定義對齊方式,則需設(shè)置此項。

4.3文本縮放

BasePoint = insertPnt
ScaleFactor = 5
textObj.ScaleFactor = 5
    # 水平方向文本縮放,即只縮放字寬(x方向),不縮放字高(y方向);
    # ScaleFactor為比例系數(shù),非負(fù),>1為放大,<1為縮小。寬度因子
textObj.ScaleEntity(BasePoint, ScaleFactor)
    # 兩個方向同步縮放;
    # 基點(diǎn)與insertPnt重合,文字放大后對齊夾點(diǎn)位置保持不變。

五、多行文字

5.1文字樣式

txtStyleObj = acad.ActiveDocument.TextStyles.Add("HIT_TxtStyle")

5.2將特定文字樣式設(shè)為當(dāng)前

acad.ActiveDocument.ActiveTextStyle = acad.ActiveDocument.TextStyles.Item("Standard")

5.3為當(dāng)前文本樣式設(shè)置字體

acad.ActiveDocument.ActiveTextStyle.SetFont("楷體", False, False, 1, 0 or 0)
          # acad.ActiveDocument.ActiveTextStyle.SetFont(Typeface, Bold, Italic, charSet, PitchandFamily)
          # Typeface 字體名稱;
          # Bold 加粗,布爾值,F(xiàn)alse為不加粗字體;
          # Italic 傾斜,布爾值,F(xiàn)alse為傾斜字體;
          # CharSet 字體字符集,1為默認(rèn)字符集;
          # PitchAndFamily 字節(jié)及筆畫形式。

5.4為特定文本樣式設(shè)置字體

acad.ActiveDocument.TextStyles.Item("HIT_TxtStyle").SetFont("宋體", False, False, 1, 0 or 0)

5.5設(shè)置字體傾斜角度

txtStyleObj.ObliqueAngle = math.radians(30)
          # 傾斜角度變化范圍為[-85,85],取正值時右偏。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容