weixin_46360279 2021-04-23 14:13 采纳率: 0%
浏览 76

Python 与 Autocad 二次开发数据转换出现问题

Python 与Autocad 开发时,建立好面域后,拉伸面域生成实体时程序报错:the python instance can noe be converted to a COM object.
即 regionObj 数据格式不正确,不知道要怎么修改。求大神解决,谢谢。

import pythoncom, math
import win32com.client
wincad = win32com.client.Dispatch("AutoCAD.Application")
doc = wincad.ActiveDocument
doc.Utility.Prompt("Hello! Autocad from pywin32com.\n")
msp = doc.ModelSpace
print(doc.Name)
def vtpnt(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)
def vtfloat(lst):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, lst)
def vtVariant(list):     ### """列表转化为变体"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_VARIANT, list)

## 创建直线
center, radius = vtpnt(0, 0, 0), 50;startAngle,endAngle=0,math.pi
circleObj = msp.AddCircle(center, radius)
print('type(circleObj)',type(circleObj))
curve=[];regionObj=[]
curve.append(msp.AddArc(center, radius, startAngle, endAngle))
curve.append(msp.Addline(vtfloat(curve[0].startPoint), vtfloat(curve[0].endPoint)))

## 创建面域
regionObj.append(msp.AddRegion(vtobj(curve)))

## 定义拉伸
height = 200;taperAngle = 0
solidObj = msp.AddExtrudedSolid(vtVariant(regionObj), height, taperAngle)

 

  • 写回答

1条回答 默认 最新

  • coagenth 2021-04-23 16:04
    关注

    将regionObj.append(msp.AddRegion(vtobj(curve)))改为regionObj.extend(msp.AddRegion(vtobj(curve))),试一下看看,这样传入的是列表而不是嵌套列表。

    评论

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题