许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Python操控AutoCAD:图形自动化绘制代码实现

Python操控AutoCAD:图形自动化绘制代码实现

阅读数 2
点赞 0
article_banner

干CATIA干了十来年,突然让我搞AutoCAD的自动化,心里是有点别扭的。CATIA那边有CAA,有VB宏, KnowledgeWare那套东西虽然贵但好歹是亲儿子。AutoCAD这边一上来就给我甩个Python,说实话我python水平就停留在改改别人脚本的程度。

  1. 环境这块坑不少。pyautocad这个库,装是pip一装就完事,跑起来全靠COM。也就是说你机器上必须有正版的AutoCAD,而且版本不能太老。我电脑上装的2020,第一次连的时候报了一堆错,什么RegisterActiveObject失败,搞了半天是CAD没启动。它不会帮你把CAD拉起来,得你自己先开着,或者用acad = Autocad(create_if_not_exists=True)这个参数,它会尝试启动,但启动那一下很慢,电脑差点卡死。
  2. 真正干活的是win32com。pyautocad其实就是包了一层,你要是遇到它没有的功能,直接往下捅,用win32com.client.Dispatch("AutoCAD.Application")拿对象,跟当年在CATIA里拿CATIA.Application一个路数。对象模型两边其实很像,Document、ModelSpace这些概念都通。我在CATIA里写宏养成的习惯,画东西之前先想清楚在哪个空间画,这个习惯在这边完全用得上。

画线画圆这些太简单了,不值当说。addLine两个点,addCircle圆心加半径,点坐标要用APoint包一下,不包有时候也能跑有时候报错,看命,我建议一律包上,省得回头查。

Python操控AutoCAD

  1. 批量改属性才是自动化的意义。我们那批图纸,几百个圆的图层放错了,人工改要改死人。用python遍历doc.Objects,判断对象类型是Circle,看它Layer属性对不对,不对就改。这活儿在CATIA里我也干过类似的,逻辑一模一样,就是API名字换了。遍历的时候有个坑,边删边遍历会出问题,跟很多语言一样,要删的东西先收集到list里,遍历完再统一删。
  2. 块操作是最实用的。我们标准件多,螺栓螺母垫片一堆,人工一个一个插块,插完还要转角度改比例,眼睛都插瞎了。python里InsertBlock,给插入点、XYZ三个方向的比例、旋转角度,一行搞定。参数可以从excel里读,用openpyxl,读出来一张表就是一堆安装点位,循环一插,五分钟插完原来两天的活。这一步做完我算是认可这套东西了。
  3. ezdxf是另一条路,它不连CAD,直接读写dwg转出来的dxf文件。好处是不用开AutoCAD,服务器上也能跑,坏处是dwg它不直接支持,得先转格式,而且生成的东西没有CAD里打开确认,心里没底。我现在是两条路混着用,要在现有图上改东西就走COM,要从零生成大批量文件就走ezdxf,生成完再拿CAD打开抽查几张。

标注这块麻烦。DimStyle那些变量名全是DIMXX开头的,跟命令行里dim命令那套对应,得开CAD输DIM看它当前的变量名,再去代码里set_variable。文档写得含糊,很多要自己试。我在CATIA里被参数折腾惯了,这个还算能忍。

打印出图也有接口,doc.SetVariable改改,Plot对象调一下,能实现批量打印。但我们出图还是走别的流程,这块我就浅尝了一下,不细说了。

异常处理要写。COM这东西,CAD那边用户手一抖关了个对话框,或者正忙着 regen,python这边调用就挂,抛的错还看不懂,全是HRESULT十六进制。我现在的写法是关键调用都套try,失败了sleep两秒重试一次,再不行就记下来跳过,最后看日志人工补。别追求一次全成,不现实。

速度问题提一句。逐个对象操作COM很慢,因为每一次属性读写都是跨进程调用。几百个对象还行,上万个就别硬遍历了,能用SelectionSets一次框选出来批量处理的,就别for循环一个个摸。这个教训我是拿一晚上时间换来的,脚本跑一个多小时没跑完,第二天改成选择集,几分钟完事。

跟CATIA比,AutoCAD这套API老实说更开放也更好查,网上例子多得是,抄一抄改改就能用。CATIA那边一个CAA的问题能查一个星期。所以虽然我是CATIA出身,这几个月下来,python操控CAD这套我反而觉得顺手。工具不挑出身,能省事儿就是好工具。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空