用 python 操作 Acad 绘图 的学习笔记

如何开始:先看 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()
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值