Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
10 replies to this topic

#1 Danh Cong

Danh Cong

    biết lệnh linetype

  • Members
  • PipPipPipPip
  • 242 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 27 October 2016 - 08:50 AM

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 ý.  :)  :)  :)


  • 0

             ***  Vô lo - Vô nghĩ - Vô sầu hận  ***

***  Chẳng thương - Chẳng giận - Chẳng đau lòng  ***


#2 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1431 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 27 October 2016 - 09:40 AM

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


  • 1

#3 Danh Cong

Danh Cong

    biết lệnh linetype

  • Members
  • PipPipPipPip
  • 242 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 27 October 2016 - 10:22 AM

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


  • 0

             ***  Vô lo - Vô nghĩ - Vô sầu hận  ***

***  Chẳng thương - Chẳng giận - Chẳng đau lòng  ***


#4 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1431 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 27 October 2016 - 10:31 AM

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

  • 0

#5 Danh Cong

Danh Cong

    biết lệnh linetype

  • Members
  • PipPipPipPip
  • 242 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 27 October 2016 - 10:54 AM

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

  • 0

             ***  Vô lo - Vô nghĩ - Vô sầu hận  ***

***  Chẳng thương - Chẳng giận - Chẳng đau lòng  ***


#6 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 665 Bài viết
Điểm đánh giá: 312 (khá)

Đã gửi 27 October 2016 - 11:05 AM

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)


  • 0

#7 506509

506509

    biết zoom

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

Đã gửi 27 October 2016 - 11:31 AM

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ế


  • 0

#8 Danh Cong

Danh Cong

    biết lệnh linetype

  • Members
  • PipPipPipPip
  • 242 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 27 October 2016 - 11:37 AM

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...HVPdG1fbVE/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)


  • 0

             ***  Vô lo - Vô nghĩ - Vô sầu hận  ***

***  Chẳng thương - Chẳng giận - Chẳng đau lòng  ***


#9 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 665 Bài viết
Điểm đánh giá: 312 (khá)

Đã gửi 27 October 2016 - 11:43 AM

À! 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.


  • 0

#10 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 27 October 2016 - 11:59 AM

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


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#11 Danh Cong

Danh Cong

    biết lệnh linetype

  • Members
  • PipPipPipPip
  • 242 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 27 October 2016 - 12:31 PM

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


  • 0

             ***  Vô lo - Vô nghĩ - Vô sầu hận  ***

***  Chẳng thương - Chẳng giận - Chẳng đau lòng  ***