elmasea 发表于 2022-7-6 21:40:53

关于Python for autocad

您好,我正在寻找在autocad上学习python的“合作伙伴”
 
 
我是一名机械设计师,(意大利)autocad用户。
直到几年前,我用lisp编程,但后来我用VBA。
现在我在学习python,正如你们所知,它功能强大,易于使用
 
 
当然,我使用win32com类
所以我做了第一个关于Python/Autocad的例程,我试着简单解释一下:
 
 
1) 读取选定实体的所有特征:
 
 
acad=win32com。客户调度(“AutoCAD.Application”)
doc=acad。ActiveDocument#文档对象
ms=文件。模型空间#模型空间“集合”
returnObj=文件。公用事业GetEntity()#“选择对象”)
 
 
然后我可以显示所选实体的属性
 
例如,对于多段线:
 
 
returnObj。协调。。。
或其他
图层、长度、线型、线型比例、线宽
 
 
但这仅适用于选定实体(GetEntity方法),
 
2) 读取索引实体的所有特征:
当我在给定索引处得到一个实体时
 
 
ms=文件。模型空间
i=5#图形中实体的索引(模型空间)
entObj=ms.Item(i)
 
 
我只能显示几个属性
 
 
例如,始终对于多段线:
 
 
恩托布。层
恩托布。对象名称
 
 
但对于其他属性,python告诉我对象没有属性“例如长度、坐标、,
 
 
相反,VBA做到了这一点
谁想帮我?
谁想分道扬镳?
 
elmasea公司
 
 

Lee Mac 发表于 2022-7-6 21:49:07

您可能会在这里发现对Python更感兴趣。。。
 
享受
 

elmasea 发表于 2022-7-6 21:59:25

“”“自动化AutoCAD的示例:
1) 运行autocad图形
2) 阅读一些图纸数据:
模型空间中的对象数;
AutoCAD系统变量的值;
2) 添加到图形:
指向
线
多段线。
 
本代码中提供了一些访问Autocad对象的示例。
我们必须处理用于传入和传出阵列数据的变体
AutoCAD COM的。使用comtypes可以实现不同的变体类型
(win32com.client包并非如此)。
这个例子应该改进,尤其是在用户界面方面。
"""
 
导入数组
导入comtypes。客户
 
#获取AutoCAD应用程序的运行实例
acad=通信类型。客户GetActiveObject(“AutoCAD.Application”)
#文档对象
doc=acad。活动文档
#获取模型空间对象
ms=文件。模型空间
 
#获取一些有用的数据
DwgName=文件。名称#文件名
count=ms.count#模型空间中的项数
 
#获取变量名
sysVarName='DWGPREFIX'#图形目录
varData=文件。GetVariable(sysVarName)
 
#空闲时查看
打印“文件:”,DwgName
打印“N.项目:”,计数
 
#>>>在模型空间中:
#添加点对象
#设置AutoCAD系统变量的值。
#PDMODE和PDSIZE系统变量控制点对象的外观
sysVarName=“PDMODE”#指定点形状
文件。SetVariable(sysVarName,3)#代码3表示X形状
sysVarName=“PDSIZE”#控制点的大小
文件。SetVariable(sysVarName,3)#绝对大小(3个单位图标点高度的一半)
 
pt=阵列。数组('d',)#在变量中转换
点=ms.AddPoint(pt)
 
#添加一行
pt1=阵列。数组('d',)#起点
pt2=阵列。数组('d',)#端点
line=ms.AddLine(pt1,pt2)
 
#添加多段线
#我们分配顶点
ptl=[]
pt=
ptl=ptl+pt
pt=
ptl=ptl+pt
pt=
ptl=ptl+pt
ptlst=阵列。阵列(“d”,ptl)
pline=ms.AddPolyline(ptlst)
 
#选择项目
#用户通过在屏幕上拾取点来选择对象(多段线)
returnObj=文件。公用事业GetEntity(“选择对象:”)
“”“autocad中的每个图元都有一个唯一的值。
例如,对于line对象,ObjectName为AcDbLine,EntityType值为19”“”
#直线、多段线的通用代码
打印“DXF实体名称:”,returnObj。EntityName#是对象的类名
打印returnObj。实体类型#实体的类型
打印returnObj。层
打印returnObj。长
#仅多段线
retCoord=returnObj。协调
num\u顶点=len(retCoord)/3
对于范围内的i(num_顶点):
打印returnObj。坐标(一)
 
打印“>>>>>>”

lode 发表于 2022-7-6 22:09:33

是的,我也在考虑从vba迁移的想法。
我想知道vba的所有功能是否都可以通过python实现。
它可靠吗?这取决于某人和一些更新吗?
 
Python很有趣,所以,我加入了!
 
矿脉

Jeff H 发表于 2022-7-6 22:15:17

如果你喜欢python,你也可以考虑F。
Python很棒,但如果您主要关注AutoCAD自定义,那么使用F可能会受益更多

Hioushi 发表于 2022-7-6 22:24:38

你好
 
有人知道OP评论的问题的解决方法吗?
 
 
我也有同样的问题。

a_lobo 发表于 2022-7-6 22:27:00

你好
我尝试执行以下代码:
 
 
pt=阵列。数组('d',)
pt2=阵列。数组('d',)
linea=ms.AddLine(pt,pt2),我有以下错误
 
linea=ms.AddLine(pt,pt2)
文件“C:\IAcadModelSpace.py”,第281行,在AddLine中
ret=自身_oleobj_。InvokeTypes(1581,LCID,1,(9,0),((12,1),(12,1)),起点,终点)
pywintypes。com\U错误:(-2147352567,“Ocurri\xf3 una excepci\xf3n.”,(0,无,无,0,-2147024809),无)
 
你能帮我吗?
谢谢

pravu87 发表于 2022-7-6 22:37:43

棒极了!你能帮我解决一个小问题吗?我必须移动和旋转某条多段线的坐标,我想用Python来实现这一点。指挥结构会是什么样子?
提前感谢!

tgibbo 发表于 2022-7-6 22:47:01

我知道你的帖子是很多年前写的。你还在用Python吗?
页: [1]
查看完整版本: 关于Python for autocad