马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 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
 - (defun vertices1 (e)
- (vl-remove nil
- (mapcar (function (lambda (a b)
- (if (= (car a) 10)
- (list (cdr a) (cdr b))
- )
- )
- )
- (entget e)
- (cdddr (entget e))
- )
- )
- )
2、vertices1
 - (defun vertices2 (ename / obj lst n)
- (setq eo (vlax-ename->vla-object ename)
- n 0
- )
- (vl-remove-if
- 'null
- (mapcar
- '(lambda (a b / m)
- (setq m n
- n (1+ n)
- )
- (if (= (rem m 2) 0)
- (list (cons a b) (vla-GetBulge eo (/ m 2)))
- )
- )
- (setq lst (vlax-get eo 'Coordinates))
- (cdr lst)
- )
- )
- )
测试代码 效率
 - (defun c:tt()
- (xd::benchmark '((vertices1 (entlast)) (vertices2 (entlast))))
- (princ)
- )
测试结果
- 命令: (repeat 5 (c:tt))
- Elapsed milliseconds / relative speed for 2048 iteration(s):
- (VERTICES1 (ENTLAST)).....1812 / 4.11 <fastest>
- (VERTICES2 (ENTLAST)).....7453 / 1 <slowest>
- Elapsed milliseconds / relative speed for 4096 iteration(s):
- (VERTICES1 (ENTLAST)).....1312 / 6.84 <fastest>
- (VERTICES2 (ENTLAST)).....8969 / 1 <slowest>
- Elapsed milliseconds / relative speed for 4096 iteration(s):
- (VERTICES1 (ENTLAST)).....1188 / 6.33 <fastest>
- (VERTICES2 (ENTLAST)).....7516 / 1 <slowest>
- Elapsed milliseconds / relative speed for 4096 iteration(s):
- (VERTICES1 (ENTLAST)).....1484 / 3.75 <fastest>
- (VERTICES2 (ENTLAST)).....5563 / 1 <slowest>
- Elapsed milliseconds / relative speed for 4096 iteration(s):
- (VERTICES1 (ENTLAST)).....1297 / 4.22 <fastest>
- (VERTICES2 (ENTLAST)).....5469 / 1 <slowest>
复制代码
结论:VERTICES1效率明显高
=======================================================================================
收集到6个代码,测试如下:
- 命令: tt
- Elapsed milliseconds / relative speed for 32768 iteration(s):
- (VERTICES6 (ENTLAST))......1891 / 6.18 <fastest>
- (VERTICES5 (ENTLAST))......2406 / 4.86
- (VERTICES1 (ENTLAST))......3047 / 3.84
- (VERTICES4 (ENTLAST))......3266 / 3.58
- (VERTICES3 (ENTLAST))......5812 / 2.01
- (VERTICES2 (ENTLAST)).....11687 / 1 <slowest>
- 命令:
- 命令: tt
- Elapsed milliseconds / relative speed for 16384 iteration(s):
- (VERTICES6 (ENTLAST)).....1078 / 6.31 <fastest>
- (VERTICES5 (ENTLAST)).....1422 / 4.78
- (VERTICES1 (ENTLAST)).....1688 / 4.03
- (VERTICES4 (ENTLAST)).....1828 / 3.72
- (VERTICES3 (ENTLAST)).....3281 / 2.07
- (VERTICES2 (ENTLAST)).....6797 / 1 <slowest>
- 命令:
- 命令: tt
- Elapsed milliseconds / relative speed for 32768 iteration(s):
- (VERTICES6 (ENTLAST))......1859 / 6.43 <fastest>
- (VERTICES5 (ENTLAST))......2343 / 5.1
- (VERTICES1 (ENTLAST))......3031 / 3.94
- (VERTICES4 (ENTLAST))......3266 / 3.66
- (VERTICES3 (ENTLAST))......5828 / 2.05
- (VERTICES2 (ENTLAST)).....11953 / 1 <slowest>
- 命令:
- 命令: (repeat 2 (c:tt))
- Elapsed milliseconds / relative speed for 16384 iteration(s):
- (VERTICES6 (ENTLAST)).....1141 / 6.63 <fastest>
- (VERTICES5 (ENTLAST)).....1516 / 4.99
- (VERTICES1 (ENTLAST)).....1829 / 4.14
- (VERTICES4 (ENTLAST)).....1906 / 3.97
- (VERTICES3 (ENTLAST)).....3343 / 2.26
- (VERTICES2 (ENTLAST)).....7563 / 1 <slowest>
- Elapsed milliseconds / relative speed for 16384 iteration(s):
- (VERTICES6 (ENTLAST)).....1125 / 6.71 <fastest>
- (VERTICES5 (ENTLAST)).....1531 / 4.93
- (VERTICES1 (ENTLAST)).....1922 / 3.93
- (VERTICES4 (ENTLAST)).....1937 / 3.9
- (VERTICES3 (ENTLAST)).....3359 / 2.25
- (VERTICES2 (ENTLAST)).....7547 / 1 <slowest>
复制代码
结果: vertices6 和 vertices5 稳居前两位,同第三名拉开距离较大,
vertices6也是大幅度领先vertices5,
第一次递归的代码表现这么好
|