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

Hiệu Chỉnh Text Dimension và Add thêm text bên dưới

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

Vào lúc 24/4/2020 tại 14:47, Luongquocsonxd đã nói:

Mình nhờ anh em bên diễn đàn giúp mình đoạn lisp thực hiện công việc như hình vẽ mình gửi. Cảm ơn nhiều!

Hieu-Chinh-Dimension.png

 

Bài liên quan:
  • Mẹo vặt với Computer - Thảo luận vỉa hè

    Hãy bình tĩnh và làm theo mẹo nhỏ dưới đây, bạn sẽ tiết kiệm được khá nhiều thời gian đấy! ... Add scheduled task: thêm các nhiệm vụ do bạn tự ấn định. ... Windows + Pause/Break: Với những người nâng cấp và điều chỉnh phần ... Anh muốn phát âm vào ô Use the following text to preview the voice rồi ...

Lisp này phù hợp với ý @Luongquocsonxd và dành cho các kỹ sư xây dựng.

Lisp có tạo 1 dimstyle là "kichthuoc", nếu sau khi chạy lisp thấy chưa phù hợp: textsize, textstyle, arrow ... thì vào lệnh dimsty để modify lại dimstyle này.

Yêu cầu autoCad phải cài đặt thêm menu Express

;;; Lisp addDimAlign chia 1 line, lwpolyline thành 3 phân: 1/4L | 2/4L | 1/4L by Trân Thiêp
;;;================================================================
(defun DXF (code en) (cdr (assoc code (entget en))))
;;;======================================================
(defun A_triangle (Pt1 Pt2 Pt3 / a b c p)
    (setq a (distance Pt1 Pt2)
          b (distance Pt2 Pt3)
          c (distance Pt3 Pt1)
          p (/ (+ a b c) 2)
    )
    (sqrt (* p (- p a) (- p b) (- p c)))
)

