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

Nhờ viết LISP gán Contents

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

Xin chào các cao nhân! 

Mình là thành viên mới, không biết về LISP có một việc này muốn nhờ các cao nhân về LISP giúp mình được không ạ!

Giả sử trong autocad có 2 text riêng (tạm gọi là text 1, text 2) . Giờ mình muốn có một LISP mà khi gọi lệnh lên sẽ click vào text 1, sau đó click vào text 2. Khi đó toàn bộ nội dung (contents) của text 1 sẽ được gán cho text 2 (giống như sử dụng chức năng Insert Field). Khi sửa nội dung của text 1 mà dùng lệnh REGEN thì nội dung của text 2 sẽ tự động update theo text 1 (chỉ update contents chứ các phần khác do người dùng gán (layer, textstyle). 

Ai có thể giúp mình viết lisp này được không ạ. Xin cảm ơn rất nhiều!

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

Cảm ơn bác nhé! Nhưng vẫn chưa đúng ý mình lắm! Vì cái mình cần nhất là khi thay đổi nội dung text nguồn thì cái text sau phải tự động thay đổi theo cơ bạn ạ! 

Cái này mình nghĩ phải dùng field thô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
11 giờ trước, Binhphuong198 đã nói:

Xin chào các cao nhân! 

Mình là thành viên mới, không biết về LISP có một việc này muốn nhờ các cao nhân về LISP giúp mình được không ạ!

Giả sử trong autocad có 2 text riêng (tạm gọi là text 1, text 2) . Giờ mình muốn có một LISP mà khi gọi lệnh lên sẽ click vào text 1, sau đó click vào text 2. Khi đó toàn bộ nội dung (contents) của text 1 sẽ được gán cho text 2 (giống như sử dụng chức năng Insert Field). Khi sửa nội dung của text 1 mà dùng lệnh REGEN thì nội dung của text 2 sẽ tự động update theo text 1 (chỉ update contents chứ các phần khác do người dùng gán (layer, textstyle). 

Ai có thể giúp mình viết lisp này được không ạ. Xin cảm ơn rất nhiều!

1484996822_ezgif.com-video-to-gif(6).gif.ef302d4a1e2c3825345128c8866f9fd5.gif

K biết thế này có đúng ý bạn không ?

  • 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

Dùng field thì hơi tốn công vì nhiều bản vẽ! Mình làm bên cơ khí nên muốn khi thay đổi tên chi tiết hoặc ký hiệu bản vẽ thì chỉ cần thay đổi ở bảng kê là ở các bản chi tiết sẽ tự động update không phải sửa từng bản vẽ

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

Cái này mình nghĩ phải dùng field thôi

 

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

1484996822_ezgif.com-video-to-gif(6).gif.ef302d4a1e2c3825345128c8866f9fd5.gif

K biết thế này có đúng ý bạn không ?

Đúng chuẩn luôn bạn ạ! Bạn có thể gửi cho mình xin LISP được ko? Cảm ơn bạn trước nhé

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

 

Đúng chuẩn luôn bạn ạ! Bạn có thể gửi cho mình xin LISP được ko? Cảm ơn bạn trước nhé

(defun c:te (/ ent1 ent2 oid1 cnt)
  (setq ent1 (car (entsel "\npick text nguon"))
	ent2 (car (Entsel "\npick text dich")))
(vla-put-textstring (vlax-ename->vla-object ent2) (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID (vlax-ename->vla-object ent1))) ">%).TextString>%")))

Cái này sử dụng text thì được, chứ Mtext thì thấy hơi lỗi 

  • 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
10 phút trước, Doan Nguyen Van đã nói:

(defun c:te (/ ent1 ent2 oid1 cnt)
  (setq ent1 (car (entsel "\npick text nguon"))
	ent2 (car (Entsel "\npick text dich")))
(vla-put-textstring (vlax-ename->vla-object ent2) (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID (vlax-ename->vla-object ent1))) ">%).TextString>%")))

Cái này sử dụng text thì được, chứ Mtext thì thấy hơi lỗi 

Cảm ơn bạn rất nhiều! Mtext thì khi Insert Field cũng bị như vậy do nó có một đoạn code định nghĩa phía trước contents hay sao ý! 

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 21/8/2019 tại 08:57, Doan Nguyen Van đã nói:

1484996822_ezgif.com-video-to-gif(6).gif.ef302d4a1e2c3825345128c8866f9fd5.gif

K biết thế này có đúng ý bạn không ?

Bác Đoàn có thể chỉnh giúp lisp chọn được nội dung của Block ATT làm nguồn, đích là dtext, đc không? hiện tại lisp đang dùng rất ngon cho nguồn là dtext và đích cũng là dtext. Cám ơn bá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
Vào lúc 21/8/2019 tại 08:57, Doan Nguyen Van đã nói:

1484996822_ezgif.com-video-to-gif(6).gif.ef302d4a1e2c3825345128c8866f9fd5.gif

K biết thế này có đúng ý bạn không ?

Sao của em Text dích là bị bôi đen anh ơi.

Với anh thêm vòng lặp cho chọn nhiều Text Đích được không? Chỉ kết thúc khi Enter.

121.PNG.6a1f0e65040b9b68b2c8bf8c422cc287.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
11 giờ trước, kieutrang đã nói:

Sao của em Text dích là bị bôi đen anh ơi.

Với anh thêm vòng lặp cho chọn nhiều Text Đích được không? Chỉ kết thúc khi Enter.

121.PNG.6a1f0e65040b9b68b2c8bf8c422cc287.PNG

image.png.95e866bbeb6ba64a6e01b8aed54e0d2a.png

Bỏ stick ô này thì hết thấy tô đen, nhưng tô đen thì dễ phân biệt cái nào nguồn, cái nào đích (ý kiến cá nhâ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
14 giờ trước, anhtam_084 đã nói:

Bác Đoàn có thể chỉnh giúp lisp chọn được nội dung của Block ATT làm nguồn, đích là dtext, đc không? hiện tại lisp đang dùng rất ngon cho nguồn là dtext và đích cũng là dtext. Cám ơn bác.

 

11 giờ trước, kieutrang đã nói:

Với anh thêm vòng lặp cho chọn nhiều Text Đích được không? Chỉ kết thúc khi Enter.

 

Giải quyết vấn đề của cả 2 bạn 

(defun c:te (/ ent1 ent2 )
  (setq ent1 (car (nentsel "\npick text nguon")))
(while (setq ent2 (car (Entsel "\npick text dich")))
(vla-put-textstring (vlax-ename->vla-object ent2)
  (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID (vlax-ename->vla-object ent1))) ">%).TextString>%"))))

 

  • 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

×