利用comtypes.client批处理dwg文件(AutoCAD二次开发Python)

之前利用Python对cad文件进行处理,用的都是pyautocad,不过灵活度感觉不高。看过他的源代码后,发现他是调用comtypes.client对当前dwg文件进行处理的。运行逻辑如下:

以批量打开某文件夹中的dwg文件,并另存为dxf文件为例:

import comtypes.client
import os

working_dir = r"D:\Test_Dir"
# 更改路径至目标文件夹内
os.chdir(working_dir)
# 获取当前文件夹内所有文件的列表
file_list = os.listdir()

# 获取当前激活的AutoCad文件(注意,需要提前手动打开CAD.exe,不然会报错)
# 其中"AutoCAD.Application"是AutoCAD的ProjID,dynamic作用尚不清楚
app = comtypes.client.GetActiveObject("AutoCAD.Application",dynamic = True)

# 循环遍历file_list中的每个文件
for file_name in file_list:
    # 如果文件以dwg结尾,则打开文件
    if file_name.endwith('.dwg'):
        app.Document.Open(working_dir + "\\" + file_name)
        # 获取当前活动的CAD文件的对象
        acad = app.ActiveDocument
        # 将acad对象另存为dxf格式,第二个参数13为某版本的dxf文件格式代码,可在AutoCAD帮助文档中查阅
        acad.saveas(working_dir + "\\" + file_name[:-4] +'_new.dxf',13)
        # 关闭当前文档        
        acad.close()

本文章为自学过程中的记录,欢迎交流及批评指正。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python是一种功能强大的编程语言,可以用于AutoCAD二次开发。以下是一些可用的Python库和示例代码: 1. pyautocad:这是一个Python库,可用于与AutoCAD进行交互。以下是一个简单的示例代码,用于在AutoCAD中创建一个新的直线: ```python import win32com.client acad = win32com.client.Dispatch("AutoCAD.Application") doc = acad.ActiveDocument ms = doc.ModelSpace line1 = ms.AddLine((0, 0), (10, 10)) ``` 2. comtypes:这是一个Python库,可用于与COM对象进行交互。以下是一个示例代码,用于在AutoCAD中创建一个新的直线: ```python import comtypes.client acad = comtypes.client.GetActiveObject("AutoCAD.Application") doc = acad.ActiveDocument ms = doc.ModelSpace line1 = ms.AddLine((0, 0), (10, 10)) ``` 3. IronPython:这是一个Python实现,可用于与.NET框架进行交互。以下是一个示例代码,用于在AutoCAD中创建一个新的直线: ```python import clr clr.AddReference("acmgd") clr.AddReference("acdbmgd") import Autodesk.AutoCAD.ApplicationServices as appSvc import Autodesk.AutoCAD.DatabaseServices as dbSvc import Autodesk.AutoCAD.Geometry as geo doc = appSvc.Application.DocumentManager.MdiActiveDocument db = doc.Database tr = doc.TransactionManager.StartTransaction() ms = dbSvc.SymbolUtilityServices.GetBlockModelSpace(db) line1 = dbSvc.Entity("Line")(geo.Point3d(0, 0, 0), geo.Point3d(10, 10, 0)) ms.AppendEntity(line1) tr.AddNewlyCreatedDBObject(line1, True) tr.Commit() ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值