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

Dóng kích thước hàng loạt các Block

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

Nhờ các Bác trên diễn đàn giúp đỡ chỉnh sửa lisp này thành lisp  dóng kích thước hàng loạt các block.

  

;; AUTO DIMALINGED LINES AND POLYLINES
;;;-------------------------------------------------------------
(defun TBCong (x1 x2) (/ (+ x1 x2) 2)) ;;;Trung binh cong
;;;-------------------------------------------------------------
(defun MidP (p1 p2) ;;;Midpoint
(list (TBCong (car p1) (car p2)) (TBCong (cadr p1) (cadr p2)) (TBCong (caddr p1) (caddr p2)))
)
;;;-------------------------------------------------------------
(defun getVert (e / i L) ;;;Return list of all vertex from pline e
(setq i 0 L nil)
(vl-load-com)
(repeat (fix (+ (vlax-curve-getEndParam e) 1))
    (setq L (append L (list (vlax-curve-getPointAtParam e i))))
    (setq i (1+ i))
)
L
)
;;;-------------------------------------------------------------
(defun etype (e) (cdr (assoc 0 (entget e)))) ;;;Entity type
;;;-------------------------------------------------------------
(defun dim2p (p1 p2 s) ;;;Dimaligned 2 Point
(command "dimaligned" p1 p2 (polar (MidP p1 p2) (+ (angle p1 p2) (/ pi 2)) s))
)
;;;-------------------------------------------------------------
(defun dimLine(e s) ;;;Dimaligned Line
(dim2p (cdr (assoc 10 (entget e))) (cdr (assoc 11 (entget e))) s)
)
;;;-------------------------------------------------------------
(defun dimPline(e s) ;;;Dimaligned PLine
(setq Lp (getvert e) i 0)
(repeat (1- (length Lp))
    (dim2p (nth i Lp) (nth (1+ i) Lp) s)
    (setq i (1+ i))
)
)

