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

[Yêu Cầu] Lisp Ghi Text Cao Độ Của Points

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

Chào các anh em bạn bè trên diễn đàn, hiện tại mình có một yêu cầu thế này:

- Bản vẽ của mình có rất nhiều các points có cao độ Z, giờ mong muốn của mình là có một lisp mà sau khi gõ lệnh, quét chọn tất cả các point, thì sẽ tạo các text có nội dung chính là cao độ của point đó, điểm chèn trùng với point luôn (trùng cả cao độ). Kiểu căn lề là Middle Center, chiều cao chữ là 2 (ghi luôn vào trong lísp, khi nào mình chỉnh sửa thì vào lisp chỉnh luôn :D). Nếu được thì tạo luôn một layer riêng cho các text này càng tốt ạ.

Mong anh em bạn bè trên diễn đàn giúp đỡ mình ạ!!!!!!!!!

  • 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

Trước hết thấy bạn muốn ăn sẵn quá. Tôi không biết viết lisp nhưng mà bạn nên biết cách chon lọc và dùng sao cho hợp với mình thôi.

Có cái này gửi bạn. Theo tôi nghĩ là đúng ý bạn.

http://www.cadviet.com/upfiles/5/70461_caodo1dien_cao_do_cho_point.lsp

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

Trước hết thấy bạn muốn ăn sẵn quá. Tôi không biết viết lisp nhưng mà bạn nên biết cách chon lọc và dùng sao cho hợp với mình thôi.

Có cái này gửi bạn. Theo tôi nghĩ là đúng ý bạn.

http://www.cadviet.com/upfiles/5/70461_caodo1dien_cao_do_cho_point.lsp

Hề hề hề, 

Chủ thớt khi dùng lisp này cần lưu ý việc chọn điểm phải đúng các điểm cần ghi bởi nếu chọn không đúng các điểm này sẽ có thể làm lisp bị lỗi. Theo ý cá nhân tôi thì nên tạo bộ lọc cho hàm ssget để có thể hạn chế việc chọn sai các điểm này.

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

Làm Code nhanh :

(defun c:diem (/ JText doc ms lays Nlay ss p cz a)

(defun JText (obj / p)

(setq p (vla-get-InsertionPoint obj)) (vla-put-Alignment obj 10)

(vla-put-TextAlignmentPoint obj p) )

(setq doc (vla-get-activedocument (vlax-get-Acad-Object)))

(setq ms (vla-get-modelspace doc) Lays (vla-get-layers doc))

(setq Nlay (vla-add Lays "Diem")) (vla-put-color Nlay 7)

(if (setq ss (ssget "X" '((0 . "point")))) (vlax-for obj (vla-get-ActiveSelectionset doc)

(setq p (vlax-get obj 'Coordinates)) (setq cz (rtos (caddr p) 2 2))

(setq a (vla-addtext ms cz (vlax-3d-point p) 2.)) (JText a) (vla-put-Layer a "Diem") ))  
(princ)) 

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

Hề hề hề, 

Chủ thớt khi dùng lisp này cần lưu ý việc chọn điểm phải đúng các điểm cần ghi bởi nếu chọn không đúng các điểm này sẽ có thể làm lisp bị lỗi. Theo ý cá nhân tôi thì nên tạo bộ lọc cho hàm ssget để có thể hạn chế việc chọn sai các điểm nàác bình

 

Bác Bình thì cao thủ rồi. em cũng không hiểu ssget là gì. Nếu được bác chỉ rõ cụ thể trường hợp bị lỗi như thế nào cho em biết rồi sửa giùm để e hoàn thiện hơn. Thanks 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

Bác Bình thì cao thủ rồi. em cũng không hiểu ssget là gì. Nếu được bác chỉ rõ cụ thể trường hợp bị lỗi như thế nào cho em biết rồi sửa giùm để e hoàn thiện hơn. Thanks bác!

Hề hề hề,

Bạn có thể xem tham khảo cái hàm (ssget .... ) của bác pphung183 ở phía trên về bộ lọc cho hàm ssget. Ở đây bác pphung183 mới lọc sơ bộ là chỉ chọn các điểm. Bạn có thể thêm vào bộ chọn chẳng hạn như lọc theo lớp chứa điểm cần ghi hay chọn theo mầu sắc của điểm cần ghi .....

Vì hàm ssget cho phép chọn nhiều loại đối tượng với các thuộc tính khác nhau nên nên không có bộ lọc rất dễ bị chọn nhầm đối tượng chẳng hạn như thay vì chỉ chọn điểm nó lại chọn thêm các text, các line hay các cung tròn, elip thì khi đó việc ghi cao độ sẽ bị sai không đúng với yêu cầu hoặc thậm chí lisp không chạy đượ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

Hề hề hề, 

Chủ thớt khi dùng lisp này cần lưu ý việc chọn điểm phải đúng các điểm cần ghi bởi nếu chọn không đúng các điểm này sẽ có thể làm lisp bị lỗi. Theo ý cá nhân tôi thì nên tạo bộ lọc cho hàm ssget để có thể hạn chế việc chọn sai các điểm này.

cám ơn bạn đã nhắc nhở, quả thực trước khi lập topic, mình cũng đã tìm rồi, nhưng không thấy được lisp này :(.

 

 

Làm Code nhanh :

(defun c:diem (/ JText doc ms lays Nlay ss p cz a)

(defun JText (obj / p)

(setq p (vla-get-InsertionPoint obj)) (vla-put-Alignment obj 10)

(vla-put-TextAlignmentPoint obj p) )

(setq doc (vla-get-activedocument (vlax-get-Acad-Object)))

(setq ms (vla-get-modelspace doc) Lays (vla-get-layers doc))

(setq Nlay (vla-add Lays "Diem")) (vla-put-color Nlay 7)

(if (setq ss (ssget "X" '((0 . "point")))) (vlax-for obj (vla-get-ActiveSelectionset doc)

(setq p (vlax-get obj 'Coordinates)) (setq cz (rtos (caddr p) 2 2))

(setq a (vla-addtext ms cz (vlax-3d-point p) 2.)) (JText a) (vla-put-Layer a "Diem") ))  
(princ)) 

ban ơi, mình đã dùng lisp của bạn thì ok rồi, nhưng khi gõ lệnh thì tự động điền cao độ cho tất cả các điểm luôn. Bạn có thể chỉnh sửa cho mình là chỉ điền cho nhóm điểm được quét chọn không.

  • 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

Sửa (setq ss (ssget "X" '((0 . "point")))) thành (setq ss (ssget '((0 . "point"))))

thank bạn, có thể mình hơi làm phiền bạn, nhưng post trước mình quên mất, mong bạn giúp mình lần cuối, đó là tạo một style mới và text tạo ra sẽ thuộc style này được không :(

  • Vote giảm 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

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  

×