Jump to content

Recommended Posts

Posted

Help Guys, I want to break vertexes of polyline at once and the objects remained as polyline.

Posted

Say that again? You mean if you have a 3 segment polyline and "breaks" it at the vertices. you have 3 separate polylines?

Posted

Use explode command, and then pedit multiple to convert lines and arcs to plines...

Posted

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.

Posted

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).

Posted
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)
)

Posted

Nice sample!!:)

 

I tried two objects. Only one polyline object break, the other not..

 

Can you make it running until "Esc" or ..

Posted
(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)
)

Posted (edited)

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
Posted

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)
)

Posted

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)
)

Posted

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)
)

Posted

David,

I got the same output of pBe.. only one object break at a time.

 

Stefan BMR, I think this is the perfect lisp I want. Thank you!!! Cheers!!:thumbsup::)

Posted

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.

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...