Chuyển đến nội dung
Diễn đàn CADViet
Nguyên Khải

Lisp gắn đối tượng text/mtext/dtext với đường dim kích thước (trở thành text override của dim)

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

      Em có 1 bài toán được đặt ra như sau: "Có một Mtext/Text/Dtext ở 1 vị trí bất kì trong bản vẽ (cùng model/layout) và một đường dim kích thước, tạo 1 lisp lệnh biến Mtext/Text/Dtext đã có trở thành Text Override của đường dim mà không làm thay đổi vị trí ban đầu của đoạn text hay đường dim đó". (Xem hình minh họa bên dưới)

 

      Các pro giúp em giải quyết nó với.

 

image.thumb.png.c1aadde67f68c6aea7c42d67cc6bc48d.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
31 phút trước, Nguyên Khải đã nói:

      Em có 1 bài toán được đặt ra như sau: "Có một Mtext/Text/Dtext ở 1 vị trí bất kì trong bản vẽ (cùng model/layout) và một đường dim kích thước, tạo 1 lisp lệnh biến Mtext/Text/Dtext đã có trở thành Text Override của đường dim mà không làm thay đổi vị trí ban đầu của đoạn text hay đường dim đó". (Xem hình minh họa bên dưới)

 

      Các pro giúp em giải quyết nó với.

 

 

Nếu dim giống bài toán trước của bác thì có thể dùng lisp này.

(defun c:te (/ ndt ent1 ent2 dxf)
(setq ent1 (ent_pick '("TEXT" "MTEXT" "DTEXT") "Pick TEXT"))
  (setq ent2 (ent_pick '("DIMENSION" ) "Pick DIMENSION"))
(if (and ent1 ent2)
(progn
  (setq ndt (Cdr (assoc 1 (entget ent1))))
(setq dxf (entget ent2))
 (setq dxf (subst (cons 1 (strcat "<>" "\\X" ndt)) (assoc 1 dxf) dxf))
 (entmod dxf)
	  ))
  (princ))
(defun ent_pick (typ promp / ent)
  (if (not (listp typ)) (setq typ (list typ)))
  (setq typ (mapcar 'list typ))
  (while (not ent)
    (while (not (setq ent (car (entsel (strcat "\n" promp))))))
    (if (not (assoc (cdr (assoc 0 (entget ent))) typ)) (setq ent nil))
    )
  ent
  )

 

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

Hi bác Đoàn, sử dụng code của bác thì đáp ứng được 50% bài toán của em. 50% còn lại là phải đáp ứng đoạn text ở vị trí cũ (không xuất hiện thêm nội dung giống vậy 1 lần nữa) và gắn kết để trở thành "text override" của đường dim đã chọn.

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 phút trước, Nguyên Khải đã nói:

Hi bác Đoàn, sử dụng code của bác thì đáp ứng được 50% bài toán của em. 50% còn lại là phải đáp ứng đoạn text ở vị trí cũ (không xuất hiện thêm nội dung giống vậy 1 lần nữa) và gắn kết để trở thành "text override" của đường dim đã chọn.

Không hiểu ý bạn lắm, bạn nên show 2 hình, 1 hình ban đầu, 1 hình kết quả có vẻ dễ hiểu hơn

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, Doan Nguyen Van đã nói:

Không hiểu ý bạn lắm, bạn nên show 2 hình, 1 hình ban đầu, 1 hình kết quả có vẻ dễ hiểu hơn

 

Em xin giải thích rõ hơn nhé:

Ban đầu:

- Text ở vị trí ban đầu như hình.

- Đường dim ở vị trí ban đầu như hình.

Kết quả sau khi sử dụng lisp:

-Text vẫn giữ nguyên vị trí như ban đầu, và trở thành "Text override" của đường dim

- Đường dim vẫn giữ nguyên vị trí ban đầu.

  • 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
9 phút trước, Nguyên Khải đã nói:

 

Kết quả sau khi sử dụng lisp:

-Text vẫn giữ nguyên vị trí như ban đầu, và trở thành "Text override" của đường dim

Bạn chỉ cách làm thủ công phần này cho mình thì mình mới viết vào lisp được, chứ mình chỉ biết cách tạo "text override" ở trong dim thôi, ở ngoài dim mình không biết

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

×