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

Hỏi về hàm vlax-curve-getPointAtDist

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

Cho em hỏi về hàm vlax-curve-getPointAtDist  (tìm điểm trên Cuver khi biết khoảng cách):

1. Theo định nghĩa của hàm thì nó sẽ tính khoảng cách từ điểm bắt đầu của cuver . Vậy có cách nào lựa chọn điểm bắt đầu này không?

Cụ thể là polyline có 2 đầu bây giờ sẽ lựa chọn 1 đầu để làm điểm bắt đầu tính

2. Có nhất thiết phải chuyển hệ tọa độ UCS sang WCS trước khi dùng hàm không?

Nhờ các bác giúp đỡ !

 

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
4 giờ trước, Danh Cong đã nói:

Bài của bạn đây, xưa rồi nhưng đọc lại vẫn thấy hay :)) 

https://www.cadviet.com/forum/topic/10065-hỏi-về-thông-tin-của-spline-và-một-số-hàm-vlvlax/

cảm ơn bác! Nhưng  đọc hết 2 trang mà chả hiểu gì  ^_^ 

Túm lại là  em muốn chọn điểm (1 trong 2 đầu pline) để hàm Vlax-curve - getpointatDist bắt đầu tính khoảng cách từ nó mà mình không cần biết nó là đầu hay là cuối pline.

E đang có ý là sau khi pick chọn 1 trong 2 đầu của pline rồi kiểm tra điểm pick có phải là điểm đầu không, nếu đúng => dùng hàm. Nếu không thì xuất tọa độ pl đó rồi vẽ 1 pline mới với list tọa độ đảo ngược, sau đó dùng hàm xác định điểm cần tìm trên Pline mới vì khi đó 2 pline trùng nhau, chỉ ngược nhau điểm đầu và cuối.

Có cách nào nhanh hơn không ah?

 

 

 

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 đọc lại đi, ngay mấy bài đầu bình luận có thứ bạn cần rồi đấy. Bác #SSG đã giải thích kỹ lưỡng lắm rồi. :)))

Đọc ko hiểu nữa thì mình nói tiếp. ^^

 

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
7 giờ trước, doductiep đã nói:

cảm ơn bác! Nhưng  đọc hết 2 trang mà chả hiểu gì  ^_^ 

Túm lại là  em muốn chọn điểm (1 trong 2 đầu pline) để hàm Vlax-curve - getpointatDist bắt đầu tính khoảng cách từ nó mà mình không cần biết nó là đầu hay là cuối pline.

E đang có ý là sau khi pick chọn 1 trong 2 đầu của pline rồi kiểm tra điểm pick có phải là điểm đầu không, nếu đúng => dùng hàm. Nếu không thì xuất tọa độ pl đó rồi vẽ 1 pline mới với list tọa độ đảo ngược, sau đó dùng hàm xác định điểm cần tìm trên Pline mới vì khi đó 2 pline trùng nhau, chỉ ngược nhau điểm đầu và cuối.

Có cách nào nhanh hơn không ah?

 

Nếu cần kiểm tra điểm pick có phải điểm đầu PLINE hay không thì so sánh điểm pick đó với Vlax-curve-getStartpoint và Vlax-curve-getEndpoint 

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
8 giờ trước, doductiep đã nói:

cảm ơn bác! Nhưng  đọc hết 2 trang mà chả hiểu gì  ^_^ 

Túm lại là  em muốn chọn điểm (1 trong 2 đầu pline) để hàm Vlax-curve - getpointatDist bắt đầu tính khoảng cách từ nó mà mình không cần biết nó là đầu hay là cuối pline.

E đang có ý là sau khi pick chọn 1 trong 2 đầu của pline rồi kiểm tra điểm pick có phải là điểm đầu không, nếu đúng => dùng hàm. Nếu không thì xuất tọa độ pl đó rồi vẽ 1 pline mới với list tọa độ đảo ngược, sau đó dùng hàm xác định điểm cần tìm trên Pline mới vì khi đó 2 pline trùng nhau, chỉ ngược nhau điểm đầu và cuối.

Có cách nào nhanh hơn không ah?

 

 

 

Tham khảo:

(defun c:test (/ ent pickPt pt dist)
  (vl-load-com)
  (if (and (setq ent (entsel "\nSelect a curve ") )
	   (wcmatch (cdr (assoc 0 (entget (car ent))))"ARC,LINE,*POLYLINE,SPLINE" )   )
    (progn
      (setq pt (trans (cadr ent) 1 0)
            ent (car ent)  )
      (setq dist (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent)))
      (setq pickPt (vlax-curve-getClosestPointToProjection ent pt '(0. 0. 1.)))
      (if (< (vlax-curve-getDistAtPoint ent pickPt) (/ dist 2.) )
	(alert "Diem pick phia dau cua curve.")
	(alert "Diem pick phia cuoi cua curve.")  )    )  )  
  (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
17 giờ trước, doductiep đã nói:

Cho em hỏi về hàm vlax-curve-getPointAtDist  (tìm điểm trên Cuver khi biết khoảng cách):

 

Các bác hiểu như thế nào thế nhỉ ^^, em thì suy luận theo nội dung này của chủ thớt:

(defun c:CONG ( / DIS DISOBJ OBJECT PARAM PT1 PT2)
  (vl-load-com)
  (setq object (car (entsel "\nPick Polyline: "))
    pt1 (getpoint "\nPick point:")
    dis (getreal "\nNhap khoang cach: "))

  (setq param (vlax-curve-getparamatpoint object pt1))
  (if     (= param 0)
        (progn     (setq pt2 (vlax-curve-getpointatdist object dis))
      );end progn 1
        (progn    (setq disobj (vlax-curve-getDistAtParam object (vlax-curve-getEndParam object))
              pt2 (vlax-curve-getpointatdist object (- disobj dis)))
      );end progn 2
 )
  (command "point" "non" pt2)
  (princ))

( Mà các anh cho em hỏi, làm sao bài đăng của em nó có màu mè, dễ nhìn code như của các bác vậy ?, em đăng cả file .lsp mà nó có mỗi đường dẫn thôi. )

Cong.lsp

  • 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

Code của bác Danh Cong là đúng cái em cần tìm

Code bác gia_bach là xác định điểm pick là bên trái hay phải của Curve

của bác Doan Van Ha là tính khoảng cách 2 điểm pick trên Curve

Lần sau e sẽ cố diễn đạt tốt hơn ^_^

Cảm ơn các bác đã nhiệt tình giúp đỡ. 

 

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  

×