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

Nhờ Gợi Ý Lisp Bắt Điểm Trên 1 Đối Tượng.

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

Em cần các anh chị gợi ý cho đôi chút: 

Ý định của em thế này:

 - Em đang có 1 đối tượng như Line,SPline LWpoline, Circle, Arc..., và 1 đoạn code lisp đo dài.

Giả sử em chọn đối tượng Line  tên là A.  Bây giờ em muốn chọn 1 khoảng cách trên đối tượng A bằng cách pick 2 điểm ( chỉ bắt điểm trên đối tượng A, tuy nhiên vẫn giữ được các điểm giao cắt của các đối tượng khác với A là Intersec ) , mà ko bị bắt điểm lung tung sang đối tượng khác.

 

Cách thủ công em vẫn làm là bật chết độ Intersec rồi zoom bản vẽ lên, soi điểm giao của A với đối tượng khác. Tuy nhiên thỉnh thoảng vẫn bị soi nhầm...  :wacko:  :wacko:

 

Mong anh chị gợ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

Bạn tham khảo hàm vlax-curve-getClosestPointTo

 

Anh có ví dụ cụ thể nào ko ạ. Cho em tham khảo với  : ) em chưa hiểu biết nhiều về hàm VLax.    :D  :D  :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ôi tưởng bạn chỉ cần "gợi ý" : 

(defun c:DC(/  Ent dis dis1 dis2 pt pt1 pt2)
  (if (and (setq Ent (car (entsel "\nChon doi tuong can do :")))
	   (wcmatch (cdr (assoc 0 (entget ent))) "*LINE,ARC,CIRCE")	   
	   (setq pt1 (getpoint "\nDiem dau :" ))
	   (setq pt2 (getpoint pt1 "\nDiem cuoi :" )))
    (progn
      (setq pt11 (vlax-curve-getClosestPointTo ent pt1)
	    dis1 (vlax-curve-getDistAtPoint Ent pt11)
	    pt12 (vlax-curve-getClosestPointTo ent pt2)
	    dis2 (vlax-curve-getDistAtPoint Ent pt12))
      (setq dis (abs(- dis2 dis1)))
      (princ (strcat "\nKhoang cah :" (rtos dis)))  ) )
  (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

Em vừa load thử. Nhưng ko đúng ý anh ạ. 

Ý em là

B1.  Chọn đối tượng A.

B2.   Chọn điểm 1  và điểm 2 nằm trên A

 

Tức là em muốn trong B2. thì 2 điểm phải  nằm trên đối tượng A., không cho phép nó bắt điểm vào bất kỳ đối tượng nào khác ngoài A.    :(  :(

 

 

 

 

Tôi tưởng bạn chỉ cần "gợi ý" : 

(defun c:DC(/  Ent dis dis1 dis2 pt pt1 pt2)
  (if (and (setq Ent (car (entsel "\nChon doi tuong can do :")))
	   (wcmatch (cdr (assoc 0 (entget ent))) "*LINE,ARC,CIRCE")	   
	   (setq pt1 (getpoint "\nDiem dau :" ))
	   (setq pt2 (getpoint pt1 "\nDiem cuoi :" )))
    (progn
      (setq pt11 (vlax-curve-getClosestPointTo ent pt1)
	    dis1 (vlax-curve-getDistAtPoint Ent pt11)
	    pt12 (vlax-curve-getClosestPointTo ent pt2)
	    dis2 (vlax-curve-getDistAtPoint Ent pt12))
      (setq dis (abs(- dis2 dis1)))
      (princ (strcat "\nKhoang cah :" (rtos dis)))  ) )
  (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

với line bạn có thể dùng tọa độ trung bình của 2 điểm để chọn đường đôi tượng A, tức là đường A có 2 giao điểm thì cộng lấy điểm middpoint giữa 2 giao điểm lại là nó chọn A mà. Chắc bạn lại dùng Command khi lập trình cho cad nên mới hỏi thế

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

Em gửi ảnh minh họa. NIck em bị lỗi, ko up ảnh trực tiếp được. Anh xem qua link sau ạ.

https://drive.google.com/file/d/0B8Wyt0hkwi0yZkVyTHVPdG1fbVE/view

 

Tức là em sử dụng, thì vẫn bị bắt biểm ngoài A, nên ko đúng ý em muốn.

Mục đích là cái chế độ bắt điêm bây giờ chỉ bật cho đối tượng A thôi.  :blink:  :blink:  :blink:

 

Chưa thử, nhưng đọc qua lsp thì đúng yêu cầu rồi còn gì??? (điểm đầu, điểm cuối chính là bước 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

À! Là chế độ truy bắt điểm, hình như nó chỉ phụ thuộc vào OSNAP setting và biến APERTURE chứ không phụ thuộc vào đối tượng.

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 nghĩ soi nhầm là do Zoom chưa đủ lớn thôi, nên chăng bạn tạo một option để RE bản vẽ khi bạn không thể zoom tiếp được nữa, rồi lại tiếp tục chọn điểm

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à chế độ truy bắt điểm, hình như nó chỉ phụ thuộc vào OSNAP setting và biến APERTURE chứ không phụ thuộc vào đối tượng.

Mãi mà các anh mới chịu hiểu, em chỉ cần bắt điểm thôi   :)  :)

 

Mình nghĩ soi nhầm là do Zoom chưa đủ lớn thôi, nên chăng bạn tạo một option để RE bản vẽ khi bạn không thể zoom tiếp được nữa, rồi lại tiếp tục chọn điểm

 

Dạ, em vẫn phải làm y như anh nói. Cứ Zoom to rồi soi, soi ko dc lại Zoom., ko tránh khỏi thỉnh thoảng kích nhầm..  :D  :D  :D Do đó mí nhờ các anh đưa cao kiến xem cải thiện tình hình có khá khẩm hơn ko ạ.

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  

×