You are on page 1of 2

;; A2PG (gile)

;; Convert arcs and circles in polygons

(defun c:a2pg (/ ss n n_seg obj dist pt_lst nb)


(prompt
"\nSelect arcs and circles to be converted <all>."
)
(if (not (setq ss (ssget '((0 . "ARC,CIRCLE")))))
(setq ss (ssget "_X" '((0 . "ARC,CIRCLE"))))
)
(initget 7)
(setq n_seg (getint "\nNumber of segments: "))
(repeat (setq n (sslength ss))
(setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n))))
dist (/ (vlax-curve-getDistAtParam
obj
(vlax-curve-getEndParam obj)
)
n_seg
)
norm (vlax-get obj 'Normal)
pt_lst (list (vlax-curve-getEndPoint obj))
nb n_seg
)
(repeat n_seg
(setq
pt_lst (cons (vlax-curve-getPointAtDist
obj
(* dist (setq nb (1- nb)))
)
pt_lst
)
)
)
(if (= (vla-get-ObjectName obj) "AcDbCircle")
(setq pt_lst (reverse (cdr (reverse pt_lst))))
)
(setq elev (- (caddr (trans (car pt_lst) 0 norm))
(caddr (trans '(0 0) 0 norm))
)
pt_lst (apply 'append
(mapcar '(lambda (pt)
(setq pt (trans pt 0 norm))
(list (car pt) (cadr pt))
)
pt_lst
)
)
)
(setq pline
(vlax-invoke
(vla-get-ModelSpace
(vla-get-ActiveDocument (vlax-get-acad-object))
)
'addLightWeightPolyline
pt_lst
)
)
(vlax-put pline 'Normal norm)
(vla-put-elevation pline elev)
(if (= (vla-get-ObjectName obj) "AcDbCircle")
(vla-put-closed pline :vlax-true)
)
(vla-delete obj)
)
(princ)
)

You might also like