2012年10月3日 星期三

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)
)

沒有留言:

張貼留言