找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1287|回复: 10

[求助]:XD工具箱里的消重图元的程序的问题。

[复制链接]
发表于 2002-10-11 18:28:24 | 显示全部楼层 |阅读模式

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

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

×
我在用那个消图元的程序时碰到了问题。有些pl线几乎一样,点坐标只差一点(反正眼看不出),程序也不会把它消掉,而用cad自带的expresstool里的那个overkill 确能消掉。但我不喜欢用OVERKILL(它会把两个pl线相邻的边删掉)  请问晓得工具箱里的那个能不能设个模糊值(或容差值),将那些近似的“重”图元消掉。?

另,我在XDSOFT\LISP\..下找不到消重图元是哪个lisp,能告诉我是哪个吗?我想学习学习。不会是ARX吧。

附图,就是那些消不掉重线的图形,请帮我看看。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-10-11 19:18:46 | 显示全部楼层
应该是ARX程序,LISP程序太慢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-11 19:23:47 | 显示全部楼层
最初由 夜语 发布
[B]应该是ARX程序,LISP程序太慢。 [/B]


是LISP程序,里面用了XDRX_API

“晓东工具箱”所有LISP程序都是明码,你看到命令名后,用WIN的搜索功能,把命令名放到“内容”里面,搜索LISP文件就能查到相关的LISP程序。


  1. [FONT=courier new]
  2. ;|
  3.   命令:rdupent
  4.   功能:消除重复的图元,支持的图元包括
  5.        3dface attdef arc circle dimension insert line lwpolyline
  6.        point solid text trace

  7.   配合XDRX_API使用
  8. |;

  9. (defun rdupent (ss / e el el0 n        n1 n2 i        i1 stl st1 st2 name la p ln ln2
  10.                 le le1 lp 3dface attdef        arc circle dimension insert line
  11.                 lwpolyline point polyline solid        text trace
  12.                )
  13.   (if (and
  14.         ss
  15.         (if (= 'str (type ss))
  16.           (setq ss (ssget "X" (list (cons 8 (xdrx_getlyrname ss)))))
  17.           ss
  18.         )
  19.       )
  20.     (progn
  21.       (setq st1        (strcat "\r已搜索到图元 ")
  22.             st2        (strcat "\r已处理图元 ")
  23.             n        0
  24.             n1        0
  25.             n2        0
  26.             i        0
  27.             ln        '(3dface attdef        arc circle dimension insert line
  28.                   lwpolyline point solid text trace
  29.                  )
  30.       )
  31.       (print)
  32.       (xdrx_pbarbegin "正在搜索:" (sslength ss))
  33.       (xdrx_setsstodb ss 0)
  34.       (while (setq e (xdrx_getentdata 0))
  35.         (xdrx_pbarsetpos n)
  36.         (setq n           (1+ n)
  37.               la   (xdrx_getentdxf 8)
  38.               name (xdrx_getentdxf 0)
  39.               p           (if (= "POLYLINE" name)
  40.                      (xdrx_nextent)
  41.                      (xdrx_getentdxf 10)
  42.                    )
  43.               name (read name)
  44.               la   (strcat la (rtos (car p) 2 0) (rtos (cadr p) 2 0))
  45.               le   (assoc la (eval name))
  46.         )
  47.         (set name
  48.              (if le
  49.                (subst
  50.                  (append
  51.                    le
  52.                    (list e)
  53.                  )
  54.                  le
  55.                  (eval name)
  56.                )
  57.                (cons (list la e) (eval name))
  58.              )
  59.         )
  60.         (if (= 127 (logand 127 n))
  61.           (princ (strcat st1 (itoa n)))
  62.         )
  63.       )
  64.       (xdrx_pbarend)
  65.       (princ (strcat st1 (itoa n)))
  66.       (print)
  67.       (foreach ln1 ln
  68.         (setq ln2 (eval ln1))
  69.         (foreach le ln2
  70.           (setq le (cdr le))
  71.           (while (setq e (car le))
  72.             (if        (setq n1 (1+ n1)
  73.                       le (cdr le)
  74.                 )
  75.               (progn
  76.                 (setq el0 (entget e)
  77.                       el0 (member (assoc 10 el0) el0)
  78.                       le1 nil
  79.                 )
  80.                 (foreach e le
  81.                   (setq        el (entget e)
  82.                         el (member (assoc 10 el) el)
  83.                   )
  84.                   (if (equal el el0)
  85.                     (progn
  86.                       (entdel e)
  87.                       (setq n1 (1+ n1)
  88.                             n2 (1+ n2)
  89.                       )
  90.                     )
  91.                     (setq le1 (cons e le1))
  92.                   )
  93.                 )
  94.                 (setq le le1)
  95.               )
  96.             )
  97.           )
  98.           (if (> i 100)
  99.             (progn
  100.               (princ (strcat st2 (itoa n1)))
  101.               (setq i 0)
  102.             )
  103.             (setq i (1+ i))
  104.           )
  105.         )
  106.       )
  107.       (foreach le polyline
  108.         (setq le (cdr le))
  109.         (while (setq e (car le))
  110.           (if (setq n1 (1+ n1)
  111.                     le (cdr le)
  112.               )
  113.             (progn
  114.               (setq lp        nil
  115.                     le1        nil
  116.               )
  117.               (xdrx_setenttodb e)
  118.               (while (setq p (xdrx_nextent))
  119.                 (setq lp (cons p lp))
  120.               )
  121.               (setq lp (reverse lp))
  122.               (foreach e le
  123.                 (setq i1 0)
  124.                 (xdrx_setenttodb e)
  125.                 (while (and
  126.                          (setq p (xdrx_nextent))
  127.                          (equal p (nth i1 lp))
  128.                        )
  129.                   (setq i1 (1+ i1))
  130.                 )
  131.                 (if p
  132.                   (setq le1 (cons e le1))
  133.                   (progn
  134.                     (entdel e)
  135.                     (setq n1 (1+ n1)
  136.                           n2 (1+ n2)
  137.                     )
  138.                   )
  139.                 )
  140.               )
  141.               (setq le le1)
  142.             )
  143.           )
  144.         )
  145.         (if (> i 100)
  146.           (progn
  147.             (princ (strcat st2 (itoa n1)))
  148.             (setq i 0)
  149.           )
  150.           (setq i (1+ i))
  151.         )
  152.       )
  153.       (princ (strcat st2 (itoa n1)))
  154.       (princ
  155.         (strcat "\n已消去图元 " (itoa n2) ", 还剩 " (itoa (- n n2)))
  156.       )
  157.       (redraw)
  158.     )
  159.   )
  160.   (princ)
  161. )
  162. (defun c:rdupent ()
  163.   (prompt "\n请选取要消重的图元<退出>:")
  164.   (if (setq ss (ssget))
  165.     (rdupent ss)
  166.   )
  167.   (princ)
  168. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-11 19:25:05 | 显示全部楼层

Re: [求助]:[求助]:[求助]:XD工具箱里的消重图元的程序的问题。

最初由 matichen 发布
[B]我在用那个消图元的程序时碰到了问题。有些pl线几乎一样,点坐标只差一点(反正眼看不出),程序也不会把它消掉,而用cad自带的expresstool里的那个overkill 确能消掉。但我不喜欢用OVERKILL(它会把两个pl线相邻的?.. [/B]


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

使用道具 举报

 楼主| 发表于 2002-10-11 20:09:28 | 显示全部楼层

.

早搜索过了 。 没有搜索到 我也觉得奇怪。明明命令有,但是真的找不到。是不是做成菜单的时候给编译了。

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-11 20:20:41 | 显示全部楼层

Re: .

最初由 matichen 发布
[B]早搜索过了 。 没有搜索到 我也觉得奇怪。明明命令有,但是真的找不到。是不是做成菜单的时候给编译了。

不过贴出来的看到了。我想我可能搞不定。初学者,不过看看先, [/B]


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

使用道具 举报

 楼主| 发表于 2002-10-12 14:56:09 | 显示全部楼层
请问为何这样用?
(if (= 127 (logand 127 n))
          (princ (strcat st1 (itoa n)))
        )
岂不是n要为127 255 ....才能princ了? 没搞懂,请指点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-25 12:21:47 | 显示全部楼层
我水平太低。搞不定,请晓东帮忙。这个容差删重图元的问题。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-29 13:03:46 | 显示全部楼层
最初由 matichen 发布
[B]拜托,帮帮忙。 [/B]


说说你具体的“过虑”条件吧,“重合实体”是指完全重合(类型相同)的实体。

你要误差,那其他条件呢?比如两个实体完全一样吗?怎么个一样法,等等。

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

使用道具 举报

 楼主| 发表于 2002-10-29 18:21:48 | 显示全部楼层
不知道该怎么说,我放了个图的。图上的“重合”的线并不完全重合,但是不易看出来。坐标只差一点。用CAD 的EXPRESS TOOLS里的那个 overkill 能删除掉。(不知它是用的什么方法容差的?)但是那个命令有问题。那个程序太长了。看晕了。。还请帮帮忙
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 03:24 , Processed in 0.489722 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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