找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2377|回复: 10

[求助] 重复块查找并标记

[复制链接]
发表于 2016-4-25 08:26:27 | 显示全部楼层 |阅读模式

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

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

×
我在做地名普查,野外采集地名点时同一个地方采了重复的点, 有好多这样的重复点、距离小于3米的点,这些点怎么找出来并做个标记?
无标题.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-4-25 08:43:54 | 显示全部楼层
不是一个专业,你想怎么注记?最好附上个图,并且截取个清楚的局部的图片说明下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2016-4-25 10:01:53 | 显示全部楼层
论坛来的朋友各行各业,隔行如隔山,你详细和一个不是你专业的人说下,从头到尾你想做什么,在CAD图中,你手工是怎么操作的,如选什么实体处理,根据什么处理,要处理成什么样子,把详细的步骤说出来,让大家知道怎么写程序帮你提高效率。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-26 12:45:27 | 显示全部楼层
重复块的查找并标记
搜狗截图20160426140936.png

1.rar

37.6 KB, 下载次数: 11, 下载积分: D豆 -1 , 活跃度 1

重叠标记

点评

写了一个,试试,先去下载老大今天更新的通用LISP函数库,覆盖到工具箱安装SYS目录下。 [attachimg]53028[/attachimg] 程序功能是查找可能重叠的图块并做标记。  详情 回复 发表于 2016-4-26 19:09
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-4-26 19:09:31 | 显示全部楼层
本帖最后由 newer 于 2016-4-26 19:23 编辑
865643309 发表于 2016-4-26 12:45
重复块的查找并标记

写了一个,试试,先去下载老大今天更新的通用LISP函数库,http://bbs.xdcad.net/thread-669133-1-1.html ,覆盖到工具箱安装SYS目录下。

录像11_转.gif

