找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4207|回复: 11

[LISP函数]:LWPOLYLINE消重(函数)

[复制链接]

已领礼包: 488个

财富等级: 日进斗金

发表于 2005-9-28 20:49:24 | 显示全部楼层 |阅读模式

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

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

×
硬写的,不要其他自定义函数

  1. (defun lwpl-remove-duppoint (e / a a1 b b1 c c1 en j n new p p1 key)
  2.   (setq en (entget e))
  3.   (while (setq n (car en))
  4.     (if        (= (car n) 90)
  5.       (setq j (cdr n))
  6.     )
  7.     (if        (= (car n) 10)
  8.       (progn
  9.         (mapcar 'set '(p a b c) en)
  10.         (setq en  (cddddr en)
  11.               key t
  12.         ) ;_key进入dxf10
  13.         (if (equal p1 p 1e-4)
  14.           (setq j (1- j))
  15.           (if p1
  16.             (setq new (append new (list p1 a1 b1 c1)))
  17.           )
  18.         )
  19.         (mapcar 'set '(p1 a1 b1 c1) (list p a b c))
  20.       ) ;_progn
  21.       (progn (if key
  22.                (setq new (append new (list p1 a1 b1 c1))
  23.                      key nil
  24.                ) ;_dxf10读完了.
  25.              )
  26.              (setq new (append new (list n))
  27.                    en  (cdr en)
  28.              )
  29.       )
  30.     ) ;_if
  31.   ) ;_while
  32.   (entmod (subst (cons 90 j) (assoc 90 new) new))
  33. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2005-9-28 20:51:22 | 显示全部楼层
实例:

  1. (defun c:plxc( / e)
  2. (while(setq e(car(entsel "\n选LWPOLYLINE消重复点: ")))
  3.     (if (= "LWPOLYLINE"(cdr(assoc 0(entget e))))
  4.         (progn([URL=http://p4.xdcad.net/forum/showthread.php?s=&postid=2278580#post2278580][U][COLOR=red]lwpl-remove-duppoint[/COLOR][/U][/URL] e)(princ"...ok"))
  5.         (princ "\n没选到LWPOLYLINE")
  6.     )
  7. )
  8. (princ)
  9. )


多选:

  1. (defun c:plxc( / ss)
  2.   (if(setq ss(ssget '((0 . "LWPOLYLINE"))))
  3.      ([URL=http://p4.xdcad.net/forum/showthread.php?s=&threadid=463104][U][COLOR=red]xd-SSMAP[/COLOR][/U][/URL] '(lambda(x)([URL=http://p4.xdcad.net/forum/showthread.php?s=&postid=2278580#post2278580][U][COLOR=red]lwpl-remove-duppoint[/COLOR][/U][/URL] x)) ss)
  4.   )
  5.   (princ)
  6. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-9-30 08:04:52 | 显示全部楼层
用纯LISP写,“不要其他自定义函数”使用上不受其它函数的限制,这样的程序好,可在没有VLISP的系统上运行,楼主对DXF的组码了解的非常透彻,学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-6 04:46:35 | 显示全部楼层
还算不上完美,当多义线最后一点与起始点距离很近(阈值范围内)甚至重合但又没有闭合(dxf70=0)的情况下,没有能自动处理成闭合(应再少一个顶点)。
提供一个程序作比较
http://p4.xdcad.net/forum/showth ... 2292292#post2292292
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-10-6 08:47:50 | 显示全部楼层
;;

  1. (defun lwpl-remove-duppoint
  2.        (e / a a1 b b1 c c1 en j n new p p1 key new1)
  3.   (setq en (entget e))
  4.   (while (setq n (car en))
  5.     (if        (= (car n) 90)
  6.       (setq j (cdr n))
  7.     )
  8.     (if        (= (car n) 10)
  9.       (progn
  10.         (mapcar 'set '(p a b c) en)
  11.         (setq en  (cddddr en)
  12.               key t
  13.         ) ;_key进入dxf10
  14.         (if (equal p1 p 1e-4)
  15.           (setq j (1- j))
  16.           (if p1
  17.             (setq new (append new (list p1 a1 b1 c1)))
  18.           )
  19.         )
  20.         (mapcar 'set '(p1 a1 b1 c1) (list p a b c))
  21.       ) ;_progn
  22.       (progn (if key
  23.                (setq new (append new (list p1 a1 b1 c1))
  24.                      key nil
  25.                ) ;_dxf10读完了.
  26.              )
  27.              (setq new (append new (list n))
  28.                    en  (cdr en)
  29.              )
  30.       )
  31.     ) ;_if
  32.   ) ;_while
  33.   (if (equal (assoc 10 new)
  34.              (assoc 10 (setq new1 (reverse new)))
  35.              0.000001
  36.       )
  37.     (setq new (reverse
  38.                 (cdr (member (assoc 10 new1) new1)) ;_去掉了 210 ?
  39.               )
  40.           new (subst (cons 70 (1+ (cdr (assoc 70 new))))
  41.                      (assoc 70 new)
  42.                      new
  43.               )
  44.           j   (1- j)
  45.     )
  46.   )
  47.   (entmod (subst (cons 90 j) (assoc 90 new) new))
  48. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 69个

财富等级: 招财进宝

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

使用道具 举报

发表于 2005-10-11 12:46:17 | 显示全部楼层
如果是任意曲线应该如何处理呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-10-12 00:26:30 | 显示全部楼层
最初由 afeng0712 发布
[B]如果是任意曲线应该如何处理呢? [/B]

什么叫任意曲线?CAD中的Curve包括:Line、Arc、Circle、Spline、Ellipse、Polyline、Lwpolyline,可能产生重合点的只有Polyline、Lwpolyline、Spline
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-21 00:17:38 | 显示全部楼层
Polyline重复点如何删除呢,我的程序只能查找
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2009-5-15 11:00:58 | 显示全部楼层
polyline重复点的删除稍微麻烦些,因为其顶点坐标用一个vertex子实体来管理的,可以用一种办法来实现:即用一个自定义函数来提取所有顶点,组成一个列表,用上面的算法来找出重复点并从列表中去掉,再根据这些顶点重新生成多义线,同时将原有polyline线删除.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 07:13 , Processed in 0.206760 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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