/

8 tháng 10, 2013

Chỉnh sửa mã Field trong AutoCAD

Định dạng nâng cao cho Field trong AutoCAD 2005/2006/2007.

Mã điều khiển trong Field được giới thiệu trong AutoCAD 2005 (lệnh FIELD) cho phép lựa chọn chi tiết hơn khi sử dụng giao diện.

Chỉnh sửa FieldCode một cách trực quan
 
Thật may mắn là bạn có thể nhập mã một cách thủ công (hoặc chỉ việc paste) bất cứ đâu khi EditText, hoặc khi nhập DText hay trong hộp thoại DDEDIT.


Bằng cách này, bạn có thể sử dụng một số định dạng nâng cao trong giá trị Field - dưới đây là ví dụ:


%<\AcVar osmode \f "%X">%
    - Hiển thị giá trị OSMODE dưới dạng số Hex

%<\AcDiesel test$(/,5,2) bbb \f "%tc4">%
    - Hiển thị chuỗi biểu thức DIESEL với kí tự đầu dòng viết hoa.

%<\AcDiesel $(edtime,$(getvar,tdindwg),$(+,$(*,24,$(fix,$(getvar,tdindwg))),$(edtime,$(getvar,tdindwg),HH)):MM:SS)>%
    - Hiển thị tổng thời gian (hh:mm:ss) sử dụng bản vẽ.

%<\AcObjProp Object(%<\_ObjId 2130116872>%).Length \f "%ds33">%
    - Sử dụng "!" như là chia cách phần nguyên và phần thập phân trong chiều dài đối tượng (ASCII code 33)

%<\AcObjProp Object(%<\_ObjId 2130100448>%).Area \f "%.3f">%
    - Hiển thị diện tích của đối tượng dưới dạng số thập phân có 3 chữ số sau dấu phẩy (phụ thuộc vào thiết lập LUPREC)


%<\AcObjProp Object(%<\_ObjId 2130042784>%).Area \f "%lu2%ct4%qf1%PR0 sq.ft.">%
    - Hiển thị diện tích đối tượng được làm tròn sq.ft. (làm tròn đến phần nguyên)

    %<\AcObjProp Object(%<\_ObjId 2130276472>%).Area \f "%lu2%pr2%ps[area is , sq.m]%ds44%zs8%ct8[1234]%th32">%

    - Hiển thị diện tích được làm tròn của đối tượng đến 2 chữ số sau dấu thập phân, với tiền tố "area is " và hậu tố "sq.m",  chia cách thập phân là "," và chia cách hàng nghìn bởi dấu cách, giá trị 0 sẽ bị loại bỏ, giá trị là bội của 1234 (A2007)

    %<\AcObjProp Object(%<\_ObjId 2130112520>%).CustomScale \f "1\"=%lu2%ct1%qf28161'">% - Hiển thị tỉ lệ viewport dưới dạng 1"=20'
    %<\AcDiesel $(upper,$(edtime, $(getvar, tdcreate),DD. MONTH YYYY))>%
    - Hiển thị ngày bản vẽ được khởi tạo ("16. APRIL 2004")

    %<\AcObjProp Object(%<\_ObjId 2130022304>%).Coordinates \f "%pt2">%
    - Hiển thị tọa độ Y- của đối tượng POINT được chọn

    %<\AcObjProp Object(%<\_ObjId 2130022304>%).Coordinates \f "%pt4%ct8[0.001]">%
    - Hiển thị dưới dạng [m] tọa độ [mm] Z của đối tượng được chọn (chia bởi 1000)

    - Với thuộc tính của Block, trong chế độ BEDIT mode, thêm vào các thuộc tính có sẵn (add a preset attribute a set its value to (Y-coord, A2007)):
    %<\AcObjProp.16.2 Object(?BlockRefId,1).InsertionPoint \f "%pt2%.30q0%ct8[0.001]">%

Xin chú ý là bạn có thể chèn mã %<\Ac-codes>% trong DTEXT của AutoCAD LT (2005 và cao hơn).


(vl-load-com)
(defun c:Test (/ space ss pt)
  ; Tharwat 14. 06. 2011
  (setq space (vla-get-modelspace
                (vla-get-ActiveDocument (vlax-get-acad-object))
              )
  )
  (if (and (setq ss (car (entsel "\n Select a Dimension : ")))
           (setq pt (getpoint "\n Specify Text Location :"))
      )
    (vla-addMText
      space
      (vlax-3d-point pt)
      4.
      (strcat "%<\\AcObjProp Object(%<\\_ObjId "
              (itoa (vla-get-ObjectID (vlax-ename->vla-object ss)))
              ">%).Measurement \\f \"%lu6\">%"
      )
    )
    (princ)
  )
  (princ)
)

/////////////////////
(defun C:FA  (/ acsp adoc cpt elist en ent fld lead_obj lpt mtx oid osm)
  (vl-load-com)
  (or adoc
      (setq adoc
      (vla-get-activedocument
        (vlax-get-acad-object)
        )
     )
      )
  (if (and
 (= (getvar "tilemode") 0)
 (= (getvar "cvport") 1)
 )
    (setq acsp (vla-get-paperspace adoc))
    (setq acsp (vla-get-modelspace adoc))
    )
 (setq osm (getvar "osmode"))
  (setvar "osmode" 0)

  (while
    (setq ent (entsel "\nSelect pline or hit Enter to exit"))
     (setq en (car ent))
     (if (wcmatch (cdr (assoc 0 (setq elist (entget en)))) "*POLYLINE")
       (progn
  (setq cpt (trans (cadr ent)1 0)
        lpt (trans (getpoint cpt "\nPick the ending point of leader:") 1 0)
        )

  (setq oID (vla-get-objectid (vlax-ename->vla-object en)))
  (setq fld
  (strcat
    (strcat "Area = " "%<\\AcObjProp Object(%<\\_ObjId "
     (itoa oID)
     ">%).Area \\f \"%lu2%pr2\">%"
     "\\P")
    (strcat "Perimeter = " "%<\\AcObjProp Object(%<\\_ObjId "
     (itoa oID)
     ">%).Length \\f \"%lu2%pr2\">%"))
        )
  (setq mtx (vlax-invoke
       acsp 'AddMText lpt 0.0 fld)
        )
  (vlax-put mtx
     'AttachmentPoint
     (cond ((> (car cpt) (car lpt))
     6
     )
    ((< (car cpt) (car lpt))
     4
     )
    (T 4)
    )
     )
  (vlax-put mtx 'Height (getvar "textsize"))
  (setq lead_obj (vlax-invoke
     acsp
     'Addleader
     (apply 'append (list cpt lpt))
     mtx
     acLineWithArrow
     )
        )
  (vlax-put lead_obj 'VerticalTextPosition 0);1
  )
       )
     )
  (setvar "osmode" osm)
  (princ)
  )
(princ "\n Start command with FA ...")
(princ)
 


///////////////////////////
(vla-fieldcode (vlax-ename->vla-object (car (entsel))))

(itoa (vla-get-objectid (vlax-ename->vla-object (car (entsel)))))