图块替换 组码取值稳定性(找到些眉目,还请大神再劳心看看)
本帖最后由 海洋闹饥荒 于 2012-5-25 11:35 编辑闲话少说,直接上源码
(defun c:kth (/)
(prompt "\n请选择要更改的块")
(setq lb (ssget '((0 . "insert"))))
(setq new_name (getstring "想要更换的块的名称:"))
(prompt "\n请选择所有要更换的块")
(setq xzj (ssget '((0 . "INSERT"))))
(ssadd (ssname lb 0) xzj)
(setq i 0 n (sslength xzj))
(while (< i n)
(setq shuju (entget (ssname xzj i)))
(setq old (assoc 2 shuju))
(if (equal (assoc 2 (entget (ssname lb 0))) old)
(progn
(setq new (cons 2 new_name))
(setq shuju (subst new old shuju))
(entmod shuju)
)
);;;;if
(setq i (+ i 1))
);;;while
)
以及:
(defun c:kth1 (/)
(prompt "\n请选择要更改的块")
(setq lb (ssget '((0 . "insert"))))
(prompt "\n请从图中选择更改后的块")
(setq new_name (assoc 2 (entget (ssname (ssget '((0 . "insert"))) 0))))
(prompt "\n请选择所有要更换的块")
(setq xzj (ssget '((0 . "INSERT"))))
(ssadd (ssname lb 0) xzj)
(setq i 0 n (sslength xzj))
(while (< i n)
(setq shuju (entget (ssname xzj i)))
(setq old (assoc 2 shuju))
(if (equal (assoc 2 (entget (ssname lb 0))) old)
(progn
(setq shuju (subst new_name old shuju))
(entmod shuju)
)
);;;;if
(setq i (+ i 1))
);;;while
)
在07运行时,kth1中的块有时不能全部替换,还请高手指教。
请接着看一楼。
昨天晚上那两个程序我又调试了下,发现图块不能完美替换的问题是由选择集引起的,kth由于比kth1少建了一次选择集,所以感觉上要好一些。
另外发现,如果建立xzj这一个选择集时,如果不包含lb指向的对象,图块可以完美替换(这句话是从kth1测试得到,想来kth也一样)。
我现在解决方案是强制选择集建立时不包含lb。
还请高手指教一二,讲解一下原因或提出其他解决思路。
页:
[1]