如何批量修改多个文件中圆的大小
有很多的文件 每个文件都有很多圆 所有的圆大小都一致,想把所有圆半径0.1改为0.2 求大佬帮帮忙:'(本帖最后由 夏生生 于 2022-4-7 22:02 编辑
特慢系列:lol,别怪我没提醒您,单独建立一个文件夹拷贝文件测试
(defun c:tt (/ f file tmp)
(setqf (getfiled "选择文件夹并任意选取一个文件,请先剔除无需处理文件"
"d:\\"
"dwg"
0
)
f (vl-filename-directory f)
f (mapcar '(lambda (x) (strcat f "\\" x))
(vl-directory-files f "*.dwg" 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\") (40 . 0.1))))
(repeat(setq n (sslength ss))
(setqen (ssname ss (setq n (1- n)))
en (entget en)
en (subst (cons 40 0.2) (assoc 40 en) en)
)
(entmod en)
)"
tmp
)
(write-line "_.qsave _.close" tmp)
)
(close tmp)
(command ".script" file)
(vl-file-delete file)
(princ)
)
再来个dbx的
(defun c:tt1 (/ f dbx)
(setq f (getfiled "选择文件夹并任意选取一个文件,请先剔除无需处理文件"
"d:\\"
"dwg"
0
)
f (vl-filename-directory f)
f (mapcar '(lambda (x) (strcat f "\\" x))
(vl-directory-files f "*.dwg" 1)
)
dbx (vlax-get-or-create-Object
(strcat "ObjectDBX.AxDbDocument."
(itoa (atoi (getvar "acadver")))
)
)
)
(foreach n f
(vla-open dbx n)
(vlax-for m (vla-get-modelspace dbx)
(if (and (eq "AcDbCircle" (vla-get-objectname m))
(= 0.1 (vla-get-Radius m))
)
(vla-put-Radius m 0.2)
)
)
(vla-saveas dbx n)
)
(vlax-release-object dbx)
(princ)
)
我来一个常规的吧,借用论坛程序修改的,就不道谢了哈!
命令: TT1
功能:不开图将一个文件夹下所有图纸内原直径为0.2的圆,将直径修改为0.4。
-------------------------------------------------------------------------------------------------------
;取得目录
(defun qf_getFolder (msg / WinShell shFolder path catchit)
(vl-load-com)
(setq winshell (vlax-create-object "Shell.Application"))
(setq shFolder (vlax-invoke-method WinShell 'BrowseForFolder 0 msg 1))
(setq
catchit (vl-catch-all-apply
'(lambda () (setq shFolder (vlax-get-property shFolder 'self)) (setq path (vlax-get-property shFolder 'path))
)
)
)
(if (vl-catch-all-error-p catchit)
nil
path
)
)
;程序开始
(vl-load-com)
(defun C:TT1(/ banben dbx dwgname files i lx path)
(setq BANBEN (substr (getvar "acadver" ) 1 2 ))
(setq DBX (vlax-get-or-create-object (strcat "ObjectDBX.AxDbDocument." BANBEN ) ))
(setq PATH (strcat (qf_getFolder"\n 选择图纸所在文件夹:" ) "\\" ))
(setq FILES (vl-directory-files PATH "*.dwg" 1 ))
(setq I -1)
(while (and (setqDWGNAME (nth (setqI (1+ I )) FILES )))
(vlax-invoke-method DBX 'open (strcat PATH DWGNAME ) )
(vlax-for OB (vlax-get DBX 'MODELSPACE )
(setq LX (vla-get-ObjectName OB))
(if (= LX "AcDbCircle")
(if (= (vla-get-Diameter OB) 0.2);原直径为0.2
(vla-put-Diameter OB 0.4);修改直径为0.4
)
)
)
(vlax-invoke-method DBX 'SAVEAS (strcat PATH DWGNAME ) )
)
(vlax-release-object DBX )
)
夏生生 发表于 2022-4-7 16:37
特慢系列,别怪我没提醒您,单独建立一个文件夹拷贝文件测试
再来个dbx的
你好,大佬 ,你那个超慢模式速度能提升不,确实想找个这种模式的代码,就是挨个打开文件,执行一系列操作后,关闭文件 再循环打开下个文件继续执行,只到循环完,求大佬给一段速度还算可以的,这种模式的代码,参考学习一下可以吗,谢谢了! xj6019 发表于 2022-4-10 09:38
你好,大佬 ,你那个超慢模式速度能提升不,确实想找个这种模式的代码,就是挨个打开文件,执行一系列操 ...
采用alisp就用scr的方法,这种方法个人认为不是很适合逐个文件处理的方式,比较慢;
采用vlisp就用dbx的方法,这种方法要全部采用vba的函数,速度比较快;
我在前面的帖子应该就是您需要的示例代码,您根据帖子的思路去改就是了。 夏生生 发表于 2022-4-10 11:13
采用alisp就用scr的方法,这种方法个人认为不是很适合逐个文件处理的方式,比较慢;
采用vlisp就用dbx的 ...
多个文件内执行burst 就是炸开属性块dbx能实现吗 好像没找到 用dbx炸开属性块的方法 xj6019 发表于 2022-4-10 16:03
多个文件内执行burst 就是炸开属性块dbx能实现吗 好像没找到 用dbx炸开属性块的方法
burst是express的命令,不在乎速度可以用scr,(c:burst)解决问题,vla的话就要自己想办法解决vla-explode后attribute转换的问题了,就是有点绕,也不是解决不了 夏生生 发表于 2022-4-10 16:15
burst是express的命令,不在乎速度可以用scr,(c:burst)解决问题,vla的话就要自己想办法解决vla-explode ...
嗯 谢谢指导,看来确实没有直接的办法,只能绕几个圈才能用dbx解决,改块内文字 和炸属性块 不是一回事,看来确实是比较费劲,算了 以后再说吧,谢谢!
最近也搞了个批量修改圆、圆弧半径的,但只支持框选内容。每个人的需求真是千差万别啊
革天明 发表于 2022-4-10 22:51
最近也搞了个批量修改圆、圆弧半径的,但只支持框选内容。每个人的需求真是千差万别啊
你左边工具栏是什么。
页:
[1]