找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 533|回复: 8

[求助] [求助]:[0602]如何PLINE删除串列中相同的值呢?

[复制链接]
发表于 2006-6-2 07:27:53 | 显示全部楼层 |阅读模式

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

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

×
[求助]:[0602]如何PLINE删除串列中相同的值呢?
请问如何删除串列中相同的值呢?
串列如 ((324 278 0)(363 277 0)(363 277 0 )(279 348 0))
其中 2 3 笔相同,该怎样删除这其中一笔资料?

另外一个问题就是,如果PLINE 线段没有闭合,
为何取出的顶点资料,该怎样包含线段的端点跟终点呢?
DXF 70 是判断是否闭合,但端点跟顶点该怎样看呢?

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

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-6-2 07:39:20 | 显示全部楼层
提问之前,先搜索下,论坛早有过这方面的讨论和代码!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-2 22:29:51 | 显示全部楼层
版主说的是终于找到些关键写下了以下这段程序
我用这程序是要计算线长用的,现在已经解决了,现再请各位大师再指导一下吧~

  1. (setq en (car (entsel "\n select")))
  2. (setq vlaclose (vla-get-Closed (vlax-ename->vla-object en)))
  3. (setq pist (vl-remove-if
  4.              '(lambda (x) (not (= 10 (car x))))
  5.              (entget en)
  6.            )
  7. )
  8. ;;;删除dxf.10群码
  9. (setq plist (mapcar '(lambda (x) (cdr x)) pist))
  10. ;;;排列表
  11. (if (= vlaclose :vlax-false)
  12.   ;;假如为未闭合型
  13.   (progn ;;处里未闭合型
  14.          (REPEAT (- tq 1)
  15.            (setq pt-a (nth n plist))
  16.            (setq pt-b (nth (+ n 1) plist))
  17.            (setq leng1 (/ (distance pt-a pt-b) 100))
  18.            (setq ll1 (append ll1 (list leng1)))
  19.            (setq n (1+ n))
  20.          ) ;_REPEAT
  21.   ) ;_progn
  22.   (progn ;;处里闭合型
  23.          (REPEAT tq
  24.            (setq pt-a (nth n plist))
  25.            (setq pt-b (nth (if (>= n (- tq 1))
  26.                              (- tq tq)
  27.                              (+ n 1)
  28.                            )
  29.                            plist
  30.                       )
  31.            )
  32.            (setq leng1 (/ (distance pt-a pt-b) 100))
  33.            (setq ll1 (append ll1 (list leng1)))
  34.            (setq n (1+ n))
  35.          ) ;_REPEAT
  36.   ) ;_progn
  37. ) ;_if
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-6-2 23:37:05 | 显示全部楼层
你问的和你的应用没有什么关系

  1. (defun c:tt (/ e i endpam p1 p2 ll d)
  2.   (if (setq e (car (entsel)))
  3.     (progn
  4.       (setq i           0
  5.             endpam (vlax-curve-getendparam e)
  6.       )
  7.       (while (< i endpam)
  8.         (setq p1 (vlax-curve-getpointatparam e i)
  9.               p2 (vlax-curve-getpointatparam e (1+ i))
  10.         )
  11.         (if (not (equal (setq d (distance p1 p2)) 0. 1e-6))
  12.           (setq ll (cons d ll))
  13.         )
  14.         (setq i (1+ i))
  15.       )
  16.     )
  17.   )  
  18.   (princ ll)
  19.   (princ)
  20. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-3 00:29:25 | 显示全部楼层
看完版大的程序,
才发现原来我的做法多做了那么多动作,
又学到了不少,
本想说要判断是否闭合,
及头尾重复的点问题,
现在看来都不用了

想请问版大这段程序表示的是否为
(equal (setq d (distance p1 p2)) 0. 1e-6))
比较距离的差量精度呢?
0. 是指 0.0 吗?
1e-6 是指差量的 1*10^-6 次方吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-6-3 01:31:27 | 显示全部楼层
1 (equal (setq d (distance p1 p2)) 0. 1e-6)) ->  去掉近似 距离为 0 的段,就是重合点

2 0. = 0.0 是简写,Lisp 的规则

3 是科学计数法
A real is a number containing a decimal point. Numbers between -1 and 1 must contain a leading zero. Real numbers are stored in double-precision floating-point format, providing at least 14 significant digits of precision. Note that VLISP does not show you all the significant digits.

Reals can be expressed in scientific notation, which has an optional e or E followed by the exponent of the number (for example, 0.0000041 is the same as 4.1e-6). Numbers such as 3.1, 0.23, -56.123, and 21,000,000.0 are valid AutoLISP reals
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-3 07:28:52 | 显示全部楼层
感谢版主的解答

另外请问一问题
如果pline带有弧,,那这部分的线长计算,
有现成的函数可以计算吗?
还是该搜寻哪些相关资料来处理呢?

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-6-3 08:37:42 | 显示全部楼层
这样计算太累了!

1 pline -> explode -> ssget p -> 逐个计算 -〉pedit 恢复原来

2 更好的是用 vlax-curve-getdistatparam


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

使用道具 举报

发表于 2006-6-3 16:51:03 | 显示全部楼层
删除表中相同的元素可使用扩展函数:
(acet-list-remove-duplicates lst d)--d为允差 .
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 21:31 , Processed in 0.249356 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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