AutoLISP 如何得到動態圖塊名稱
一般來說
使用
會得到圖塊名稱
但因為動態圖塊的特性,
也就是匿名圖塊
名稱大多是
提供簡單得到動態圖塊名稱的語法:
原網址-Effective Block Name
Visual LISP(從圖塊的VLA物件得到有效圖塊名稱)
例如:
Vanilla LISP(從圖塊的圖元名稱得到有效圖塊名稱)
例如:
Block Name to Effective Block Name (圖塊名轉成有效圖塊名稱)
例如:
使用
entget獲取圖元資料(cdr (assoc 2 (entget (car (entsel "\n 選取一個圖塊:")))))會得到圖塊名稱
但因為動態圖塊的特性,
也就是匿名圖塊
名稱大多是
*U開頭提供簡單得到動態圖塊名稱的語法:
(vl-load-com) (vla-get-Effectivename (vlax-ename->vla-object (car (entsel "\n 選取一個圖塊:"))))
其他方法
下面LISP源自於作者Lee Mac原網址-Effective Block Name
Visual LISP(從圖塊的VLA物件得到有效圖塊名稱)
例如:
(LM:effectivename (vlax-ename->vla-object (car(entsel "\n 選取一個圖塊:"))));; Effective Block Name (有效圖塊名稱) - Lee Mac
;; obj - [vla] VLA Block Reference object (圖塊的VLA物件)
(defun LM:effectivename ( obj )
(vlax-get-property obj
(if (vlax-property-available-p obj 'effectivename)
'effectivename
'name
)
)
)
Vanilla LISP(從圖塊的圖元名稱得到有效圖塊名稱)
例如:
(LM:al-effectivename (car(entsel "\n 選取一個圖塊:")));; Effective Block Name (有效圖塊名稱) - Lee Mac
;; ent - [ent] Block Reference entity (圖塊的圖元名稱)
(defun LM:al-effectivename ( ent / blk rep )
(if (wcmatch (setq blk (cdr (assoc 2 (entget ent)))) "`**")
(if
(and
(setq rep
(cdadr
(assoc -3
(entget
(cdr
(assoc 330
(entget
(tblobjname "block" blk)
)
)
)
'("AcDbBlockRepBTag")
)
)
)
)
(setq rep (handent (cdr (assoc 1005 rep))))
)
(setq blk (cdr (assoc 2 (entget rep))))
)
)
blk
)
Block Name to Effective Block Name (圖塊名轉成有效圖塊名稱)
例如:
(LM:name->effectivename "*U151");; Block Name -> Effective Block Name (圖塊名轉成有效圖塊名稱) - Lee Mac
;; blk - [str] Block name (圖塊名)
(defun LM:name->effectivename ( blk / rep )
(if
(and (wcmatch blk "`**")
(setq rep
(cdadr
(assoc -3
(entget
(cdr (assoc 330 (entget (tblobjname "block" blk))))
'("AcDbBlockRepBTag")
)
)
)
)
(setq rep (handent (cdr (assoc 1005 rep))))
)
(cdr (assoc 2 (entget rep)))
blk
)
)
留言
張貼留言