乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 118|回复: 8

[编程交流] 关于Python for autocad

[复制链接]

2

主题

3

帖子

1

银币

初来乍到

Rank: 1

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

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 21:49:07 | 显示全部楼层
您可能会在这里发现对Python更感兴趣。。。
 
享受
 
回复

使用道具 举报

2

主题

3

帖子

1

银币

初来乍到

Rank: 1

铜币
10
发表于 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',[0,0,0])#在变量中转换
点=ms.AddPoint(pt)
 
#添加一行
pt1=阵列。数组('d',[0.0,0.0,0])#起点
pt2=阵列。数组('d',[20.0,20.0,0])#端点
line=ms.AddLine(pt1,pt2)
 
#添加多段线
#我们分配顶点
ptl=[]
pt=[20.0,20.0,0]
ptl=ptl+pt
pt=[40.0,30.0,0]
ptl=ptl+pt
pt=[70.0,40.0,0]
ptl=ptl+pt
ptlst=阵列。阵列(“d”,ptl)
pline=ms.AddPolyline(ptlst)
 
#选择项目
#用户通过在屏幕上拾取点来选择对象(多段线)
returnObj=文件。公用事业GetEntity(“选择对象:”)
“”“autocad中的每个图元都有一个唯一的值。
例如,对于line对象,ObjectName为AcDbLine,EntityType值为19”“”
#直线、多段线的通用代码
打印“DXF实体名称:”,returnObj[0]。EntityName#是对象的类名
打印returnObj[0]。实体类型#实体的类型
打印returnObj[0]。层
打印returnObj[0]。长
#仅多段线
retCoord=returnObj[0]。协调
num\u顶点=len(retCoord)/3
对于范围内的i(num_顶点):
打印returnObj[0]。坐标(一)
 
打印“>>>>>>”
回复

使用道具 举报

1

主题

2

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:09:33 | 显示全部楼层
是的,我也在考虑从vba迁移的想法。
我想知道vba的所有功能是否都可以通过python实现。
它可靠吗?这取决于某人和一些更新吗?
 
Python很有趣,所以,我加入了!
 
矿脉
回复

使用道具 举报

0

主题

101

帖子

103

银币

限制会员

铜币
-2
发表于 2022-7-6 22:15:17 | 显示全部楼层
如果你喜欢python,你也可以考虑F。
Python很棒,但如果您主要关注AutoCAD自定义,那么使用F可能会受益更多
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 22:24:38 | 显示全部楼层
你好
 
有人知道OP评论的问题的解决方法吗?
 
 
我也有同样的问题。
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 22:27:00 | 显示全部楼层
你好
我尝试执行以下代码:
 
 
pt=阵列。数组('d',[0.0,0.0,0.0])
pt2=阵列。数组('d',[0.0100.0,0.0])
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),无)
 
你能帮我吗?
谢谢
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 22:37:43 | 显示全部楼层
棒极了!你能帮我解决一个小问题吗?我必须移动和旋转某条多段线的坐标,我想用Python来实现这一点。指挥结构会是什么样子?
提前感谢!
回复

使用道具 举报

9

主题

25

帖子

16

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 22:47:01 | 显示全部楼层
我知道你的帖子是很多年前写的。你还在用Python吗?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 14:31 , Processed in 0.329578 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表