找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1109|回复: 16

[求助] 重开贴:关于消除相邻重复点,理论上这两种方式哪种更快

[复制链接]

已领礼包: 28个

财富等级: 恭喜发财

发表于 2018-4-21 12:57:34 来自手机 | 显示全部楼层 |阅读模式

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

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

×
最新对多段线处理时,我用vl-remove-if获得一个多段线的全部顶点列表,但是里面可能有重复的点(不要相邻重复点),即让这个表的第一个元素与第二个元素比对,如果不一样,就把第一个元素列入新表,cdr一下顶点列表,如果比对一样,cdr下顶点列表(不把第一个元素加入新表),直到顶点列表为空,这时获得一个新的顶点列表,这个顶点列表里相邻顶点不会 有相同的,但是在整个列表里面可以有一样的。
(setq plist '((1 8)(1 8)(1 7)(1 6)(1 6)(1 6)(1 5)(1 8)(1 8)(1 7)))
要得到这样的结果(1 8)(1 7)(1 6)(1 5)(1 8)(1 7)
plist 已知
  (while (/= plist nil)
(if (equal (car plist) (cadr plist))
  (progn (setq plist(cdr plist)))
  (progn (setq nplist(cons (car plist) nplist))(setq plist(cdr plist)))

  ))
(setq nplist(reverse nplist))这种方法感觉很浪费内存,重复取了数字,我又写了一个如下,经常不是有人说nth比较慢吗?用nth的方式感觉取数据没有重复,会不会反而比第一种方式慢呢,用哪一个好
(setq i 0 nplist nil)
(while (< i (- (length plist)1))
(cond ((= i 0)
      (progn (setq first (nth i plist))
                (setq second (nth (+ i 1) plist))
       (if (equal first second)(progn(setq nplist(cons first nplist))(setq first second)(setq i(+ i 1)))
         (progn(setq nplist(cons first nplist))(setq first second)(setq i(+ i 1)))
         )))
      ((= i(- (length plist)1))
        (progn
        (setq second (nth (+ i 1) plist))
       (if (equal first second)(progn(setq nplist(cons second nplist)))
         (progn(setq nplist(cons first nplist))
           (setq nplist(cons second nplist))))
       ))
        (T (progn (setq second (nth (+ i 1) plist))
                (if (=(equal first second)nil)
(progn (setq nplist(cons second nplist))
        (setq first second)(setq i(+ i 1)))
(progn (setq first second)(setq i (+ i 1))))
                  )
  )
             ))
setq nplist(reverse nplist))另外,为啥电脑上老进不了网站,手机上一直都可以。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 5583个

财富等级: 富甲天下

