qwesxqe 发表于 2016-1-2 11:24:43

voronoi一种cad简单的算法,求改进

(defun c:vo ()
(vl-load-com)
(setqAcadObject   (vlax-get-acad-object)
AcadDocument (vla-get-ActiveDocument AcadObject)
mSpace       (vla-get-ModelSpace AcadDocument)
)
(defun midpoint (pt1 pt2)

    (setq pmid
   (list (/ (+ (car pt2) (car pt1)) 2.0)
   (/ (+ (cadr pt2) (cadr pt1)) 2.0)
   (/ (+ (caddr pt2) (caddr pt1)) 2.0)
   )
    )
)

(defun gxl-removeNth (index lst / c)
    (setq c -1)
    (apply 'append
   (mapcar '(lambda (x)
          (if (/= (setq c (1+ c)) index)
      (list x)
          )
      )
       lst
   )
    )
)
(print "选择点:")
(setq ss (ssget '((0 . "POINT"))))
(setq n (sslength ss))
(print "选择曲线:")
(setq pline (car (entsel)))
(setq t0 (getvar "TDUSRTIMER"))
(command "undo" "begin")
(vla-getboundingbox
    (vlax-ename->vla-object pline)
    'pt1a
    'pt2a
)
(setql (* (distance (vlax-safearray->list pt2a)
         (vlax-safearray->list pt1a)
       )
       5.0
    )
)


(setq i 0)
(setq listpoint (list))
(repeat n
    (setq ssthnth (ssname ss i))

    (setq listpoint (cons
          (cdr (assoc 10 (entget ssthnth)))
          listpoint
      )
    )
    (setq i (1+ i))
)

(setq j (length listpoint))
(setq j1 (- j 1))
(setq jj 0)


(repeat j
    (setq pointj (nth jj listpoint))
    (setq biao (gxl-removeNth jj listpoint))
    (setq jjj 0)
    (setq xuanzhe (ssadd))
    (repeat j1
      (setq pointi (nth jjj biao))
;(command "line" "non" pointj "non" pointi "")

      (setq ang (angle pointj pointi))
      (setq ang2 (+ ang (/ pi 2.0)))
      (setq ang3 (- ang (/ pi 2.0)))
      (setq ang4 (- ang (/ pi 1.0)))
      (setq pt0 (midpoint pointj pointi))
;(command "line" "non" pointj "non" pt0 "")

      (setq pt1 (polar pt0 ang2 l))
      (setq pt4 (polar pt0 ang3 l))
      (setq pt2 (polar pt1 ang4 l))
      (setq pt3 (polar pt4 ang4 l))


;(setq LST (append pt1 pt2 pt3 pt4))
;(setq mat (vlax-make-safearray vlax-vbDouble '(0 . 11)))
;(vlax-safearray-fill mat lst)
      (setq LST (list pt1 pt2 pt3 pt4))
      (entmake
(append(list '(0 . "LWPOLYLINE")
          '(100 . "AcDbEntity")
          '(100 . "AcDbPolyline")

          (cons 90 (length LST))
          '(70 . 1)
    )
    (mapcar '(lambda (ptrr) (cons 10 ptrr)) LST)
)
      )
;(vla-Put-Closed obj :vlax-True)
      (setq lastwuti (entlast))

;(command "_REGION" xxxx "")
;(setq xxxxl (entlast))
      (ssadd lastwuti xuanzhe)
;(setq quxian(vla-AddPolyline mSpace mat))
;(setq quxian (vla-Put-Closed quxian :vlax-True))
;(setq quxian3 (myRegion LST))


      (setq jjj (1+ jjj))
    )
    (vl-cmdf "-BOUNDARY" pointj "")
    (vl-cmdf "ERASE" xuanzhe "")

    (setq jj (1+ jj))
)
(command "undo" "end")

(princ (* (- (getvar "TDUSRTIMER") t0) 86400))
(princ "秒")
(princ)
)


页: [1]
查看完整版本: voronoi一种cad简单的算法,求改进