求助大神。能不能帮忙改为批量修改圆直径
求助大神。能不能帮忙修改修改为不开图遍历文件夹下所有的dxf文件,批量将图纸中包含直径36圆修改为直径38.5,最好可以修改包含所有的子目录下的文件。求指点,谢了(defun c:yx (/ f file tmp)(setqf (getfiled "选择文件夹并任意选取一个文件,请先剔除无需处理文件"
"C:\\Temp\\1\\"
"dxf"
0
)
f (vl-filename-directory f)
f (mapcar '(lambda (x) (strcat f "\\" x))
(vl-directory-files f "*.dxf" 1)
)
)
(setq tmp (open (setq file (strcat (getenv "TEMP") "\\tmp.scr")) "w"))
(foreach n f
(write-line (strcat "_.open " n "") tmp)
(write-line
"(setq ss (ssget \"x\" '((0 . \"CIRCLE\") )))
(repeat(setq n (sslength ss))
(setqen (ssname ss (setq n (1- n))))
(setq centerpt(Cdr(Assoc 10 (Entget en))))
(entmake (list '(0 . \"LINE\") (cons 10 (polar centerpt pi 5 )) (cons 11 (polar centerpt 0 5 ))))
(entmake (list '(0 . \"LINE\") (cons 10 (polar centerpt( * 0.5 pi) 5 )) (cons 11 (polar centerpt( * -0.5 pi) 5 )))))"
tmp
)
(write-line (strcat "_.qsave dxf 16 " n " y _.close") tmp)
)
(close tmp)
(command ".script" file)
(vl-file-delete file)
(princ)
)
autolisp的方法是实现不了这个的 autolisp的函数都只能在当前文档中使用
用vlisp可以指定文档实现不同文档的修改
并且也只能实现自动打开-修改-关闭
不能真正的不开图修改
http://bbs.mjtd.com/thread-187579-1-1.html
参考此代码 把中间修改图元的代码改成你的修改圆直径就可以了 freedom_ice 发表于 2023-11-13 20:20
autolisp的方法是实现不了这个的 autolisp的函数都只能在当前文档中使用
用vlisp可以指定文档实现不同文档 ...
好的,谢谢,可不可以帮我修改一下呢?
可參考看看
[源码] 【 *** 不開圖修改另一圖檔, 將圖內所有圓改為圓心加十字標示線 ***】
http://bbs.mjtd.com/thread-185631-1-1.html
lee50310 发表于 2023-11-13 21:45
可參考看看
[源码] 【 *** 不開圖修改另一圖檔, 將圖內所有圓改為圓心加十字標示線 ***】
http://bbs ...
我要修改圆直径。 本帖最后由 lee50310 于 2023-11-14 09:06 编辑
wutao8282 发表于 2023-11-13 21:52
我要修改圆直径。
那是我以前發表的程式
差異不大你可先參考修改看看
我用Python+ezdxf库实现了,代码贴出来供参考import os
import ezdxf
import tkinter as tk
from tkinter import filedialog, messagebox
def modify_dxf_files(directory, listbox, original_diameter, modified_diameter):
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith(".dxf"):
file_path = os.path.join(root, file)
if contains_diameter_circle(file_path, original_diameter):
modify_dxf_file(file_path, original_diameter, modified_diameter)
listbox.insert(tk.END, file_path)
def contains_diameter_circle(file_path, diameter):
doc = ezdxf.readfile(file_path)
msp = doc.modelspace()
for circle in msp.query('CIRCLE'):
if round(circle.dxf.radius * 2, 2) == round(diameter, 2):
return True
return False
def modify_dxf_file(file_path, original_diameter, modified_diameter):
doc = ezdxf.readfile(file_path)
msp = doc.modelspace()
for circle in msp.query('CIRCLE'):
if round(circle.dxf.radius * 2, 2) == round(original_diameter, 2):
circle.dxf.radius = modified_diameter / 2.0
doc.saveas(file_path)
def browse_directory(entry):
directory = filedialog.askdirectory()
entry.delete(0, tk.END)
entry.insert(0, directory)
def modify_button_click(entry, listbox, original_entry, modified_entry):
directory = entry.get()
original_diameter = float(original_entry.get())
modified_diameter = float(modified_entry.get())
if directory:
if original_diameter >= 0 and modified_diameter >= 0:
modify_dxf_files(directory, listbox, original_diameter, modified_diameter)
if listbox.size() == 0:
messagebox.showinfo("完成", "未找到包含指定直径的圆的文件!")
else:
messagebox.showinfo("完成", "修改完成!")
else:
messagebox.showwarning("错误", "直径必须为非负数!")
else:
messagebox.showwarning("错误", "请选择路径!")
# 创建窗体
window = tk.Tk()
window.title("DXF文件修改工具")
# 创建路径相关组件
path_frame = tk.Frame(window)
path_frame.grid(row=0, column=0, columnspan=3, pady=20, sticky="w")
path_label = tk.Label(path_frame, text="路径:")
path_label.grid(row=0, column=0, padx=10)
path_entry = tk.Entry(path_frame, width=39)
path_entry.grid(row=0, column=1, padx=10)
browse_button = tk.Button(path_frame, text="浏览", command=lambda: browse_directory(path_entry))
browse_button.grid(row=0, column=2, padx=10)
# 创建直径相关组件和"修改"按钮
diameter_modify_frame = tk.Frame(window)
diameter_modify_frame.grid(row=1, column=0, columnspan=3, pady=10, sticky="w")
original_label = tk.Label(diameter_modify_frame, text="直径:")
original_label.grid(row=0, column=0, padx=10)
original_entry = tk.Entry(diameter_modify_frame, width=13)
original_entry.grid(row=0, column=1, padx=10)
modified_label = tk.Label(diameter_modify_frame, text="改直径:")
modified_label.grid(row=0, column=2, padx=10)
modified_default_value = "38.5"# 默认值
modified_entry = tk.Entry(diameter_modify_frame, width=13)
modified_entry.insert(0, modified_default_value)
modified_entry.grid(row=0, column=3, padx=10)
modify_button = tk.Button(diameter_modify_frame, text="修改", command=lambda: modify_button_click(path_entry, listbox, original_entry, modified_entry))
modify_button.grid(row=0, column=4, padx=10)
# 创建修改列表相关组件
listbox_frame = tk.Frame(window)
listbox_frame.grid(row=2, column=0, columnspan=3, pady=10, sticky="w")
modify_list_label = tk.Label(listbox_frame, text="列表:")
modify_list_label.grid(row=0, column=0, padx=10)
listbox = tk.Listbox(listbox_frame, width=50, height=10)
listbox.grid(row=0, column=1, padx=10)
# 启动窗体
window.mainloop()
页:
[1]