zcmzz0511 发表于 2012-12-29 09:03:51

autolisp绘制金刚石图案

第一次运行时,绘制出的图形是正确的,再次运行时图形就不完整了,不知怎么回事?下面是源代码
(defun c:stone ()
(setq a 500   b 500   r 100)
(setq n 25   angl (/ (* pi 2) n))
(setq i 0)   
(while (< i n)
    (setq j (1+ i))
    (while (< j n)
      (command "pline" (list (+ a (* r (sin (* i angl)))) (- b (* r (cos (* i angl)))))
             (list (+ a (* r (sin (* j angl)))) (- b (* r (cos (* j angl)))))
             "c")
      (setq j (1+ j))
    )
    (setq i (1+ i))
   )
)


zyhandw 发表于 2012-12-29 10:25:22

运行结果挺壮观的!

仲文玉 发表于 2012-12-29 11:05:56

把变量置为局部变量,生成图元建议用entmake,速度会快n倍
(defun c:tt (/ a b r n angl i j)
(setq pt (getpoint "\n请指定绘图中点:"))
(if pt
    (progn
      (setq r (getreal "\n请输入图形半径<100>:"))
      (if (null r)(setq r 100.))
      (setq a (car pt) b (cadr pt))
      (setq n 25 angl (/ (* pi 2) n))
      (setq i 0)
      (while (< i n)
(setq j (1+ i))
(while (< j n)
    (entmake (list '(0 . "LINE")
       '(100 . "AcDbEntity")
       '(100 . "AcDbLine")
       (cons 10
             (list (+ a (* r (sin (* i angl))))
             (- b (* r (cos (* i angl))))
             )
       )
       (cons 11
             (list (+ a (* r (sin (* j angl))))
             (- b (* r (cos (* j angl))))
             )
       )
       '(210 0. 0. 1.)
       )
    )
    (setq j (1+ j))
)
(setq i (1+ i))
      )
    )
)
)

zcmzz0511 发表于 2012-12-29 14:44:44

仲文玉 发表于 2012-12-29 11:05 static/image/common/back.gif
把变量置为局部变量,生成图元建议用entmake,速度会快n倍

用entmake速度就是快,不知我出错的原因是否就没把变量设为局部变量的原因?

zyhandw 发表于 2012-12-29 14:45:58

是的,楼上正解。
正如楼上所说,用entmake好得多,我比较了下快近20倍!
页: [1]
查看完整版本: autolisp绘制金刚石图案