明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 895|回复: 10

[提问] 如何批量修改多个文件中圆的大小

[复制链接]
发表于 2022-4-7 16:37 | 显示全部楼层 |阅读模式
8明经币
有很多的文件 每个文件都有很多圆 所有的圆大小都一致,想把所有圆半径0.1改为0.2 求大佬帮帮忙

最佳答案

查看完整内容

特慢系列,别怪我没提醒您,单独建立一个文件夹拷贝文件测试 再来个dbx的
发表于 2022-4-7 16:37 | 显示全部楼层
本帖最后由 夏生生 于 2022-4-7 22:02 编辑

特慢系列,别怪我没提醒您,单独建立一个文件夹拷贝文件测试
  1. (defun c:tt (/ f file tmp)
  2.   (setq  f (getfiled "选择文件夹并任意选取一个文件,请先剔除无需处理文件"
  3.         "d:\\"
  4.         "dwg"
  5.         0
  6.         )
  7.   f (vl-filename-directory f)
  8.   f (mapcar '(lambda (x) (strcat f "\\" x))
  9.       (vl-directory-files f "*.dwg" 1)
  10.       )
  11.   )
  12.   (setq tmp (open (setq file (strcat (getenv "TEMP") "\\tmp.scr")) "w"))
  13.   (foreach n f
  14.     (write-line (strcat "_.open \"" n "\"") tmp)
  15.     (write-line
  16.       "(setq ss (ssget \"x\" '((0 . \"CIRCLE\") (40 . 0.1))))
  17.        (repeat  (setq n (sslength ss))
  18.        (setq  en (ssname ss (setq n (1- n)))
  19.   en (entget en)
  20.   en (subst (cons 40 0.2) (assoc 40 en) en)
  21.   )
  22.        (entmod en)
  23.   )"
  24.       tmp
  25.       )
  26.     (write-line "_.qsave _.close" tmp)
  27.     )
  28.   (close tmp)
  29.   (command ".script" file)
  30.   (vl-file-delete file)
  31.   (princ)
  32.   )

再来个dbx的
  1. (defun c:tt1 (/ f dbx)
  2.   (setq    f   (getfiled "选择文件夹并任意选取一个文件,请先剔除无需处理文件"
  3.               "d:\\"
  4.               "dwg"
  5.               0
  6.               )
  7.     f   (vl-filename-directory f)
  8.     f   (mapcar '(lambda (x) (strcat f "\\" x))
  9.             (vl-directory-files f "*.dwg" 1)
  10.             )
  11.     dbx (vlax-get-or-create-Object
  12.           (strcat "ObjectDBX.AxDbDocument."
  13.               (itoa (atoi (getvar "acadver")))
  14.               )
  15.           )
  16.     )
  17.   (foreach n f
  18.     (vla-open dbx n)
  19.     (vlax-for m    (vla-get-modelspace dbx)
  20.       (if (and (eq "AcDbCircle" (vla-get-objectname m))
  21.            (= 0.1 (vla-get-Radius m))
  22.            )
  23.     (vla-put-Radius m 0.2)
  24.     )
  25.       )
  26.     (vla-saveas dbx n)
  27.     )
  28.   (vlax-release-object dbx)
  29.   (princ)
  30.   )

评分

参与人数 2明经币 +2 收起 理由
bssurvey + 1 赞一个!
自贡黄明儒 + 1 很给力!

查看全部评分

回复

使用道具 举报

发表于 2022-4-7 20:19 | 显示全部楼层

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

评分

参与人数 3明经币 +3 金钱 +20 收起 理由
JUN1 + 1 很给力!
bssurvey + 1 赞一个!
1864953597 + 1 + 20

查看全部评分

回复

使用道具 举报

发表于 2022-4-10 09:38 | 显示全部楼层
夏生生 发表于 2022-4-7 16:37
特慢系列,别怪我没提醒您,单独建立一个文件夹拷贝文件测试

再来个dbx的

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

使用道具 举报

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

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

使用道具 举报

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

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

点评

你站内搜索一下dbx,好像有个块内文字替换的,可以借鉴一下  发表于 2022-4-10 16:16
回复

使用道具 举报

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

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

评分

参与人数 1明经币 +1 收起 理由
xj6019 + 1 赞一个!

查看全部评分

回复

使用道具 举报

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

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

使用道具 举报

发表于 2022-4-10 22:51 | 显示全部楼层

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

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

你左边工具栏是什么。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-3 11:40 , Processed in 0.575897 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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