[討論]看不懂的LISP
2 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
[討論]看不懂的LISP
(defun ax:RenameBlock (doc bn nn / layout i)
(vlax-for layout (vla-get-layouts doc)
(vlax-for i (vla-get-block layout)
(if (and
(= (vla-get-objectname i) "AcDbBlockReference")
(= (strcase (vla-get-name i)) (strcase bn))
)
(vla-put-name i nn)
)
)
)
)
有大大可以解釋一下
(vlax-for layout (vla-get-layouts doc)
(vlax-for i (vla-get-block layout)
(if (and
(= (vla-get-objectname i) "AcDbBlockReference")
(= (strcase (vla-get-name i)) (strcase bn))
)
(vla-put-name i nn)
)
)
)
)
有大大可以解釋一下
Alanlam- 一般會員
- 文章總數 : 24
年齡 : 36
來自 : 中國
職業 : 學生
愛好 : 足球
個性 : 害羞
使用年資 : 4
使用版本 : 2012
經驗值 : 4628
威望值 : 0
注冊日期 : 2012-07-22
回復: [討論]看不懂的LISP
ax:RenameBlock 是用來置換圖塊參考物件的.
我們都知道重新定義圖塊可以快速更換圖面中的圖塊圖形,
這個函式類似這樣的功能.
它須要三個參數 doc bn nn
doc 文件物件
bn 來源圖塊參考名稱
nn 目標圖塊參考名稱
使用這個函式時要注意其目標圖塊參考名稱必須是既存於圖面中才行.
下列是該函式的用法
;;2012-09-14 by PizG
(defun C:ReplaceBlock(/ doc ent bn nn)
(vl-load-com)
(setq doc (vla-get-ActiveDocument (vlax-get-acad-Object)))
(if (and (setq ent (entsel "\n選取來源圖塊:"))
(setq dxf (entget (car ent)))
(= (cdr (assoc 0 dxf)) "INSERT")
(setq bn (cdr (assoc 2 dxf)))
(/= (setq nn (getstring "\n目標圖塊名稱:")) "")
(tblsearch "BLOCK" nn)
)
(ax:RenameBlock doc bn nn)
)
(princ)
)
我們都知道重新定義圖塊可以快速更換圖面中的圖塊圖形,
這個函式類似這樣的功能.
它須要三個參數 doc bn nn
doc 文件物件
bn 來源圖塊參考名稱
nn 目標圖塊參考名稱
使用這個函式時要注意其目標圖塊參考名稱必須是既存於圖面中才行.
下列是該函式的用法
;;2012-09-14 by PizG
(defun C:ReplaceBlock(/ doc ent bn nn)
(vl-load-com)
(setq doc (vla-get-ActiveDocument (vlax-get-acad-Object)))
(if (and (setq ent (entsel "\n選取來源圖塊:"))
(setq dxf (entget (car ent)))
(= (cdr (assoc 0 dxf)) "INSERT")
(setq bn (cdr (assoc 2 dxf)))
(/= (setq nn (getstring "\n目標圖塊名稱:")) "")
(tblsearch "BLOCK" nn)
)
(ax:RenameBlock doc bn nn)
)
(princ)
)
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章