如何开始:先看 Hulunbuir 的 网页
lisp vba 都有通过 com 操作 acad python也有
我发现 有 3 种方式可以连上 acad #cad07 先装 几个 库
comtypes, pyautocad,win32com
接口属性方法 数据格式都是com口 统一的 ,py代码从vba里改过来就可以
comtypes, pyautocad 两种方法 对象的安全变体数组没成功 点的变体用 APoint()
#! /bin/python3
#作者:千云山庄
import pythoncom
import array,math
import numpy as np
import comtypes.client,win32com.client
from pyautocad import APoint,Autocad
##拿到根对象
#ctpc = comtypes.client.GetActiveObject("AutoCAD.application")
w32c = win32com.client.Dispatch("AutoCAD.Application")
#aa = Autocad(create_if_not_exists=True)
##ctpc,aa 点的数据 一样 ctpc 可以 print 对象的方法和属性
## w32c 的点格式另外 w32c 已实现 图案填充
## w32c 用到的 返回 安全数组 变体 点的 对象的
def vtpt(x,y,z=0):
return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x,y,z))
def vtobj(obj):
return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, obj)
## 千云山庄原创 分享不怕代码丑
doc=w32c.ActiveDocument
ut = doc.Utility
mp = doc.ModelSpace
ut.Prompt("w32c---cad\n")
print(doc.Name)
##转换数据 让cad 认得
pt1 = vtpt(0,0)
pt2 = vtpt(100,0)
##添加图元到 modespace
pt0=mp.AddPoint(pt1)
ln = mp.AddLine(pt1, pt2)
cc=mp.AddCircle(pt1,50)
patternName = "ANSI31"
PatternType = 0
bAssociativity = True
center = vtpt(0, 0, 0)
center2 = vtpt(33, 0, 0)
radius = 10
outerLoop=[]
outerLoop.append ( mp.AddCircle(center, radius))
print(outerLoop)
outerLoop = vtobj(outerLoop)
print("vtobjed--->:",outerLoop)
hatchObj = mp.AddHatch(PatternType, patternName, bAssociativity)
hatchObj.AppendOuterLoop (outerLoop)
hatchObj.Evaluate()
outerLoop1=[]
outerLoop1.append ( mp.AddCircle(center2, radius))
outerLoop1 = vtobj(outerLoop1)
hatchObj1 = mp.AddHatch(PatternType, patternName, bAssociativity)
hatchObj.PatternScale = 10
hatchObj1.AppendOuterLoop (outerLoop1)
hatchObj1.Evaluate()