peraperson 发表于 2014-6-11 14:37:08

如何加速这段代码?

本帖最后由 peraperson 于 2014-6-11 16:35 编辑

想实现 ‘点表生成圆并填充’ 代码如下 发现运行很卡 如果不实现填充的话则无此问题
请问大家都是用什么方法实现填充的呢?或者说我的代码有什么可以改进的呢?
(mapcar '(lambda (p) (entmake (list (cons 0 "circle") (cons 10 p) (cons 40 10)))
             (setq e1 (entlast))
             (command "hatch" "s" e1 "" "p" "solid" "")
             )         
lst
)
谢谢

ZZXXQQ 发表于 2014-6-11 21:20:26

本帖最后由 ZZXXQQ 于 2014-6-12 07:56 编辑

(setvar "CMDECHO" 0)
(command "_.DONUT" 0 20)
(foreach p lst (command p))
(command "")

llsheng_73 发表于 2014-6-11 21:36:08

(command"bhatch""p""SOLID")
(foreach p lst
(entmake(list (cons 0 "circle")(cons 10 p)(cons 40 10)))
(command p))
(command "")

peraperson 发表于 2014-6-12 09:06:57

ZZXXQQ 发表于 2014-6-11 21:20 static/image/common/back.gif


谢谢Z版 用之前也有想用donut的想法 但是有个问题就是解决不了填充的图案不是solid的情况

peraperson 发表于 2014-6-12 09:07:42

llsheng_73 发表于 2014-6-11 21:36 static/image/common/back.gif


谢谢 用了bhatch 快了不少

llsheng_73 发表于 2014-6-12 10:18:56

本帖最后由 llsheng_73 于 2014-6-12 10:21 编辑

peraperson 发表于 2014-6-12 09:07 static/image/common/back.gif
谢谢 用了bhatch 快了不少

如果用ENTMAKE应该更快,但对于填充不知道怎么做,因为行业的原因一般不会涉及到它
只知道它的数据分为边界数据和图案数据,感觉比较麻烦就没去深究它

xyp1964 发表于 2014-6-12 10:32:19

(mapcar '(lambda (p)
           (entmake (list (cons 0 "circle") (cons 10 p) (cons 40 10)))
           (command "hatch" "solid" (entlast) "")
       )
        lst
)

鱼与熊掌 发表于 2014-6-12 17:05:11

COOL 大神交流地

llsheng_73 发表于 2014-6-14 17:31:13

本帖最后由 llsheng_73 于 2014-6-14 17:32 编辑

xyp1964 发表于 2014-6-12 10:32 static/image/common/back.gif
(command "hatch" "solid")
(mapcar '(lambda (p)(entmake (list (cons 0 "circle") (cons 10 p) (cons 40 10))) (command p))lst)
(command "")感觉这样会快些?

langjs 发表于 2014-6-15 18:15:05

本帖最后由 langjs 于 2014-6-16 08:47 编辑

看我entmake大法,哈哈哈
速度是够快了,行不行楼主看着办,

(defun c:aa ( / lst na p ss)
(setq lst '())
(while (setq p (getpoint "\n点:"))
    (setq lst (cons p lst))
)
(if (not na)
    (progn
      (entmake (list (cons 0 "circle") (cons 10 (car lst)) (cons 40 10)))
      (command "hatch" "solid" (entlast) "")
      (setq na (entlast))
      (entmake (list '(0 . "block") '(2 . "*U") '(70 . 1) (cons 10 (car lst))))
      (entmake (cdr (entget na)))
      (setq na (entmake '((0 . "ENDBLK"))))
    )
)
(setq ss (ssadd))
(foreach p lst
    (entmake (list '(0 . "INSERT") (cons 2 na) (cons 10 p)))
    (setq ss (ssadd (entlast) ss))
)
(command "explode" ss )
(princ)
)

页: [1] 2 3 4 5 6
查看完整版本: 如何加速这段代码?