Author Topic: [XDrX-PlugIn(77)] Polyline POLY to ARC POLY  (Read 278 times)

0 Members and 1 Guest are viewing this topic.

xdcad

  • Swamp Rat
  • Posts: 505
[XDrX-PlugIn(77)] Polyline POLY to ARC POLY
« on: January 03, 2024, 11:47:12 PM »
Code: [Select]
(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)
)
The code I wrote uses XDRX-API,which can be downloaded from github.com and is updated at any time.
===================================
https://github.com/xdcad
https://sourceforge.net/projects/xdrx-api-zip/
http://bbs.xdcad.net