您可以选择一个块和一个属性,从一次拾取中检索名称和属性值,然后将其用于创建选择集。然后可以添加一个新块来擦除旧块。您提到的一个问题是,如果新块没有公共插入点,则会产生一些问题。您需要结合使用ssget和nentselp,以便获得块名和属性值。
这花了几秒钟的时间才发现,我还没有看发布的内容,但可能是一个很好的起点。
http://www.cadtutor.net/forum/showthread.php?48458-用另一个块替换选定的一个或多个块
块名称和属性值1拾取
- (defun BIGAL ( / oldsnap pt pt1 pt2 att attobj obj blkname ss1)
- (setq oldsnap (getvar 'osmaode))
- (setvar 'osmode 0)
- (setq pt (Getpoint "Pick block attribute"))
- (setq pt1 (polar pt (/ pi 4.0) 3))
- (setq pt2 (polar pt (- 0 (/ pi 4.0)) 3))
- (setq ss1 (ssget "C" pt1 pt2 (list (cons 0 "Insert"))))
- (setq obj (vlax-ename->vla-object (ssname ss1 0)))
- (setq att (nentselp pt))
- (setq attobj (vlax-ename->vla-object (car att)))
- (setq attstring (vla-get-textstring attobj))
- (setq blkname (vla-get-name obj))
- (alert (strcat "You picked block " blkname "\n\nand the attribute value was " attstring))
- (setvar 'osmode oldsnap)
- (princ)
- )
- (BIGAL)
|