找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 783|回复: 12

[有奖答题] 【挑战】获取多段线顶点坐标和凸度

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-5 00:26:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 newer 于 2017-6-5 13:13 编辑

参数是多段线的实体名,先发两个

1、大家写完代码后,加载晓东通用函数库后,可以用下面的TT测试下效率,确保最后一个实体是多段线。
2、按发帖顺序,函数名取 vertices3......verticesn,方便对比测试。
3、数据返回格式:( (点1 凸度)(点2 凸度) ...(点n 凸度))     比如:
(vertices1 (entlast))
(((924.046 1089.78) 0.0) ((3344.87 2664.83) 0.0) ((3063.67 64.166) 0.0)
((4995.44 1785.73) 0.0) ((4946.53 -448.641) 0.0) ((6756.04 1101.99) 0.0)
((6144.72 2298.54) 0.0) ((7624.11 1456.07) 0.0) ((7831.96 2408.43) 0.0)
((4873.17 2457.27) 0.0) ((3797.25 1224.09) 0.0) ((5606.76 1456.07) 0.0)
((3271.51 -326.544) 0.0) ((2207.82 613.602) 0.0) ((1400.88 2347.38) 0.0))

1、vertices1
  1. (defun vertices1 (e)
  2.   (vl-remove nil
  3.              (mapcar (function (lambda (a b)
  4.                                  (if (= (car a) 10)
  5.                                    (list (cdr a) (cdr b))
  6.                                  )
  7.                                )
  8.                      )
  9.                      (entget e)
  10.                      (cdddr (entget e))
  11.              )
  12.   )
  13. )


