(defun c:ArcToLine (/ *error* blg blk ent objts cnt blgLoc pts stp mxp cur ent2d) (vl-load-com) (defun *error* (msg) (and uFlag (vla-EndUndoMark doc)) (and ov (mapcar (function setvar) vl ov)) (and msg (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **")) ) ) (princ) ) (defun blg (ent num / blg) (repeat num (setq blg (cons (list (vla-getbulge ent (setq num (1- num))) (trans (vlax-safearray->list (variant-value (vla-Get-coordinate ent num) ) ) 0 1 ) ) blg ) ) ) ) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)) vl '("CMDECHO" "OSMODE" "ORTHOMODE") ov (mapcar (function getvar) vl) ) (prompt "\nSelect LWPOLYLINE To convert:") (if (and (setq uFlag (not (vla-StartUndoMark doc))) (mapcar (function setvar) vl '(0 0 0)) (setq pts nil ent (car (entsel "\nSelect Polyline Boundary:\n"))) (eq (cdr (assoc 0 (entget ent))) "LWPOLYLINE") (setq alen (getdist "\nEnter line ncrement length: ")) ) (progn (setq objts (vlax-ename->vla-object ent)) (setq cnt 0 blgLoc (blg objts (cdr (assoc 90 (entget ent)))) ) (foreach itm blgLoc (setq cnt (1+ cnt)) (if (= (car itm) 0.0) (setq pts (cons (trans (cadr itm) 1 0) pts)) (progn (setq pts (cons (trans (cadr itm) 1 0) pts)) (setq stp (if (zerop (setq cur (vlax-curve-getDistAtPoint objts (trans (cadr itm) 1 0) ) ) ) (vla-get-length objts) cur ) nxp (if (>= (1+ cnt) (cdr (assoc 90 (entget ent)))) (vla-get-length objts) (vlax-curve-getDistAtPoint objts (trans (cadr (nth cnt blgLoc)) 1 0) ) ) ) (while (< (setq stp (+ stp alen)) nxp) (setq pts (cons (vlax-curve-getPointAtDist objts stp) pts) ) ) ) ) ) clr (if pts (progn (setq ent2d (entmakex (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 90 (length pts)) (cons 70 0) ) (mapcar (function (lambda (p) (cons 10 p))) pts) ) ) )(entdel ent) ) ) (setq uFlag (vla-EndUndoMark doc)) ) ) (*error* nil) (princ) )