Jump to content

convert arcs in polyline to small lines


motee-z

Recommended Posts

I can't open your drawing, but...PEdit>Decurve will convert the polyline arc segments to lines.

 

This thread may be of help...http://www.cadtutor.net/forum/showthread.php?67157-Convert-polyline-with-arc-to-polyline-with-straight-lines.

Link to comment
Share on other sites

"pline-arcs-seg.lsp" has small issue... To avoid creating LWPOLY with double vertices on some start/end segments,

fix it with following mod. :

 

(defun c:seg ( / unique unit LM:LWPoly->List en lst n )

   (defun unique ( l )
       (if l (cons (car l) (vl-remove-if '(lambda ( x ) (equal (car l) x 1e-) (unique (cdr l)))))
   )
...
Rest of code
...
   (if
       (and en
           (setq lst
               (unique
                   (mapcar
                       (function (lambda ( x ) (trans x 0 en)))
                       (LM:LWPoly->List en n)
                   )
               )
           )
       )
       (entmakex
           (append
               (list
                   (cons 0 "LWPOLYLINE")
                   (cons 100 "AcDbEntity")
                   (cons 100 "AcDbPolyline")
                   (cons 62 3)
                   (cons 90 (length lst))
                   (cons 70 (if (eq 1 (logand (cdr (assoc 70 (entget en))) 1))
                        (if (eq 1 (getvar 'plinegen))
                          129
                          1
                        )
                        (if (eq 1 (getvar 'plinegen))
                          128
                          0
                        )
                      )
                   )
                   (assoc 38 (entget en))
                   (assoc 210 (entget en))
               )
               (mapcar '(lambda ( x ) (cons 10 x)) lst)
           )
       )
   )
   (princ) 
)

I would suggest that you use pline-arcs-seg.lsp rather than my following code which is good if you want to specify unit distance of arcs segmentation...

But after this kind of LWPOLY is created, than its not possible to convert it back to its original look with code I posted here :

http://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/lisp-to-convert-polyline-containing-tessellated-segments-to-true/m-p/5345845/highlight/true#M326908

Please look in following bigger code that follows after you look into the link (you should do tests with newer code)...

 

So here is my dirty one, which I suggest you to avoid it if its possible, but maybe it may be of some use in some special cases...

(defun c:lw-arcs-seg-d ( / *error* unique segarc ss d i lw ptbptl al len p1 p2 ang rad mpa mp cen vp1 vp1ocs a1 a2 temp ptlst ) (vl-load-com)

 (defun *error* ( msg )
   (if (and arc (entget arc)) (entdel arc))
   (if msg (prompt msg))
   (princ)
 )

 (defun unique ( l )
   (if l (cons (car l) (vl-remove-if '(lambda ( x ) (equal x (car l) 1e-) (unique (cdr l)))))
 )

 (defun segarc ( arc d / acos stp enp ang len rad cosad ad da k dda p1 p2 pl ) (vl-load-com)

   ;; ArcCosine 
   ;; Args: -1 <= x <= 1
   (defun acos ( x )
       (cond
           (   (equal x 1.0 1e-6) 0.0)
           (   (equal x -1.0 1e-6) PI)
           (   (equal x 0.0 1e- (/ PI 2))
           (   (atan (/ (sqrt (- 1.0 (* x x))) x)))
       )
   )

   (setq stp (vlax-curve-getstartpoint arc))
   (setq enp (vlax-curve-getendpoint arc))
 ;  (setq midp (vlax-curve-getpointatparam arc (+ (vlax-curve-getstartparam arc) (/ (- (vlax-curve-getendparam arc) (vlax-curve-getstartparam arc)) 2.0))))
   (setq ang (abs (- (cdr (assoc 51 (entget arc))) (cdr (assoc 50 (entget arc))))))
   (if (< (cdr (assoc 51 (entget arc))) (cdr (assoc 50 (entget arc)))) (setq ang (- 6.283185307179586476925286766559 ang)))
   (setq len (- (vlax-curve-getdistatparam arc (vlax-curve-getendparam arc)) (vlax-curve-getdistatparam arc (vlax-curve-getstartparam arc))))
   (if (> len d)
     (progn
       (setq rad (cdr (assoc 40 (entget arc))))
       (setq cosad (- 1.0 (/ (expt d 2) (* 2.0 (expt rad 2)))))
       (setq ad (acos cosad))
 ;      (setq c (polar midp (angle midp (mapcar '/ (mapcar '+ stp enp) (list 2.0 2.0 2.0))) rad))
       (setq da (* ad (/ len ang)))
       (setq k 0.0)
       (while (< (setq dda (* da (setq k (1+ k)))) len)
         (setq p1 (vlax-curve-getpointatdist arc (- dda da)))
         (setq p2 (vlax-curve-getpointatdist arc dda))
         (setq pl (cons p1 pl))
       )
       (setq pl (cons p2 pl) pl (cons enp pl))
       pl
     )
     (prompt "\nArgument unit distance is larger than total length of an arc... Unable to segment arc!")
   )
 )

 (prompt "\nSelect lwpolyline(s) to segment arcs if they exist with unit distance")
 (setq ss (ssget '((0 . "LWPOLYLINE"))))
 (while (null ss)
   (prompt "\nEmpty sel.set... Please select lwpolyline(s) again...")
   (setq ss (ssget '((0 . "LWPOLYLINE"))))
 )
 (initget 7)
 (setq d (getdist "\nPick or specify unit distance for arcs segmentation : "))
 (repeat (setq i (sslength ss))
   (setq lw (ssname ss (setq i (1- i))))
   (if (not (vl-every '(lambda ( x ) (equal x '(42 . 0.0))) (vl-remove-if-not '(lambda ( x ) (eq (car x) 42)) (entget lw))))
     (progn
       (setq ptbptl (mapcar '(lambda ( a b c ) (list (if (eq (car a) 10) (cdr a)) (if (eq (car b) 42) (cdr b)) (if (eq (car c) 10) (cdr c)))) (setq al (vl-remove-if-not '(lambda ( x ) (eq (car x) 10)) (entget lw))) (vl-remove-if-not '(lambda ( x ) (eq (car x) 42)) (entget lw)) (if (eq 1 (logand (cdr (assoc 70 (entget lw))) 1)) (cdr (reverse (cons (car al) (reverse al)))) (cdr al))))
       (foreach ptbpt ptbptl
         (if (not (eq (cadr ptbpt) 0.0))
           (progn
             (setq len (- (if (equal (vlax-curve-getclosestpointto lw (trans (list (caaddr ptbpt) (cadr (caddr ptbpt)) (cdr (assoc 38 (entget lw)))) lw 0)) (vlax-curve-getendpoint lw) 1e- (progn (setq p2 (vlax-curve-getendpoint lw)) (vlax-curve-getdistatparam lw (vlax-curve-getendparam lw))) (vlax-curve-getdistatpoint lw (setq p2 (vlax-curve-getclosestpointto lw (trans (list (caaddr ptbpt) (cadr (caddr ptbpt)) (cdr (assoc 38 (entget lw)))) lw 0)))))
                          (if (equal (vlax-curve-getclosestpointto lw (trans (list (caar ptbpt) (cadar ptbpt) (cdr (assoc 38 (entget lw)))) lw 0)) (vlax-curve-getstartpoint lw) 1e- (progn (setq p1 (vlax-curve-getstartpoint lw)) 0.0) (vlax-curve-getdistatpoint lw (setq p1 (vlax-curve-getclosestpointto lw (trans (list (caar ptbpt) (cadar ptbpt) (cdr (assoc 38 (entget lw)))) lw 0)))))
                       )
             )
             (setq ang (* 4.0 (atan (cadr ptbpt))))
             (setq rad (/ len (abs ang)))
             (setq mpa (vlax-curve-getpointatparam lw (+ (if (equal p1 (vlax-curve-getstartpoint lw) 1e- 0.0 (vlax-curve-getparamatpoint lw p1)) (/ (- (if (equal p2 (vlax-curve-getendpoint lw) 1e- (vlax-curve-getendparam lw) (vlax-curve-getparamatpoint lw p2)) (if (equal p1 (vlax-curve-getstartpoint lw) 1e- 0.0 (vlax-curve-getparamatpoint lw p1))) 2.0))))
             (setq mp (mapcar '/ (mapcar '+ p1 p2) (list 2.0 2.0 2.0)))
             ;(entmake (list '(0 . "POINT") (cons 10 mpa) '(62 . 1)))
             ;(entmake (list '(0 . "POINT") (cons 10 mp) '(62 . 2)))
             (setq cen (mapcar '+ mpa (mapcar '* (mapcar '/ (mapcar '- mp mpa) (list (distance mp mpa) (distance mp mpa) (distance mp mpa))) (list rad rad rad))))
             (setq vp1 (mapcar '- p1 cen))
             (setq vp1ocs (trans vp1 0 lw))
             (setq a1 (angle '(0.0 0.0 0.0) vp1ocs))
             (setq a2 (+ a1 ang))
             (if (> a2 6.283185307179586476925286766559) (setq a2 (- a2 6.283185307179586476925286766559)))
             (if (minusp ang) (setq temp a1 a1 a2 a2 temp))
             (setq arc (entmakex (vl-remove nil (list '(0 . "ARC") (assoc 8 (entget lw)) (cons 10 (trans cen 0 lw)) (cons 40 rad) (cons 50 a1) (cons 51 a2) (if (assoc 62 (entget lw)) (assoc 62 (entget lw))) (if (assoc 420 (entget lw)) (assoc 420 (entget lw))) (assoc 210 (entget lw))))))
             (if (null ptlst)
               (if (equal (vlax-curve-getstartpoint lw) (car (segarc arc d)) 1e- (setq ptlst (append ptlst (segarc arc d))) (setq ptlst (append ptlst (reverse (segarc arc d)))))
               (setq ptlst (append ptlst (if (equal (last ptlst) (car (segarc arc d)) 1e- (segarc arc d) (reverse (segarc arc d)))))
             )
             (entdel arc)
           )
           (progn
             (setq ptlst (append ptlst (list (vlax-curve-getclosestpointto lw (trans (list (caar ptbpt) (cadar ptbpt) (cdr (assoc 38 (entget lw)))) lw 0)))))
             (setq ptlst (append ptlst (list (vlax-curve-getclosestpointto lw (trans (list (caaddr ptbpt) (cadr (caddr ptbpt)) (cdr (assoc 38 (entget lw)))) lw 0)))))
           )
         )
       )
       (setq ptlst (unique ptlst))
       (entmake
         (append
           (list
             '(0 . "LWPOLYLINE")
             '(100 . "AcDbEntity")
             '(100 . "AcDbPolyline")
             (assoc 38 (entget lw))
             (cons 90 (length ptlst))
             (cons 70 (if (eq 1 (logand (cdr (assoc 70 (entget lw))) 1))
                        (if (eq 1 (getvar 'plinegen))
                          129
                          1
                        )
                        (if (eq 1 (getvar 'plinegen))
                          128
                          0
                        )
                      )
             )
             '(62 . 3)
           )
           (mapcar '(lambda ( x ) (cons 10 (list (car (trans x 0 lw)) (cadr (trans x 0 lw))))) ptlst)
           (list (assoc 210 (entget lw)))
         )
       )
       (setq ptlst nil)
     )
   )
 )
 (*error* nil)
)

HTH

Edited by marko_ribar
Link to comment
Share on other sites

This is an old routine, but can deal both heavy and light plines as well as 3DPOLYs, splined fit or decurved

 

[color=#8b4513];++++++++++++ FINDPATH +++++++++++++++++++++++++++++++++++++++++++[/color]
[color=#8b4513];;;Returns ECS Point Values Of PLINE[/color]
[b][color=BLACK]([/color][/b]defun findpath [b][color=FUCHSIA]([/color][/b]en / pl ed sp_flg cl_flg bf nl i vp bf vf pl_flg[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]if [b][color=NAVY]([/color][/b]= [color=#2f4f4f]"LWPOLYLINE"[/color] [b][color=MAROON]([/color][/b]cdr [b][color=GREEN]([/color][/b]assoc 0 [b][color=BLUE]([/color][/b]entget en[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]command [color=#2f4f4f]"_.CONVERTPOLY"[/color] [color=#2f4f4f]"_Heavy"[/color] en [color=#2f4f4f]""[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]setq ed [b][color=NAVY]([/color][/b]entget en[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]/= [color=#2f4f4f]"POLYLINE"[/color] [b][color=MAROON]([/color][/b]cdr [b][color=GREEN]([/color][/b]assoc 0 ed[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
      [b][color=NAVY]([/color][/b]princ [color=#2f4f4f]"\n*** FINDPATH For POLYLINEs Only *** "[/color][b][color=NAVY])[/color][/b]
      [b][color=NAVY]([/color][/b]exit[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]setq pl_flg [b][color=NAVY]([/color][/b]cdr [b][color=MAROON]([/color][/b]assoc 70 ed[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]= [b][color=MAROON]([/color][/b]logand pl_flg 1[b][color=MAROON])[/color][/b] 1[b][color=NAVY])[/color][/b]
      [b][color=NAVY]([/color][/b]setq cl_flg T[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]= [b][color=MAROON]([/color][/b]logand pl_flg 4[b][color=MAROON])[/color][/b] 4[b][color=NAVY])[/color][/b]
      [b][color=NAVY]([/color][/b]setq sp_flg T[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]or [b][color=MAROON]([/color][/b]= [b][color=GREEN]([/color][/b]logand pl_flg 16[b][color=GREEN])[/color][/b] 16[b][color=MAROON])[/color][/b]
   [b][color=MAROON]([/color][/b]= [b][color=GREEN]([/color][/b]logand pl_flg 64[b][color=GREEN])[/color][/b] 64[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
      [b][color=NAVY]([/color][/b]princ [color=#2f4f4f]"\nInvalid POLYLINE Mesh"[/color][b][color=NAVY])[/color][/b]
      [b][color=NAVY]([/color][/b]exit[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]/= [color=#2f4f4f]"SEQEND"[/color] [b][color=MAROON]([/color][/b]cdr [b][color=GREEN]([/color][/b]assoc 0 [b][color=BLUE]([/color][/b]entget [b][color=RED]([/color][/b]entnext en[b][color=RED])[/color][/b][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 en [b][color=MAROON]([/color][/b]entnext en[b][color=MAROON])[/color][/b]
       ed [b][color=MAROON]([/color][/b]entget en[b][color=MAROON])[/color][/b]
       vp [b][color=MAROON]([/color][/b]cdr [b][color=GREEN]([/color][/b]assoc 10 ed[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
       bf [b][color=MAROON]([/color][/b]cdr [b][color=GREEN]([/color][/b]assoc 42 ed[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
              vf [b][color=MAROON]([/color][/b]cdr [b][color=GREEN]([/color][/b]assoc 70 ed[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]cond [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]and [b][color=BLUE]([/color][/b]/= bf 0.0[b][color=BLUE])[/color][/b]
                    cl_flg
                    [b][color=BLUE]([/color][/b]= [color=#2f4f4f]"SEQEND"[/color] [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 0 [b][color=TEAL]([/color][/b]entget [b][color=OLIVE]([/color][/b]entnext en[b][color=OLIVE])[/color][/b][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]add_arc vp [b][color=BLUE]([/color][/b]last pl[b][color=BLUE])[/color][/b] bf[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
              [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]= [color=#2f4f4f]"SEQEND"[/color] [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 0 [b][color=PURPLE]([/color][/b]entget [b][color=TEAL]([/color][/b]entnext en[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]= bf 0.0[b][color=GREEN])[/color][/b]
               [b][color=GREEN]([/color][/b]not cl_flg[b][color=GREEN])[/color][/b]
	[b][color=GREEN]([/color][/b]setq pl [b][color=BLUE]([/color][/b]cons vp pl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
              [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]and [b][color=BLUE]([/color][/b]/= bf 0.0[b][color=BLUE])[/color][/b]
                    [b][color=BLUE]([/color][/b]/= [color=#2f4f4f]"SEQEND"[/color] [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 0 [b][color=TEAL]([/color][/b]entget [b][color=OLIVE]([/color][/b]entnext en[b][color=OLIVE])[/color][/b][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]add_arc vp [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 10 [b][color=PURPLE]([/color][/b]entget [b][color=TEAL]([/color][/b]entnext en[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] bf[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]and [b][color=BLUE]([/color][/b]= bf 1.0[b][color=BLUE])[/color][/b]
	     [b][color=BLUE]([/color][/b]not cl_flg[b][color=BLUE])[/color][/b]
	     [b][color=BLUE]([/color][/b]= [color=#2f4f4f]"SEQEND"[/color] [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 0 [b][color=TEAL]([/color][/b]entget [b][color=OLIVE]([/color][/b]entnext en[b][color=OLIVE])[/color][/b][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]princ[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]and sp_flg
	     [b][color=BLUE]([/color][/b]= bf 0.0[b][color=BLUE])[/color][/b]
	     [b][color=BLUE]([/color][/b]= [b][color=RED]([/color][/b]logand vf 8[b][color=RED])[/color][/b] 8[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
	[b][color=GREEN]([/color][/b]setq pl [b][color=BLUE]([/color][/b]cons vp pl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]and [b][color=BLUE]([/color][/b]not sp_flg[b][color=BLUE])[/color][/b]
	     [b][color=BLUE]([/color][/b]= bf 0.0[b][color=BLUE])[/color][/b]
	     [b][color=BLUE]([/color][/b]/= [b][color=RED]([/color][/b]logand vf 8[b][color=RED])[/color][/b] 8[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
	[b][color=GREEN]([/color][/b]setq pl [b][color=BLUE]([/color][/b]cons vp pl[b][color=BLUE])[/color][/b][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]and cl_flg
    [b][color=NAVY]([/color][/b]not [b][color=MAROON]([/color][/b]equal [b][color=GREEN]([/color][/b]car pl[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]last pl[b][color=GREEN])[/color][/b] 1e-4[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
    [b][color=NAVY]([/color][/b]setq pl [b][color=MAROON]([/color][/b]cons [b][color=GREEN]([/color][/b]last pl[b][color=GREEN])[/color][/b] pl[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]setq i 0[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]< i [b][color=MAROON]([/color][/b]length pl[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
 [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]equal [b][color=GREEN]([/color][/b]nth i pl[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]nth [b][color=BLUE]([/color][/b]1+ i[b][color=BLUE])[/color][/b] pl[b][color=GREEN])[/color][/b] 0.0001[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=NAVY]([/color][/b]and [b][color=MAROON]([/color][/b]nth i pl[b][color=MAROON])[/color][/b]
      [b][color=MAROON]([/color][/b]setq nl [b][color=GREEN]([/color][/b]cons [b][color=BLUE]([/color][/b]nth i pl[b][color=BLUE])[/color][/b] nl[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
 [b][color=NAVY]([/color][/b]setq i [b][color=MAROON]([/color][/b]1+ i[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 nl[b][color=BLACK])[/color][/b]

[b][color=BLACK]([/color][/b]defun add_arc [b][color=FUCHSIA]([/color][/b]sp ep bulge / alist x1 x2 y1 y2 cotbce
	ce ra sa ea ia inc qty na temp[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]setq x1 [b][color=NAVY]([/color][/b]car sp[b][color=NAVY])[/color][/b][color=#8b4513];;Modified Bulge[/color]
x2 [b][color=NAVY]([/color][/b]car ep[b][color=NAVY])[/color][/b][color=#8b4513];;Conversion By[/color]
y1 [b][color=NAVY]([/color][/b]cadr sp[b][color=NAVY])[/color][/b][color=#8b4513];;Duff Kurland[/color]
y2 [b][color=NAVY]([/color][/b]cadr ep[b][color=NAVY])[/color][/b][color=#8b4513];;Autodesk, Inc.[/color]
   cotbce [b][color=NAVY]([/color][/b]/ [b][color=MAROON]([/color][/b]- [b][color=GREEN]([/color][/b]/ 1.0 bulge[b][color=GREEN])[/color][/b] bulge[b][color=MAROON])[/color][/b] 2.0[b][color=NAVY])[/color][/b]
ce [b][color=NAVY]([/color][/b]list [b][color=MAROON]([/color][/b]/ [b][color=GREEN]([/color][/b]+ x1 x2 [b][color=BLUE]([/color][/b]- [b][color=RED]([/color][/b]* [b][color=PURPLE]([/color][/b]- y2 y1[b][color=PURPLE])[/color][/b] cotbce[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] 2.0[b][color=MAROON])[/color][/b]
	 [b][color=MAROON]([/color][/b]/ [b][color=GREEN]([/color][/b]+ y1 y2	[b][color=BLUE]([/color][/b]* [b][color=RED]([/color][/b]- x2 x1[b][color=RED])[/color][/b] cotbce[b][color=BLUE])[/color][/b] [b][color=GREEN])[/color][/b] 2.0[b][color=MAROON])[/color][/b]
	 [b][color=MAROON]([/color][/b]caddr sp[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
ra [b][color=NAVY]([/color][/b]distance ce sp[b][color=NAVY])[/color][/b]
sa [b][color=NAVY]([/color][/b]atan [b][color=MAROON]([/color][/b]- y1 [b][color=GREEN]([/color][/b]cadr ce[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]- x1 [b][color=GREEN]([/color][/b]car ce[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
ea [b][color=NAVY]([/color][/b]atan [b][color=MAROON]([/color][/b]- y2 [b][color=GREEN]([/color][/b]cadr ce[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]- x2 [b][color=GREEN]([/color][/b]car ce[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]if [b][color=NAVY]([/color][/b]minusp sa[b][color=NAVY])[/color][/b]
     [b][color=NAVY]([/color][/b]setq sa [b][color=MAROON]([/color][/b]+ sa [b][color=GREEN]([/color][/b]* 2.0 pi[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]if [b][color=NAVY]([/color][/b]minusp ea[b][color=NAVY])[/color][/b]
     [b][color=NAVY]([/color][/b]setq ea [b][color=MAROON]([/color][/b]+ ea [b][color=GREEN]([/color][/b]* 2.0 pi[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]if [b][color=NAVY]([/color][/b]minusp bulge[b][color=NAVY])[/color][/b]
     [b][color=NAVY]([/color][/b]setq temp sa sa ea ea temp[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]if [b][color=NAVY]([/color][/b]> sa ea[b][color=NAVY])[/color][/b]
     [b][color=NAVY]([/color][/b]setq ia [b][color=MAROON]([/color][/b]+ [b][color=GREEN]([/color][/b]- [b][color=BLUE]([/color][/b]* pi 2.0[b][color=BLUE])[/color][/b] sa[b][color=GREEN])[/color][/b] ea[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
     [b][color=NAVY]([/color][/b]setq ia [b][color=MAROON]([/color][/b]- ea sa[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]setq qty [b][color=NAVY]([/color][/b]max 2 [b][color=MAROON]([/color][/b]abs [b][color=GREEN]([/color][/b]fix [b][color=BLUE]([/color][/b]/ ia [b][color=RED]([/color][/b]/ pi 16[b][color=RED])[/color][/b] 2[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b][color=#8b4513];;; SEGMENT QTY[/color]
 [b][color=FUCHSIA]([/color][/b]setq na sa
      inc [b][color=NAVY]([/color][/b]/ [b][color=MAROON]([/color][/b]abs ia[b][color=MAROON])[/color][/b] qty[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]repeat [b][color=NAVY]([/color][/b]1+ qty[b][color=NAVY])[/color][/b]
     [b][color=NAVY]([/color][/b]setq alist [b][color=MAROON]([/color][/b]cons [b][color=GREEN]([/color][/b]polar ce na ra[b][color=GREEN])[/color][/b] alist[b][color=MAROON])[/color][/b]
       na [b][color=MAROON]([/color][/b]+ sa inc[b][color=MAROON])[/color][/b]
       sa na[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]if [b][color=NAVY]([/color][/b]not [b][color=MAROON]([/color][/b]equal sp [b][color=GREEN]([/color][/b]car alist[b][color=GREEN])[/color][/b] 0.0001[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
     [b][color=NAVY]([/color][/b]setq alist [b][color=MAROON]([/color][/b]reverse alist[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]foreach a alist
     [b][color=NAVY]([/color][/b]setq pl [b][color=MAROON]([/color][/b]cons a pl[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

[b][color=BLACK]([/color][/b]defun c:test [b][color=FUCHSIA]([/color][/b]/ i pl[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]redraw[b][color=FUCHSIA])[/color][/b]
[color=#8b4513];  [b][color=FUCHSIA]([/color][/b]load [color=#2f4f4f]"GRTXT"[/color][b][color=FUCHSIA])[/color][/b][/color]
 [b][color=FUCHSIA]([/color][/b]setq i 1[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]command [color=#2f4f4f]"_.3DPOLY"[/color][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]foreach v [b][color=NAVY]([/color][/b]setq pl [b][color=MAROON]([/color][/b]findpath [b][color=GREEN]([/color][/b]entlast[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
    [b][color=NAVY]([/color][/b]command v[b][color=NAVY])[/color][/b]
[color=#8b4513];     [b][color=NAVY]([/color][/b]grtxt [b][color=MAROON]([/color][/b]rtos i 2 0[b][color=MAROON])[/color][/b] v 4 0[b][color=NAVY])[/color][/b][/color]
    [b][color=NAVY]([/color][/b]setq i [b][color=MAROON]([/color][/b]1+ i[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]command [color=#2f4f4f]""[/color][b][color=FUCHSIA])[/color][/b]
[b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 

 

-David

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