2、vertices1

  1. (defun vertices2 (ename / obj lst n)
  2.   (setq eo (vlax-ename->vla-object ename)
  3.         n   0
  4.   )
  5.   (vl-remove-if
  6.     'null
  7.     (mapcar
  8.       '(lambda (a b / m)
  9.          (setq m n
  10.                n (1+ n)
  11.          )
  12.          (if (= (rem m 2) 0)
  13.            (list (cons a b) (vla-GetBulge eo (/ m 2)))
  14.          )
  15.        )
  16.       (setq lst (vlax-get eo 'Coordinates))
  17.       (cdr lst)
  18.     )
  19.   )
  20. )


测试代码 效率

  1. (defun c:tt()
  2.   (xd::benchmark '((vertices1 (entlast)) (vertices2 (entlast))))
  3.   (princ)
  4. )





测试结果

  1. 命令: (repeat 5 (c:tt))
  2. Elapsed milliseconds / relative speed for 2048 iteration(s):

  3.     (VERTICES1 (ENTLAST)).....1812 / 4.11 <fastest>
  4.     (VERTICES2 (ENTLAST)).....7453 / 1 <slowest>
  5. Elapsed milliseconds / relative speed for 4096 iteration(s):

  6.     (VERTICES1 (ENTLAST)).....1312 / 6.84 <fastest>
  7.     (VERTICES2 (ENTLAST)).....8969 / 1 <slowest>
  8. Elapsed milliseconds / relative speed for 4096 iteration(s):

  9.     (VERTICES1 (ENTLAST)).....1188 / 6.33 <fastest>
  10.     (VERTICES2 (ENTLAST)).....7516 / 1 <slowest>
  11. Elapsed milliseconds / relative speed for 4096 iteration(s):

  12.     (VERTICES1 (ENTLAST)).....1484 / 3.75 <fastest>
  13.     (VERTICES2 (ENTLAST)).....5563 / 1 <slowest>
  14. Elapsed milliseconds / relative speed for 4096 iteration(s):

  15.     (VERTICES1 (ENTLAST)).....1297 / 4.22 <fastest>
  16.     (VERTICES2 (ENTLAST)).....5469 / 1 <slowest>

复制代码


结论:VERTICES1效率明显高



=======================================================================================
收集到6个代码,测试如下:


  1. 命令: tt
  2. Elapsed milliseconds / relative speed for 32768 iteration(s):

  3.     (VERTICES6 (ENTLAST))......1891 / 6.18 <fastest>
  4.     (VERTICES5 (ENTLAST))......2406 / 4.86
  5.     (VERTICES1 (ENTLAST))......3047 / 3.84
  6.     (VERTICES4 (ENTLAST))......3266 / 3.58
  7.     (VERTICES3 (ENTLAST))......5812 / 2.01
  8.     (VERTICES2 (ENTLAST)).....11687 / 1 <slowest>

  9. 命令:
  10. 命令: tt
  11. Elapsed milliseconds / relative speed for 16384 iteration(s):

  12.     (VERTICES6 (ENTLAST)).....1078 / 6.31 <fastest>
  13.     (VERTICES5 (ENTLAST)).....1422 / 4.78
  14.     (VERTICES1 (ENTLAST)).....1688 / 4.03
  15.     (VERTICES4 (ENTLAST)).....1828 / 3.72
  16.     (VERTICES3 (ENTLAST)).....3281 / 2.07
  17.     (VERTICES2 (ENTLAST)).....6797 / 1 <slowest>

  18. 命令:
  19. 命令: tt
  20. Elapsed milliseconds / relative speed for 32768 iteration(s):

  21.     (VERTICES6 (ENTLAST))......1859 / 6.43 <fastest>
  22.     (VERTICES5 (ENTLAST))......2343 / 5.1
  23.     (VERTICES1 (ENTLAST))......3031 / 3.94
  24.     (VERTICES4 (ENTLAST))......3266 / 3.66
  25.     (VERTICES3 (ENTLAST))......5828 / 2.05
  26.     (VERTICES2 (ENTLAST)).....11953 / 1 <slowest>

  27. 命令:
  28. 命令: (repeat 2 (c:tt))
  29. Elapsed milliseconds / relative speed for 16384 iteration(s):

  30.     (VERTICES6 (ENTLAST)).....1141 / 6.63 <fastest>
  31.     (VERTICES5 (ENTLAST)).....1516 / 4.99
  32.     (VERTICES1 (ENTLAST)).....1829 / 4.14
  33.     (VERTICES4 (ENTLAST)).....1906 / 3.97
  34.     (VERTICES3 (ENTLAST)).....3343 / 2.26
  35.     (VERTICES2 (ENTLAST)).....7563 / 1 <slowest>
  36. Elapsed milliseconds / relative speed for 16384 iteration(s):

  37.     (VERTICES6 (ENTLAST)).....1125 / 6.71 <fastest>
  38.     (VERTICES5 (ENTLAST)).....1531 / 4.93
  39.     (VERTICES1 (ENTLAST)).....1922 / 3.93
  40.     (VERTICES4 (ENTLAST)).....1937 / 3.9
  41.     (VERTICES3 (ENTLAST)).....3359 / 2.25
  42.     (VERTICES2 (ENTLAST)).....7547 / 1 <slowest>

复制代码


结果: vertices6 和 vertices5 稳居前两位,同第三名拉开距离较大,
vertices6也是大幅度领先vertices5,
第一次递归的代码表现这么好



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 28个

财富等级: 恭喜发财

发表于 2017-6-5 07:06:42 | 显示全部楼层
谢谢分享。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1304个

财富等级: 财源广进

发表于 2017-6-5 09:02:26 | 显示全部楼层
谢谢分享。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2017-6-5 09:42:28 | 显示全部楼层
试试我这段:
  1. (defun vertices3 (e)
  2.   (mapcar
  3.     '(lambda (x y) (list (cdr x) (cdr y)))
  4.     (vl-remove-if-not
  5.       '(lambda (x)
  6.          (= (car x) 10)
  7.        )
  8.       (entget e)
  9.     )
  10.     (vl-remove-if-not
  11.       '(lambda (x)
  12.          (= (car x)
  13.             42
  14.          )
  15.        )
  16.       (entget e)
  17.     )
  18.   )
  19. )


其实我更习惯于使用:
  1. (vl-remove-if-mot '(lambda(x) (member (car x) '(10 42))) (entget e))

这种格式输出,使用更灵活些。

评分

