# -*- coding: utf-8 -*-
import os
import re
import tkinter as tk
from tkinter import filedialog
import comtypes.client
import win32com.client
def work(filename, acad):
acad.Documents.Open(filename)
acad.ZoomExtents()
# acad = win32com.client.dynamic.Dispatch("AutoCAD.Application")
acaddoc = acad.ActiveDocument
for entity in acaddoc.ModelSpace:
name = entity.EntityName
if name == 'AcDbText':
print(entity.TextString)
pass
elif name == 'AcDbBlockReference':
if entity.IsDynamicBlock:
print("Is dynamic block")
print(entity.EffectiveName)
HasAttributes = entity.HasAttributes
print(HasAttributes)
if HasAttributes:
# print(entity.GetDynamicBlockProperties())
for attrib in entity.GetAttributes():
print(" {}: {}".format(attrib.TagString, attrib.TextString))
acaddoc.SendCommand("attsync\nN\n*\n")
acaddoc.Close()
def main():
root = tk.Tk()
root.withdraw()
folder = filedialog.askdirectory()
# try:
# acad = comtypes.client.GetActiveObject("AutoCAD.Application", dynamic=True)
# except:
# acad = comtypes.client.CreateObject("AutoCAD.Application", dynamic=True)
# acad.Visible = True
acad = win32com.client.dynamic.Dispatch("AutoCAD.Application")
for root, dirs, files in os.walk(folder):
for file in files:
if re.search("dwg", file) is not None:
filename = os.path.join(root, file)
try:
work(filename, acad)
except:
print(file + "转换失败")
acad = comtypes.client.GetActiveObject("AutoCAD.Application", dynamic=True)
acad.Quit()
if __name__ == "__main__":
main()
python CAD属性块
于 2023-05-30 16:59:04 首次发布