;;;-------------------------------------------------------------
(defun C:ATD( / ss s oldos e) ;;;AutoDimaligned Line & Pline
(if (not s0) (setq s0 0))
(setq
    ss (ssget '((0 . "LINE,LWPOLYLINE")))
    s (getdist (strcat "\nKhoang cach tu doi tuong den duong kich thuoc <" (rtos s0) ">:"))
    oldos (getvar "osmode")
)
(if (not s) (setq s s0) (setq s0 s))
(setvar "osmode" 0)
(while (setq e (ssname ss 0))
    (if (= (etype e) "LINE") (dimLine e s) (dimPline e s))
    (ssdel e ss)
)
(setvar "osmode" oldos)
(princ)
)
 

 

ATD.LSP

Giong kich thuoc cac 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
2 giờ trước, pdhuyxn2 đã nói:

Nhờ các Bác trên diễn đàn giúp đỡ chỉnh sửa lisp này thành lisp  dóng kích thước hàng loạt các block.

  

;; AUTO DIMALINGED LINES AND POLYLINES
;;;-------------------------------------------------------------
(defun TBCong (x1 x2) (/ (+ x1 x2) 2)) ;;;Trung binh cong
;;;-------------------------------------------------------------
(defun MidP (p1 p2) ;;;Midpoint
(list (TBCong (car p1) (car p2)) (TBCong (cadr p1) (cadr p2)) (TBCong (caddr p1) (caddr p2)))
)
;;;-------------------------------------------------------------
(defun getVert (e / i L) ;;;Return list of all vertex from pline e
(setq i 0 L nil)
(vl-load-com)
(repeat (fix (+ (vlax-curve-getEndParam e) 1))
    (setq L (append L (list (vlax-curve-getPointAtParam e i))))
    (setq i (1+ i))
)
L
)
;;;-------------------------------------------------------------
(defun etype (e) (cdr (assoc 0 (entget e)))) ;;;Entity type
;;;-------------------------------------------------------------
(defun dim2p (p1 p2 s) ;;;Dimaligned 2 Point
(command "dimaligned" p1 p2 (polar (MidP p1 p2) (+ (angle p1 p2) (/ pi 2)) s))
)
;;;-------------------------------------------------------------
(defun dimLine(e s) ;;;Dimaligned Line
(dim2p (cdr (assoc 10 (entget e))) (cdr (assoc 11 (entget e))) s)
)
;;;-------------------------------------------------------------
(defun dimPline(e s) ;;;Dimaligned PLine
(setq Lp (getvert e) i 0)
(repeat (1- (length Lp))
    (dim2p (nth i Lp) (nth (1+ i) Lp) s)
    (setq i (1+ i))
)
)

;;;-------------------------------------------------------------
(defun C:ATD( / ss s oldos e) ;;;AutoDimaligned Line & Pline
(if (not s0) (setq s0 0))
(setq
    ss (ssget '((0 . "LINE,LWPOLYLINE")))
    s (getdist (strcat "\nKhoang cach tu doi tuong den duong kich thuoc <" (rtos s0) ">:"))
    oldos (getvar "osmode")
)
(if (not s) (setq s s0) (setq s0 s))
(setvar "osmode" 0)
(while (setq e (ssname ss 0))
    (if (= (etype e) "LINE") (dimLine e s) (dimPline e s))
    (ssdel e ss)
)
(setvar "osmode" oldos)
(princ)
)
 

 

ATD.LSP

Giong kich thuoc cac Block.dwg

Gửi bạn nhé

Lệnh DAT

Lưu ý: Các block chuyển cao độ z về 0 nhé

Dim BL Auto (DAT).rar

  • 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
4 giờ trước, pdhuyxn2 đã nói:

Nhờ các Bác trên diễn đàn giúp đỡ chỉnh sửa lisp này thành lisp  dóng kích thước hàng loạt các block.

ATD.LSP

Giong kich thuoc cac Block.dwg

Lisp của bạn vẫn dùng được nếu các block nằm tại đỉnh polyline, không cần sửa gì cả. Nếu không nằm tại đỉnh mới phải sửa.

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
16 phút trước, alisp đã nói:

Lisp của bạn vẫn dùng được nếu các block nằm tại đỉnh polyline, không cần sửa gì cả. Nếu không nằm tại đỉnh mới phải sửa.

Đúng rồi Bạn ơi Lisp này dóng kích thước tại các đỉnh Polyline mà.

 

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, huunhantvxdts đã nói:

Gửi bạn nhé

Lệnh DAT

Lưu ý: Các block chuyển cao độ z về 0 nhé

Dim BL Auto (DAT).rar

Cám ơn Bác đã giúp đỡ. Nhưng Bác ơi Bác có thể chỉnh Lisp trong trường hợp Block nằm lệch đường Plyline vẫn có thể dóng kích thước được không ạ. 

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
13 giờ trước, pdhuyxn2 đã nói:

Cám ơn Bác đã giúp đỡ. Nhưng Bác ơi Bác có thể chỉnh Lisp trong trường hợp Block nằm lệch đường Plyline vẫn có thể dóng kích thước được không ạ. 

nghĩa là bạn chọn block nào thì block đó sẽ được đo

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

Đúng rồi bác ơi. Nhiều khi điểm đặt Block không nằm tại Plyline Bác Ạ. VD như file em cad  gửi thì Vt6 không nằm tại Polyline lên không dóng được.

 

image.png.32c8383dc656480c6b669d8ff8130370.png

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
2 giờ trước, pdhuyxn2 đã nói:

Đúng rồi bác ơi. Nhiều khi điểm đặt Block không nằm tại Plyline Bác Ạ. VD như file em cad  gửi thì Vt6 không nằm tại Polyline lên không dóng được.

 

image.png.32c8383dc656480c6b669d8ff8130370.png

Gửi lại cho bạn nhé

Auto Dim Block (ATT).rar

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
11 giờ trước, pdhuyxn2 đã nói:

Sao EM làm vẫn không được Bác ơi ? Dânhs lệnh ATT thì Không được. Đánh lệnh DAT thì giống như Lisp cũ Bác Ạ.

Chắc block có Z quá lớn, mình đã lọc các block có khoảng cách 50 đến polyline rồi

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

×