吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1360|回复: 24
收起左侧

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

  [复制链接]
Rick_Nikita 发表于 2024-10-8 14:20
仅做抛砖引玉,表述自己的思路。
因:
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

导出:
[Python] 纯文本查看 复制代码
#!/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[0])

        text.InsertionPoint = APoint(text.InsertionPoint)
        data.append({'Text': text.TextString,
                     'XPosition': text.InsertionPoint[0],
                     'YPosition': text.InsertionPoint[1],
                     '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[0])
# 将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内容修改后,导入:
[Python] 纯文本查看 复制代码
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, 0]
        i = i + 1
        print("%d / %d" % (i, df_in.shape[0]))



按照修改后的output.xlsx导入


pyautocad 手册 中文版.zip (226.4 KB, 下载次数: 27)


测试.zip (18.85 KB, 下载次数: 20)



免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
LuckyClover + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 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开发的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-14 06:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表