1864953597 发表于 2022-4-7 16:37:51

如何批量修改多个文件中圆的大小

有很多的文件 每个文件都有很多圆 所有的圆大小都一致,想把所有圆半径0.1改为0.2 求大佬帮帮忙:'(

夏生生 发表于 2022-4-7 16:37:52

本帖最后由 夏生生 于 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)
)

轮回 发表于 2022-4-7 20:19:56


我来一个常规的吧,借用论坛程序修改的,就不道谢了哈!
命令: 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 )
)

xj6019 发表于 2022-4-10 09:38:18

夏生生 发表于 2022-4-7 16:37
特慢系列,别怪我没提醒您,单独建立一个文件夹拷贝文件测试

再来个dbx的

你好,大佬 ,你那个超慢模式速度能提升不,确实想找个这种模式的代码,就是挨个打开文件,执行一系列操作后,关闭文件   再循环打开下个文件继续执行,只到循环完,求大佬给一段速度还算可以的,这种模式的代码,参考学习一下可以吗,谢谢了!

夏生生 发表于 2022-4-10 11:13:23

xj6019 发表于 2022-4-10 09:38
你好,大佬 ,你那个超慢模式速度能提升不,确实想找个这种模式的代码,就是挨个打开文件,执行一系列操 ...

采用alisp就用scr的方法,这种方法个人认为不是很适合逐个文件处理的方式,比较慢;
采用vlisp就用dbx的方法,这种方法要全部采用vba的函数,速度比较快;
我在前面的帖子应该就是您需要的示例代码,您根据帖子的思路去改就是了。

xj6019 发表于 2022-4-10 16:03:39

夏生生 发表于 2022-4-10 11:13
采用alisp就用scr的方法,这种方法个人认为不是很适合逐个文件处理的方式,比较慢;
采用vlisp就用dbx的 ...

多个文件内执行burst    就是炸开属性块dbx能实现吗   好像没找到 用dbx炸开属性块的方法

夏生生 发表于 2022-4-10 16:15:11

xj6019 发表于 2022-4-10 16:03
多个文件内执行burst    就是炸开属性块dbx能实现吗   好像没找到 用dbx炸开属性块的方法

burst是express的命令,不在乎速度可以用scr,(c:burst)解决问题,vla的话就要自己想办法解决vla-explode后attribute转换的问题了,就是有点绕,也不是解决不了

xj6019 发表于 2022-4-10 17:12:50

夏生生 发表于 2022-4-10 16:15
burst是express的命令,不在乎速度可以用scr,(c:burst)解决问题,vla的话就要自己想办法解决vla-explode ...

嗯   谢谢指导,看来确实没有直接的办法,只能绕几个圈才能用dbx解决,改块内文字 和炸属性块 不是一回事,看来确实是比较费劲,算了 以后再说吧,谢谢!

革天明 发表于 2022-4-10 22:51:28


最近也搞了个批量修改圆、圆弧半径的,但只支持框选内容。每个人的需求真是千差万别啊

sniper1111 发表于 2022-8-22 10:16:53

革天明 发表于 2022-4-10 22:51
最近也搞了个批量修改圆、圆弧半径的,但只支持框选内容。每个人的需求真是千差万别啊

你左边工具栏是什么。
页: [1]
查看完整版本: 如何批量修改多个文件中圆的大小