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

[Yêu Cầu] Nhờ viết lisp chọn đối tượng giao cắt Pline có sẵn

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

Em chào các bác cao thủ làng lisp ah!

Chẳng là muốn nhờ các bác viết dùm đoạn lisp chọn đối tượng theo một Pline có sẵn trong bản vẽ. Đối tượng nào giao cắt với pline được chọn sẽ là kết quả của lisp ah.

Cụ thể lisp:

1. Gõ lệnh sp

2. Chọn cụm đối tượng đầu vào bằng cửa sổ quét chuột.

3. pick chọn PLINE đầu vào mong muốn -> enter

4. Kết quả là chọn được cụm đối tượng giao cắt với PLINE có sẵn trong số các đối tượng đầu vào chọn ah.

Hình minh họa: ví dụ này là chọn được 6 cái khung bản vẽ giao cắt PLINE màu đỏ có sẵn ah.

image.thumb.png.f905f174cfba61e28c2f40e98f326987.png

 

 

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ó 2 cách:

- Cách 1: dùng lệnh của CAD: lệnh FS (Fast Select), yêu cầu cài Express Tools. Cách thực hiện thì như yêu cầu của bạn nhưng cụm đối tượng mặc định là tất cả các đối tượng trên màn hình.

- Cách 2: Như lisp mình viết, lệnh SP (cũng yêu cầu cài Express Tools)

Nhược điểm của cả 2 cách:

- Chỉ chọn được các đối tượng hiển thị trên màn hình (tương tự như lúc bạn tạo vùng chọn bằng cách click 2 điểm cửa sổ của CAD dưới 2018 ấy)

- Thứ tự chọn linh tinh ko theo chiều đi của Pline

SP.LSP

  • Like 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

Cách thứ 3 (hehehe...):

(defun c:tt  (/ lst pol ssx)
  (if (and (setq ssx (ssget)) (setq pol (car (entsel "\nPick chon curve: "))))
    (progn (setq lst (vl-remove pol (vl-remove-if 'listp (mapcar 'cadr (ssnamex ssx))))
                 lst (vl-remove-if-not '(lambda (x / o)
                                          (and (vlax-method-applicable-p (setq o (vlax-ename->vla-object x)) 'intersectwith)
                                               (vlax-invoke (vlax-ename->vla-object pol) 'intersectwith o acextendnone)))
                                       lst)
                 ssx (ssadd))
           (foreach e lst (setq ssx (ssadd e ssx)))
           (sssetfirst nil ssx)))
  (princ))

  • Like 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

Em cảm ơn bác ah, lisp bác chạy được rồi ah. cái lisp vẫn hay hơn cái fence select của CAD vì nó lưu lại được PLINE dùng cho những lần sau cần làm 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

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  

×