批量修改替换AutoCAD图纸文本,土木狗可以有

查看 85|回复 9
作者:易一辅助   
Talk is cheap , show you my code:
[Python] 纯文本查看 复制代码# 导入所需库
from pyautocad import Autocad, APoint
import math
import os
import os.path as osp
import re
# 正则表达式匹配dwg文件
reg = re.compile(r'.*(.dwg)$')
# 定义文件路径
path = r"F:\22年14批预算明细"
# 初始化列表,用于存储dwg文件路径
lst = []
# 使用os.walk遍历指定路径下的所有文件
for dirpath, dirname, filename in os.walk(path):
    # 筛选出dwg文件,并添加到列表中
    li = [osp.join(dirpath, s) for s in filename if osp.isfile(osp.join(dirpath, s)) if reg.findall(s)]
    for i in li:
        if i:
            lst.append(i)
# 遍历列表中的dwg文件
for filename in lst:
    # 连接CAD
    acad = Autocad(create_if_not_exists=True, visible=True)  # create_if_not_exists—如果CAD不运行,则会创建新的实例.visible -如果为True,新AutoCAD实例将可见(默认)
    # 打开/读取CAD文件
    acad.ActiveDocument.Application.Documents.open(filename)
    acad.prompt("Hello! ZWCAD from pyautocad.")
    print(acad.doc.Name)
    # 遍历CAD文件中的所有文本对象,打印其文本内容及坐标位置
    for text in acad.iter_objects("Text"):  # 遍历Text对象
        # 修改对象属性,将文本中的"x批"字符替换为"14批"
        if 'x批' in text.TextString:
            print('text: %s at: %s' % (text.TextString, text.InsertionPoint))
            # 修改对象属性
            text1 = str(text.TextString)
            text1 = text1.replace('x批', '14批')
            text.TextString = text1
            acad.ActiveDocument.SaveAs(filename, 61)  # 同名另存
    # 关闭当前文档
    acad.ActiveDocument.Close()
# 退出cad程序
acad.app.Quit()
感兴趣的狗子们可以继续做如下优化:
  • 在遍历文件时,可以考虑使用多线程或多进程来提高处理速度。
  • 在修改文本对象时,可以添加异常处理,以应对意外情况。
  • 考虑将代码封装成一个类,以便于后续扩展和维护。

    文件, 遍历

  • caojian1624   

    谢谢分享
    simmtech   

    这个厉害,可我不懂编程语言。
    ljw0709   

    大神有没有成品啊
    碉堡的小嗵   

    感谢分享
    mele01   

    搞不懂怎么用法,完成的打包程度就好
    zhuofeng41   

    这个功能还是很有用的
    谢谢分享,如果有打包好的成品,则更赞了
    叶子   

    发这种例子没啥意义,功能简单几乎没哈用处,搞二次开发的,看一眼就知道了
    易一辅助
    OP
      


    叶子 发表于 2024-5-9 09:30
    发这种例子没啥意义,功能简单几乎没哈用处,搞二次开发的,看一眼就知道了

    二开的话,用Python不礼貌了,就是在玩数据解析,看看和AI怎么对接
    yjf306   

    谢谢楼主,这个不会用啊
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部