Rick_Nikita 发表于 2024-10-8 14:20

分图层导出CAD中的文字及格式,修改后再导入CAD。达到批量修改替换的目的。

仅做抛砖引玉,表述自己的思路。
因:
1,工作需要,使用PDMS时report工具做批量修改很方便。
2,工作需要,CAD中也会有需要批量修改、替换文字内容、格式等。

使用说明:自行搜索pyautocad相关

参考:
https://help.autodesk.com/view/OARX/2025/CHS/?guid=GUID-ED298AC7-19E0-4E54-8983-48439EF70116
pyautocad 手册 中文版.pdf

依赖库:pyzwcad,pandas
同理:pyautocad

导出:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pyzwcad import ZwCAD, APoint
import pandas as pd
import re

acad = ZwCAD()
# acad.prompt("Hello, Autocad from Python\n")
print(acad.doc.Name)

# target_layer1 = "1"# 指定目标图层名称
data = []# 用于存储文本和坐标信息的列表

for text in acad.iter_objects('Text'):
    if text.Layer == "0"\
      or text.Layer == "1"\
      or text.Layer == "2":

      # if re.findall(u"V", text.TextString):
      #   print(text.TextString, text.InsertionPoint)

      text.InsertionPoint = APoint(text.InsertionPoint)
      data.append({'Text': text.TextString,
                     'XPosition': text.InsertionPoint,
                     'YPosition': text.InsertionPoint,
                     'Layer': text.Layer,
                     'handle': text.Handle,
                     "ID": text.ObjectID,
                     "Style": text.StyleName,
                     'Height': text.Height})

      print(text.TextString,text.Layer)

# 创建DataFrame对象
df = pd.DataFrame(data)
print("----总数:%d ----" % df.shape)
# 将DataFrame导出为Excel文件
df.to_excel('output.xlsx', index=False)


# 将DataFrame导出为txt文件
df.to_csv('output.txt', sep='\t',index=False)

# # 或将DataFrame导出为CSV文件
# df.to_csv('text_data.csv', index=False)


导出指定图层的文字内容、格式。见output.xlsx或output.txt
可根据Autocad帮助手册自行选择需导出内容

对output.xlsx内容修改后,导入:
from pyzwcad import ZwCAD, APoint
import pandas as pd


acad = ZwCAD()
acad.prompt("Hello, Autocad from Python\n")
print(acad.doc.Name)

# target_layer = "1"# 指定目标图层名称
data_out = []# 用于存储文本和坐标信息的列表

df_in = pd.read_excel(io=r'output.xlsx')
i = 0

for text in acad.iter_objects('Text'):
    if text.Layer == "0"\
            or text.Layer == "1"\
            or text.Layer == "2":

      text.TextString = df_in.values
      i = i + 1
      print("%d / %d" % (i, df_in.shape))



按照修改后的output.xlsx导入









Rick_Nikita 发表于 2024-10-8 15:35

Gweyshyn 发表于 2024-10-8 15:29
我遇到过的问题主要是很多设计院的图纸,它设计说明是炸开的文字,很多都是不能用多行文字复制出来,这种 ...

浩辰好像还没推出类似pyautocad的依赖库,大概率无法使用

Rick_Nikita 发表于 2024-10-8 15:59

Gweyshyn 发表于 2024-10-8 15:37
单行字,经过字母或者标点符号时候单行也换变成单个文字,不是点线组成的文字

单行文字和多行文字都可以导出,需要修改筛选类型,参考Autocad的帮助文件
https://help.autodesk.com/view/OARX/2025/CHS/?guid=GUID-ED298AC7-19E0-4E54-8983-48439EF70116

Gweyshyn 发表于 2024-10-8 15:26

专业,不明觉厉,公司几年前就已经买了正版浩辰了,说是被传票吓炸了

Rick_Nikita 发表于 2024-10-8 15:27

Gweyshyn 发表于 2024-10-8 15:26
专业,不明觉厉,公司几年前就已经买了正版浩辰了,说是被传票吓炸了

我们也全部卸载AutoCAD了

Gweyshyn 发表于 2024-10-8 15:29

Rick_Nikita 发表于 2024-10-8 15:27
我们也全部卸载AutoCAD了

我遇到过的问题主要是很多设计院的图纸,它设计说明是炸开的文字,很多都是不能用多行文字复制出来,这种可以用您这个插件吗,浩辰

Rick_Nikita 发表于 2024-10-8 15:32

Gweyshyn 发表于 2024-10-8 15:29
我遇到过的问题主要是很多设计院的图纸,它设计说明是炸开的文字,很多都是不能用多行文字复制出来,这种 ...

炸开的文字,是指单行文字还是由点线组成的文字

Gweyshyn 发表于 2024-10-8 15:37

Rick_Nikita 发表于 2024-10-8 15:32
炸开的文字,是指单行文字还是由点线组成的文字

单行字,经过字母或者标点符号时候单行也换变成单个文字,不是点线组成的文字

hyxk 发表于 2024-10-8 16:08

一直用的是AUTOCAD试试有没有用。

Rick_Nikita 发表于 2024-10-8 16:15

hyxk 发表于 2024-10-8 16:08
一直用的是AUTOCAD试试有没有用。

pyautocad就是为AutoCAD开发的
页: [1] 2 3
查看完整版本: 分图层导出CAD中的文字及格式,修改后再导入CAD。达到批量修改替换的目的。