Chuyển đến nội dung
Diễn đàn CADViet
doanduyhung

Giúp Tìm Giao Điểm Polyline

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

Bạn nào có lisp tự tạo nhiều giao điểm trên polyline (các điểm phân đoạn của 1 polyline), khi cho 1 đoạn polyline cắt qua các đường thẳng line-tròn-vuông bật kì ko?

Chỉnh sửa theo interwar1283

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 nào có lisp tự tạo nhiều giao điểm trên polyline (các điểm phân đoạn của 1 polyline), khi cho 1 đoạn polyline cắt qua các đường thẳng line-tròn-vuông bật kì ko?

Lệnh GIAO dưới đây sẽ vẽ các điểm point vào giao điểm của 2 đối tượng.

 

(defun c:giao ()
 (defun GiaoDT	(ent1 ent2)
   (setq ob1 (vlax-ename->vla-object ent1)
  ob2 (vlax-ename->vla-object ent2)
   )
   (setq g (vlax-variant-value
      (vla-IntersectWith ob1 ob2 acExtendNone)
    )
   )
   (if	(/= (vlax-safearray-get-u-bound g 1) -1)
     (setq g (vlax-safearray->list g))
     (setq g nil)
   )
   (if	g
     (progn
(setq kq nil
      sd (fix (/ (length g) 3))
)
(repeat	sd
  (setq	kq (append kq (list (list (car g) (cadr g) (caddr g))))
	g  (cdddr g)
  )
)
kq
     )
     nil
   )
 )
 (setq ent1 (car (entsel "\nVao dt1: ")))
 (redraw ent1 3)
 (setq ent2 (car (entsel "\nVao dt2: ")))
 (redraw ent1 4)
 (setq giao (giaodt ent1 ent2))
 (if giao
   (foreach pp	giao
     (entmake (list (cons 0 "POINT") (cons 10 pp)))
   )
   (alert "2 doi tuong khong giao nhau!")
 )
 (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
Bạn nào có lisp tự tạo nhiều giao điểm trên polyline (các điểm phân đoạn của 1 polyline), khi cho 1 đoạn polyline cắt qua các đường thẳng line-tròn-vuông bật kì ko?

Ý của bạn mình kô rõ lắm, khi polyline cắt qua line-tròn-vuông bất kỳ thì đã tồn tại giao điểm giữa chúng vậy việc tạo ra chúng để làm gì, bạn nói cụ thể hơn công việc tiếp sau khi bạn đã có giao điểm đó như vậy rễ hình dung hơ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
Ý của bạn mình kô rõ lắm, khi polyline cắt qua line-tròn-vuông bất kỳ thì đã tồn tại giao điểm giữa chúng vậy việc tạo ra chúng để làm gì, bạn nói cụ thể hơn công việc tiếp sau khi bạn đã có giao điểm đó như vậy rễ hình dung hơn.

Khi mình vẽ 1 polyline qua 2 điểm thì chỉ có 1 phân đọan thôi.

Mà polyline này cắt qua 2 đường thẳng bất kì.

Khi đó mình chọn polyline nó sẽ tự động phân thành 3 phân đoạn với 4 điểm được tạo ra trên polyline ban đầu ( đả thêm được 2 điểm giao tại vị trí các đường line cắt qua)

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ệnh GIAO dưới đây sẽ vẽ các điểm point vào giao điểm của 2 đối tượng.

 

(defun c:giao ()
 (defun GiaoDT	(ent1 ent2)
   (setq ob1 (vlax-ename->vla-object ent1)
  ob2 (vlax-ename->vla-object ent2)
   )
   (setq g (vlax-variant-value
      (vla-IntersectWith ob1 ob2 acExtendNone)
    )
   )
   (if	(/= (vlax-safearray-get-u-bound g 1) -1)
     (setq g (vlax-safearray->list g))
     (setq g nil)
   )
   (if	g
     (progn
(setq kq nil
      sd (fix (/ (length g) 3))
)
(repeat	sd
  (setq	kq (append kq (list (list (car g) (cadr g) (caddr g))))
	g  (cdddr g)
  )
)
kq
     )
     nil
   )
 )
 (setq ent1 (car (entsel "\nVao dt1: ")))
 (redraw ent1 3)
 (setq ent2 (car (entsel "\nVao dt2: ")))
 (redraw ent1 4)
 (setq giao (giaodt ent1 ent2))
 (if giao
   (foreach pp	giao
     (entmake (list (cons 0 "POINT") (cons 10 pp)))
   )
   (alert "2 doi tuong khong giao nhau!")
 )
 (princ)
)

 

Nhờ Bác 'Nguyen Hoanh và các bạn sửa giúp mình lisp này một chút;

khi gõ lệnh lisp sẽ tự tìm tất cả các giao điểm và đánh dấu point vào đó

(Cụ thể là tìm các đoạn giao của 2 layer)

Cám ơn rất nhiều !

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
Nhờ Bác 'Nguyen Hoanh và các bạn sửa giúp mình lisp này một chút;

khi gõ lệnh lisp sẽ tự tìm tất cả các giao điểm và đánh dấu point vào đó

(Cụ thể là tìm các đoạn giao của 2 layer)

Cám ơn rất nhiều !

LISP chèn POINT tại tất cả giao điểm của tập chọn (*LINE,ARC,CIRCLE,ELLIPSE)

 

link Viết lisp theo yêu cầu - bài 2209

  • 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
LISP chèn POINT tại tất cả giao điểm của tập chọn (*LINE,ARC,CIRCLE,ELLIPSE)

 

link Viết lisp theo yêu cầu - bài 2209

Mình sài cái lisp đó không được ! Mình thấy lisp trên đã tương đối rồi lên nhờ bạn chỉnh lại thành chạy cho layer chứ không phải đối tượng ..

Giúp mình nhé !

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

Do đặc thù công việc là thế mình không biết lisp .Có thể bạn chưa hiểu hết ý mình ... Lisp trên chỉ tìm giao của 2 đoạn thẳng muốn tìm tiếp phải chọn tiếp lần nữa .nhưng mình muốn nó tìm hết các chỗ giao của 2 layer đó.

Bạn xem hình giúp mình nhé :

sa.gif

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
Do đặc thù công việc là thế mình không biết lisp .Có thể bạn chưa hiểu hết ý mình ... Lisp trên chỉ tìm giao của 2 đoạn thẳng muốn tìm tiếp phải chọn tiếp lần nữa .nhưng mình muốn nó tìm hết các chỗ giao của 2 layer đó.

Bạn xem hình giúp mình nhé :

sa.gif

Bạn thử code này nhé :

Sau khi pick chọn 1 đối tượng mẫu thuộc layer thứ nhất và pick chọn 1 đối tượng mẫu thuộc layer thứ 2

-> Chọn đối tượng cần tìm giao điểm và Lisp sẽ làm việc mà bạn muốn

Đây là code "kế thừa" code của anh gia_bach

http://www.cadviet.com/upfiles/3/giaodiem.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
Bạn thử code này nhé :

Sau khi pick chọn 1 đối tượng mẫu thuộc layer thứ nhất và pick chọn 1 đối tượng mẫu thuộc layer thứ 2

-> Chọn đối tượng cần tìm giao điểm và Lisp sẽ làm việc mà bạn muốn

Đây là code "kế thừa" code của anh gia_bach

http://www.cadviet.com/upfiles/3/giaodiem.lsp

 

Mình chạy lisp báo :

Select objects:

error: null function

(ACET-SS-TO-LIST SS)

Bạn Tue_NV giúp mình xem lỗi gì nhé

cám ơn 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 chạy lisp báo :

Select objects:

error: null function

(ACET-SS-TO-LIST SS)

Bạn Tue_NV giúp mình xem lỗi gì nhé

cám ơn bạn !

Máy của bạn phải cài phụ trợ Express mới sử dụng code trên

Nếu không sử dụng phụ trợ Express, bạn sử dụng thử cái này :

http://s.cadviet.com/7v

  • 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
Máy của bạn phải cài phụ trợ Express mới sử dụng code trên

Nếu không sử dụng phụ trợ Express, bạn sử dụng thử cái này :

http://s.cadviet.com/7v

Mình chạy nó không báo lỗi nữa nhưng nó chỉ tìm được 2 giao điểm đầu tiên ..Tue_NV thử test trên file này giúp mình nhé

 

Attach: http://www.cadviet.com/upfiles/3/check_loi.dwg

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 chạy nó không báo lỗi nữa nhưng nó chỉ tìm được 2 giao điểm đầu tiên ..Tue_NV thử test trên file này giúp mình nhé

 

Attach: http://www.cadviet.com/upfiles/3/check_loi.dwg

File check không có lỗi gì cả.

File đã check : http://s.cadviet.com/zv

Bạn làm theo các bước sau :

......

Sau khi pick chọn 1 đối tượng mẫu thuộc layer thứ nhất và pick chọn 1 đối tượng mẫu thuộc layer thứ 2

-> Chọn các đối tượng cần tìm giao điểm và Lisp sẽ làm việc mà bạn muố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
File check không có lỗi gì cả.

File đã check : http://s.cadviet.com/zv

Bạn làm theo các bước sau :

 

Sorry ! Lisp của Tue_NV chạy tốt rồi

 

 

Làm phiền bạn Bạn cho mình hỏi thêm một chút nhé ..Tại sao mình chạy trên Autocad thì tốt mà chạy trên *** nó lại chỉ tìm được có một giao điểm đầu tiên nhỉ :(bên mình dùng ***) ko biết có hỗ trợ không một số lisp vẫn chạy được một số lại lỗi

 

Chạy trên *** gõ lệnh xong nó tìm được một giao điểm sau đó lại bắt Select objects:

Select objects:

Opposite corner:Find out 10, total 10

Select objects:

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


×