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

(entget) trả kết quả không đúng

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

Mình dùng lệnh (setq a (entget (car (entsel)))) để lấy toạ độ các đỉnh của Polilyne nhưng thấy rằng toạ độ nhận được và toạ độ hiển thị trên màn hình (dùng lệnh id) không trùng nhau. Việc này dẫn đến mình dùng lisp inan không thể in được. Khi in đều in ra giấy trắng trong khi bản vẽ đã bật hết các lớp. Các bác cho em hỏi là bị sao và cách khắc phục với ạ. Cảm ơn các bác :D

Đây là một trắc ngang trong file của em:

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
Mình dùng lệnh (setq a (entget (car (entsel)))) để lấy toạ độ các đỉnh của Polilyne nhưng thấy rằng toạ độ nhận được và toạ độ hiển thị trên màn hình (dùng lệnh id) không trùng nhau. Việc này dẫn đến mình dùng lisp inan không thể in được. Khi in đều in ra giấy trắng trong khi bản vẽ đã bật hết các lớp. Các bác cho em hỏi là bị sao và cách khắc phục với ạ. Cảm ơn các bác :D

Đây là một trắc ngang trong file của em:

Chào bạn hellocadviet,

1/- Cái bản vẽ bạn pót chả có tí trắc ngang trắc dọc nào cả bạn ạ. Chỉ trần sì mỗi cái khung bản vẽ màu đỏ trên lớp 2-khung.

2/- Hàm (entget (car(entsel))) trả về một list các mã dxf của đối tượng, tùy theo loại đối tượng mà cái list này khách nhau bạn ạ.

Với đối tượng "LWPOLYLINE" thì trong list trả về, các mã dxf 10 là tọa độ các đỉnh, còn với đối tượng "POLYLINE" thì không thể lấy tọa độ các đỉnh trực tiếp từ trong list mã dxf này.

3/- Để lấy các đỉnh của một đối tượng là "LWPOLYLINE" bạn có thể sử dụng lisp sau:

http://www.cadviet.com/upfiles/2/laydinh.lsp

4/- Để lấy đỉnh của một đối tượng là "POLYLỈNE" bạn có thể dùng lisp sau:

http://www.cadviet.com/upfiles/2/laydinhpline_1.lsp

 

Việc in ra giấy trắng tinh có thể do bạn đã khóa việc in ấn của các lớp này. Khi mở bản vẽ bạn gửi mình thấy có hai lớp là lớp 0 và lớp 2-khung. Trong đó lớp 2-khung là lớp hiện hành. Cả hai lớp này đều bị freeze cả, và lớp 2-khung thì bị khóa in ấn (biểu tượng cái máy in bị gạch chéo.) Bạn hãy kiểm tra lại bản vẽ của bạ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
Mình dùng lệnh (setq a (entget (car (entsel)))) để lấy toạ độ các đỉnh của Polilyne nhưng thấy rằng toạ độ nhận được và toạ độ hiển thị trên màn hình (dùng lệnh id) không trùng nhau. Việc này dẫn đến mình dùng lisp inan không thể in được. Khi in đều in ra giấy trắng trong khi bản vẽ đã bật hết các lớp. Các bác cho em hỏi là bị sao và cách khắc phục với ạ. Cảm ơn các bác :D

Đây là một trắc ngang trong file của em:

Dùng hàm trans để chuyển hệ tọa độ : (trans pt from to [disp])

 

tham khảo

(defun c:test(/ pt_lst ss); Polyline Vertex
 (vl-load-com)
 (defun poly-pts (pl / n p l)
   (setq n (fix (vlax-curve-getEndParam pl)))
   (or (vlax-curve-IsClosed pl) (setq n (1+ n)))
   (while (setq p (vlax-curve-getPointAtParam pl (setq n (1- n))))
     (setq l (cons (trans p 0 1) l))  ))

 (if (setq ss (ssget "+.:S:E" (list (cons 0 "*POLYLINE"))))
   (progn
     (setq pt_lst (poly-pts (ssname ss 0)))
     (princ(vl-prin1-to-string pt_lst))))
 (princ))

  • Vote tăng 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
Chào bạn hellocadviet,

3/- Để lấy các đỉnh của một đối tượng là "LWPOLYLINE" bạn có thể sử dụng lisp sau:

http://www.cadviet.com/upfiles/2/laydinh.lsp

4/- Để lấy đỉnh của một đối tượng là "POLYLỈNE" bạn có thể dùng lisp sau:

http://www.cadviet.com/upfiles/2/laydinhpline_1.lsp

sao mình download về chạy lisp bị báo lỗi. :D

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  

×