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

[ Nhờ Viết Lisp intersect_addVertex ]

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

16 giờ trước, Botot đã nói:

Lisp hoàn chỉnh rồi mà, edit gì nữa?

Ý mình là Chỉ dùng lệnh: inAddvertex    thì nó tự động gán Point và tạo Nút tại các điểm giao luôn  . chứ không phải Pick thủ công để Tạo Nút. Cảm ơn bạn đã phản hồi.

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

Thật ra bạn đã "sưu tầm" đầy đủ các hàm cần thiết, nhưng bạn chưa vận dụng hết thôi.

(defun c:AV(/ OBJ PARAMPT PL SS)
    (if
        (and
         (setq pl (car (entsel "\n Chon Polyline can them Node : ")))
         (= (cdr (assoc 0 (entget pl))) "LWPOLYLINE")
             (setq obj (vlax-ename->vla-object pl))
             (princ "\nChon Polyline cat:")
             (setq    ss (ssget))
       )
        (foreach pt (LM:intersectionsinset (ssadd pl ss))
            (or
            (setq ParamPt (vlax-curve-getParamAtPoint pl pt))
            (setq ParamPt (vlax-curve-getParamAtPoint pl (vlax-curve-getClosestPointTo pl pt) ))
          )
            (if (> (- ParamPt (fix ParamPt)) 0.001); bo qua t/hop diem Pt trung voi dinh cua PLINE
            (vlax-invoke obj 'AddVertex (1+ (fix ParamPt)) (list (car pt) (cadr pt)))
          )
        )        
    ) (princ)
)

 

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

Thật ra bạn đã "sưu tầm" đầy đủ các hàm cần thiết, nhưng bạn chưa vận dụng hết thôi.

(defun c:AV(/ OBJ PARAMPT PL SS)
    (if
        (and
         (setq pl (car (entsel "\n Chon Polyline can them Node : ")))
         (= (cdr (assoc 0 (entget pl))) "LWPOLYLINE")
             (setq obj (vlax-ename->vla-object pl))
             (princ "\nChon Polyline cat:")
             (setq    ss (ssget))
       )
        (foreach pt (LM:intersectionsinset (ssadd pl ss))
            (or
            (setq ParamPt (vlax-curve-getParamAtPoint pl pt))
            (setq ParamPt (vlax-curve-getParamAtPoint pl (vlax-curve-getClosestPointTo pl pt) ))
          )
            (if (> (- ParamPt (fix ParamPt)) 0.001); bo qua t/hop diem Pt trung voi dinh cua PLINE
            (vlax-invoke obj 'AddVertex (1+ (fix ParamPt)) (list (car pt) (cadr pt)))
          )
        )        
    ) (princ)
)

 

Cảm ơn Bác Tot77 . Bác sửa lại giùm em nó làm cùng lúc nhiều hơn 1 Polyline được không?  vì khi quét 1 bức tường có 2 đường PL song song. nếu chỉ tạo đỉnh trên 1 PL thì Nút sẽ bj kéo về Phía tường bên kia tại vị trí có Block Bổ trụ. Cảm ơn Bác

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àm 1 cái 3 foreach lồng vào nhau:

(defun c:tt  (/ lst parampt ss)
  (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
    (foreach obj  (setq lst (mapcar 'vlax-ename->vla-object
                                    (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
      (foreach o  (vl-remove obj lst)
        (foreach pt  (LM:intersections obj o acextendnone)
          (or (setq ParamPt (vlax-curve-getParamAtPoint obj pt))
              (setq ParamPt (vlax-curve-getParamAtPoint obj (vlax-curve-getClosestPointTo obj pt))))
          (if (> (- ParamPt (fix ParamPt)) 0.001)
            (vlax-invoke obj 'AddVertex (1+ (fix ParamPt)) (list (car pt) (cadr pt))))))))
  (princ))

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

Làm 1 cái 3 foreach lồng vào nhau:

(defun c:tt  (/ lst parampt ss)
  (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
    (foreach obj  (setq lst (mapcar 'vlax-ename->vla-object
                                    (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
      (foreach o  (vl-remove obj lst)
        (foreach pt  (LM:intersections obj o acextendnone)
          (or (setq ParamPt (vlax-curve-getParamAtPoint obj pt))
              (setq ParamPt (vlax-curve-getParamAtPoint obj (vlax-curve-getClosestPointTo obj pt))))
          (if (> (- ParamPt (fix ParamPt)) 0.001)
            (vlax-invoke obj 'AddVertex (1+ (fix ParamPt)) (list (car pt) (cadr pt))))))))
  (princ)) 

Cảm ơn 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
1 giờ} trướ}c, anhGeodesy đã nói:

image.png.d01f6e9dcc9507fee5cb66f6ee351e16.png

@quocmanh04tt Trường hợp đường Polyline cong thế này thì không được bác ơi, nhờ bác xem lại giùm em xíu nhé. thanks bác.

1. Đối tượng trông giống hình vuông đó có phải Polyline không, nếu phải thì nó có thực sự giao cắt với Polyline cong hay không???

2. Đối với Polyline cong (nếu có giao cắt) thì lisp trên vẫn chưa xử lý được, vì khi chèn thêm Vertex tại đoạn cong phải tính toán lại độ cong tại điểm chèn (nếu không độ cong không giống ban đầu). Lisp sẽ dài gấp 3 đến 4 lần lisp trê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
17 giờ trước, quocmanh04tt đã nói:

1. Đối tượng trông giống hình vuông đó có phải Polyline không, nếu phải thì nó có thực sự giao cắt với Polyline cong hay không???

2. Đối với Polyline cong (nếu có giao cắt) thì lisp trên vẫn chưa xử lý được, vì khi chèn thêm Vertex tại đoạn cong phải tính toán lại độ cong tại điểm chèn (nếu không độ cong không giống ban đầu). Lisp sẽ dài gấp 3 đến 4 lần lisp trên.

Bác có thể gộp cái của bác Ketxu vào chung với cái intersect giùm em với.

THEM BOT Vertex Pline.lsp

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

×