发表于 2018-4-21 14:06:22 | 显示全部楼层
(setq plist '((1 8)(1 8)(1 7)(1 6)(1 6)(1 6)(1 5)(1 8)(1 8)(1 7)))
(setq rtn (mapcar '(lambda(x y) (if (equal x y 0.001) nil x))
                  plist
                  (cons (last plist) plist)
                  ))
(setq rtn (vl-remove nil rtn))

点评

改成这样好像就行了(setq plist '((1 8)(1 8)(1 7)(1 6)(1 6)(1 6)(1 5)(1 8)(1 8)(1 7))) (setq rtn (mapcar '(lambda(x y) (if (equal x y 0.001) nil x)) plist (cons ni  详情 回复 发表于 2018-4-21 20:00
(setq plist '((1 8)(1 8)(1 7)(1 6)(1 6)(1 6)(1 5)(1 8)(1 8))) 如果首尾两元素一样,你的函数就不起作用,要的结果应是(1 8)(1 7)(1 6)(1 5)(1 8) 根据你的函数得到的结果,第一个(1 8)会失去  详情 回复 发表于 2018-4-21 19:09
代码测试有完成不对的地方,修改下在贴上来试试 数据: 命令: !plst ((589638.0 4.67932e+006 0.0) (593636.0 4.67476e+006 0.0) (589638.0 4.67853e+006 0.0) (592377.0 4.68036e+006 0.0) (590299.0 4.68  详情 回复 发表于 2018-4-21 16:06
为什么是cons last plist plist ,第二个表多了个元素,运行到最后时x是没值啊  详情 回复 发表于 2018-4-21 16:03
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-4-21 15:46:02 | 显示全部楼层
命令: (setq a '((1 3)(1 4)(1 4)(1 4)(2 4)(2 3)(2 3)))
((1 3) (1 4) (1 4) (1 4) (2 4) (2 3) (2 3))
命令: (xd::list:removedup a)
((1 3) (1 4) (2 4) (2 3))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-4-21 15:47:44 | 显示全部楼层
你把你写的代码,写成函数,贴上来。
我帮你测试下几个代码的效率。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-4-21 16:03:56 来自手机 | 显示全部楼层
HLCAD 发表于 2018-4-21 14:06
(setq plist '((1 8)(1 8)(1 7)(1 6)(1 6)(1 6)(1 5)(1 8)(1 8)(1 7)))
(setq rtn (mapcar '(lambda(x y)  ...

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-4-21 16:06:09 | 显示全部楼层
本帖最后由 newer 于 2018-4-21 16:08 编辑
HLCAD 发表于 2018-4-21 14:06
(setq plist '((1 8)(1 8)(1 7)(1 6)(1 6)(1 6)(1 5)(1 8)(1 8)(1 7)))
(setq rtn (mapcar '(lambda(x y)  ...

代码测试有完成不对的地方,修改下在贴上来试试

数据(160个点,16个唯一点):

命令: !plst
((589638.0 4.67932e+006 0.0) (593636.0 4.67476e+006 0.0) (589638.0 4.67853e+006
0.0) (592377.0 4.68036e+006 0.0) (590299.0 4.68177e+006 0.0) (590299.0
4.68177e+006 0.0) (589638.0 4.67932e+006 0.0) (591904.0 4.67567e+006 0.0)
(592377.0 4.68036e+006 0.0) (595714.0 4.67542e+006 0.0) (589638.0 4.67932e+006
0.0) (589701.0 4.6752e+006 0.0) (589701.0 4.6752e+006 0.0) (594297.0
4.6741e+006 0.0) (590299.0 4.68177e+006 0.0) (592377.0 4.68036e+006 0.0)
(591904.0 4.67567e+006 0.0) (591716.0 4.68344e+006 0.0) (594612.0 4.67734e+006
0.0) (594297.0 4.6741e+006 0.0) (594612.0 4.67734e+006 0.0) (594612.0
4.67734e+006 0.0) (589701.0 4.6752e+006 0.0) (595336.0 4.68083e+006 0.0)
(591716.0 4.68344e+006 0.0) (590299.0 4.68177e+006 0.0) (589638.0 4.67932e+006
0.0) (593636.0 4.67476e+006 0.0) (595714.0 4.67542e+006 0.0) (588882.0
4.67637e+006 0.0) (592377.0 4.68036e+006 0.0) (594612.0 4.68184e+006 0.0)
(589701.0 4.6752e+006 0.0) (595840.0 4.67822e+006 0.0) (593636.0 4.67476e+006
0.0) (592377.0 4.68036e+006 0.0) (595714.0 4.67542e+006 0.0) (591904.0
4.67567e+006 0.0) (589701.0 4.6752e+006 0.0) (595714.0 4.67542e+006 0.0)
(593636.0 4.67476e+006 0.0) (589638.0 4.67932e+006 0.0) (594297.0 4.6741e+006
0.0) (595714.0 4.67542e+006 0.0) (591904.0 4.67567e+006 0.0) (589701.0
4.6752e+006 0.0) (591904.0 4.67567e+006 0.0) (589701.0 4.6752e+006 0.0)
(595714.0 4.67542e+006 0.0) (588882.0 4.67637e+006 0.0) (591904.0 4.67567e+006
0.0) (592062.0 4.67467e+006 0.0) (592062.0 4.67467e+006 0.0) (592062.0
4.67467e+006 0.0) (594612.0 4.68184e+006 0.0) (594297.0 4.6741e+006 0.0)
(592377.0 4.68036e+006 0.0) (589701.0 4.6752e+006 0.0) (592377.0 4.68036e+006
0.0) (592062.0 4.67467e+006 0.0) (589701.0 4.6752e+006 0.0) (591904.0
4.67567e+006 0.0) (595714.0 4.67542e+006 0.0) (592377.0 4.68036e+006 0.0)
(588882.0 4.67637e+006 0.0) (595840.0 4.67822e+006 0.0) (592062.0 4.67467e+006
0.0) (590299.0 4.68177e+006 0.0) (591904.0 4.67567e+006 0.0) (589638.0
4.67853e+006 0.0) (595714.0 4.67542e+006 0.0) (595336.0 4.68083e+006 0.0)
(590299.0 4.68177e+006 0.0) (593636.0 4.67476e+006 0.0) (591716.0 4.68344e+006
0.0) (591904.0 4.67567e+006 0.0) (593636.0 4.67476e+006 0.0) (592062.0
4.67467e+006 0.0) (588882.0 4.67637e+006 0.0) (588882.0 4.67637e+006 0.0)
(594612.0 4.68184e+006 0.0) (593636.0 4.67476e+006 0.0) (592377.0 4.68036e+006
0.0) (592062.0 4.67467e+006 0.0) (592377.0 4.68036e+006 0.0) (595840.0
4.67822e+006 0.0) (592377.0 4.68036e+006 0.0) (595714.0 4.67542e+006 0.0)
(594297.0 4.6741e+006 0.0) (594297.0 4.6741e+006 0.0) (593636.0 4.67476e+006
0.0) (593636.0 4.67476e+006 0.0) (595336.0 4.68083e+006 0.0) (592062.0
4.67467e+006 0.0) (590299.0 4.68177e+006 0.0) (589701.0 4.6752e+006 0.0)
(593636.0 4.67476e+006 0.0) (595840.0 4.67822e+006 0.0) (595336.0 4.68083e+006
0.0) (594612.0 4.67734e+006 0.0) (594612.0 4.68184e+006 0.0) (592062.0
4.67467e+006 0.0) (593636.0 4.67476e+006 0.0) (595840.0 4.67822e+006 0.0)
(592062.0 4.67467e+006 0.0) (592062.0 4.67467e+006 0.0) (592377.0 4.68036e+006
0.0) (594612.0 4.68184e+006 0.0) (589701.0 4.6752e+006 0.0) (591716.0
4.68344e+006 0.0) (591716.0 4.68344e+006 0.0) (591904.0 4.67567e+006 0.0)
(591904.0 4.67567e+006 0.0) (588882.0 4.67637e+006 0.0) (589638.0 4.67932e+006
0.0) (589638.0 4.67932e+006 0.0) (595336.0 4.68083e+006 0.0) (591716.0
4.68344e+006 0.0) (589638.0 4.67853e+006 0.0) (594612.0 4.67734e+006 0.0)
(592377.0 4.68036e+006 0.0) (588882.0 4.67637e+006 0.0) (589638.0 4.67853e+006
0.0) (588882.0 4.67637e+006 0.0) (592062.0 4.67467e+006 0.0) (594297.0
4.6741e+006 0.0) (592377.0 4.68036e+006 0.0) (591716.0 4.68344e+006 0.0)
(589638.0 4.67853e+006 0.0) (592062.0 4.67467e+006 0.0) (589638.0 4.67853e+006
0.0) (589701.0 4.6752e+006 0.0) (589701.0 4.6752e+006 0.0) (594612.0
4.68184e+006 0.0) (589638.0 4.67932e+006 0.0) (589701.0 4.6752e+006 0.0)
(594612.0 4.68184e+006 0.0) (595840.0 4.67822e+006 0.0) (589638.0 4.67932e+006
0.0) (594612.0 4.67734e+006 0.0) (589701.0 4.6752e+006 0.0) (595840.0
4.67822e+006 0.0) (594612.0 4.68184e+006 0.0) (594612.0 4.67734e+006 0.0)
(594612.0 4.67734e+006 0.0) (591716.0 4.68344e+006 0.0) (592377.0 4.68036e+006
0.0) (
592062.0 4.67467e+006 0.0) (594297.0 4.6741e+006 0.0) (590299.0 4.68177e+006
0.0) (592377.0 4.68036e+006 0.0) (590299.0 4.68177e+006 0.0) (589638.0
4.67853e+006 0.0) (592062.0 4.67467e+006 0.0) (593636.0 4.67476e+006 0.0)
(595336.0 4.68083e+006 0.0) (595714.0 4.67542e+006 0.0) (594612.0 4.67734e+006
0.0) (591716.0 4.68344e+006 0.0) (595840.0 4.67822e+006 0.0))



你的代码结果:

执行后,得到146个点,
命令: !b
((589638.0 4.67932e+006 0.0) (593636.0 4.67476e+006 0.0) (589638.0 4.67853e+006
0.0) (592377.0 4.68036e+006 0.0) (590299.0 4.68177e+006 0.0) (589638.0
4.67932e+006 0.0) (591904.0 4.67567e+006 0.0) (592377.0 4.68036e+006 0.0)
(595714.0 4.67542e+006 0.0) (589638.0 4.67932e+006 0.0) (589701.0 4.6752e+006
0.0) (594297.0 4.6741e+006 0.0) (590299.0 4.68177e+006 0.0) (592377.0
4.68036e+006 0.0) (591904.0 4.67567e+006 0.0) (591716.0 4.68344e+006 0.0)
(594612.0 4.67734e+006 0.0) (594297.0 4.6741e+006 0.0) (594612.0 4.67734e+006
0.0) (589701.0 4.6752e+006 0.0) (595336.0 4.68083e+006 0.0) (591716.0
4.68344e+006 0.0) (590299.0 4.68177e+006 0.0) (589638.0 4.67932e+006 0.0)
(593636.0 4.67476e+006 0.0) (595714.0 4.67542e+006 0.0) (588882.0 4.67637e+006
0.0) (592377.0 4.68036e+006 0.0) (594612.0 4.68184e+006 0.0) (589701.0
4.6752e+006 0.0) (595840.0 4.67822e+006 0.0) (593636.0 4.67476e+006 0.0)
(592377.0 4.68036e+006 0.0) (595714.0 4.67542e+006 0.0) (591904.0 4.67567e+006
0.0) (589701.0 4.6752e+006 0.0) (595714.0 4.67542e+006 0.0) (593636.0
4.67476e+006 0.0) (589638.0 4.67932e+006 0.0) (594297.0 4.6741e+006 0.0)
(595714.0 4.67542e+006 0.0) (591904.0 4.67567e+006 0.0) (589701.0 4.6752e+006
0.0) (591904.0 4.67567e+006 0.0) (589701.0 4.6752e+006 0.0) (595714.0
4.67542e+006 0.0) (588882.0 4.67637e+006 0.0) (591904.0 4.67567e+006 0.0)
(592062.0 4.67467e+006 0.0) (594612.0 4.68184e+006 0.0) (594297.0 4.6741e+006
0.0) (592377.0 4.68036e+006 0.0) (589701.0 4.6752e+006 0.0) (592377.0
4.68036e+006 0.0) (592062.0 4.67467e+006 0.0) (589701.0 4.6752e+006 0.0)
(591904.0 4.67567e+006 0.0) (595714.0 4.67542e+006 0.0) (592377.0 4.68036e+006
0.0) (588882.0 4.67637e+006 0.0) (595840.0 4.67822e+006 0.0) (592062.0
4.67467e+006 0.0) (590299.0 4.68177e+006 0.0) (591904.0 4.67567e+006 0.0)
(589638.0 4.67853e+006 0.0) (595714.0 4.67542e+006 0.0) (595336.0 4.68083e+006
0.0) (590299.0 4.68177e+006 0.0) (593636.0 4.67476e+006 0.0) (591716.0
4.68344e+006 0.0) (591904.0 4.67567e+006 0.0) (593636.0 4.67476e+006 0.0)
(592062.0 4.67467e+006 0.0) (588882.0 4.67637e+006 0.0) (594612.0 4.68184e+006
0.0) (593636.0 4.67476e+006 0.0) (592377.0 4.68036e+006 0.0) (592062.0
4.67467e+006 0.0) (592377.0 4.68036e+006 0.0) (595840.0 4.67822e+006 0.0)
(592377.0 4.68036e+006 0.0) (595714.0 4.67542e+006 0.0) (594297.0 4.6741e+006
0.0) (593636.0 4.67476e+006 0.0) (595336.0 4.68083e+006 0.0) (592062.0
4.67467e+006 0.0) (590299.0 4.68177e+006 0.0) (589701.0 4.6752e+006 0.0)
(593636.0 4.67476e+006 0.0) (595840.0 4.67822e+006 0.0) (595336.0 4.68083e+006
0.0) (594612.0 4.67734e+006 0.0) (594612.0 4.68184e+006 0.0) (592062.0
4.67467e+006 0.0) (593636.0 4.67476e+006 0.0) (595840.0 4.67822e+006 0.0)
(592062.0 4.67467e+006 0.0) (592377.0 4.68036e+006 0.0) (594612.0 4.68184e+006
0.0) (589701.0 4.6752e+006 0.0) (591716.0 4.68344e+006 0.0) (591904.0
4.67567e+006 0.0) (588882.0 4.67637e+006 0.0) (589638.0 4.67932e+006 0.0)
(595336.0 4.68083e+006 0.0) (591716.0 4.68344e+006 0.0) (589638.0 4.67853e+006
0.0) (594612.0 4.67734e+006 0.0) (592377.0 4.68036e+006 0.0) (588882.0
4.67637e+006 0.0) (589638.0 4.67853e+006 0.0) (588882.0 4.67637e+006 0.0)
(592062.0 4.67467e+006 0.0) (594297.0 4.6741e+006 0.0) (592377.0 4.68036e+006
0.0) (591716.0 4.68344e+006 0.0) (589638.0 4.67853e+006 0.0) (592062.0
4.67467e+006 0.0) (589638.0 4.67853e+006 0.0) (589701.0 4.6752e+006 0.0)
(594612.0 4.68184e+006 0.0) (589638.0 4.67932e+006 0.0) (589701.0 4.6752e+006
0.0) (594612.0 4.68184e+006 0.0) (595840.0 4.67822e+006 0.0) (589638.0
4.67932e+006 0.0) (594612.0 4.67734e+006 0.0) (589701.0 4.6752e+006 0.0)
(595840.0 4.67822e+006 0.0) (594612.0 4.68184e+006 0.0) (594612.0 4.67734e+006
0.0) (591716.0 4.68344e+006 0.0) (592377.0 4.68036e+006 0.0) (592062.0
4.67467e+006 0.0) (594297.0 4.6741e+006 0.0) (590299.0 4.68177e+006 0.0)
(592377.0 4.68036e+006 0.0) (590299.0 4.68177e+006 0.0) (589638.0 4.67853e+006
0.0) (592062.0 4.67467e+006 0.0) (593636.0 4.67476e+006 0.0) (595336.0
4.68083e+006 0.0) (595714.0 4.67542e+006 0.0) (594612.0 4.67734e+006 0.0)
(591716.0 4.68344e+006 0.0) (595840.0 4.67822e+006 0.0))


正确结果就16个点

命令: !a
((589638.0 4.67932e+006 0.0) (593636.0 4.67476e+006 0.0) (589638.0 4.67853e+006
0.0) (592377.0 4.68036e+006 0.0) (590299.0 4.68177e+006 0.0) (591904.0
4.67567e+006 0.0) (595714.0 4.67542e+006 0.0) (589701.0 4.6752e+006 0.0)
(594297.0 4.6741e+006 0.0) (591716.0 4.68344e+006 0.0) (594612.0 4.67734e+006
0.0) (595336.0 4.68083e+006 0.0) (588882.0 4.67637e+006 0.0) (594612.0
4.68184e+006 0.0) (595840.0 4.67822e+006 0.0) (592062.0 4.67467e+006 0.0))


点评

厉害了,你这160个点怎么想出来的,用我的代码能有正确结果吗?  详情 回复 发表于 2018-4-21 16:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-4-21 16:30:51 来自手机 | 显示全部楼层
newer 发表于 2018-4-21 16:06
代码测试有完成不对的地方,修改下在贴上来试试

数据(160个点,16个唯一点):

厉害了,你这160个点怎么想出来的,用我的代码能有正确结果吗?

点评

你贴的代码太乱了,你整理下,做个函数,再贴上来。 随机重复的点表可以用程序生成啊,画个10多个顶点的多段线,取出顶点表,然后循环个10倍,随机插入顶点就出来了 命令: tt 拾取多段线创建重复点表:((345  详情 回复 发表于 2018-4-21 16:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-4-21 16:39:54 | 显示全部楼层
1121443108qaz 发表于 2018-4-21 16:30
厉害了,你这160个点怎么想出来的,用我的代码能有正确结果吗?

你贴的代码太乱了,你整理下,做个函数,再贴上来。
随机重复的点表可以用程序生成啊,画个10多个顶点的多段线,取出顶点表,然后循环个10倍,随机插入顶点就出来了

  1. (defun c:tt ()
  2.   (if (setq e
  3.              (car (xdrx_entsel "\n拾取多段线创建重复点表<退出>:" '((0 . "LWPOLYLINE")))
  4.              )
  5.       )
  6.     (progn (setq pts  (xdrx_getpropertyvalue e "vertices")
  7.                  len  (length pts)
  8.                  plst nil
  9.            )
  10.            (repeat (* 10 len)
  11.              (setq rand (xdrx_math_rand 0 len))
  12.              (setq plst (cons (nth rand pts) plst))
  13.            )
  14.     )
  15.   )
  16. )



命令: tt
拾取多段线创建重复点表<退出>:((3453.64 758.174 0.0) (3030.21 515.136 0.0) (2410.93 1820.15
0.0) (2088.06 985.362 0.0) (2410.93 1820.15 0.0) (2612.06 758.174 0.0) (2363.3
1497.86 0.0) (3188.99 1460.87 0.0) (2717.92 282.664 0.0) (2717.92 282.664 0.0)
(2410.93 1820.15 0.0) (2834.37 721.19 0.0) (2363.3 1497.86 0.0) (2945.52
1445.02 0.0) (2834.37 721.19 0.0) (3030.21 515.136 0.0) (2188.63 1249.53 0.0)
(2410.93 1820.15 0.0) (3030.21 515.136 0.0) (2945.52 1445.02 0.0) (3188.99
1460.87 0.0) (2088.06 985.362 0.0) (2834.37 721.19 0.0) (2717.92 282.664 0.0)
(2363.3 1497.86 0.0) (2945.52 1445.02 0.0) (2225.68 1423.89 0.0) (2612.06
758.174 0.0) (2188.63 1249.53 0.0) (2088.06 985.362 0.0) (2945.52 1445.02 0.0)
(2225.68 1423.89 0.0) (2088.06 985.362 0.0) (2230.97 710.623 0.0) (2188.63
1249.53 0.0) (2945.52 1445.02 0.0) (3188.99 1460.87 0.0) (2088.06 985.362 0.0)
(3591.26 1149.15 0.0) (2945.52 1445.02 0.0) (2188.63 1249.53 0.0) (2225.68
1423.89 0.0) (3188.99 1460.87 0.0) (2088.06 985.362 0.0) (3188.99 1460.87 0.0)
(2410.93 1820.15 0.0) (2225.68 1423.89 0.0) (3591.26 1149.15 0.0) (2188.63
1249.53 0.0) (3591.26 1149.15 0.0) (2088.06 985.362 0.0) (2834.37 721.19 0.0)
(2188.63 1249.53 0.0) (2230.97 710.623 0.0) (3030.21 515.136 0.0) (2612.06
758.174 0.0) (2612.06 758.174 0.0) (2088.06 985.362 0.0) (3453.64 758.174 0.0)
(2230.97 710.623 0.0) (2088.06 985.362 0.0) (3188.99 1460.87 0.0) (2225.68
1423.89 0.0) (2410.93 1820.15 0.0) (2088.06 985.362 0.0) (2717.92 282.664 0.0)
(2945.52 1445.02 0.0) (2230.97 710.623 0.0) (3030.21 515.136 0.0) (2225.68
1423.89 0.0) (2230.97 710.623 0.0) (3030.21 515.136 0.0) (2834.37 721.19 0.0)
(2088.06 985.362 0.0) (3453.64 758.174 0.0) (3453.64 758.174 0.0) (2188.63
1249.53 0.0) (2410.93 1820.15 0.0) (3030.21 515.136 0.0) (2945.52 1445.02 0.0)
(2612.06 758.174 0.0) (3453.64 758.174 0.0) (3453.64 758.174 0.0) (2188.63
1249.53 0.0) (2088.06 985.362 0.0) (2717.92 282.664 0.0) (2088.06 985.362 0.0)
(2230.97 710.623 0.0) (3453.64 758.174 0.0) (2088.06 985.362 0.0) (3188.99
1460.87 0.0) (2410.93 1820.15 0.0) (2230.97 710.623 0.0) (3030.21 515.136 0.0)
(3030.21 515.136 0.0) (2410.93 1820.15 0.0) (3591.26 1149.15 0.0) (2945.52
1445.02 0.0) (2088.06 985.362 0.0) (2088.06 985.362 0.0) (2945.52 1445.02 0.0)
(2945.52 1445.02 0.0) (2945.52 1445.02 0.0) (2410.93 1820.15 0.0) (2230.97
710.623 0.0) (2230.97 710.623 0.0) (3188.99 1460.87 0.0) (2188.63 1249.53 0.0)
(2088.06 985.362 0.0) (3453.64 758.174 0.0) (2188.63 1249.53 0.0) (2230.97
710.623 0.0) (3188.99 1460.87 0.0) (2230.97 710.623 0.0) (2945.52 1445.02 0.0)
(3591.26 1149.15 0.0) (3030.21 515.136 0.0) (2410.93 1820.15 0.0) (2612.06
758.174 0.0) (2834.37 721.19 0.0) (2188.63 1249.53 0.0) (2225.68 1423.89 0.0)
(2834.37 721.19 0.0) (2188.63 1249.53 0.0) (2230.97 710.623 0.0) (2945.52
1445.02 0.0) (2410.93 1820.15 0.0) (3591.26 1149.15 0.0) (3453.64 758.174 0.0)
(2225.68 1423.89 0.0) (2410.93 1820.15 0.0) (2088.06 985.362 0.0) (2088.06
985.362 0.0) (2363.3 1497.86 0.0) (2410.93 1820.15 0.0) (3591.26 1149.15 0.0)
(2717.92 282.664 0.0) (2717.92 282.664 0.0) (3188.99 1460.87 0.0) (2088.06
985.362 0.0) (3591.26 1149.15 0.0) (3591.26 1149.15 0.0) (3453.64 758.174 0.0)
(2188.63 1249.53 0.0) (2363.3 1497.86 0.0) (2363.3 1497.86 0.0) (2612.06
758.174 0.0) (2834.37 721.19 0.0) (2717.92 282.664 0.0) (2088.06 985.362 0.0))


命令: (xd::list:removedup plst)
((3453.64 758.174 0.0) (3030.21 515.136 0.0) (2410.93 1820.15 0.0) (2088.06
985.362 0.0) (2612.06 758.174 0.0) (2363.3 1497.86 0.0) (3188.99 1460.87 0.0)
(2717.92 282.664 0.0) (2834.37 721.19 0.0) (2945.52 1445.02 0.0) (2188.63
1249.53 0.0) (2225.68 1423.89 0.0) (2230.97 710.623 0.0) (3591.26 1149.15 0.0))

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

使用道具 举报

已领礼包: 5583个

财富等级: 富甲天下

发表于 2018-4-21 18:00:13 | 显示全部楼层
newer 发表于 2018-4-21 16:06
代码测试有完成不对的地方,修改下在贴上来试试

数据(160个点,16个唯一点):

版主,这个只用于消除多段线相邻的重复顶点用的,版主的是提取表中非重复的点

点评

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

使用道具 举报

已领礼包: 5583个

财富等级: 富甲天下

发表于 2018-4-21 18:09:41 | 显示全部楼层
本帖最后由 HLCAD 于 2018-4-21 23:19 编辑

  1. ;;; 消除多段线相邻重复顶点
  2. ;;; by HLCAD
  3. (defun HL:TMP (plist / tmp loop rtn)
  4.   (setq tmp (if (equal (car plist) '(1 1 1) 0.001) '(2 2 2) '(1 1 1)))
  5.   (setq loop t)
  6.   (while loop
  7.     (setq rtn (mapcar '(lambda(x y) (if (equal x y 0.001) nil x))
  8.                       plist
  9.                       (cons tmp plist)
  10.                       ))
  11.     (setq rtn (vl-remove nil rtn))
  12.     (setq loop (> (length plist) (length rtn)))
  13.     (setq plist rtn)
  14.     )
  15.   rtn)


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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-4-21 18:21:39 | 显示全部楼层
HLCAD 发表于 2018-4-21 18:00
版主,这个只用于消除多段线相邻的重复顶点用的,版主的是提取表中非重复的点

相邻的重复删除应用的太窄了吧。

点评

我用来消除重复点后用ssget f选取物体,似乎如果有相邻重复点,ssget f失效得nil  详情 回复 发表于 2018-4-21 19:15
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-4-21 19:09:23 来自手机 | 显示全部楼层
HLCAD 发表于 2018-4-21 14:06
(setq plist '((1 8)(1 8)(1 7)(1 6)(1 6)(1 6)(1 5)(1 8)(1 8)(1 7)))
(setq rtn (mapcar '(lambda(x y)  ...

(setq plist '((1 8)(1 8)(1 7)(1 6)(1 6)(1 6)(1 5)(1 8)(1 8))) 如果首尾两元素一样,你的函数就不起作用,要的结果应是(1 8)(1 7)(1 6)(1 5)(1 8)
根据你的函数得到的结果,第一个(1 8)会失去
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-4-21 19:15:29 来自手机 | 显示全部楼层
newer 发表于 2018-4-21 18:21
相邻的重复删除应用的太窄了吧。

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

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-4-21 19:57:48 来自手机 | 显示全部楼层
经过我自己测试,还是第一个car的算法快,950个多段线,平均一个多段线几百个点,第一个大概比第二个算法快10s
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-4-21 20:00:11 来自手机 | 显示全部楼层
HLCAD 发表于 2018-4-21 14:06
(setq plist '((1 8)(1 8)(1 7)(1 6)(1 6)(1 6)(1 5)(1 8)(1 8)(1 7)))
(setq rtn (mapcar '(lambda(x y)  ...

改成这样好像就行了(setq plist '((1 8)(1 8)(1 7)(1 6)(1 6)(1 6)(1 5)(1 8)(1 8)(1 7)))
(setq rtn (mapcar '(lambda(x y) (if (equal x y 0.001) nil x))
                  plist
                  (cons nil plist)
                  ))
(setq rtn (vl-remove nil rtn))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 14:16 , Processed in 0.268601 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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