Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
8 replies to this topic

#1 ryback

ryback

    biết zoom

  • Members
  • Pip
  • 17 Bài viết
Điểm đánh giá: -7 (bình thường)

Đã gửi 26 December 2015 - 09:26 PM

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 ạ!!!!!!!!!


  • -1

#2 thai11000

thai11000

    biết vẽ arc

  • Members
  • PipPip
  • 40 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 27 December 2015 - 08:58 AM

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.c...o_cho_point.lsp


  • 0

#3 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 27 December 2015 - 02:01 PM

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.c...o_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.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#4 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 27 December 2015 - 02:24 PM

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)) 

  • 0

#5 thai11000

thai11000

    biết vẽ arc

  • Members
  • PipPip
  • 40 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 27 December 2015 - 03:58 PM

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!


  • 0

#6 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 27 December 2015 - 04:28 PM

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. 


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#7 ryback

ryback

    biết zoom

  • Members
  • Pip
  • 17 Bài viết
Điểm đánh giá: -7 (bình thường)

Đã gửi 27 December 2015 - 05:36 PM

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.


  • -1

#8 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 27 December 2015 - 05:56 PM

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

#9 ryback

ryback

    biết zoom

  • Members
  • Pip
  • 17 Bài viết
Điểm đánh giá: -7 (bình thường)

Đã gửi 27 December 2015 - 06:16 PM

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 :(


  • -2