参与人数 1D豆 +5 贡献 +1 收起 理由
newer + 5 + 1 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2017-6-5 10:11:13 | 显示全部楼层

  1. (defun v (e / el lst)
  2.   (setq el (entget e))
  3.   (while el
  4.     (if        (= (caar el) 10)
  5.       (setq lst        (cons (list (cdar el) (cdadr el)) lst)
  6.             el        (cddr el)
  7.       )
  8.       (setq el (cdr el))
  9.     )
  10.   )
  11.   lst
  12. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 774个

财富等级: 财运亨通

发表于 2017-6-5 10:33:45 | 显示全部楼层
谢谢大师们的分享!
@ll_j 代码很简洁,很强大!
vl-remove-if-mot ---> vl-remove-if-not
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2017-6-5 11:05:00 | 显示全部楼层
本帖最后由 newer 于 2017-6-5 12:42 编辑

测试一下

  1. (defun vertices4 (e)
  2.   (vl-remove-if-not
  3.     '(lambda (x) (member (car x) '(10 42)))
  4.     (entget e)
  5.   )
  6. )
  7. (defun vertices5 (e / el lst)
  8.   (setq el (entget e))
  9.   (while el
  10.     (if        (= (caar el) 10)
  11.       (setq lst        (cons (list (cdar el) (cdadr el)) lst)
  12.             el        (cddr el)
  13.       )
  14.       (setq el (cdr el))
  15.     )
  16.   )
  17.   lst
  18. )
  19. (defun c:tt ()
  20.   (xd::benchmark '((vertices4  (entlast)) (vertices5  (entlast))))
  21.   (princ)
  22. )

命令: (repeat 5 (c:tt))
Elapsed milliseconds / relative speed for 16384 iteration(s):

    (vertices5  (ENTLAST))......1716 / 1.45 <fastest>
    (vertices4  (ENTLAST)).....2480 / 1 <slowest>
Elapsed milliseconds / relative speed for 8192 iteration(s):

    (vertices4  (ENTLAST)).....2028 / 1.22 <fastest>
    (vertices5  (ENTLAST))......2465 / 1 <slowest>
Elapsed milliseconds / relative speed for 4096 iteration(s):

    (vertices4  (ENTLAST)).....1029 / 1.3 <fastest>
    (vertices5 (ENTLAST))......1342 / 1 <slowest>
Elapsed milliseconds / relative speed for 4096 iteration(s):

    (vertices5  (ENTLAST)).....1092 / 1.34 <fastest>
    (vertices4  (ENTLAST))......1466 / 1 <slowest>
Elapsed milliseconds / relative speed for 16384 iteration(s):

    (vertices5 (ENTLAST))......1654 / 1.17 <fastest>
    (vertices4  (ENTLAST)).....1935 / 1 <slowest>

增叫 pline 节点数量后 vl-remove-if-not 就稳定了

命令: (repeat 5 (c:tt))
Elapsed milliseconds / relative speed for 2048 iteration(s):

    (V1 (ENTLAST)).....1201 / 1.62 <fastest>
    (V (ENTLAST))......1950 / 1 <slowest>
Elapsed milliseconds / relative speed for 2048 iteration(s):

    (V1 (ENTLAST)).....1264 / 1.89 <fastest>
    (V (ENTLAST))......2387 / 1 <slowest>
Elapsed milliseconds / relative speed for 2048 iteration(s):

    (V1 (ENTLAST)).....1248 / 1.89 <fastest>
    (V (ENTLAST))......2356 / 1 <slowest>
Elapsed milliseconds / relative speed for 2048 iteration(s):

    (V1 (ENTLAST)).....1264 / 1.86 <fastest>
    (V (ENTLAST))......2356 / 1 <slowest>
Elapsed milliseconds / relative speed for 2048 iteration(s):

    (V1 (ENTLAST)).....1248 / 1.91 <fastest>
    (V (ENTLAST))......2387 / 1 <slowest>

评分

参与人数 1D豆 +5 贡献 +1 收起 理由
newer + 5 + 1 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-6-5 12:47:51 | 显示全部楼层
来个递归版本

  1. (defun vertices6 (ent)
  2.     (defun _lwvertices (e)
  3.         (if (setq e (member (assoc 10 e) e))
  4.             (cons (list (cdr (assoc 10 e)) (cdr (assoc 42 e)))
  5.                   (_lwvertices (cdr e))
  6.             )
  7.         )
  8.     )
  9.     (setq ent (entget ent))
  10.     (_lwvertices ent)
  11. )


评分

参与人数 1D豆 +5 贡献 +1 收起 理由
newer + 5 + 1 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-6-5 13:05:14 | 显示全部楼层
收集到6个代码,测试如下:


  1. 命令: tt
  2. Elapsed milliseconds / relative speed for 32768 iteration(s):

  3.     (VERTICES6 (ENTLAST))......1891 / 6.18 <fastest>
  4.     (VERTICES5 (ENTLAST))......2406 / 4.86
  5.     (VERTICES1 (ENTLAST))......3047 / 3.84
  6.     (VERTICES4 (ENTLAST))......3266 / 3.58
  7.     (VERTICES3 (ENTLAST))......5812 / 2.01
  8.     (VERTICES2 (ENTLAST)).....11687 / 1 <slowest>

  9. 命令:
  10. 命令: tt
  11. Elapsed milliseconds / relative speed for 16384 iteration(s):

  12.     (VERTICES6 (ENTLAST)).....1078 / 6.31 <fastest>
  13.     (VERTICES5 (ENTLAST)).....1422 / 4.78
  14.     (VERTICES1 (ENTLAST)).....1688 / 4.03
  15.     (VERTICES4 (ENTLAST)).....1828 / 3.72
  16.     (VERTICES3 (ENTLAST)).....3281 / 2.07
  17.     (VERTICES2 (ENTLAST)).....6797 / 1 <slowest>

  18. 命令:
  19. 命令: tt
  20. Elapsed milliseconds / relative speed for 32768 iteration(s):

  21.     (VERTICES6 (ENTLAST))......1859 / 6.43 <fastest>
  22.     (VERTICES5 (ENTLAST))......2343 / 5.1
  23.     (VERTICES1 (ENTLAST))......3031 / 3.94
  24.     (VERTICES4 (ENTLAST))......3266 / 3.66
  25.     (VERTICES3 (ENTLAST))......5828 / 2.05
  26.     (VERTICES2 (ENTLAST)).....11953 / 1 <slowest>

  27. 命令:
  28. 命令: (repeat 2 (c:tt))
  29. Elapsed milliseconds / relative speed for 16384 iteration(s):

  30.     (VERTICES6 (ENTLAST)).....1141 / 6.63 <fastest>
  31.     (VERTICES5 (ENTLAST)).....1516 / 4.99
  32.     (VERTICES1 (ENTLAST)).....1829 / 4.14
  33.     (VERTICES4 (ENTLAST)).....1906 / 3.97
  34.     (VERTICES3 (ENTLAST)).....3343 / 2.26
  35.     (VERTICES2 (ENTLAST)).....7563 / 1 <slowest>
  36. Elapsed milliseconds / relative speed for 16384 iteration(s):

  37.     (VERTICES6 (ENTLAST)).....1125 / 6.71 <fastest>
  38.     (VERTICES5 (ENTLAST)).....1531 / 4.93
  39.     (VERTICES1 (ENTLAST)).....1922 / 3.93
  40.     (VERTICES4 (ENTLAST)).....1937 / 3.9
  41.     (VERTICES3 (ENTLAST)).....3359 / 2.25
  42.     (VERTICES2 (ENTLAST)).....7547 / 1 <slowest>

复制代码


结果: vertices6 和 vertices5 稳居前两位,同第三名拉开距离较大,
vertices6也是大幅度领先vertices5,
第一次递归的代码表现这么好
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2017-6-6 10:55:27 | 显示全部楼层
没有使用xdapi,我使用常规的Lisp代码来测试:
  1. (defun c:tt ()
  2.   (c:tt1)
  3.   (c:tt2)
  4.   (c:tt3)
  5.   (c:tt4)
  6.   (c:tt5)
  7.   (c:tt5)    ;重复一次,观察连续运行的影响
  8.   (c:tt4)
  9.   (c:tt3)
  10.   (c:tt2)
  11.   (c:tt1)
  12. )

  13. (defun c:tt1 ()
  14.   (setq s (getvar "date"))
  15.   (vertices1 (entlast))
  16.   (princ "\n1-")
  17.   (princ (* (- (getvar "date") s) 86400.))
  18.   (princ)
  19. )

  20. (defun c:tt2 ()
  21.   (setq s (getvar "date"))
  22.   (vertices2 (entlast))
  23.   (princ "\n2-")
  24.   (princ (* (- (getvar "date") s) 86400.))
  25.   (princ)
  26. )

  27. (defun c:tt3 ()
  28.   (setq s (getvar "date"))
  29.   (vertices3 (entlast))
  30.   (princ "\n3-")
  31.   (princ (* (- (getvar "date") s) 86400.))
  32.   (princ)
  33. )

  34. (defun c:tt4 ()
  35.   (setq s (getvar "date"))
  36.   (vertices4 (entlast))
  37.   (princ "\n4-")
  38.   (princ (* (- (getvar "date") s) 86400.))
  39.   (princ)
  40. )

  41. (defun c:tt5 ()
  42.   (setq s (getvar "date"))
  43.   (vertices5 (entlast))
  44.   (princ "\n5-")
  45.   (princ (* (- (getvar "date") s) 86400.))
  46.   (princ)
  47. )

  48. (defun c:tt6 ()
  49.   (setq s (getvar "date"))
  50.   (vertices6 (entlast))
  51.   (princ "\n6-")
  52.   (princ (* (- (getvar "date") s) 86400.))
  53.   (princ)
  54. )

我的测试结果:
单根多段线线段数目10000时:
命令: tt
1-0.078012
2-0.249968
3-0.109032
4-0.0469923
5-0.078012
5-0.0779718
4-0.0630051
3-0.0939846
2-0.265016
1-0.109997


命令: TT6
6-0.0469923



单根多段线线段数目20000时:
命令: TT
1-0.156024
2-0.51599
3-0.233996
4-0.125004
5-0.188009
5-0.171997
4-0.125004
3-0.233996
2-0.546969
1-0.187004


命令: TT6
出现硬错误 ***
已达内部堆栈限制 (模拟)

结论与理解:
1、使用了VL的vertices2是最慢的,这是因为VL是使用了牺牲速度换功能的理念,所以一般不要以VL来追求快。
2、使用简单的、基本的代码,速度总是最快的,像vertices1、vertices5、vertices6,而vertices3使用了vl-remove-if-not,估计是因为内部使用了判别,所以速度受到了一定的拖累。
3、vertices6虽然使用了递归,但因为是尾递归(类似于迭代),速度仍然是很快的(本例中因为核心代码简洁,所以速度最快),但仍旧摆脱不了自身的递归层次20000次的限制,建议慎用。
4、vertices4虽然速度最快,但对于本例来说,结果只是半成品,不宜参与结果比较,但这种方法的思路容易理解,结果使用也比较灵活,是可以借鉴的代码。


评分

参与人数 1D豆 +5 贡献 +2 收起 理由
newer + 5 + 2 有始有终奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2017-6-6 11:17:07 | 显示全部楼层
简单的、基本的代码应属7楼vertices5,使用也比较灵活。My love!
vertices1中仍使用了Vl-remove
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2017-6-6 11:33:33 | 显示全部楼层

不是所有的VL函数都复杂,一个函数、一段代码是否效率高,也不仅仅是是否完全使用Lisp的基本函数,还在它的结构是否简单直接,vertices6就是占了这一点,层次少,所以速度最快。vertices5虽然使用的都是最基本的函数,结构也易懂,但层次稍有累赘。
vl-remove等函数虽然也是以vl打头,但其实并不属于vl函数,也应属于Al函数范畴,与常规的AL函数所不同的是,这些函数是VL时代才出现的,但这些函数并不依托标准的VL环境(vl-load-com)即可运行,效率也与普通的AL函数相当。
vl-remove和vl-remove-if-not是属于同样级别的函数,但后者至少多了两层判断,所以效率较低。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-6-6 11:52:39 | 显示全部楼层

如果必须要if 判断后,才确定是否vl-remove 的情况下,大师有空测试下 和 vl-remove-if比哪个更快

比如删除一个表中 带精度控制的 点


  1. (while ...
  2.      (if ....
  3.          (vl-remove ....)
  4.      )
  5. )


和 (vl-remove-if  ...... lst)  这个可是节省了一个循环的写法,变内部处理循环了

看哪个快?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-12 10:11 , Processed in 0.231378 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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