AutoCAD 取得任何物件的屬性成為欄位
最重要的如上圖第二張選擇 object 之後他會出現選取物件的箭頭按鈕,這時候選擇物件後就會列出所有該物件的屬性。
如例子中我選擇 .Measurement 他就會顯示尺寸標註的值。
有關單位的進階設定則跟標註設定都一樣。
本文後面,作者 Lee Mac 的程式就是拼出這段句子
%<\AcObjProp.16.2 Object(%<\_ObjId 8796088410192>%).Measurement \f "%lu2%pr1%zs8">%
在實際的工作中像這個例子的使用方式實在沒有效率,不如以 Lee Mac的程式來得簡單俐落,要改寫程式則需要知道這個基本的使用方法。
相關的還有關閉欄位的背景色系統變數 FIELDDISPLAY
更新欄位可以用儲存 QSave 或是 UPDATEFIELD
Autolisp 將標註物件的測量值連結到文字欄位的方式
一直想要的功能,將標註轉換成文字欄位(field)
還有加總數值文字物件變成欄位物件,這樣一來就不會改東忘西了。
感謝李麥克 lee mac 的範例,使用時不要重複點選標註,會加總喔。
以下改寫自李麥克的程式範例
(defun c:d2f (/ Units Prec Suff First fObj FldStr pt ss)
;; Lee Mac ~ 12.01.10
(setq dims (getvar "dimscale"))
(setq txth (getvar "textsize"))
(setq TxtH (* 2.5 dims))
(setvar "textsize" TxtH)
(vl-load-com)
(setq Units 2
Prec 1
Suff ""
)
;; Formatting
(setq doc (cond (doc)
((vla-get-ActiveDocument
(vlax-get-Acad-Object)
)
)
)
)
(setq FldStr "%<\\AcExpr \(")
(if (and (ssget '((0 . "DIMENSION")))
(setq pt (polar (polar (getpoint "\nSelect point for Field: ") 0 (* 3 (getvar "dimscale")) ) (* 1.5 pi) (getvar "dimscale") ))
)
(progn
(vlax-for obj (setq ss (vla-Get-ActiveSelectionSet doc))
(or First (setq First obj))
(setq FldStr
(strcat FldStr
"%<\\AcObjProp Object(%<\\_ObjId "
(itoa (vla-get-ObjectId Obj))
">%).Measurement >% +"
)
)
)
(vla-Delete ss)
(setq FObj
(vla-AddMText
(vla-get-ModelSpace doc)
(vlax-3D-point pt)
0.
(setq FldStr
(strcat (substr FldStr 1 (1- (strlen FldStr)))
"\) \\f \"%lu"
(itoa Units)
"%pr"
(itoa Prec)
"%zs8[,"
Suff
"]\">%"
)
)
)
)
;;; (mapcar
;;; (function
;;; (lambda (property)
;;; (and (vlax-property-available-p First property)
;;; (vlax-put-property
;;; FObj
;;; property
;;; (vlax-get-property First property)
;;; )
;;; )
;;; )
;;; )
;;;
;;; '(Layer Color StyleName Width)
;;; )
)
)
(princ)
)
0 個意見:
張貼留言
訂閱 張貼留言 [Atom]
<< 首頁