;;;================================================================
(defun CalcZ (Pt1 Pt2 Pt3 / v w)                  
    (setq v (mapcar '- Pt1 Pt2)
          w (mapcar '- Pt3 Pt2)
    )
    (- (* (car v) (cadr w)) (* (cadr v) (car w)))
)
;;;================================================================
(defun c:cdim (/ ApCad      ActDoc     *Model*    *dimstyles*
                 *TextStyles*          *lay*      ang        dis
                 po_dim     po1        po2        prec       objdimstyle
                 lay        newFontFile           tsobj      ss
                 entlst     hei_TDim   Epo        Spo        ang
                 Epara      dis                        entname
                 po_dim     objdim1    objdim1A   objdim2    objdim2B
                 objdim3    objdim3A   objdimstyle_th        h
                 bit
                )
    (command "undo" "be")
    (defun *error* (msg)
        (and doc (_EndUndo doc))
        (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" 1))
    (setq ApCad        (vlax-get-acad-object)
          ActDoc       (vla-get-ActiveDocument ApCad)
          *Model*      (vla-get-ModelSpace ActDoc)
          *TextStyles* (vla-get-TextStyles actDoc)
          *lay*        (vla-get-layers actDoc)
          *dimstyles*  (vla-get-dimStyles actDoc)
    )
    (or (tblobjname "LAYER" "Kichthuoc")
        (vla-put-color (vla-add *lay* "Kichthuoc") 1)
    )
    (setvar "clayer" "Kichthuoc")
    (setq newFontFile (acet-file-find-font "arial.TTF"))
    (if (not (tblobjname "STYLE" "Arial"))
        (progn (setq tsobj (vla-add *TextStyles* "Arial"))
               (vla-put-FontFile tsobj newFontFile)
        )
    )
    (setq ss (ssget '((0 . "LINE,LWPOLYLINE"))))
    (setq entlst (acet-ss-to-list ss))
    (if (eq (getvar "users1") "0.0")
        (setvar "users1" "12.50")
    )
    (if (null (setq hei_TDim
                       (getreal
                           (acet-str-format "\nEnter Height text dim : < %1 > "
                                            (getvar "users1")
                           )
                       )
              )
        )
        (setq hei_TDim (getvar "users1"))
    )
    (if (numberp hei_TDim)
        (setvar "users1" (rtos hei_TDim))
        (progn (setvar "users1" hei_TDim) (setq hei_TDim (atof hei_TDim)))
    )
    (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 entlst
        (progn (foreach ent entlst
                   (setq Epo   (vlax-curve-getEndpoint ent)
                         Spo   (vlax-curve-getStartpoint ent)
                         ang   (angle Spo Epo)
                         Epara (vlax-curve-getEndParam ent)
                         dis   (vlax-curve-getDistAtParam ent Epara)
                   )
                   (setq entname (dxf 0 ent))
                   (setq po1 (vlax-curve-getPointatparam
                                 ent
                                 (vlax-curve-getParamAtdist ent (/ dis 4))
                             )
                         po2 (vlax-curve-getPointatparam
                                 ent
                                 (vlax-curve-getParamAtdist ent (* dis 0.75))
                             )
                   )                             
                   (setq po_dim (ACET-GEOM-MIDPOINT Spo po1))
                   (setq objdim1 (vla-AddDimAligned *Model*
                                                    (vlax-3d-point Spo)
                                                    (vlax-3d-point po1)
                                                    (vlax-3d-point po_dim)
                                 )
                   )
                   (vla-put-TextHeight objdim1 hei_TDim)
                   (vla-put-ArrowheadSize objdim1 (* hei_TDim 0.5))
                   (vla-put-PrimaryUnitsPrecision objdim1 prec)
                   (vla-put-TextStyle objdim1 "Arial")
                   (vla-put-VerticalTextPosition objdim1 acAbove)
                   (setq objdim1A (vla-AddDimAligned *Model*
                                                     (vlax-3d-point Spo)
                                                     (vlax-3d-point po1)
                                                     (vlax-3d-point po_dim)
                                  )
                   )
                   (vla-put-TextOverride objdim1A "A")
                   (vla-put-VerticalTextPosition objdim1A acUnder)
                   (vla-put-TextHeight objdim1A hei_TDim)
                   (vla-put-TextStyle objdim1A "Arial")
                   (if (not objdimstyle_th)
                       (progn (vla-put-ScaleFactor objdim1 1)
                              (vla-put-textGap objdim1 (* hei_TDim 0.7))
                              (vla-put-ExtLine1Suppress objdim1 :vlax-false)
                              (vla-put-ExtLine2Suppress objdim1 :vlax-false)
                              (vla-put-DimLine1Suppress objdim1 :vlax-false)
                              (vla-put-DimLine2Suppress objdim1 :vlax-false)
                              (vla-put-Arrowhead1Type objdim1 acArrowArchTick)
                              (vla-put-Arrowhead2Type objdim1 acArrowArchTick)
                              (vla-put-TextPrefix objdim1 "")
                              (vla-put-TextSuffix objdim1 "")
                              (vla-put-TextInsideAlign objdim1 :vlax-false)
                              (if (not (tblobjname "dimstyler" "kichthuoc"))
                                  (setq objdimstyle_th (vla-add *dimstyles*
                                                                "kichthuoc"
                                                       )
                                  )
                              )
                              (vla-CopyFrom objdimstyle_th objdim1)
                              (if objdimstyle_th
                                  (vla-put-activeDimstyle ActDoc objdimstyle_th)
                                  (vla-put-activeDimstyle
                                      ActDoc
                                      (vla-item *dimstyles* "kichthuoc")
                                  )
                              )
                       )
                   )
                   (setq po_dim (ACET-GEOM-MIDPOINT po1 po2))
                   (setq objdim2 (vla-AddDimAligned *Model*
                                                    (vlax-3d-point po1)
                                                    (vlax-3d-point po2)
                                                    (vlax-3d-point po_dim)
                                 )
                   )
                   (vla-put-PrimaryUnitsPrecision objdim2 prec)
                   (vla-put-TextHeight objdim2 hei_TDim)
                   (setq objdim2B (vla-AddDimAligned *Model*
                                                     (vlax-3d-point po1)
                                                     (vlax-3d-point po2)
                                                     (vlax-3d-point po_dim)
                                  )
                   )
                   (vla-put-TextOverride objdim2B "B")
                   (vla-put-VerticalTextPosition objdim2B acUnder)
                   (vla-put-TextHeight objdim2B hei_TDim)
                   (setq po_dim (ACET-GEOM-MIDPOINT po2 Epo))
                   (setq objdim3 (vla-AddDimAligned *Model*
                                                    (vlax-3d-point po2)
                                                    (vlax-3d-point Epo)
                                                    (vlax-3d-point po_dim)
                                 )
                   )
                   (vla-put-PrimaryUnitsPrecision objdim3 prec)
                   (vla-put-TextHeight objdim3 hei_TDim)
                   (setq objdim3A (vla-AddDimAligned *Model*
                                                     (vlax-3d-point po2)
                                                     (vlax-3d-point Epo)
                                                     (vlax-3d-point po_dim)
                                  )
                   )
                   (vla-put-TextOverride objdim3A "A")
                   (vla-put-VerticalTextPosition objdim3A acUnder)
                   (vla-put-TextHeight objdim3A hei_TDim)
                   (While (= 5 (car (setq gr (grread 't 13 0))))
                       (redraw)
                       (setq p3 (trans (cadr gr) 1 0))
                       (setq
                           h (/ (* (A_triangle Spo p3 po1) 2) (distance Spo po1))
                       )
                       (setq bit (calcz Spo P3 po1))
                       (if (> bit 0)
                           (setq an (+ ang (/ pi 2)))
                           (setq an (- ang (/ pi 2)))
                       )
                       (setq potext1 (polar (acet-geom-midpoint Spo po1) an h))
                       (setq potext2 (polar (acet-geom-midpoint po1 po2) an h))
                       (setq potext3 (polar (acet-geom-midpoint po2 Epo) an h))
                       (vla-put-TextPosition objdim1 (vlax-3d-point potext1))
                       (vla-put-TextPosition objdim1A (vlax-3d-point potext1))
                       (vla-put-TextPosition objdim2 (vlax-3d-point potext2))
                       (vla-put-TextPosition objdim2B (vlax-3d-point potext2))
                       (vla-put-TextPosition objdim3 (vlax-3d-point potext3))
                       (vla-put-TextPosition objdim3A (vlax-3d-point potext3))
                   )
               )
               (acet-sysvar-restore)
               (Setq xinchao (vl-list->string '(72   101  108  108  111  32
                                                101  118  101  114  121  98
                                                111  100  121  46   32   77
                                                121  32   110  97   109  101
                                                32   84   114  97   110  32
                                                84   104  105  101  112
                                               )
                             )
               )
        )
    )
    (command "undo" "en")
    (princ xinchao)
    (princ)
)

Lisp thể hiện những dimension còn "động đậy" cho đến khi người dùng pick điểm phù hợp đặt vị trí để cố định dimension.

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  

×