wzg356 发表于 2023-3-8 16:36:32

以包围框中心为基点,用1个图元替换所选图元

本帖最后由 wzg356 于 2024-2-23 16:10 编辑

回应刚看到的一个帖子发的

可以先选好要替换的多个目标在执行命令
时候大批量更换,比如换图签名字,日期,圆 方框 块替换等之类的
配合快速选择操作更方便http://bbs.mjtd.com/thread-183273-1-1.html
文字最小包围盒函数txtbox在http://bbs.mjtd.com/thread-183274-1-1.html

(defun c:rss nil (c:ReFromEn))
(defun c:ReFromEn( / getcen ss ps e p)
      (defun getcen (e / p1 p3 ps p)
                (if(wcmatch(cdr(assoc 0(entget e)))"MTEXT")
                        (setq ps(txtbox e) ps(list(car ps)(caddr ps)));引用txtbox函数取得实际最小包围盒
                        (progn
                              (vla-getboundingbox (vlax-ename->vla-object e) 'p1 'p3)
                              (setq ps(mapcar 'vlax-safearray->list (list p1 p3)))
                        )
                )
                (polar(car ps)(apply 'angle ps)(* 0.5(apply 'distance ps)))
      );获图元中心
      (princ "\n 以包围框中心为基点,用1个图元替换所选图元,作者wzg356")
      (if      (and(or (setq ss(ssget "i" ))(setq ss(ssget)))
                (sssetfirst nil ss)
                        (setq e(car(entsel "\n 选择要换成的新对象:")))
                )
                (progn
                        (repeat(setq ps nil n (sslength ss))
                              (setq ps(cons(getcen(ssname ss(setq n(1- n)))) ps))
                        )
                        (setq p(getcen e))
                        (setvar "cmdecho" 0)
                        (command "_undo" "be")
                        (command "copy" e "" "m" "non" p(foreach p ps(command "non" p)))
                        (command "_erase" ss "")                        
                        (command "_undo" "_e")
                        (setvar "cmdecho" 1)
                )
      )
      (princ )               
)

tigcat 发表于 2023-12-13 18:04:51

wzg356 发表于 2023-12-13 12:23
vl-cmdf换成command 看看

帖子已改

(command "copy" e "" "m" "non" p(foreach p ss(command "non" p))""),我在最后一个括号前加了一个"",现在运行正常了。大佬这个程序挺实用,真是精品!

tigcat 发表于 2023-12-13 16:14:55

本帖最后由 tigcat 于 2023-12-13 16:54 编辑

wzg356 发表于 2023-12-13 12:28
发生错误的,把vl-cmdf换成command 看看
另外复制命令command copy对照具体cad版本看一下步骤
感谢大佬抽空回复,回去试一下。今天新更新的地方有个函数有误?txtbox是不是textbox?

wzg356 发表于 2024-2-23 16:08:09

edsion24 发表于 2024-1-31 13:06
(setq ps(cons(getcen(ssname ss(setq n(1- n)))) ps))这里的GETCEN 是写错了 还是个函数呢?
发生错 ...

ss0笔误   ss0 改为ss即可

bai2000 发表于 2023-3-11 21:53:35

希望老大能做个适用的成熟的例子

wzg356 发表于 2023-3-11 23:16:28

理解标题意图,任意图元互换,比如你发现图签有个名字写错了,你把一个改正,然后用这个命令一起把其它的换掉,按命令行提示操作

水洗可口可乐 发表于 2023-6-29 17:35:43

本帖最后由 水洗可口可乐 于 2023-6-29 17:37 编辑


错误
命令“NON”。按 F1 查看帮助。
应用程序错误: 命令输入时发送的类型无效

muai2010 发表于 2023-11-7 13:37:38

选择要换成的新对象:未知命令“NON”。按 F1 查看帮助。
应用程序错误: 命令输入时发送的类型无效

tigcat 发表于 2023-12-13 10:00:14

选择对象:
选择要换成的新对象:*无效*
应用程序错误: irfcld

CAD 2014使用时可以替换对象,但是没有删除原对象,弹出的提示如上,不知道大佬有时间修复不?

wzg356 发表于 2023-12-13 12:23:07

本帖最后由 wzg356 于 2023-12-13 12:25 编辑

tigcat 发表于 2023-12-13 10:00
选择对象:
选择要换成的新对象:*无效*
应用程序错误: irfcld

vl-cmdf换成command 看看

帖子已改

wzg356 发表于 2023-12-13 12:28:37

发生错误的,把vl-cmdf换成command 看看
另外复制命令command copy对照具体cad版本看一下步骤
页: [1] 2
查看完整版本: 以包围框中心为基点,用1个图元替换所选图元