明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 604|回复: 0

[经验] voronoi一种cad简单的算法,求改进

[复制链接]
发表于 2016-1-2 11:24 | 显示全部楼层 |阅读模式
  1. (defun c:vo ()
  2.   (vl-load-com)
  3.   (setq  AcadObject   (vlax-get-acad-object)
  4.   AcadDocument (vla-get-ActiveDocument AcadObject)
  5.   mSpace       (vla-get-ModelSpace AcadDocument)
  6.   )
  7.   (defun midpoint (pt1 pt2)

  8.     (setq pmid
  9.      (list (/ (+ (car pt2) (car pt1)) 2.0)
  10.      (/ (+ (cadr pt2) (cadr pt1)) 2.0)
  11.      (/ (+ (caddr pt2) (caddr pt1)) 2.0)
  12.      )
  13.     )
  14.   )

  15.   (defun gxl-removeNth (index lst / c)
  16.     (setq c -1)
  17.     (apply 'append
  18.      (mapcar '(lambda (x)
  19.           (if (/= (setq c (1+ c)) index)
  20.       (list x)
  21.           )
  22.         )
  23.        lst
  24.      )
  25.     )
  26.   )
  27.   (print "选择点:")
  28.   (setq ss (ssget '((0 . "POINT"))))
  29.   (setq n (sslength ss))
  30.   (print "选择曲线:")
  31.   (setq pline (car (entsel)))
  32.   (setq t0 (getvar "TDUSRTIMER"))
  33.   (command "undo" "begin")
  34.   (vla-getboundingbox
  35.     (vlax-ename->vla-object pline)
  36.     'pt1a
  37.     'pt2a
  38.   )
  39.   (setq  l (* (distance (vlax-safearray->list pt2a)
  40.            (vlax-safearray->list pt1a)
  41.        )
  42.        5.0
  43.     )
  44.   )


  45.   (setq i 0)
  46.   (setq listpoint (list))
  47.   (repeat n
  48.     (setq ssthnth (ssname ss i))

  49.     (setq listpoint (cons
  50.           (cdr (assoc 10 (entget ssthnth)))
  51.           listpoint
  52.         )
  53.     )
  54.     (setq i (1+ i))
  55.   )

  56.   (setq j (length listpoint))
  57.   (setq j1 (- j 1))
  58.   (setq jj 0)


  59.   (repeat j
  60.     (setq pointj (nth jj listpoint))
  61.     (setq biao (gxl-removeNth jj listpoint))
  62.     (setq jjj 0)
  63.     (setq xuanzhe (ssadd))
  64.     (repeat j1
  65.       (setq pointi (nth jjj biao))
  66. ;(command "line" "non" pointj "non" pointi "")

  67.       (setq ang (angle pointj pointi))
  68.       (setq ang2 (+ ang (/ pi 2.0)))
  69.       (setq ang3 (- ang (/ pi 2.0)))
  70.       (setq ang4 (- ang (/ pi 1.0)))
  71.       (setq pt0 (midpoint pointj pointi))
  72. ;(command "line" "non" pointj "non" pt0 "")

  73.       (setq pt1 (polar pt0 ang2 l))
  74.       (setq pt4 (polar pt0 ang3 l))
  75.       (setq pt2 (polar pt1 ang4 l))
  76.       (setq pt3 (polar pt4 ang4 l))


  77. ;(setq LST (append pt1 pt2 pt3 pt4  ))
  78. ;(setq mat (vlax-make-safearray vlax-vbDouble '(0 . 11)))
  79. ;(vlax-safearray-fill mat lst)
  80.       (setq LST (list pt1 pt2 pt3 pt4))
  81.       (entmake
  82.   (append  (list '(0 . "LWPOLYLINE")
  83.           '(100 . "AcDbEntity")
  84.           '(100 . "AcDbPolyline")

  85.           (cons 90 (length LST))
  86.           '(70 . 1)
  87.     )
  88.     (mapcar '(lambda (ptrr) (cons 10 ptrr)) LST)
  89.   )
  90.       )
  91. ;(vla-Put-Closed obj :vlax-True)
  92.       (setq lastwuti (entlast))

  93. ;(command "_REGION" xxxx "")
  94. ;(setq xxxxl (entlast))
  95.       (ssadd lastwuti xuanzhe)
  96. ;(setq quxian  (vla-AddPolyline mSpace mat))
  97. ;(setq quxian (vla-Put-Closed quxian :vlax-True))
  98. ;(setq quxian3 (myRegion LST))


  99.       (setq jjj (1+ jjj))
  100.     )
  101.     (vl-cmdf "-BOUNDARY" pointj "")
  102.     (vl-cmdf "ERASE" xuanzhe "")

  103.     (setq jj (1+ jj))
  104.   )
  105.   (command "undo" "end")

  106.   (princ (* (- (getvar "TDUSRTIMER") t0) 86400))
  107.   (princ "秒")
  108.   (princ)
  109. )


您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-6-15 18:43 , Processed in 0.395337 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表