Chuyển đến nội dung
Diễn đàn CADViet
Han Tinh

LINK ĐỐI TƯỢNG CHO DIM VÀ TEXT

Các bài được khuyến nghị

42 phút trước, Doan Van Ha đã nói:

Circle có len mà bạn, vậy 5 là 3 rồi (?)

@Doan Van HaCircle, arc, ellipse, spline không có thuộc tính length đâu.

Circle chỉ có thuộc tính CIRCUMFERENCE

Arc chỉ có thuộc tính ArcLength

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Field của Cad cũng vui lắm. Nhiều cái không có cũng có thể có.

ARC có ArcLength thôi. Nhưng Length vẫn chạy tốt.

MText thì ngoài TextString thì nếu đánh Text không thì nó sẽ cho kết quả là Text không format. Mình hay sài cách này để remove format của Mtext.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
20 phút trước, ngokiet đã nói:

...

MText thì ngoài TextString thì nếu đánh Text không thì nó sẽ cho kết quả là Text không format. Mình hay sài cách này để remove format của Mtext.

Bước này bác thực hiện trên field hay ở đâu vậy

E thử field lẫn vla đều không có 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
1 giờ trước, Doan Nguyen Van đã nói:

Bước này bác thực hiện trên field hay ở đâu vậy

E thử field lẫn vla đều không có 

(defun c:tt(/ en1 p0)
  (if (and (setq en1 (car (entsel "Chon text:")))
	   (setq p0 (getpoint "chon diem text:")))
    (entmakex (list '(0 . "TEXT") '(100 . "AcDbText") '(40 . 2.0)
		   (cons 10 p0) (cons 1 (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa(vla-get-objectid (vlax-ename->vla-object en1))) ">%).Text>%")))))
  (princ))

Thử code trên. Xong regen lại.

Vla-put-TextString vẫn được nhe.

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 7/4/2020 tại 07:23, gia_bach đã nói:

@thiephiểu sai ý mình rồi!

vẫn là ID của đối tương đó nhưng việc lấy thuộc tính TextOverwrite của 1 dim kích thước thật hoặc lấy thuộc tính Measurement của 1 dim bị edit sẽ dẫn đến kết quả không chính xác.

 

 

image.png.4794886e527e3730f51c30ed97263a6c.png

 

@thiepbạn có thể chỉnh sửa tí để lisp ổn định hơn đi bạn, như trường hợp này sẽ dẫn đến sai sót trong quá trình làm bản vẽ

  • Vote giảm 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
7 giờ trước, Kieu Tan đã nói:

@thiepbạn có thể chỉnh sửa tí để lisp ổn định hơn đi bạn, như trường hợp này sẽ dẫn đến sai sót trong quá trình làm bản vẽ

Tại bảng Properties, khi người dùng thay đổi thuộc tính từ TextOverwrite sang Measurement hoặc ngược lại của textDim thì biểu thức field đã gán cho text có sẵn sẽ không update được vì nó chỉ update giá trị của thuộc tính đã định sẵn trong biểu thức field, không update việc thay đổi thuộc tính.

Lisp sau Thiep đã update, cho trường này. Tuy nhiên, sau khi thay đổi thuộc tính từ TextOverwrite sang Measurement hoặc ngược lại, các bạn phải đánh lệnh RE1 thay cho lệnh RE để tái tạo tạo màn hình. Sau đó, trên màn hình các bạn chỉnh sửa giá trị textDim (TextOverwrite)  hoặc co giản dim (Measurement) thì vẫn dùng lệnh RE để update giá trị thuộc tính thay đổi.

Chú ý: Lệnh Re1, chỉ hoạt động khi bản vẽ dùng lệnh fdt1 của lisp, khi đó giá trị biến trong lisp chưa bị mất đi. Còn khi người dùng tắt bản vẽ và mở lại, lệnh Re1 không thực hiện được nữa, khi đó phải tải lisp dưới đây và dùng lệnh fdt1 trở lại.

 

;;; LISP  FIELD SUM DIMENSIONS, TEXTs, MTEXTs, LENGTHs, AREAs, CIRCUMFERENCEs TO A TEXT
;;;          by TrânThiêp 04/2020
;;;		09188411230
;;;=======================================================
;;; command         fdt1 : field sum DIMENSIONS                        
;;; command         fdt2 : field sum TEXTs, MTEXTs                     
;;; command         fdt3 : field sum LENGTHs                           
;;; command         fdt4 : field sum AREAs                             
;;; command         fdt5 : field sum CIRCUMFERENCEs
;;; command         re1 :  update field sum DIMENSIONs when change properti TextOverride dim to Measurement dim or reverse 
;;;                                                       
(defun DXF (code en) (cdr (assoc code (entget en))))
(vl-load-com)
(defun *error* (msg)
        (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
            (princ (strcat "\n** Error: " msg " **"))
        )
        (acet-sysvar-restore)
        (command "undo" "en")
        (princ)
    )
