Add polyline vertex in intersection !

Add polyline vertex in intersection !

Anonymous
Not applicable
2,975 Views
4 Replies
Message 1 of 5

Add polyline vertex in intersection !

Anonymous
Not applicable

Hello,

 

Can someone tell me code add polyline vertex in intersection !

 

Thanks

 

Capture.JPG

0 Likes
Accepted solutions (1)
2,976 Views
4 Replies
Replies (4)
Message 2 of 5

Anonymous
Not applicable

Capture.JPG

0 Likes
Message 3 of 5

ademercan1
Advocate
Advocate
Accepted solution

The selected polyline adds new vertexes to the object at intersections with other objects selected.

 

(defun c:pvx (/ *error* ps pm dc pt en cl vr cr ns m n bl ds lp ls
                  lt pr lz m1) (vl-load-com)
  (defun *error* (msg)
    (if (not (wcmatch (strcase msg t) "*cancel*,*exit*"))
      (princ (strcat "\nError: " msg)))
    (if ps (redraw (ssname ps 0) 4)))
  (if (setq ps (ssget ":s" '((0 . "lwpolyline"))))
    (progn (redraw (setq pm (ssname ps 0)) 3)
      (if (setq dc (vla-get-activedocument
            (vlax-get-acad-object)) pt (ssget))
        (progn
          (if (ssmemb pm pt) (ssdel pm pt))
          (setq en (entget pm) cl (cdr (assoc 70 en))
            vr (cdr (assoc 90 en)) cr (mapcar 'cdr (vl-remove-if
              '(lambda(a) (/= (car a) 10)) en))
                ns (vlax-ename->vla-object pm) m -1 n -1)
          (if (= cl 1) (setq cr (append cr (list (car cr)))))
          (repeat (if (= cl 1) vr (1- vr))
            (setq bl (vla-getBulge ns (setq m (1+ m)))
              ds (distance (nth m cr) (nth (1+ m) cr))
                lp (cons (list m bl (if (= bl 0) 0 
                  (/ (+ (expt (* (/ ds 2) bl) 2) (expt (/ ds 2) 2))
                    (* ds bl)))) lp)))
          (repeat vr (setq ls (cons (setq n (1+ n)) ls)))
          (repeat (setq n (sslength pt)) (setq m -1)
            (if (setq lt (vlax-invoke ns 'Intersectwith
                  (vlax-ename->vla-object (ssname pt (setq n (1- n)))) 0))
              (repeat (/ (length lt) 3)
                (if (not (member (setq pr (vlax-curve-getparamatpoint ns
                      (list (nth (setq m (1+ m)) lt) (nth (setq m (1+ m)) lt)
                        (nth (setq m (1+ m)) lt)))) ls))
                  (setq ls (cons pr ls))))))
          (setq n -1 lz (vl-sort ls '<) ls (apply 'append (mapcar
            '(lambda(a) (vl-remove (last a) a)) (mapcar '(lambda(a)
              (vlax-curve-getpointatparam ns a)) (vl-sort ls '<)))))
          (vla-startundomark dc)
          (vlax-put ns 'Coordinates ls)
          (repeat (if (= cl 1) (length lz) (1- (length lz)))
            (setq m1 (nth (vl-position (fix (nth (setq n (1+ n)) lz))
              (mapcar '(lambda(a) (car a)) lp)) lp) dr (distance
                (vlax-curve-getpointatparam ns n)
                  (vlax-curve-getpointatparam ns (1+ n))))
            (vla-setBulge ns n (if (zerop (cadr m1)) 0 (* (if (minusp
              (cadr m1)) -1 1) (/ (- (abs (caddr m1)) (sqrt (- (expt
                (caddr m1) 2) (expt (/ dr 2) 2)))) (/ dr 2))))))
          (vla-endundomark dc)
        )
      ) (redraw pm 4)
    )
  ) (prin1)
)

 

 

Message 4 of 5

Anonymous
Not applicable

Cool, thanks ademercan1

0 Likes
Message 5 of 5

ademercan1
Advocate
Advocate

I expect different solutions from kent1cooper and ranjit.sing. to learn different ways

0 Likes