明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 11806|回复: 53

[已解答] 如何加速这段代码?

[复制链接]
发表于 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
)
谢谢
发表于 2014-6-11 21:20:26 | 显示全部楼层
本帖最后由 ZZXXQQ 于 2014-6-12 07:56 编辑
  1. (setvar "CMDECHO" 0)
  2. (command "_.DONUT" 0 20)
  3. (foreach p lst (command p))
  4. (command "")

点评

需要关闭填充时就杯具了  发表于 2014-6-12 10:33
(command "_.DOUNT" 0 20) =>(command "_.DONUT" 0 20)  发表于 2014-6-11 21:43
发表于 2014-6-11 21:36:08 | 显示全部楼层
  1. (command"bhatch""p""SOLID")
  2. (foreach p lst
  3.   (entmake(list (cons 0 "circle")(cons 10 p)(cons 40 10)))
  4.   (command p))
  5. (command "")
 楼主| 发表于 2014-6-12 09:06:57 | 显示全部楼层
ZZXXQQ 发表于 2014-6-11 21:20

谢谢Z版 用之前也有想用donut的想法 但是有个问题就是解决不了填充的图案不是solid的情况
 楼主| 发表于 2014-6-12 09:07:42 | 显示全部楼层
llsheng_73 发表于 2014-6-11 21:36

谢谢 用了bhatch 快了不少
发表于 2014-6-12 10:18:56 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-6-12 10:21 编辑
peraperson 发表于 2014-6-12 09:07
谢谢 用了bhatch 快了不少


如果用ENTMAKE应该更快,但对于填充不知道怎么做,因为行业的原因一般不会涉及到它
只知道它的数据分为边界数据和图案数据,感觉比较麻烦就没去深究它
发表于 2014-6-12 10:32:19 | 显示全部楼层
  1. (mapcar '(lambda (p)
  2.            (entmake (list (cons 0 "circle") (cons 10 p) (cons 40 10)))
  3.            (command "hatch" "solid" (entlast) "")
  4.          )
  5.         lst
  6. )
发表于 2014-6-12 17:05:11 | 显示全部楼层
COOL 大神交流地
发表于 2014-6-14 17:31:13 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-6-14 17:32 编辑
xyp1964 发表于 2014-6-12 10:32
  1. (command "hatch" "solid")
  2. (mapcar '(lambda (p)(entmake (list (cons 0 "circle") (cons 10 p) (cons 40 10))) (command p))lst)
  3. (command "")
感觉这样会快些?
发表于 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)
)

点评

非常取巧的解决方式。。  发表于 2014-6-15 18:53
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-19 02:45 , Processed in 0.163861 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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