;;;===========================================================================1: sum DIMENSIONs =========
(defun c:fdt1 (/ ss ent_T)
    (command "undo" "be")
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status "Select DIMENSIONs FOR GET SUM" "Prompt")
    (setq ss (ssget '((0 . "DIMENSION"))))
    (acet-ui-status)
    (while (OR (NOT (setq ent_T
                             (car (entsel
                                      "\nPick a Text object for set sum dimensions"
                                  )
                             )
                    )
               )
               (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
           )
        (prompt "\nPick not right TEXT object, please pick again")
    )
    (setq Obj_Text_thiep (vlax-ename->vla-object ent_T))
    (if (null (setq prec_thiep
                       (getint (acet-str-format
                                   "\nEnter number of decimal places: <%1> "
                                   (itoa (getvar "useri1"))
                               )
                       )
              )
        )
        (setq prec_thiep (getvar "useri1"))
    )
    (setvar "useri1" prec_thiep)
    (if ss
        (progn (mapcar '(lambda (x)
                            (setq Lobj_dim_thiep (CONS (vlax-ename->vla-object x)
                                                       Lobj_dim_thiep
                                                 )
                            )
                        )
                       (acet-ss-to-list ss)
               )
               (setq ID_Dim_lst_thiep (mapcar 'vla-get-objectid Lobj_dim_thiep))
               (Setq field_lst
                        (mapcar
                            '(lambda (ob id)
                                 (if (distof (vla-get-TextOverride ob))
                                     (acet-str-format
                                         "%<\\AcObjProp Object(%<\\_ObjId %1>%).%2>%+"
                                         (itoa id)
                                         "TextOverride"
                                     )
                                     (acet-str-format
                                         "%<\\AcObjProp Object(%<\\_ObjId %1>%).%3 \\f \"%lu2%pr%2\">%+"
                                         (itoa id)
                                         (itoa prec_thiep)
                                         "Measurement"
                                     )
                                 )
                             )
                            Lobj_dim_thiep
                            ID_Dim_lst_thiep
                        )
               )
               (setq strThiep (acet-str-format
                                  "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                                  (vl-string-right-trim "+"
                                                        (apply 'strcat field_lst)
                                  )
                                  (itoa prec_thiep)
                              )
               )
               (vla-put-TextString Obj_Text_thiep strThiep)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (PRINC str)
    (princ "\nOK")
)
;;;===========================================================================2: sum TEXTs, MTEXTs NUMBER=========
(defun c:fdt2 (/ ss ent_T Obj_Text str prec Lobj_text ID_text_lst field_lst)
    (command "undo" "be")
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status "Select:  TEXT, MTEXT NUMBER FOR GET SUM" "Prompt")
    (setq ss (ssget '((0 . "*TEXT"))))
    (acet-ui-status)
    (if ss
        (progn (while (OR (NOT (setq ent_T
                                        (car
                                            (entsel
                                                "\nPick a Text object for set sum text number"
                                            )
                                        )
                               )
                          )
                          (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
                      )
                   (prompt "\nPick not right TEXT object, please pick again")
               )
               (setq Obj_Text (vlax-ename->vla-object ent_T))
               (if (null (setq
                             prec (getint
                                      (acet-str-format
                                          "\nEnter number of decimal places: <%1> "
                                          (itoa (getvar "useri2"))
                                      )
                                  )
                         )
                   )
                   (setq prec (getvar "useri2"))
               )
               (setvar "useri2" prec)
               (mapcar '(lambda (x)
                            (if (Numberp (atof (dxf 1 x)))
                                (setq Lobj_text (CONS (vlax-ename->vla-object x)
                                                      Lobj_text
                                                )
                                )
                            )
                        )
                       (acet-ss-to-list ss)
               )
               (setq ID_text_lst (mapcar 'vla-get-objectid Lobj_text))
               (setq field_lst
                        (mapcar
                            '(lambda (x)
                                 (acet-str-format
                                     "%<\\AcObjProp Object(%<\\_ObjId %1>%).TextString>% +"
                                     (itoa x)
                                 )
                             )
                            ID_text_lst
                        )
               )
               (setq str (acet-str-format
                             "%<\\AcExpr (%1)>%"
                             (vl-string-right-trim "+" (apply 'strcat field_lst))
                         )
               )
               (dos_clipboard str)
               (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (princ "\nOK")
    (PRINC)
)
;;;===========================================================================3: LENGTHs=========
(defun c:fdt3 (/ ss ent_T Obj_Text str prec Lobj_leng ID_leng_lst field_lst)
    (command "undo" "be")
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status "Select:  LINE, POLYLINE, for GET SUM LENGTH" "Prompt")
    (setq ss (ssget '((0 . "LINE,*POLYLINE"))))
    (acet-ui-status)
    (if ss
        (progn
            (while (OR (NOT (setq ent_T
                                     (car
                                         (entsel
                                             "\nPick a Text object for set sum length value"
                                         )
                                     )
                            )
                       )
                       (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
                   )
                (prompt "\nPick not right TEXT object, please pick again")
            )
            (setq Obj_Text (vlax-ename->vla-object ent_T))
            (if (null (setq
                          prec (getint
                                   (acet-str-format
                                       "\nEnter number of decimal places: <%1> "
                                       (itoa (getvar "useri3"))
                                   )
                               )
                      )
                )
                (setq prec (getvar "useri3"))
            )
            (setvar "useri3" prec)
            (mapcar
                '(lambda (x)
                     (if (vlax-property-available-p (vlax-ename->vla-object x)
                                                    'length
                         )
                         (setq Lobj_leng (CONS (vlax-ename->vla-object x)
                                               Lobj_leng
                                         )
                         )
                     )
                 )
                (acet-ss-to-list ss)
            )
            (setq ID_leng_lst (mapcar 'vla-get-objectid Lobj_leng))
            (setq field_lst
                     (mapcar
                         '(lambda (id)
                              (acet-str-format
                                  "%<\\AcObjProp Object(%<\\_ObjId %1>%).Length \\f \"%lu2%pr%2\">%+"
                                  (itoa id)
                                  (itoa prec)
                              )
                          )
                         ID_leng_lst
                     )
            )
            (setq str (acet-str-format
                          "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                          (itoa prec)
                      )
            )
            (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (princ "\nOK")
    (PRINC)
)
;;;===========================================================================4: AREAs=========
(defun c:fdt4 (/ ss ent_T Obj_Text Lobj_area ID_area_lst str prec field_lst)
    (command "undo" "be")
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status
        "Select: POLYLINE, HATCH, ARC, CIRCLE, REGION, ELLIPSE for GET SUM AREA"
        "Prompt"
    )
    (setq ss (ssget '((0 . "*POLYLINE,HATCH,ARC,CIRCLE,ELLIPSE,REGION"))))
    (acet-ui-status)
    (if ss
        (progn
            (mapcar
                '(lambda (x)
                     (if (vlax-property-available-p (vlax-ename->vla-object x)
                                                    'area
                         )
                         (setq Lobj_area (CONS (vlax-ename->vla-object x)
                                               Lobj_area
                                         )
                         )
                     )
                 )
                (acet-ss-to-list ss)
            )
            (if (null (setq
                          prec (getint
                                   (acet-str-format
                                       "\nEnter number of decimal places: <%1> "
                                       (itoa (getvar "useri4"))
                                   )
                               )
                      )
                )
                (setq prec (getvar "useri4"))
            )
            (setvar "useri4" prec)
            (setq ID_area_lst (mapcar 'vla-get-objectid Lobj_area))
            (setq field_lst
                     (mapcar
                         '(lambda (id)
                              (acet-str-format
                                  "%<\\AcObjProp Object(%<\\_ObjId %1>%).Area \\f \"%lu2%pr%2\">%+"
                                  (itoa id)
                                  (itoa prec)
                              )
                          )
                         ID_area_lst
                     )
            )
            (setq str (acet-str-format
                          "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                          (itoa prec)
                      )
            )
            (while (OR (NOT (setq ent_T
                                     (car
                                         (entsel
                                             "\nPick a Text object for set sum area value"
                                         )
                                     )
                            )
                       )
                       (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
                   )
                (prompt "\nPick not right TEXT object, please pick again")
            )
            (setq Obj_Text (vlax-ename->vla-object ent_T))
            (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (princ "\nOK")
    (PRINC)
)
;;;==================================================================    5: CIRCUMFERENCEs: CHU VI VÒNG TRÒN
(defun c:fdt5 (/ ss ent_T Obj_Text Lobj_CIR ID_CIR_lst str prec field_lst)
    (command "undo" "be")
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status "Select: CIRCLE for GET SUM CIRCUMFERENCE" "Prompt")
    (setq ss (ssget '((0 . "CIRCLE"))))
    (acet-ui-status)
    (while (OR (NOT (setq ent_T
                             (car
                                 (entsel
                                     "\nPick a Text object for set sum circumference value"
                                 )
                             )
                    )
               )
               (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
           )
        (prompt "\nPick not right TEXT object, please pick again")
    )
    (setq Obj_Text (vlax-ename->vla-object ent_T))
    (if ss
        (progn
            (mapcar
                '(lambda (x)
                     (setq Lobj_CIR (CONS (vlax-ename->vla-object x) Lobj_CIR))
                 )
                (acet-ss-to-list ss)
            )
            (if (null (setq
                          prec (getint
                                   (acet-str-format
                                       "\nEnter number of decimal places: <%1> "
                                       (itoa (getvar "useri5"))
                                   )
                               )
                      )
                )
                (setq prec (getvar "useri5"))
            )
            (setvar "useri5" prec)
            (setq ID_CIR_lst (mapcar 'vla-get-objectid Lobj_CIR))
            (setq field_lst
                     (mapcar
                         '(lambda (id)
                              (acet-str-format
                                  "%<\\AcObjProp Object(%<\\_ObjId %1>%).Circumference \\f \"%lu2%pr%2\">%+"
                                  (itoa id)
                                  (itoa prec)
                              )
                          )
                         ID_CIR_lst
                     )
            )
            (setq str (acet-str-format
                          "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                          (itoa prec)
                      )
            )
            (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (princ "\nOK")
    (PRINC)
)
;;;===================update field sum DIMENSIONs when change properti TextOverride dim to Measurement dim or reverse =====
(defun c:re1 (/)
    (command "undo" "be")
    (setq ID_Dim_lst_thiep (mapcar 'vla-get-objectid Lobj_dim_thiep))
    (Setq field_lst
             (mapcar
                 '(lambda (ob id)
                      (if (distof (vla-get-TextOverride ob))
                          (acet-str-format
                              "%<\\AcObjProp Object(%<\\_ObjId %1>%).%2>%+"
                              (itoa id)
                              "TextOverride"
                          )
                          (acet-str-format
                              "%<\\AcObjProp Object(%<\\_ObjId %1>%).%3 \\f \"%lu2%pr%2\">%+"
                              (itoa id)
                              (itoa prec_thiep)
                              "Measurement"
                          )
                      )
                  )
                 Lobj_dim_thiep
                 ID_Dim_lst_thiep
             )
    )
    (setq strThiep (acet-str-format
                       "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                       (vl-string-right-trim "+" (apply 'strcat field_lst))
                       (itoa prec_thiep)
                   )
    )
    (vla-put-TextString Obj_Text_thiep strThiep)
    (command "undo" "en")
    (princ "\nOK")
)

 

field-sumOBJ2TEXT.LSP

Chỉnh sửa theo thiep
thêm ý
  • Like 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
8 giờ trước, thiep đã nói:

Tại bảng Properties, khi người dùng thay đổi thuộc tính từ TextOverwrite sang Measurement hoặc ngược lại của textDim thì biểu thức field đã gán cho text có sẵn sẽ không update được vì nó chỉ update giá trị của thuộc tính đã định sẵn trong biểu thức field, không update việc thay đổi thuộc tính.

Lisp sau Thiep đã update, cho trường này. Tuy nhiên, sau khi thay đổi thuộc tính từ TextOverwrite sang Measurement hoặc ngược lại, các bạn phải đánh lệnh RE1 thay cho lệnh RE để tái tạo tạo màn hình. Sau đó, trên màn hình các bạn chỉnh sửa giá trị textDim (TextOverwrite)  hoặc co giản dim (Measurement) thì vẫn dùng lệnh RE để update giá trị thuộc tính thay đổi.

Chú ý: Lệnh Re1, chỉ hoạt động khi bản vẽ dùng lệnh fdt1 của lisp, khi đó giá trị biến trong lisp chưa bị mất đi. Còn khi người dùng tắt bản vẽ và mở lại, lệnh Re1 không thực hiện được nữa, khi đó phải tải lisp dưới đây và dùng lệnh fdt1 trở lại.

 

  • fdt1_fdt2_fdt3_fdt4_fdt5_re1.lsp
    lisp help
  •  

;;; LISP  FIELD SUM DIMENSIONS, TEXTs, MTEXTs, LENGTHs, AREAs, CIRCUMFERENCEs TO A TEXT
;;          by TrânThiêp 04/2020
;;		09188411230
;;=======================================================
;; command         fdt1 : field sum DIMENSIONS                        
;; command         fdt2 : field sum TEXTs, MTEXTs                     
;; command         fdt3 : field sum LENGTHs                           
;; command         fdt4 : field sum AREAs                             
;; command         fdt5 : field sum CIRCUMFERENCEs
;; command         re1 :  update field sum DIMENSIONs when change properti TextOverride dim to Measurement dim or reverse 
;;                                                       
(defun DXF (code en) (cdr (assoc code (entget en))))
(vl-load-com)
(defun *error* (msg)
        (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
            (princ (strcat "\n** Error: " msg " **"))
        )
        (acet-sysvar-restore)
        (command "undo" "en")
        (princ)
    )
;;;===========================================================================1: sum DIMENSIONs =========
(defun c:fdt1 (/ ss ent_T)
    (command "undo" "be")
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status "Select DIMENSIONs FOR GET SUM" "Prompt")
    (setq ss (ssget '((0 . "DIMENSION"))))
    (acet-ui-status)
    (while (OR (NOT (setq ent_T
                             (car (entsel
                                      "\nPick a Text object for set sum dimensions"
                                  )
                             )
                    )
               )
               (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
           )
        (prompt "\nPick not right TEXT object, please pick again")
    )
    (setq Obj_Text_thiep (vlax-ename->vla-object ent_T))
    (if (null (setq prec_thiep
                       (getint (acet-str-format
                                   "\nEnter number of decimal places: <%1> "
                                   (itoa (getvar "useri1"))
                               )
                       )
              )
        )
        (setq prec_thiep (getvar "useri1"))
    )
    (setvar "useri1" prec_thiep)
    (if ss
        (progn (mapcar '(lambda (x)
                            (setq Lobj_dim_thiep (CONS (vlax-ename->vla-object x)
                                                       Lobj_dim_thiep
                                                 )
                            )
                        )
                       (acet-ss-to-list ss)
               )
               (setq ID_Dim_lst_thiep (mapcar 'vla-get-objectid Lobj_dim_thiep))
               (Setq field_lst
                        (mapcar
                            '(lambda (ob id)
                                 (if (distof (vla-get-TextOverride ob))
                                     (acet-str-format
                                         "%<\\AcObjProp Object(%<\\_ObjId %1>%).%2>%+"
                                         (itoa id)
                                         "TextOverride"
                                     )
                                     (acet-str-format
                                         "%<\\AcObjProp Object(%<\\_ObjId %1>%).%3 \\f \"%lu2%pr%2\">%+"
                                         (itoa id)
                                         (itoa prec_thiep)
                                         "Measurement"
                                     )
                                 )
                             )
                            Lobj_dim_thiep
                            ID_Dim_lst_thiep
                        )
               )
               (setq strThiep (acet-str-format
                                  "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                                  (vl-string-right-trim "+"
                                                        (apply 'strcat field_lst)
                                  )
                                  (itoa prec_thiep)
                              )
               )
               (vla-put-TextString Obj_Text_thiep strThiep)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (PRINC str)
    (princ "\nOK")
)
;;;===========================================================================2: sum TEXTs, MTEXTs NUMBER=========
(defun c:fdt2 (/ ss ent_T Obj_Text str prec Lobj_text ID_text_lst field_lst)
    (command "undo" "be")
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status "Select:  TEXT, MTEXT NUMBER FOR GET SUM" "Prompt")
    (setq ss (ssget '((0 . "*TEXT"))))
    (acet-ui-status)
    (if ss
        (progn (while (OR (NOT (setq ent_T
                                        (car
                                            (entsel
                                                "\nPick a Text object for set sum text number"
                                            )
                                        )
                               )
                          )
                          (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
                      )
                   (prompt "\nPick not right TEXT object, please pick again")
               )
               (setq Obj_Text (vlax-ename->vla-object ent_T))
               (if (null (setq
                             prec (getint
                                      (acet-str-format
                                          "\nEnter number of decimal places: <%1> "
                                          (itoa (getvar "useri2"))
                                      )
                                  )
                         )
                   )
                   (setq prec (getvar "useri2"))
               )
               (setvar "useri2" prec)
               (mapcar '(lambda (x)
                            (if (Numberp (atof (dxf 1 x)))
                                (setq Lobj_text (CONS (vlax-ename->vla-object x)
                                                      Lobj_text
                                                )
                                )
                            )
                        )
                       (acet-ss-to-list ss)
               )
               (setq ID_text_lst (mapcar 'vla-get-objectid Lobj_text))
               (setq field_lst
                        (mapcar
                            '(lambda (x)
                                 (acet-str-format
                                     "%<\\AcObjProp Object(%<\\_ObjId %1>%).TextString>% +"
                                     (itoa x)
                                 )
                             )
                            ID_text_lst
                        )
               )
               (setq str (acet-str-format
                             "%<\\AcExpr (%1)>%"
                             (vl-string-right-trim "+" (apply 'strcat field_lst))
                         )
               )
               (dos_clipboard str)
               (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (princ "\nOK")
    (PRINC)
)
;;;===========================================================================3: LENGTHs=========
(defun c:fdt3 (/ ss ent_T Obj_Text str prec Lobj_leng ID_leng_lst field_lst)
    (command "undo" "be")
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status "Select:  LINE, POLYLINE, for GET SUM LENGTH" "Prompt")
    (setq ss (ssget '((0 . "LINE,*POLYLINE"))))
    (acet-ui-status)
    (if ss
        (progn
            (while (OR (NOT (setq ent_T
                                     (car
                                         (entsel
                                             "\nPick a Text object for set sum length value"
                                         )
                                     )
                            )
                       )
                       (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
                   )
                (prompt "\nPick not right TEXT object, please pick again")
            )
            (setq Obj_Text (vlax-ename->vla-object ent_T))
            (if (null (setq
                          prec (getint
                                   (acet-str-format
                                       "\nEnter number of decimal places: <%1> "
                                       (itoa (getvar "useri3"))
                                   )
                               )
                      )
                )
                (setq prec (getvar "useri3"))
            )
            (setvar "useri3" prec)
            (mapcar
                '(lambda (x)
                     (if (vlax-property-available-p (vlax-ename->vla-object x)
                                                    'length
                         )
                         (setq Lobj_leng (CONS (vlax-ename->vla-object x)
                                               Lobj_leng
                                         )
                         )
                     )
                 )
                (acet-ss-to-list ss)
            )
            (setq ID_leng_lst (mapcar 'vla-get-objectid Lobj_leng))
            (setq field_lst
                     (mapcar
                         '(lambda (id)
                              (acet-str-format
                                  "%<\\AcObjProp Object(%<\\_ObjId %1>%).Length \\f \"%lu2%pr%2\">%+"
                                  (itoa id)
                                  (itoa prec)
                              )
                          )
                         ID_leng_lst
                     )
            )
            (setq str (acet-str-format
                          "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                          (itoa prec)
                      )
            )
            (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (princ "\nOK")
    (PRINC)
)
;;;===========================================================================4: AREAs=========
(defun c:fdt4 (/ ss ent_T Obj_Text Lobj_area ID_area_lst str prec field_lst)
    (command "undo" "be")
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status
        "Select: POLYLINE, HATCH, ARC, CIRCLE, REGION, ELLIPSE for GET SUM AREA"
        "Prompt"
    )
    (setq ss (ssget '((0 . "*POLYLINE,HATCH,ARC,CIRCLE,ELLIPSE,REGION"))))
    (acet-ui-status)
    (if ss
        (progn
            (mapcar
                '(lambda (x)
                     (if (vlax-property-available-p (vlax-ename->vla-object x)
                                                    'area
                         )
                         (setq Lobj_area (CONS (vlax-ename->vla-object x)
                                               Lobj_area
                                         )
                         )
                     )
                 )
                (acet-ss-to-list ss)
            )
            (if (null (setq
                          prec (getint
                                   (acet-str-format
                                       "\nEnter number of decimal places: <%1> "
                                       (itoa (getvar "useri4"))
                                   )
                               )
                      )
                )
                (setq prec (getvar "useri4"))
            )
            (setvar "useri4" prec)
            (setq ID_area_lst (mapcar 'vla-get-objectid Lobj_area))
            (setq field_lst
                     (mapcar
                         '(lambda (id)
                              (acet-str-format
                                  "%<\\AcObjProp Object(%<\\_ObjId %1>%).Area \\f \"%lu2%pr%2\">%+"
                                  (itoa id)
                                  (itoa prec)
                              )
                          )
                         ID_area_lst
                     )
            )
            (setq str (acet-str-format
                          "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                          (itoa prec)
                      )
            )
            (while (OR (NOT (setq ent_T
                                     (car
                                         (entsel
                                             "\nPick a Text object for set sum area value"
                                         )
                                     )
                            )
                       )
                       (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
                   )
                (prompt "\nPick not right TEXT object, please pick again")
            )
            (setq Obj_Text (vlax-ename->vla-object ent_T))
            (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (princ "\nOK")
    (PRINC)
)
;;;==================================================================    5: CIRCUMFERENCEs: CHU VI VÒNG TRÒN
(defun c:fdt5 (/ ss ent_T Obj_Text Lobj_CIR ID_CIR_lst str prec field_lst)
    (command "undo" "be")
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status "Select: CIRCLE for GET SUM CIRCUMFERENCE" "Prompt")
    (setq ss (ssget '((0 . "CIRCLE"))))
    (acet-ui-status)
    (while (OR (NOT (setq ent_T
                             (car
                                 (entsel
                                     "\nPick a Text object for set sum circumference value"
                                 )
                             )
                    )
               )
               (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
           )
        (prompt "\nPick not right TEXT object, please pick again")
    )
    (setq Obj_Text (vlax-ename->vla-object ent_T))
    (if ss
        (progn
            (mapcar
                '(lambda (x)
                     (setq Lobj_CIR (CONS (vlax-ename->vla-object x) Lobj_CIR))
                 )
                (acet-ss-to-list ss)
            )
            (if (null (setq
                          prec (getint
                                   (acet-str-format
                                       "\nEnter number of decimal places: <%1> "
                                       (itoa (getvar "useri5"))
                                   )
                               )
                      )
                )
                (setq prec (getvar "useri5"))
            )
            (setvar "useri5" prec)
            (setq ID_CIR_lst (mapcar 'vla-get-objectid Lobj_CIR))
            (setq field_lst
                     (mapcar
                         '(lambda (id)
                              (acet-str-format
                                  "%<\\AcObjProp Object(%<\\_ObjId %1>%).Circumference \\f \"%lu2%pr%2\">%+"
                                  (itoa id)
                                  (itoa prec)
                              )
                          )
                         ID_CIR_lst
                     )
            )
            (setq str (acet-str-format
                          "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                          (itoa prec)
                      )
            )
            (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (princ "\nOK")
    (PRINC)
)
;;;===================update field sum DIMENSIONs when change properti TextOverride dim to Measurement dim or reverse =====
(defun c:re1 (/)
    (command "undo" "be")
    (setq ID_Dim_lst_thiep (mapcar 'vla-get-objectid Lobj_dim_thiep))
    (Setq field_lst
             (mapcar
                 '(lambda (ob id)
                      (if (distof (vla-get-TextOverride ob))
                          (acet-str-format
                              "%<\\AcObjProp Object(%<\\_ObjId %1>%).%2>%+"
                              (itoa id)
                              "TextOverride"
                          )
                          (acet-str-format
                              "%<\\AcObjProp Object(%<\\_ObjId %1>%).%3 \\f \"%lu2%pr%2\">%+"
                              (itoa id)
                              (itoa prec_thiep)
                              "Measurement"
                          )
                      )
                  )
                 Lobj_dim_thiep
                 ID_Dim_lst_thiep
             )
    )
    (setq strThiep (acet-str-format
                       "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                       (vl-string-right-trim "+" (apply 'strcat field_lst))
                       (itoa prec_thiep)
                   )
    )
    (vla-put-TextString Obj_Text_thiep strThiep)
    (command "undo" "en")
    (princ "\nOK")
)

 

field-sumOBJ2TEXT.LSP

Sau khi dùng thử mình thấy nó chạy lung tung hết vậy? Dùng lần đầu thì thấy ok, nhưng các lần sau thì không đúng, đặt biệt là các dim đúng tỉ lệ (chưa edit)

  • Vote tăng 1
  • Vote giảm 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
12 giờ trước, thiep đã nói:

Tại bảng Properties, khi người dùng thay đổi thuộc tính từ TextOverwrite sang Measurement hoặc ngược lại của textDim thì biểu thức field đã gán cho text có sẵn sẽ không update được vì nó chỉ update giá trị của thuộc tính đã định sẵn trong biểu thức field, không update việc thay đổi thuộc

Bác @thiep nhiệt tình quá, thấy bác làm đoạn lisp đoạn lisp trên cũng khá tốn công, Like bác ^^

Sao bác ko quy định chung cho cách sử dụng lisp, chứ sao mà xử lý hết tình huống của cad được, TextOverwrite và Measurement là 2 giá trị độc lập nhau cơ mà

Quy định luôn là lisp chỉ dùng cho TextOverwrite hoặc Measurement, nếu 1 trong 2 giá trị này thay đổi cho nhau thì người dùng phải dùng lại lisp để lấy lại thông tin, như vậy mọi người đều hiểu và sử dụng dúng chức năng của lisp

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
44 phút trước, Kieu Tan đã nói:

Sau khi dùng thử mình thấy nó chạy lung tung hết vậy? Dùng lần đầu thì thấy ok, nhưng các lần sau thì không đúng, đặt biệt là các dim đúng tỉ lệ (chưa edit)

Sao vậy bạn, mình thấy nó chạy tốt mà, nên nhớ là lệnh RE1 dùng khi thay đổi thuộc tính từ TextOverwrite sang Measurement hoặc ngược lại, còn các dim chưa edit khi kéo hay co giản, thì dùng lệnh RE. Thường thì những người dùng cad, vẽ độ chính xác cao, thì không cần phải chỉnh sửa textDim, còn chưa nói ít khi vẽ phải chỉnh đi chỉnh lại từ TextOverwrite sang Measurement hoặc ngược lại. Hy vọng là sau khi gán field sum Dim cho đối tượng Text xong, có chỉnh sửa gì thì chỉnh sửa TextOverwrite sang Measurement hoặc ngược lại chỉ trong thời gian vẽ, sau khi đóng bản vẽ, lệnh RE1 không còn thực hiện nữa. Hy vọng là vậy.

Bạn dùng từ "chạy lung tung hết" nghe thấy nản lòng, nên dùng từ khác cho hay được không?

Ở trên 1 diễn đàn khác, người ta dùng từ như thế này để cho tôi cảm kích khi viết tặng cho họ:

..I hope you'll look into these issues and fix them.

once again thanks a million times, this lisp will help me a lot.

  • Like 3
  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 

3 giờ trước, thiep đã nói:

...

..I hope you'll look into these issues and fix them.

once again thanks a million times, this lisp will help me a lot.

Nhiều người nghĩ rằng việc viết lsp này như là nghĩa vụ của người khác phải làm cho họ chứ k phải sự giúp đỡ, chưa kể nói công cán gì mà có khi vài lời cảm ơn cũng không nói được ấy. 

  • Like 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 8/4/2020 tại 20:59, thiep đã nói:

Tại bảng Properties, khi người dùng thay đổi thuộc tính từ TextOverwrite sang Measurement hoặc ngược lại của textDim thì biểu thức field đã gán cho text có sẵn sẽ không update được vì nó chỉ update giá trị của thuộc tính đã định sẵn trong biểu thức field, không update việc thay đổi thuộc tính.

Lisp sau Thiep đã update, cho trường này. Tuy nhiên, sau khi thay đổi thuộc tính từ TextOverwrite sang Measurement hoặc ngược lại, các bạn phải đánh lệnh RE1 thay cho lệnh RE để tái tạo tạo màn hình. Sau đó, trên màn hình các bạn chỉnh sửa giá trị textDim (TextOverwrite)  hoặc co giản dim (Measurement) thì vẫn dùng lệnh RE để update giá trị thuộc tính thay đổi.

Chú ý: Lệnh Re1, chỉ hoạt động khi bản vẽ dùng lệnh fdt1 của lisp, khi đó giá trị biến trong lisp chưa bị mất đi. Còn khi người dùng tắt bản vẽ và mở lại, lệnh Re1 không thực hiện được nữa, khi đó phải tải lisp dưới đây và dùng lệnh fdt1 trở lại.

 

  • fdt1_fdt2_fdt3_fdt4_fdt5_re1.lsp
    lisp help
  •  

;;; LISP  FIELD SUM DIMENSIONS, TEXTs, MTEXTs, LENGTHs, AREAs, CIRCUMFERENCEs TO A TEXT
;;          by TrânThiêp 04/2020
;;		09188411230
;;=======================================================
;; command         fdt1 : field sum DIMENSIONS                        
;; command         fdt2 : field sum TEXTs, MTEXTs                     
;; command         fdt3 : field sum LENGTHs                           
;; command         fdt4 : field sum AREAs                             
;; command         fdt5 : field sum CIRCUMFERENCEs
;; command         re1 :  update field sum DIMENSIONs when change properti TextOverride dim to Measurement dim or reverse 
;;                                                       
(defun DXF (code en) (cdr (assoc code (entget en))))
(vl-load-com)
(defun *error* (msg)
        (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
            (princ (strcat "\n** Error: " msg " **"))
        )
        (acet-sysvar-restore)
        (command "undo" "en")
        (princ)
    )
;;;===========================================================================1: sum DIMENSIONs =========
(defun c:fdt1 (/ ss ent_T)
    (command "undo" "be")
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status "Select DIMENSIONs FOR GET SUM" "Prompt")
    (setq ss (ssget '((0 . "DIMENSION"))))
    (acet-ui-status)
    (while (OR (NOT (setq ent_T
                             (car (entsel
                                      "\nPick a Text object for set sum dimensions"
                                  )
                             )
                    )
               )
               (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
           )
        (prompt "\nPick not right TEXT object, please pick again")
    )
    (setq Obj_Text_thiep (vlax-ename->vla-object ent_T))
    (if (null (setq prec_thiep
                       (getint (acet-str-format
                                   "\nEnter number of decimal places: <%1> "
                                   (itoa (getvar "useri1"))
                               )
                       )
              )
        )
        (setq prec_thiep (getvar "useri1"))
    )
    (setvar "useri1" prec_thiep)
    (if ss
        (progn (mapcar '(lambda (x)
                            (setq Lobj_dim_thiep (CONS (vlax-ename->vla-object x)
                                                       Lobj_dim_thiep
                                                 )
                            )
                        )
                       (acet-ss-to-list ss)
               )
               (setq ID_Dim_lst_thiep (mapcar 'vla-get-objectid Lobj_dim_thiep))
               (Setq field_lst
                        (mapcar
                            '(lambda (ob id)
                                 (if (distof (vla-get-TextOverride ob))
                                     (acet-str-format
                                         "%<\\AcObjProp Object(%<\\_ObjId %1>%).%2>%+"
                                         (itoa id)
                                         "TextOverride"
                                     )
                                     (acet-str-format
                                         "%<\\AcObjProp Object(%<\\_ObjId %1>%).%3 \\f \"%lu2%pr%2\">%+"
                                         (itoa id)
                                         (itoa prec_thiep)
                                         "Measurement"
                                     )
                                 )
                             )
                            Lobj_dim_thiep
                            ID_Dim_lst_thiep
                        )
               )
               (setq strThiep (acet-str-format
                                  "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                                  (vl-string-right-trim "+"
                                                        (apply 'strcat field_lst)
                                  )
                                  (itoa prec_thiep)
                              )
               )
               (vla-put-TextString Obj_Text_thiep strThiep)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (PRINC str)
    (princ "\nOK")
)
;;;===========================================================================2: sum TEXTs, MTEXTs NUMBER=========
(defun c:fdt2 (/ ss ent_T Obj_Text str prec Lobj_text ID_text_lst field_lst)
    (command "undo" "be")
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status "Select:  TEXT, MTEXT NUMBER FOR GET SUM" "Prompt")
    (setq ss (ssget '((0 . "*TEXT"))))
    (acet-ui-status)
    (if ss
        (progn (while (OR (NOT (setq ent_T
                                        (car
                                            (entsel
                                                "\nPick a Text object for set sum text number"
                                            )
                                        )
                               )
                          )
                          (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
                      )
                   (prompt "\nPick not right TEXT object, please pick again")
               )
               (setq Obj_Text (vlax-ename->vla-object ent_T))
               (if (null (setq
                             prec (getint
                                      (acet-str-format
                                          "\nEnter number of decimal places: <%1> "
                                          (itoa (getvar "useri2"))
                                      )
                                  )
                         )
                   )
                   (setq prec (getvar "useri2"))
               )
               (setvar "useri2" prec)
               (mapcar '(lambda (x)
                            (if (Numberp (atof (dxf 1 x)))
                                (setq Lobj_text (CONS (vlax-ename->vla-object x)
                                                      Lobj_text
                                                )
                                )
                            )
                        )
                       (acet-ss-to-list ss)
               )
               (setq ID_text_lst (mapcar 'vla-get-objectid Lobj_text))
               (setq field_lst
                        (mapcar
                            '(lambda (x)
                                 (acet-str-format
                                     "%<\\AcObjProp Object(%<\\_ObjId %1>%).TextString>% +"
                                     (itoa x)
                                 )
                             )
                            ID_text_lst
                        )
               )
               (setq str (acet-str-format
                             "%<\\AcExpr (%1)>%"
                             (vl-string-right-trim "+" (apply 'strcat field_lst))
                         )
               )
               (dos_clipboard str)
               (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (princ "\nOK")
    (PRINC)
)
;;;===========================================================================3: LENGTHs=========
(defun c:fdt3 (/ ss ent_T Obj_Text str prec Lobj_leng ID_leng_lst field_lst)
    (command "undo" "be")
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status "Select:  LINE, POLYLINE, for GET SUM LENGTH" "Prompt")
    (setq ss (ssget '((0 . "LINE,*POLYLINE"))))
    (acet-ui-status)
    (if ss
        (progn
            (while (OR (NOT (setq ent_T
                                     (car
                                         (entsel
                                             "\nPick a Text object for set sum length value"
                                         )
                                     )
                            )
                       )
                       (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
                   )
                (prompt "\nPick not right TEXT object, please pick again")
            )
            (setq Obj_Text (vlax-ename->vla-object ent_T))
            (if (null (setq
                          prec (getint
                                   (acet-str-format
                                       "\nEnter number of decimal places: <%1> "
                                       (itoa (getvar "useri3"))
                                   )
                               )
                      )
                )
                (setq prec (getvar "useri3"))
            )
            (setvar "useri3" prec)
            (mapcar
                '(lambda (x)
                     (if (vlax-property-available-p (vlax-ename->vla-object x)
                                                    'length
                         )
                         (setq Lobj_leng (CONS (vlax-ename->vla-object x)
                                               Lobj_leng
                                         )
                         )
                     )
                 )
                (acet-ss-to-list ss)
            )
            (setq ID_leng_lst (mapcar 'vla-get-objectid Lobj_leng))
            (setq field_lst
                     (mapcar
                         '(lambda (id)
                              (acet-str-format
                                  "%<\\AcObjProp Object(%<\\_ObjId %1>%).Length \\f \"%lu2%pr%2\">%+"
                                  (itoa id)
                                  (itoa prec)
                              )
                          )
                         ID_leng_lst
                     )
            )
            (setq str (acet-str-format
                          "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                          (itoa prec)
                      )
            )
            (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (princ "\nOK")
    (PRINC)
)
;;;===========================================================================4: AREAs=========
(defun c:fdt4 (/ ss ent_T Obj_Text Lobj_area ID_area_lst str prec field_lst)
    (command "undo" "be")
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status
        "Select: POLYLINE, HATCH, ARC, CIRCLE, REGION, ELLIPSE for GET SUM AREA"
        "Prompt"
    )
    (setq ss (ssget '((0 . "*POLYLINE,HATCH,ARC,CIRCLE,ELLIPSE,REGION"))))
    (acet-ui-status)
    (if ss
        (progn
            (mapcar
                '(lambda (x)
                     (if (vlax-property-available-p (vlax-ename->vla-object x)
                                                    'area
                         )
                         (setq Lobj_area (CONS (vlax-ename->vla-object x)
                                               Lobj_area
                                         )
                         )
                     )
                 )
                (acet-ss-to-list ss)
            )
            (if (null (setq
                          prec (getint
                                   (acet-str-format
                                       "\nEnter number of decimal places: <%1> "
                                       (itoa (getvar "useri4"))
                                   )
                               )
                      )
                )
                (setq prec (getvar "useri4"))
            )
            (setvar "useri4" prec)
            (setq ID_area_lst (mapcar 'vla-get-objectid Lobj_area))
            (setq field_lst
                     (mapcar
                         '(lambda (id)
                              (acet-str-format
                                  "%<\\AcObjProp Object(%<\\_ObjId %1>%).Area \\f \"%lu2%pr%2\">%+"
                                  (itoa id)
                                  (itoa prec)
                              )
                          )
                         ID_area_lst
                     )
            )
            (setq str (acet-str-format
                          "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                          (itoa prec)
                      )
            )
            (while (OR (NOT (setq ent_T
                                     (car
                                         (entsel
                                             "\nPick a Text object for set sum area value"
                                         )
                                     )
                            )
                       )
                       (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
                   )
                (prompt "\nPick not right TEXT object, please pick again")
            )
            (setq Obj_Text (vlax-ename->vla-object ent_T))
            (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (princ "\nOK")
    (PRINC)
)
;;;==================================================================    5: CIRCUMFERENCEs: CHU VI VÒNG TRÒN
(defun c:fdt5 (/ ss ent_T Obj_Text Lobj_CIR ID_CIR_lst str prec field_lst)
    (command "undo" "be")
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status "Select: CIRCLE for GET SUM CIRCUMFERENCE" "Prompt")
    (setq ss (ssget '((0 . "CIRCLE"))))
    (acet-ui-status)
    (while (OR (NOT (setq ent_T
                             (car
                                 (entsel
                                     "\nPick a Text object for set sum circumference value"
                                 )
                             )
                    )
               )
               (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
           )
        (prompt "\nPick not right TEXT object, please pick again")
    )
    (setq Obj_Text (vlax-ename->vla-object ent_T))
    (if ss
        (progn
            (mapcar
                '(lambda (x)
                     (setq Lobj_CIR (CONS (vlax-ename->vla-object x) Lobj_CIR))
                 )
                (acet-ss-to-list ss)
            )
            (if (null (setq
                          prec (getint
                                   (acet-str-format
                                       "\nEnter number of decimal places: <%1> "
                                       (itoa (getvar "useri5"))
                                   )
                               )
                      )
                )
                (setq prec (getvar "useri5"))
            )
            (setvar "useri5" prec)
            (setq ID_CIR_lst (mapcar 'vla-get-objectid Lobj_CIR))
            (setq field_lst
                     (mapcar
                         '(lambda (id)
                              (acet-str-format
                                  "%<\\AcObjProp Object(%<\\_ObjId %1>%).Circumference \\f \"%lu2%pr%2\">%+"
                                  (itoa id)
                                  (itoa prec)
                              )
                          )
                         ID_CIR_lst
                     )
            )
            (setq str (acet-str-format
                          "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                          (itoa prec)
                      )
            )
            (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (princ "\nOK")
    (PRINC)
)
;;;===================update field sum DIMENSIONs when change properti TextOverride dim to Measurement dim or reverse =====
(defun c:re1 (/)
    (command "undo" "be")
    (setq ID_Dim_lst_thiep (mapcar 'vla-get-objectid Lobj_dim_thiep))
    (Setq field_lst
             (mapcar
                 '(lambda (ob id)
                      (if (distof (vla-get-TextOverride ob))
                          (acet-str-format
                              "%<\\AcObjProp Object(%<\\_ObjId %1>%).%2>%+"
                              (itoa id)
                              "TextOverride"
                          )
                          (acet-str-format
                              "%<\\AcObjProp Object(%<\\_ObjId %1>%).%3 \\f \"%lu2%pr%2\">%+"
                              (itoa id)
                              (itoa prec_thiep)
                              "Measurement"
                          )
                      )
                  )
                 Lobj_dim_thiep
                 ID_Dim_lst_thiep
             )
    )
    (setq strThiep (acet-str-format
                       "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                       (vl-string-right-trim "+" (apply 'strcat field_lst))
                       (itoa prec_thiep)
                   )
    )
    (vla-put-TextString Obj_Text_thiep strThiep)
    (command "undo" "en")
    (princ "\nOK")
)

 

field-sumOBJ2TEXT.LSP

Thật sự mình đọc bài viết tới trang 2 này, và nhìn vào các dòng code của bạn Thiep mình chả biết gì cả, nhưng mình thấy dc cái sự nhiệt tình "To lớn" trong con người bạn. Lisp này mình đọc đến đây nói thật mình cũng rối, và thấy nhức đầu luôn, có lẽ vì hiện tại mình chưa có nhu cầu với lisp này. Nhưng qua đây càng cho thấy được người viết ra cái lisp này đã có cái "Tâm" rất lớn rồi. Rất mừng vì diễn đàn có những người như bạn. Nếu bạn ở HCM co thể alo minh 0707 4668 41, mình mời cafe làm quen giao lưu.

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 7/4/2020 tại 10:41, thiep đã nói:

 


;;; LISP  FIELD SUM DIMENSIONS, TEXTs, MTEXTs, LENGTHs, AREAs, CIRCUMFERENCEs TO A TEXT
;;;          by TrânThiêp 04/2020
;;;		09188411230
;;;=======================================================
;;; command         fdt1 : field sum DIMENSIONS                        
;;; command         fdt2 : field sum TEXTs, MTEXTs                     
;;; command         fdt3 : field sum LENGTHs                           
;;; command         fdt4 : field sum AREAs                             
;;; command         fdt5 : field sum CIRCUMFERENCEs                    
;;;                                                       
(defun DXF (code en) (cdr (assoc code (entget en))))
;;;===========================================================================1: sum DIMENSIONs =========
(defun c:fdt1 (/  ss ent_T Obj_Text str prec Lobj_dim ID_Dim_lst field_lst)
    (vl-load-com)
    (command "undo" "be")
    (defun *error* (msg)
        (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
            (princ (strcat "\n** Error: " msg " **"))
        )
        (acet-sysvar-restore)
        (command "undo" "en")
        (princ)
    )
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status "Select DIMENSIONs FOR GET SUM" "Prompt")
    (setq ss (ssget '((0 . "DIMENSION"))))
    (acet-ui-status)
    (while (OR (NOT (setq ent_T
                             (car (entsel
                                      "\nPick a Text object for set sum dimensions"
                                  )
                             )
                    )
               )
               (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
           )
        (prompt "\nPick not right TEXT object, please pick again")
    )
    (setq Obj_Text (vlax-ename->vla-object ent_T))
    (if (null (setq prec (getint (acet-str-format
                                     "\nEnter number of decimal places: <%1> "
                                     (itoa (getvar "useri1"))
                                 )
                         )
              )
        )
        (setq prec (getvar "useri1"))
    )
    (setvar "useri1" prec)
    (if ss
        (progn
            (mapcar
                '(lambda (x)
                     (setq Lobj_dim (CONS (vlax-ename->vla-object x) Lobj_dim))
                 )
                (acet-ss-to-list ss)
            )
            (setq ID_Dim_lst (mapcar 'vla-get-objectid Lobj_dim))
            (Setq field_lst
                     (mapcar
                         '(lambda (ob id)
                              (if (distof (vla-get-TextOverride ob))
                                  (acet-str-format
                                      "%<\\AcObjProp Object(%<\\_ObjId %1>%).%2>%+"
                                      (itoa id)
                                      "TextOverride"
                                  )
                                  (acet-str-format
                                      "%<\\AcObjProp Object(%<\\_ObjId %1>%).%3 \\f \"%lu2%pr%2\">%+"
                                      (itoa id)
                                      (itoa prec)
                                      "Measurement"
                                  )
                              )
                          )
                         Lobj_dim
                         ID_Dim_lst
                     )
            )
            (setq str (acet-str-format
                          "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                          (itoa prec)
                      )
            )
            (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (PRINC str)
    (princ "\nOK")
    
)
;;;===========================================================================2: sum TEXTs, MTEXTs NUMBER=========
(defun c:fdt2 (/  ss ent_T Obj_Text str prec Lobj_text ID_text_lst field_lst)
    (vl-load-com)
    (command "undo" "be")
    (defun *error* (msg)
        (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
            (princ (strcat "\n** Error: " msg " **"))
        )
        (acet-sysvar-restore)
        (command "undo" "en")
        (princ)
    )
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status "Select:  TEXT, MTEXT NUMBER FOR GET SUM" "Prompt")
    (setq ss (ssget '((0 . "*TEXT"))))
    (acet-ui-status)
    (if ss
        (progn
            (while (OR (NOT (setq ent_T
                                     (car
                                         (entsel
                                             "\nPick a Text object for set sum text number"
                                         )
                                     )
                            )
                       )
                       (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
                   )
                (prompt "\nPick not right TEXT object, please pick again")
            )
            (setq Obj_Text (vlax-ename->vla-object ent_T))
            (if (null (setq
                          prec (getint
                                   (acet-str-format
                                       "\nEnter number of decimal places: <%1> "
                                       (itoa (getvar "useri2"))
                                   )
                               )
                      )
                )
                (setq prec (getvar "useri2"))
            )
            (setvar "useri2" prec)
            (mapcar
                '(lambda (x)
                     (if (Numberp (atof (dxf 1 x)))
                         (setq Lobj_text (CONS (vlax-ename->vla-object x)
                                               Lobj_text
                                         )
                         )
                     )
                 )
                (acet-ss-to-list ss)
            )
            (setq ID_text_lst (mapcar 'vla-get-objectid Lobj_text))
            (setq field_lst
                     (mapcar
                         '(lambda (x)
                              (acet-str-format
                                  "%<\\AcObjProp Object(%<\\_ObjId %1>%).TextString>% +"
                                  (itoa x)
                              )
                          )
                         ID_text_lst
                     )
            )
            (setq str (acet-str-format
                          "%<\\AcExpr (%1)>%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                      )
            )
            (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (princ "\nOK")
    (PRINC)
)
;;;===========================================================================3: LENGTHs=========
(defun c:fdt3 (/ ss ent_T Obj_Text str prec Lobj_leng ID_leng_lst field_lst)
    (vl-load-com)
    (command "undo" "be")
    (defun *error* (msg)
        (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
            (princ (strcat "\n** Error: " msg " **"))
        )
        (acet-sysvar-restore)
        (command "undo" "en")
        (princ)
    )
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status "Select:  LINE, POLYLINE, for GET SUM LENGTH"
                    "Prompt"
    )
    (setq ss (ssget '((0 . "LINE,*POLYLINE"))))
    (acet-ui-status)
    (if ss
        (progn
            (while (OR (NOT (setq ent_T
                                     (car
                                         (entsel
                                             "\nPick a Text object for set sum length value"
                                         )
                                     )
                            )
                       )
                       (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
                   )
                (prompt "\nPick not right TEXT object, please pick again")
            )
            (setq Obj_Text (vlax-ename->vla-object ent_T))
            (if (null (setq
                          prec (getint
                                   (acet-str-format
                                       "\nEnter number of decimal places: <%1> "
                                       (itoa (getvar "useri3"))
                                   )
                               )
                      )
                )
                (setq prec (getvar "useri3"))
            )
            (setvar "useri3" prec)
            (mapcar
                '(lambda (x)
                     (if (vlax-property-available-p (vlax-ename->vla-object x)
                                                    'length
                         )
                         (setq Lobj_leng (CONS (vlax-ename->vla-object x)
                                               Lobj_leng
                                         )
                         )
                     )
                 )
                (acet-ss-to-list ss)
            )
            (setq ID_leng_lst (mapcar 'vla-get-objectid Lobj_leng))
            (setq field_lst
                     (mapcar
                         '(lambda (id)
                              (acet-str-format
                                  "%<\\AcObjProp Object(%<\\_ObjId %1>%).Length \\f \"%lu2%pr%2\">%+"
                                  (itoa id)
                                  (itoa prec)
                              )
                          )
                         ID_leng_lst
                     )
            )
            (setq str (acet-str-format
                          "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                          (itoa prec)
                      )
            )
            (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (princ "\nOK")
    (PRINC)
)
;;;===========================================================================4: AREAs=========
(defun c:fdt4 (/ ss ent_T Obj_Text Lobj_area ID_area_lst str prec field_lst)
    (vl-load-com)
    (command "undo" "be")
    (defun *error* (msg)
        (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
            (princ (strcat "\n** Error: " msg " **"))
        )
        (acet-sysvar-restore)
        (command "undo" "en")
        (princ)
    )
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status
        "Select: POLYLINE, HATCH, ARC, CIRCLE, REGION, ELLIPSE for GET SUM AREA"
        "Prompt"
    )
    (setq ss (ssget '((0 . "*POLYLINE,HATCH,ARC,CIRCLE,ELLIPSE,REGION"))))
    (acet-ui-status)
    (if ss
        (progn
            
            (mapcar
                '(lambda (x)
                     (if (vlax-property-available-p (vlax-ename->vla-object x)
                                                    'area
                         )
                         (setq Lobj_area (CONS (vlax-ename->vla-object x) Lobj_area))
                     )
                 )
                (acet-ss-to-list ss)
            )
            (if (null (setq
                          prec (getint
                                   (acet-str-format
                                       "\nEnter number of decimal places: <%1> "
                                       (itoa (getvar "useri4"))
                                   )
                               )
                      )
                )
                (setq prec (getvar "useri4"))
            )
            (setvar "useri4" prec)
            (setq ID_area_lst (mapcar 'vla-get-objectid Lobj_area))
            (setq field_lst
                     (mapcar
                         '(lambda (id)
                              (acet-str-format
                                  "%<\\AcObjProp Object(%<\\_ObjId %1>%).Area \\f \"%lu2%pr%2\">%+"
                                  (itoa id)
                                  (itoa prec)
                              )
                          )
                         ID_area_lst
                     )
            )
            (setq str (acet-str-format "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                                       (vl-string-right-trim "+" (apply 'strcat field_lst))
                                       (itoa prec)
                      )
            )
            (while (OR (NOT (setq ent_T
                                     (car
                                         (entsel
                                             "\nPick a Text object for set sum area value"
                                         )
                                     )
                            )
                       )
                       (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
                   )
                (prompt "\nPick not right TEXT object, please pick again")
            )
            (setq Obj_Text (vlax-ename->vla-object ent_T))
            (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (princ "\nOK")
    (PRINC)
)
;;;==================================================================    5: CIRCUMFERENCEs: CHU VI VÒNG TRÒN
(defun c:fdt5 (/  ss ent_T Obj_Text Lobj_CIR ID_CIR_lst str prec field_lst)
    (vl-load-com)
    (command "undo" "be")
    (defun *error* (msg)
        (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
            (princ (strcat "\n** Error: " msg " **"))
        )
        (acet-sysvar-restore)
        (command "undo" "en")
        (princ)
    )
    (acet-sysvar-set '("cmdecho" 0 "osmode" 0))
    (acet-ui-status "Select: CIRCLE for GET SUM CIRCUMFERENCE" "Prompt")
    (setq ss (ssget '((0 . "CIRCLE"))))
    (acet-ui-status)
    (while (OR (NOT (setq ent_T
                             (car
                                 (entsel
                                     "\nPick a Text object for set sum circumference value"
                                 )
                             )
                    )
               )
               (NOT (eq (cdr (assoc 0 (entget ent_T))) "TEXT"))
           )
        (prompt "\nPick not right TEXT object, please pick again")
    )
    (setq Obj_Text (vlax-ename->vla-object ent_T))
    (if ss
        (progn
            (mapcar
                '(lambda (x)
                     (setq Lobj_CIR (CONS (vlax-ename->vla-object x) Lobj_CIR))
                 )
                (acet-ss-to-list ss)
            )
            (if (null (setq
                          prec (getint
                                   (acet-str-format
                                       "\nEnter number of decimal places: <%1> "
                                       (itoa (getvar "useri5"))
                                   )
                               )
                      )
                )
                (setq prec (getvar "useri5"))
            )
            (setvar "useri5" prec)
            (setq ID_CIR_lst (mapcar 'vla-get-objectid Lobj_CIR))
            (setq field_lst
                     (mapcar
                         '(lambda (id)
                              (acet-str-format
                                  "%<\\AcObjProp Object(%<\\_ObjId %1>%).Circumference \\f \"%lu2%pr%2\">%+"
                                  (itoa id)
                                  (itoa prec)
                              )
                          )
                         ID_CIR_lst
                     )
            )
            (setq str (acet-str-format
                          "%<\\AcExpr (%1) \\f \"%lu2%pr%2\">%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                          (itoa prec)
                      )
            )
            (vla-put-TextString Obj_Text str)
        ) ;_PROGN
    ) ;_IF
    (ACET-SYSVAR-RESTORE)
    (command "undo" "en")
    (princ "\nOK")
    (PRINC)
)

910.1 thì nó ra 910.100000; Nhờ các ae chỉ ra chỗ còn khiếm khuyết này)

 

Mình xem thì cái này không phải là lỗi. Do bạn chưa format trường thôi.

Xem sơ thì bạn muốn đặt User12 làm biến số chữ số thập phân. Nhưng nếu bạn làm theo mặc định units Cad cũng ok mà.

 

Kiến nghị đổi dòng

 

 

(setq str (acet-str-format
                          "%<\\AcExpr (%1)>%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                      )
            )

 

Thành:

(setq str (acet-str-format
                          "%<\\AcExpr (%1) \\f \"%lu%2%pr%3\" >%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                          (itoa (getvar 'lunits))
                          (itoa (getvar 'luprec))  
                      )
            )

 

Nó sẽ format theo unit hiện hành.

 

 

 

 

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
3 giờ trước, ngokiet đã nói:

 

Mình xem thì cái này không phải là lỗi. Do bạn chưa format trường thôi.

Xem sơ thì bạn muốn đặt User12 làm biến số chữ số thập phân. Nhưng nếu bạn làm theo mặc định units Cad cũng ok mà.

 

Kiến nghị đổi dòng

.....

 

  • cadvietlisp.lsp
    lisp help
  •  

(setq str (acet-str-format
                          "%<\\AcExpr (%1)>%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                      )
            )

 

Thành:......

  • cadvietlisp.lsp
    lisp help
  •  

(setq str (acet-str-format
                          "%<\\AcExpr (%1) \\f \"%lu%2%pr%3\" >%"
                          (vl-string-right-trim "+" (apply 'strcat field_lst))
                          (itoa (getvar 'lunits))
                          (itoa (getvar 'luprec))  
                      )
            )

 

Nó sẽ format theo unit hiện hành.

 

 

 

 

thật ra, trong lisp FDT2 tạo field tổng text, mtext số này, không cần các đơn vị đo hay  sai số đơn vị (biến lunits, luprec). Thiệp đã viết dư ra đoạn yêu cầu người dùng nhập số lẻ của số thập phân, đưa và biến prec. Vì thuộc tính Contents để lấy giá trị textstring của đối tượng text, mtext không có giá trị số lẻ thập phân đi kèm như là các đối tượng Dimension. Thiệp tính khi đã tìm ra lỗi vì sao 900.1 nó trở thành là 900.100000, Thiệp sẽ bỏ đoạn này:

(if (null (setq prec (getint (acet-str-format "\nEnter number of decimal places: <%1> "
                                          (itoa (getvar "useri2"))
                              )
                      )
           )
     )
     (setq prec (getvar "useri2"))
)
(setvar "useri2" prec)

 

Vì vậy sự gợi ý của @ngokiet cũng không có sự thay đổi vì sao bị lỗi ở chỗ:

 

4 giờ trước, ngokiet đã nói:

910.1 thì nó ra 910.100000; Nhờ các ae chỉ ra chỗ còn khiếm khuyết này)

Cảm ơn NgoKiet đã quan tâm, hy vọng các bạn cố gắng truy cho ra lỗi này giúp mình.

Cũng vì muốn truy cho ra lỗi này, mà mình đã tìm được cách thêm tiền tố hay hậu tố trong field đưa ra text có sẵn: ví dụ giá trị thuộc tính là 123.45;

thêm tiền tố "S= "; hậu tố "m²"; text đã gắn field thành: S= 123.45m²

thêm tiền tố "A= "; hậu tố "m³"; text đã gắn field thành: A= 123.45m³

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
5 giờ trước, vinh06102vt đã nói:

Thật sự mình đọc bài viết tới trang 2 này, và nhìn vào các dòng code của bạn Thiep mình chả biết gì cả, nhưng mình thấy dc cái sự nhiệt tình "To lớn" trong con người bạn. Lisp này mình đọc đến đây nói thật mình cũng rối, và thấy nhức đầu luôn, có lẽ vì hiện tại mình chưa có nhu cầu với lisp này. Nhưng qua đây càng cho thấy được người viết ra cái lisp này đã có cái "Tâm" rất lớn rồi. Rất mừng vì diễn đàn có những người như bạn. Nếu bạn ở HCM co thể alo minh 0707 4668 41, mình mời cafe làm quen giao lưu.

Thiệp đang ở Sài Gòn, đang nằm ở nhà trốn con virus corona chủng Tàu, hẹn qua dịch rồi giao lưu sau, đt: 0918841230.

Cầu mong thể giới qua mau cơn đại nạn dịch này.

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
48 phút trước, thiep đã nói:

 

Cũng vì muốn truy cho ra lỗi này, mà mình đã tìm được cách thêm tiền tố hay hậu tố trong field đưa ra text có sẵn: ví dụ giá trị thuộc tính là 123.45;

 

Do bạn nói ở lệnh fdt2 nên mình chỉ xem lệnh fdt2. Khi nó tính field trong biểu thức thì nó dùng kiểu số thực/ số nguyên nếu text là số thực/số nguyên.

Nếu tất cả là số nguyên thì nó ra kết quả số nguyên. Còn không thì ra kiểu số thực.

Measurement của Dim là số thực nên khi cộng xong nó sẽ cho ra số thực. 

Mà số thực thì field thể hiện theo mặc định là 6 chữ số lẻ. Cho nên nếu bạn muốn ghi số lẻ cho đúng theo kiểu cùa dim thì bạn phải xem kiểu dim có bao nhiêu số lẻ rồi set tương ứng thôi.

 

Lưu ý là trong biểu thức field thì các giá tri con không cần format vì nó ko có nghĩa.

VD:  "%<\\AcExpr (%<\\AcObjProp Object(%<\\_ObjId 2202349431104>%).Length \\f \"%lu2%pr1\">%+%<\\AcObjProp Object(%<\\_ObjId 2202349431152>%).Length \\f \"%lu2%pr1\">%) >%"

Thì nó cũng ra 6 số lẻ tương đương

 "%<\\AcExpr (%<\\AcObjProp Object(%<\\_ObjId 2202349431104>%).Length>%+%<\\AcObjProp Object(%<\\_ObjId 2202349431152>%).Length>%) >%"

(Chỉ có cái format sau cùng là có nghĩa)

 

Còn tự động bỏ số 0 thừa phía sau lá "\\f \"%zs8\">%". Lưu ý nếu Measurement  có sai số thì sẽ không thực hiện được.

Theo yêu cầu nếu sửa thay đổi thì bạn làm 1 hàm đổi các dim mặc định thành Dim TextOverride thì dễ hơn.

 

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×