鱼C论坛

 找回密码
 立即注册
查看: 174|回复: 1

根据excel中坐标信息,自动插入图块到autocad

[复制链接]
发表于 2024-10-2 21:22:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
根据excel中坐标信息,自动插入图块到autocad
需求如下
1、根据一个excel的内容中的坐标信息,X,Y坐标,按照excel中所有的坐标插入指定的图块到指定的cad图纸中。
2、excel文件,作为插入图块的cad图纸,生成插入图块的cad图文件夹,都用tkinter的用户界面指定,用户界面上有明确的指示,选中后能在面板看到引用的文件信息。
3、excel中的信息如下图,指定了仪表位号,坐标点的X,Y信息,根据这些信息,通过tkinter指定插入图块,和用于插入图块的文件夹信息,完成插入。
仪表号        POS_X        POS_Y        POS_Z
/XV-5310038        26600        7300        11800
/TE-5310015        27000        10000        15000
/PG-5310043        27000        9600        15200
/FT-5310017        33200        -1200        5100
4、在用户界面,指定生成图纸的Z坐标的最小值和最大值,将符合Z坐标区间的,生成一个文件名为“{Z最小值}-{Z最大值}”.dwg的CAD文件,插入图块,并保存在用户界面指定的保存文件的文件夹。


converted_excel.zip

12.69 KB, 下载次数: 0

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-2 21:33:29 | 显示全部楼层
这个需求可以通过Python中的`Tkinter`库和`pyautocad`库来实现,这里简单说明一下实现步骤:

1. **安装需要的库**:
pip install pyautocad pandas openpyxl

2. **实现用户界面**:使用`tkinter`来实现文件选择界面:

import tkinter as tk
   from tkinter import filedialog
   import pandas as pd
   from pyautocad import Autocad, APoint

   class CADInserterApp:
       def __init__(self, root):
           self.root = root
           self.root.title('CAD 插入图块工具')

           self.excel_file = tk.StringVar()
           self.save_folder = tk.StringVar()

           tk.Label(root, text="选择Excel文件:").pack()
           tk.Entry(root, textvariable=self.excel_file).pack()
           tk.Button(root, text="选择文件", command=self.select_excel_file).pack()

           tk.Label(root, text="选择保存文件夹:").pack()
           tk.Entry(root, textvariable=self.save_folder).pack()
           tk.Button(root, text="选择文件夹", command=self.select_save_folder).pack()

           tk.Label(root, text="Z坐标最小值:").pack()
           self.z_min = tk.Entry(root)
           self.z_min.pack()

           tk.Label(root, text="Z坐标最大值:").pack()
           self.z_max = tk.Entry(root)
           self.z_max.pack()

           tk.Button(root, text="插入图块", command=self.insert_blocks).pack()

       def select_excel_file(self):
           file_path = filedialog.askopenfilename(filetypes=[('Excel Files', '*.xlsx')])
           self.excel_file.set(file_path)

       def select_save_folder(self):
           folder_path = filedialog.askdirectory()
           self.save_folder.set(folder_path)

       def insert_blocks(self):
           excel_path = self.excel_file.get()
           save_folder = self.save_folder.get()
           z_min = float(self.z_min.get())
           z_max = float(self.z_max.get())

           df = pd.read_excel(excel_path)
           df_filtered = df[(df['POS_Z'] >= z_min) & (df['POS_Z'] <= z_max)]

           acad = Autocad(create_if_not_exists=True)
           for index, row in df_filtered.iterrows():
               block_name = row['仪表号']
               pos_x = row['POS_X']
               pos_y = row['POS_Y']
               insert_point = APoint(pos_x, pos_y, 0)
               acad.model.InsertBlock(insert_point, block_name, 1, 1, 1, 0)

           acad.doc.SaveAs(f"{save_folder}/{z_min}-{z_max}.dwg")

   if __name__ == "__main__":
       root = tk.Tk()
       app = CADInserterApp(root)
       root.mainloop()

3. **运行程序**:执行上述代码,会弹出一个界面,根据界面提示选择对应的Excel文件和保存文件夹,并输入Z坐标的区间,最后点击“插入图块”按钮即可完成操作。

注意:这里简化了很多步骤和错误处理,需要根据具体的需求自行调整细节,比如:
- 确保Autocad已经启动并打开需要处理的文件。
- CAD中已经存在指定的图块。
- 添加更多的错误处理和信息提示。

希望这个示例可以帮助你完成需求。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 06:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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