Jump to content

Breaking Polyline at Vertexes


notview

Recommended Posts

Exactly pBe.

 

I could used the command break at point, but using this, you have to pick all the vertices.

 

Same as when you are using the command Explode! But, the only different now, the objects remained as Polyline.

Link to comment
Share on other sites

M.R.

I used Explode command then pedit multiple to convert the lines to polylines. But having a lot number of objects in one place is not easy to select the exploded objects (lines).

Link to comment
Share on other sites

M.R.

I used Explode command then pedit multiple to convert the lines to polylines. But having a lot number of objects in one place is not easy to select the exploded objects (lines).

 

Previous....

 

A quickee sample

(defun c:sample	(/ pd ent)
 (setq pd (getvar 'PEDITACCEPT))
 (setvar 'PEDITACCEPT 1)
 (setq ent (ssget '((0 . "LWPOLYLINE"))))
 (command "_explode" ent)
 (command "_pedit" "_m" "_P" "" "")
 (setvar 'PEDITACCEPT pd)
)

Link to comment
Share on other sites

(defun c:sample	(/ pd ent)
 (setq pd (getvar 'PEDITACCEPT))
 (setvar 'PEDITACCEPT 1)
 (while (setq ent (ssget '((0 . "LWPOLYLINE"))))
  (repeat (setq i (sslength ent))
	  (command "_explode" (ssname ent (setq i (1- i))))
  	  (command "_pedit" "_m" "_P" "" "")
    )
   )
 (setvar 'PEDITACCEPT pd)
)

Link to comment
Share on other sites

Maybe :

 

[b][color=BLACK]([/color][/b]defun c:exlwp [b][color=FUCHSIA]([/color][/b]/ ss i en ed v vl nd es[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"LWPOLYLINE"[/color][b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]70 . 0[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
      [b][color=NAVY]([/color][/b]setq i 0[b][color=NAVY])[/color][/b]
      [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss i[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
             [b][color=MAROON]([/color][/b]setq ed [b][color=GREEN]([/color][/b]entget en[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
             [b][color=MAROON]([/color][/b]setq vl nil[b][color=MAROON])[/color][/b]
             [b][color=MAROON]([/color][/b]foreach g ed
               [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]= [b][color=RED]([/color][/b]car g[b][color=RED])[/color][/b] 10[b][color=BLUE])[/color][/b]
                   [b][color=BLUE]([/color][/b]setq v [b][color=RED]([/color][/b]list g[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
               [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]member [b][color=RED]([/color][/b]car g[b][color=RED])[/color][/b] '[b][color=RED]([/color][/b]40 41 42[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
                   [b][color=BLUE]([/color][/b]setq v [b][color=RED]([/color][/b]cons g v[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
               [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]= [b][color=RED]([/color][/b]car g[b][color=RED])[/color][/b] 42[b][color=BLUE])[/color][/b]
                   [b][color=BLUE]([/color][/b]setq vl [b][color=RED]([/color][/b]cons [b][color=PURPLE]([/color][/b]reverse v[b][color=PURPLE])[/color][/b] vl[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
             [b][color=MAROON]([/color][/b]setq vl [b][color=GREEN]([/color][/b]reverse vl[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
             [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]> [b][color=BLUE]([/color][/b]length vl[b][color=BLUE])[/color][/b] 1[b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]setq nd [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]assoc 0 ed[b][color=RED])[/color][/b]
                                   [b][color=RED]([/color][/b]cons 100 [color=#2f4f4f]"AcDbEntity"[/color][b][color=RED])[/color][/b]
                                   [b][color=RED]([/color][/b]assoc 67 ed[b][color=RED])[/color][/b]
                                   [b][color=RED]([/color][/b]assoc 8 ed[b][color=RED])[/color][/b]
                                   [b][color=RED]([/color][/b]cons 100 [color=#2f4f4f]"AcDbPolyline"[/color][b][color=RED])[/color][/b]
                                   [b][color=RED]([/color][/b]assoc 38 ed[b][color=RED])[/color][/b]
                                   [b][color=RED]([/color][/b]assoc 39 ed[b][color=RED])[/color][/b]
                                   [b][color=RED]([/color][/b]cons 70 0[b][color=RED])[/color][/b]
                                   [b][color=RED]([/color][/b]cons 90 2[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]assoc 6 ed[b][color=BLUE])[/color][/b]
                        [b][color=BLUE]([/color][/b]setq nd [b][color=RED]([/color][/b]append nd [b][color=PURPLE]([/color][/b]list [b][color=TEAL]([/color][/b]assoc 6 ed[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
                        [b][color=BLUE]([/color][/b]setq nd [b][color=RED]([/color][/b]append nd '[b][color=PURPLE]([/color][/b][b][color=TEAL]([/color][/b]6 . [color=#2f4f4f]"BYLAYER"[/color][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]assoc 48 ed[b][color=BLUE])[/color][/b]
                        [b][color=BLUE]([/color][/b]setq nd [b][color=RED]([/color][/b]append nd [b][color=PURPLE]([/color][/b]list [b][color=TEAL]([/color][/b]assoc 48 ed[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
                        [b][color=BLUE]([/color][/b]setq nd [b][color=RED]([/color][/b]append nd '[b][color=PURPLE]([/color][/b][b][color=TEAL]([/color][/b]48 . 1.0[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]assoc 62 ed[b][color=BLUE])[/color][/b]
                        [b][color=BLUE]([/color][/b]setq nd [b][color=RED]([/color][/b]append nd [b][color=PURPLE]([/color][/b]list [b][color=TEAL]([/color][/b]assoc 62 ed[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
                        [b][color=BLUE]([/color][/b]setq nd [b][color=RED]([/color][/b]append nd '[b][color=PURPLE]([/color][/b][b][color=TEAL]([/color][/b]62 . 256[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]setq nd [b][color=BLUE]([/color][/b]append nd [b][color=RED]([/color][/b]car vl[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]setq es [b][color=BLUE]([/color][/b]subst [b][color=RED]([/color][/b]cons 40 [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 41 [b][color=OLIVE]([/color][/b]car vl[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]assoc 40 [b][color=PURPLE]([/color][/b]cadr vl[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]cadr vl[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]setq es [b][color=BLUE]([/color][/b]subst [b][color=RED]([/color][/b]cons 41 [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 41 [b][color=OLIVE]([/color][/b]car vl[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]assoc 41 [b][color=PURPLE]([/color][/b]cadr vl[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] es[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]setq nd [b][color=BLUE]([/color][/b]append nd es[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]setq nd [b][color=BLUE]([/color][/b]append nd [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]assoc 210 ed[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]entmake nd[b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]setq vl [b][color=BLUE]([/color][/b]cdr vl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
             [b][color=MAROON]([/color][/b]entdel en[b][color=MAROON])[/color][/b]
             [b][color=MAROON]([/color][/b]setq i [b][color=GREEN]([/color][/b]1+ i[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]

 [b][color=FUCHSIA]([/color][/b]redraw[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 

 

You could deal with closed PLINEs, but it would a pain.

 

-David

Edited by David Bethel
Better Bulge Factor conversion
Link to comment
Share on other sites

My variant, maintaining Layer, LineType, Color, Width etc.

Works also on closed polylines and 3Drotated ones.

(defun C:BreakPoly ( / *error* el en end head i ss start tail)
 (or acDoc (setq acDoc (vla-get-activedocument (vlax-get-acad-object))))
 (vla-startundomark acDoc)

 (defun *error* (m)
   (and m (not (wcmatch (strcase m) "*CANCEL*,*QUIT*,*EXIT*")) (princ (strcat "\nError: " m)))
   (vla-endundomark acDoc)
   (princ)
   )
 
 (if
   (setq ss (ssget '((0 . "LWPOLYLINE"))))
    (repeat (setq i (sslength ss))
      (setq en    (ssname ss (setq i (1- i)))
            el    (entget en)
            head  (vl-remove-if-not '(lambda (x) (vl-position (car x) '(0 100 67 410 8 62 6 370 43 38 39))) el)
            head  (append head (list '(90 . 2) (cons 70 (logand (cdr (assoc 70 el)) 128))))
            tail  (member (assoc 10 el) el)
            start (if (= (logand (cdr (assoc 70 el)) 1) 1) (car tail))
            end   (append '((40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0)) (list (assoc 210 el)))
      )
      (repeat (1- (cdr (assoc 90 el)))
        (entmake (append head (mapcar '(lambda (x) (nth x tail)) '(0 1 2 3 4 5)) end))
        (setq tail (member (assoc 10 (cdr tail)) (cdr tail)))
      )
      (if start
        (entmake (append head (mapcar '(lambda (x) (nth x tail)) '(0 1 2 3 4)) (list start) end))
      )
      (entdel en)
    )
 )
 (vla-endundomark acDoc)
 (princ)
)

Link to comment
Share on other sites

Command variant:

 

(defun c:sample	(/ pd ent)
 (setq pd (getvar 'PEDITACCEPT))
 (setvar 'PEDITACCEPT 1)
 (while (setq ent (ssget '((0 . "LWPOLYLINE"))))
  (repeat (setq i (sslength ent))
    (setq en (ssname ent (setq i (1- i))))
    (repeat (- (cdr (assoc 90 (entget en))) 2)
      	(command "_pedit" en "_E" "_N" "_B" "_G" "_X" "")
        (setq en (entlast))
      )
   )
   )
 (setvar 'PEDITACCEPT pd)
)

Link to comment
Share on other sites

I don't have the link where Alan posted this code. It is either here or at the swamp...

 

(defun c:BPV (/ _chop ss i e)
 ;; Break lwPolyline at each Vertex
 ;; Alan J. Thompson, 09.14.11

 (vl-load-com)

 (defun _chop (lst e)
   (if (vlax-curve-isClosed e)
     (cdr lst)
     (reverse (cdr (reverse (cdr lst))))
   )
 )

 (if (setq ss (ssget "_:L" '((0 . "LWPOLYLINE") (-4 . ">") (90 . 2))))
   (repeat (setq i (sslength ss))
     (foreach point (_chop (apply 'append
                                  (mapcar '(lambda (x)
                                             (if (eq (car x) 10)
                                               (list (trans (cdr x) 0 1))
                                             )
                                           )
                                          (entget (setq e (ssname ss (setq i (1- i)))))
                                  )
                           )
                           e
                    )
       (vl-cmdf "_.break" e "_F" "_non" point "_non" point)
       (setq e (entlast))
     )
   )
 )
 (princ)
)

Link to comment
Share on other sites

The worked of Allan J.T. is good. But, polyline passing repeatedly on the vertices of same object polyline, after performing BPV, some parts of the polylines removed or deleted.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...