Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
conghoa

[Request] Điều chỉnh làm tròn của text field trong block att

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

Em có vấn đề nan giải này muốn nhờ mọi người giúp đỡ, em đang có rất nhiều block att trong đó có các text dạng filed được thiết lập là diện tích của các polyline. Vấn đề phức tạp là phần làm tròn Precision của filed đang là 0.00, giờ phải điều chỉnh giá trị làm tròn này cho nhiều block mà tìm mãi không thấy các nào nhanh cả. Các bác xem có cách nào điều chỉnh giá trị Precision theo ý muốn cho toàn bộ các text field không ạ, em xin cảm ơn!

 

File mẫu gửi kèm!

Untitled1.thumb.png.327863eb33f7ee7a046d30e4f70f0a0f.png

 

new block.dwg

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

Em không am hiểu về món lisp cho field này lắm: Mò 1 lúc thì em thấy điều này: %<\AcObjProp.16.2 Object(%<\_ObjId 2129573528>%).Area \f "%lu2%pr4%ct8[1e-006]">% Thì con số "4" trong "pr4" là chỉ số con số sau dấu phẩy.

Em tìm nốt bài viết này liên quan đến lisp trong Field: Hi vọng giúp được gì cho bác không :P http://www.cadviet.com/forum/topic/63395-yêu-cầu-lisp-insert-field-file-name-bỏ-đi-một-số-ký-tự/

 

Hề , bác nghiên cứu thử coi làm ăn được không :;):;) Không thì đợi mấy bác khác giúp luôn cho nhanh :P

check.png

  • 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

Text thi lập trình được, nhưng với block (attributes) không chắc lắm.

Conghoa dùng CAD phiên bản nào?

  • 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
8 phút trước, gia_bach cho biết:

Text thi lập trình được, nhưng với block (attributes) không chắc lắm.

Conghoa dùng CAD phiên bản nào?

Em đang dùng 2017, nhưng bác lập trình trên cad nào em cũng cài được ạ :D

 

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
4 giờ trước, gia_bach cho biết:

Text thi lập trình được, nhưng với block (attributes) không chắc lắm.

Conghoa dùng CAD phiên bản nào?

 

Về khả năng thì chắc chắn là block (attributes) có thể làm được anh ạ!

  • 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

Conghoa thử đoạn code này nhé!


(defun c:pci()
  (setvar "cmdecho" 0)
  (if (setq ss (ssget '((0 . "INSERT") (66 . 1))))
    (progn
        (setq i -1 pre (getint "So chu so thap phan :")) 
    (while (setq ename (ssname ss (setq i (1+ i))))
      (setq obj (vlax-ename->vla-object ename))
      (foreach x (vlax-invoke obj 'getattributes)
        (if (= (vla-get-HasExtensionDictionary x) :vlax-true) (progn
      (if (setq pos (vl-string-search "%pr" (setq str (vl-string-subst ">%" " 0>%" (gc:FieldCode (vlax-vla-object->ename x))))))
          (vla-put-TextString x (setq tthe (strcat (substr str 1 (+ 3 pos)) (itoa pre) (VL-STRING-LEFT-TRIM "0123456789" (substr str (+ 4 pos))))))
      )
      (command "._updatefield" ename "")
     )
    )
      )
    )
    )
  )
)
(defun gc:FieldCode (ent / foo elst xdict dict field str)
  (defun foo (field str / pos fldID objID)
    (setq pos 0)
    (if (setq pos (vl-string-search "\\_FldIdx " str pos))
      (while (setq pos (vl-string-search "\\_FldIdx " str pos))
        (setq fldId (entget (cdr (assoc 360 field)))
              field (vl-remove (assoc 360 field) field)
              str   (strcat
                      (substr str 1 pos)
                      (if (setq objID (cdr (assoc 331 fldId)))
                        (vl-string-subst
                          (strcat "ObjId " (itoa (gc:EnameToObjectId objID)))
                          "ObjIdx"
                          (cdr (assoc 2 fldId))
                        )
                        (foo fldId (cdr (assoc 2 fldId)))
                      )
                      (substr str (1+ (vl-string-search ">%" str pos)))
                    )
        )
      )
      str
    )
  )
  ;;--------------------------------------------------------;;
  
  (setq elst (entget ent))
  (if (and
    (member (cdr (assoc 0 elst)) '("ATTRIB" "MTEXT" "TEXT"))
    (setq xdict (cdr (assoc 360 elst)))
    (setq dict (dictsearch xdict "ACAD_FIELD"))
    (setq field (dictsearch (cdr (assoc -1 dict)) "TEXT"))
      )
    (setq str (foo field (cdr (assoc 2 field))))
  )
)

;;============================================================;;

;; gc:EnameToObjectId (gile)
;; Returns the object ID from an ename
;;
;; Argument : a ename (as returned by enlast, entsel ...)

(defun gc:EnameToObjectId (ename)
  ((lambda (str)
     (hex2dec
       (substr (vl-string-right-trim ">" str) (+ 3 (vl-string-search ":" str)))
     )
   )
    (vl-princ-to-string ename)
  )
)

;;============================================================;;

;; hex2dec (gile)
;; Converts an hexadecimal to a decimal
;;
;; Argument : an hexadecimal (string)
;; Return : an integer

(defun hex2dec (s / r l n)
  (setq    r 0 l (vl-string->list (strcase s)))
  (while (setq n (car l))
    (setq l (cdr l)
          r (+ (* r 16) (- n (if (<= n 57) 48 55)))
    )
  )
)

 

  • 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

@Tue_NV, em đã test lisp và thấy hiện tượng sau khi dùng lisp thì text field biến thành #### vì không còn được liên kết với đối tượng đường bo để lấy diện tích. Bác xem lại giúp em!

 

Field Expression của text ban đầu

%<\AcObjProp.16.2 Object(%<\_ObjId 2203027386768>%).Area \f "%lu2%pr2%ps[, m2]%ct8[1.000000000000000E-006]">%

Field Expression của text sau khi dùng lisp

%<\AcObjProp.16.2 Object(%<\_ObjId -290836080>%).Area \f "%lu2%pr1%ps[, m2]%ct8[1.000000000000000E-006]">%

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, Tue_NV cho biết:

Hôm qua mình test trên cad2012 ok .   không biết cad khác có bị gì k? 

Mr. Tue_NV chắc đang dùng x86. Với x64 thì gc:FieldCode không ổn. Tìm LM:fieldcode là ok ngay.

  • 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
57 phút trước, quocmanh04tt cho biết:

Mr. Tue_NV chắc đang dùng x86. Với x64 thì gc:FieldCode không ổn. Tìm LM:fieldcode là ok ngay.

Hèn chi .... ^_^ Thank quocmanh04lt

Update lại lisp cho Conghoa nè!

 

Pci (2).lsp

  • 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
Đăng nhập để thực hiện theo  

×