(defun c:xdtb_poly2arc (/ tol ss inx ents pts _arc garc gpl)
(xdrx-begin)
(if (not #xd-var-global-fitarc-tol)
(setq #xd-var-global-fitarc-tol (/ (xd::doc:getpickboxheight) 3.0))
)
(if (setq
tol (getreal (xdrx-prompt
(xdrx-string-formatex
(xdrx-string-multilanguage
"\n输入长度容差<%.2f>"
"\nEnter the arc seg length tol<%.2f>"
)
#xd-var-global-fitarc-tol
)
t
)
)
)
(setq #xd-var-global-fitarc-tol tol)
)
(if (setq ss (xdrx-ssget
(xdrx-string-multilanguage
"\n选择带弧段的多段线<退出>:"
'((0 . "*polyline"))
)
)
)
(progn
(mapcar
'(lambda (x)
(setq pts nil
numverts (xdrx-getpropertyvalue x "numverts")
)
(setq inx 0
ents nil
)
(repeat (1- numverts)
(if (setq seg (xdrx-polyline-getlinesegat x inx))
(progn
(if (< (apply 'distance seg)
#xd-var-global-fitarc-tol
)
(setq pts (append pts seg))
(progn
(if pts
(progn
(setq _arc (xdrx-points->circle pts t)
garc (xdge::constructor _arc)
ents (cons garc ents)
pts nil
)
(xdrx-entity-delete _arc)
)
)
(setq ents (cons (xdge::constructor "kLineSeg3d" seg) ents))
)
)
)
(progn
(setq _arc (xdrx-points->circle pts t)
garc (xdge::constructor _arc)
ents (cons garc ents)
pts nil
)
(xdrx-entity-delete _arc)
)
)
(setq inx (1+ inx))
)
(if pts
(progn
(setq _arc (xdrx-points->circle pts t)
garc (xdge::constructor _arc)
ents (cons garc ents)
pts nil
)
(xdrx-entity-delete _arc)
)
)
(setq ents (reverse ents))
(setq gpl (xdge::constructor "kCompositeCrv3d" ents))
(xdrx-entity-make gpl)
(xdrx-entity-matchprop x (entlast))
(xdrx-object-swapid x (entlast))
(xdrx-entity-delete (entlast))
)
(xdrx-ss->ents ss)
)
)
)
(xdrx-end)
(princ)
)