A request I saw in other forums. I don’t know if it has been posted in our forum.
![](http://www.theswamp.org/index.php?action=dlattach;topic=58799.0;attach=41631;image)
==================================
After conversion, it turned into a perfect arc.
![](http://www.theswamp.org/index.php?action=dlattach;topic=58799.0;attach=41633;image)
![](http://www.theswamp.org/index.php?action=dlattach;topic=58799.0;attach=41632;image)
(defun spline
->Arc
(controlPnts
/ p1 p2
v1 v2 chordMidPnt1 vchord
chordpnt2 p3 cen r
gcir p4
)
v1 (xdrx-getpropertyvalue x "firstderiv" p1)
v2 (xdrx-vector-perpvector v1)
chordMidPnt1 (xdrx-line-midp p1 p2)
vchord (xdrx-vector-normalize
)
vchord1 (xdrx-vector-perpvector vchord)
chordMidPnt1
vchord1
)
cen
(inters p1 p3 chordMidPnt1 chordPnt2
nil) ) ; Find the center and radius of the circle
; Find the third point P4 on the arc below.
(setq gCir
(xdge::constructor
"kCircArc2d" cen r
) p4 (xdge::getpropertyvalue
gCir
"GetClosestPointTo"
chordMidPnt1
)
gArc (xdge::constructor "kCircArc2d" p1 p4 p2)
; Three-point construction AcGe arc geometric object
)
)
"\nSelect SPLINE to convert to POLYLINE<Exit>:"
'((0 . "spline"))
)
)
(xdrx-begin)
(setq ss
(xdrx
-entity
-explode ss
)) (setq controlPnts
(xdrx
-getpropertyvalue x
"controlpoints")) ((xdrx_points_isColinear controlPnts)
;;Control points are collinear, straight lines
;;Line
(xdrx
-line
-make
(car controlPnts
) (last controlPnts
)) )
(xdrx-entity-matchprop x ln)
(xdrx-object-swapid ln x)
(xdrx-entity-delete ln)
)
;;Not collinear, 3 control points, forming an arc
;;Arc
(setq gArc
(spline
->arc controlPnts
) mArc (xdge::entity:make gArc)
)
(xdrx-entity-matchprop x mArc)
(xdrx-object-swapid mArc x)
(xdrx-entity-delete mArc)
(xdge::free gCir gArc) ;Release geometry object
)
)
)
(xdrx-pickset->ents ss)
)
(setq ss
(xdrx
-curve
-join ents
)) ;Join together (xdrx-end)
)
)
)