Đến nội dung


Hình ảnh
- - - - -

tìm giao điểm của 2 đối tượng


  • Please log in to reply
3 replies to this topic

#1 lapnickchiviyeuem

lapnickchiviyeuem

    Chưa sử dụng CAD

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

Đã gửi 05 January 2009 - 09:23 PM

hi everybody! em đang lập trình một ứng dụng nho nhỏ trong autolisp nhưng có một vấn đề chua thể giải quyết được. mong các bác giúp đỡ. vấn đề của em như sau : em đang muốn tìm giao điểm của 2 đối tượng( 2 đối tượng này có được bằng lệnh (entlast)) nhưng em không thể xác định được giao điểm của chúng, việc xác định giao điểm này cần cho việc tính khoảng cách ( ví dụ em vẽ 2 đường thẳng dt1 (o,o) đến (5,5); dt2 (0,5) đến (5,0), làm thế nào để xác định giao điểm của 2 đường thẳng này?)
  • 0

#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 06 January 2009 - 08:41 AM

hi everybody! em đang lập trình một ứng dụng nho nhỏ trong autolisp nhưng có một vấn đề chua thể giải quyết được. mong các bác giúp đỡ. vấn đề của em như sau : em đang muốn tìm giao điểm của 2 đối tượng( 2 đối tượng này có được bằng lệnh (entlast)) nhưng em không thể xác định được giao điểm của chúng, việc xác định giao điểm này cần cho việc tính khoảng cách ( ví dụ em vẽ 2 đường thẳng dt1 (o,o) đến (5,5); dt2 (0,5) đến (5,0), làm thế nào để xác định giao điểm của 2 đường thẳng này?)

bạn dùng lệnh (inters p1 p2 p3 p4) để xác định giao của 2 đoạn p1 p2 và p3 p4
  • 0

#3 lapnickchiviyeuem

lapnickchiviyeuem

    Chưa sử dụng CAD

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

Đã gửi 06 January 2009 - 12:17 PM

bạn dùng lệnh (inters p1 p2 p3 p4) để xác định giao của 2 đoạn p1 p2 và p3 p4

cảm ơn nguyen hoanh. tôi đã làm như bạn bảo chương trình chạy ổn ròi, nhưng còn một vấn đề nữa, lệnh inters chỉ tìm được giao điểm của 2 đường thẳng, trong trường hợp tìm giao điểm với một đường cong thì sao? mong các bác giúp đỡ. cảm ơn
  • 0

#4 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 06 January 2009 - 03:41 PM

cảm ơn nguyen hoanh. tôi đã làm như bạn bảo chương trình chạy ổn ròi, nhưng còn một vấn đề nữa, lệnh inters chỉ tìm được giao điểm của 2 đường thẳng, trong trường hợp tìm giao điểm với một đường cong thì sao? mong các bác giúp đỡ. cảm ơn

Bạn dùng hàm GiaoDT sau. Cái này của anh Hoành viết lâu rồi ở đâu đó, ssg có biên tập thêm một chút:


(defun GiaoDT (e1 e2 / ob1 ob2 g L i kq)
(vl-load-com)
(setq
ob1 (vlax-ename->vla-object e1)
ob2 (vlax-ename->vla-object e2)
g (vlax-variant-value (vla-IntersectWith ob1 ob2 acExtendNone))
)
(if (/= (vlax-safearray-get-u-bound g 1) -1) (setq L (vlax-safearray->list g)))
(setq i 0)
(repeat (/ (length L) 3)
(setq kq (append (list (list (nth i L) (nth (+ i 1) L) (nth (+ i 2) L))) kq))
(setq i (+ i 3))
)
kq
)


Kết quả là một "list of 3Dpoint", gồm toàn bộ các giao điểm của 2 đối tượng, bất kể loại đối tượng nào, miễn là nó có dạng "đường", kể cả đường bao của đối tượng region. Nếu không có giao điểm, kết quả return nil.
Không bàn đến ý nghĩa các code lúc này, cứ dùng đã rồi sẽ hiểu!
Một ví dụ:

(defun C:VD()
(GiaoDT (car (entsel "\nEnt 1:")) (car (entsel "\nEnt 2:")))
)

Chạy lệnh VD, bấm F2 sẽ thấy giá trị return.
  • 0