程序功能是根据容差查找可能重叠或过近的图块并做标记。

  1. (defun c:tt ()
  2.   (xdrx_begin)
  3.   (if (not #XD_GLOBAL_VAR_TOL)
  4.     (setq #XD_GLOBAL_VAR_TOL 20.0)
  5.   )
  6.   (if (setq tol (getreal (xdrx_prompt "\n输入查询模糊精度<"
  7.                                       #XD_GLOBAL_VAR_TOL ">:" t
  8.                          )
  9.                 )
  10.       )
  11.     (setq #XD_GLOBAL_VAR_TOL tol)
  12.   )
  13.   (prompt "\n选取查询的图块<退出>:")
  14.   (if (setq ss (ssget '((0 . "insert"))))
  15.     (progn
  16.       (setq i 0
  17.             j 0
  18.       )
  19.       (xdrx_setsstodb ss 0)
  20.       (while (setq e (xdrx_getentdata 0))
  21.         (setq cen (XD::Geom:Get9PT e 5)
  22.               pnts (XD::Pnt:GetCirPnts cen #XD_GLOBAL_VAR_TOL)
  23.               ss1 (ssget "cp" pnts '((0 . "insert")))
  24.         )
  25.         (if (and
  26.               ss1
  27.               (> (sslength ss1) 1)
  28.             )
  29.           (progn
  30.             (setq i (+ i (sslength ss1)) len (/ #XD_GLOBAL_VAR_TOL 5.0))
  31.             (setq e (XD::Entity:Clound ss1 len len))
  32.             (xdrx_setpropertyvalue (entlast) "color" 2 "ConstantWidth" 1.0)
  33.           )
  34.           (setq j (1+ j))
  35.         )
  36.       )
  37.       (if (> i 0)
  38.         (xdrx_prompt "\n当前选集查到重叠的块,已做标记。")
  39.         (xdrx_prompt "\n当前选集没有查到重叠的块。")
  40.       )
  41.     )
  42.   )
  43.   (xdrx_end)
  44.   (princ)
  45. )

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

使用道具 举报

 楼主| 发表于 2016-4-26 20:44:01 | 显示全部楼层
我试了一下很不错,想要实现的就是这样,版主的标记做的复杂了。谢谢版主,我正在学习vlisp,有什么群可以加入吗?

点评

个人认为群没论坛方便,群里面讨论过的后来想看就不好找了,论坛可以一直搜索到很久以前的帖子,有问题还是在论坛发帖吧,求助或者帮助别人,经验都是在帮助别人的同时自己活得的。欢迎常来。 多看看论坛以前的帖  详情 回复 发表于 2016-4-26 21:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-4-26 21:04:14 | 显示全部楼层
865643309 发表于 2016-4-26 20:44
我试了一下很不错,想要实现的就是这样,版主的标记做的复杂了。谢谢版主,我正在学习vlisp,有什么群可以加 ...

个人认为群没论坛方便,群里面讨论过的后来想看就不好找了,论坛可以一直搜索到很久以前的帖子,有问题还是在论坛发帖吧,求助或者帮助别人,经验都是在帮助别人的同时自己活得的。欢迎常来。

多看看论坛以前的帖子,可以说这个论坛VLISP讨论过的包罗万象了。

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2016-5-4 11:07:39 | 显示全部楼层
本帖最后由 st788796 于 2016-5-4 11:38 编辑

改造下 Clound 函数,Alisp 使用中经常用到的三种形式 ENAME PICKSET 还有 ENAME List

  1. ;|
  2. 实体包围盒云线
  3. 参数: ss -- 点表 or 实体、选择集
  4.       al -- 弦长
  5.      len 偏移距离
  6. 返回::实体名
  7. |;
  8. (defun XD::Entity:Clound (ss al len / pl l n sp d p1 i pts nums bulge)
  9.   (cond
  10.     ((= (type ss) 'PICKSET)
  11.      (setq pl (apply
  12.                 'xdrx_polyline_make
  13.                 (cons t (xdrx_entity_box ss))
  14.               )
  15.      )
  16.     )
  17.     ((and (= (type ss) 'LIST) (= (type (car ss)) 'LIST))
  18.      (setq pl (apply
  19.                 'xdrx_polyline_make
  20.                 (cons t (xdrx_entity_box ss))
  21.               )
  22.      )
  23.     )
  24.     ((or (= (type ss) 'ENAME)
  25.          (and (= (type ss) 'LIST) (= (type (car ss)) 'ENAME))
  26.      )
  27.      (setq pl (apply 'xdrx_polyline_make
  28.                      (cons t
  29.                            (xdrx_entity_box
  30.                              (if (= (type ss) 'ENAME)
  31.                                ss
  32.                                (xd::entity->pickset ss)
  33.                              )
  34.                            )
  35.                      )
  36.               )
  37.      )
  38.     )
  39.     (t)
  40.   )
  41.   (if pl
  42.     (progn
  43.       (setq l  (cadr (xdrx_getarea pl))
  44.             n  (1+ (fix (/ l al)))
  45.             sp (xdrx_curve_getstartpoint pl)
  46.             d  0.
  47.       )
  48.       (repeat n
  49.         (setq p1  (xdrx_curve_getpointatdist pl d)
  50.               d          (+ d al)
  51.               pts (cons p1 pts)
  52.         )
  53.       )
  54.       (xdrx_entity_delete pl)
  55.       (setq pl          (apply
  56.                     'xdrx_polyline_make
  57.                     (cons t (apply 'xdrx_points_offset (cons len pts)))
  58.                   )
  59.             nums  (xdrx_polyline_numverts pl)
  60.             i          0
  61.             bulge (- (xdrx_math_tan (* (/ 27.5 180) pi)))
  62.       )
  63.       (repeat nums
  64.         i
  65.         (xdrx_polyline_setbulgeat pl i bulge)
  66.         (setq i (1+ i))
  67.       )
  68.     )
  69.   )
  70.   pl
  71. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2016-5-4 11:43:07 | 显示全部楼层
ssget 点表方式的限制就是遇到屏幕边缘时,如果点超出了屏幕就会选择不到,使用 GroupByIndex 就可以避免这个情况,用上面修改的函数,主程序如下

  1. (defun c:tt (/ ss tol lst)
  2.   (xdrx_begin)
  3.   (if (not #XD_GLOBAL_VAR_TOL)
  4.     (setq #XD_GLOBAL_VAR_TOL 20.0)
  5.   )
  6.   (if (setq tol        (getdist (xdrx_prompt
  7.                            "\n输入查询模糊精度<"
  8.                            #XD_GLOBAL_VAR_TOL
  9.                            ">:"
  10.                            t
  11.                          )
  12.                 )
  13.       )
  14.     (setq #XD_GLOBAL_VAR_TOL tol)
  15.   )
  16.   (prompt "\n选取查询的图块<退出>:")
  17.   (if (setq ss (ssget '((0 . "insert"))))
  18.     (progn
  19.       (setq lst        (mapcar        '(lambda (x / box)
  20.                            (setq box (xdrx_entity_box x))
  21.                            (list (polar        (car box)
  22.                                         (angle (car box) (caddr box))
  23.                                         (/ (distance (car box) (caddr box)) 2)
  24.                                  )
  25.                                  x
  26.                            )
  27.                          )
  28.                         (xdrx_pickset->ents ss)
  29.                 )
  30.             lst        (xd::list:groupbyindex lst #XD_GLOBAL_VAR_TOL)
  31.       )
  32.       (mapcar '(lambda (x)
  33.                  (if (> (length (cdr x)) 1)
  34.                    (xd::entity:clound
  35.                      (cdr x)
  36.                      (/ #XD_GLOBAL_VAR_TOL 5.0)
  37.                      (/ #XD_GLOBAL_VAR_TOL 5.0)
  38.                    )
  39.                  )
  40.                )
  41.               lst
  42.       )
  43.     )
  44.   )
  45.   (princ)
  46. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-16 21:21 , Processed in 0.458578 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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