找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 22097|回复: 87

[求助] 框选对象生成外围圈

[复制链接]

已领礼包: 394个

财富等级: 日进斗金

发表于 2013-5-18 14:19:02 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 kwok 于 2013-5-19 18:41 编辑


更新了一下图,如下图,想框选所有白线的对象,产生一个红线的外围线,谢谢
求lisp

测试图:
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:test.zip 
下载次数:169  文件大小:43.1 KB 
下载权限: 不限 以上  [免费赚D豆]
















121.jpg

评分

参与人数 1D豆 +10 收起 理由
XDSoft + 10 好主题奖!

查看全部评分

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

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-5-19 12:10:06 | 显示全部楼层
kwok 发表于 2013-5-19 01:29
谢谢各位版主的帮助,关注!
刚才下了G版的代码,我用2013和2014试一下,怎么只提示找到12个对象,然后就什 ...

在程序运行前,运行下

(vl-load-com)

评分

参与人数 1D豆 +2 收起 理由
kwok + 2 指点奖!

查看全部评分

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-5-19 07:08:19 | 显示全部楼层
完成,本算法用到的 ybl-ent-sort 函数,求得各个 Box 角点后用排序函数将点按行/列排序,这样就可以比较下一行/列和上一行/列的关系,收集比上一行/列 宽的点
关于 ybl-ent-sort 见 http://www.xdcad.net/forum/thread-668149-1-1.html
  1. (defun c:tt (/ getbox mkpl drleft ss sl i obj plst ylst maxy miny plb
  2.       plu pts)
  3.   ;;包围盒程序
  4.   (defun getbox (e / bp up p1 p2)
  5.     (vla-getboundingbox e 'bp 'up)
  6.     (setq p1 (safearray-value bp)
  7.    p2 (safearray-value up)
  8.     )
  9.     (list p1
  10.    (list (car p2) (cadr p1) 0.)
  11.    p2
  12.    (list (car p1) (cadr p2) 0.)
  13.     )
  14.   )
  15.   ;;绘制PLine
  16.   (defun mkpl (pts)
  17.     (vla-put-closed
  18.       (vlax-invoke
  19. (vla-get-modelspace
  20.    (vla-get-activedocument (vlax-get-acad-object))
  21. )
  22. 'AddLightWeightPolyline
  23. (apply 'append
  24.         (mapcar '(lambda (x)
  25.      (list (float (car x)) ;_此处应为Double, INT会Fail
  26.     (float (cadr x))
  27.      )
  28.    )
  29.          pts
  30.         )
  31. )
  32.       )
  33.       :vlax-true
  34.     )
  35.   )
  36.   ;;左半部分外框点
  37.   (defun drleft (pts / p3 p4 tf tf1)
  38.     (while (and pts (not (= tf tf1 T)))
  39.       (setq p3 (caar pts)
  40.      p4 (last (car pts))
  41.      pts (cdr pts)
  42.       )
  43.       (if (> (cadr p4) (cadar plu)) ;_做横线
  44. (setq plu (cons (list (car p4) (cadar plu) 0.) plu)
  45.        plu (cons p4 plu)
  46. )
  47.       )
  48.       (if (= (cadr p4) maxy)
  49. (setq tf t)
  50.       )
  51.       (if (< (cadr p3) (cadar plb))
  52. (setq plb (cons (list (car p3) (cadar plb) 0.) plb)
  53.        plb (cons p3 plb)
  54. )
  55.       )
  56.       (if (= (cadr p3) miny)
  57. (setq tf1 t)
  58.       )
  59.     )
  60.   )
  61.   ;;Main
  62.   (if (setq ss (ssget))
  63.     (progn
  64.       (setq sl (sslength ss)
  65.      i  -1
  66.       )
  67.       (repeat sl
  68. (setq obj (vlax-ename->vla-object (ssname ss (setq i (1+ i)))))
  69. (if plst
  70.    (setq plst (append (getbox obj) plst))
  71.    (setq plst (getbox obj))
  72. ) ;_构造包围盒点表
  73.       )
  74.       ;;初始记录
  75.       (setq ylst (mapcar 'cadr plst)
  76.      miny (apply 'min ylst)
  77.      maxy (apply 'max ylst) ;_Y 用来区分左右
  78.      plst (ybl-ent-sort plst 0 4 0.0001) ;_排序函数
  79.      plu  (list (last (car plst))) ;_左上部分点表
  80.      plb  (list (caar plst)) ;_右下部分点表
  81.       )
  82.       (drleft (cdr plst))
  83.       (setq pts  (append plu (reverse plb)) ;_收集左半边点
  84.      plst (reverse plst) ;_倒过来处理右半边
  85.      plu  (list (last (car plst)))
  86.      plb  (list (caar plst))
  87.       )
  88.       (drleft (cdr plst))
  89.       (mkpl (append pts plb (reverse plu)))
  90.     )
  91.   )
  92.   (princ)
  93. )

点评

ybl-ent-sort 本函数已在发布在 "函数发布" , 更名为 XD::Pickset:TableSort ,以下应用自行修改函数名称!  详情 回复 发表于 2018-5-28 18:55
ok 了 不好意思,原来需要加上另外一个帖子里的程序  详情 回复 发表于 2013-5-31 17:47
错误提示:; 错误: no function definition: YBL-ENT-SORT 这个是什么意思?  详情 回复 发表于 2013-5-31 17:39
o function definition: LST  发表于 2013-5-20 19:25

评分

参与人数 2威望 +1 D豆 +10 收起 理由
牢固 + 1 + 5 很给力!经验;技术要点;资料分享奖!
炫翔 + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-18 14:20:06 | 显示全部楼层
贴上测试的DWG图吧。 程序能否实现和你这些内容的布局有关,把可能的形状组合多放几个在图里面,贴图也补充下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-18 14:39:58 | 显示全部楼层
你这问题先是和在LISP论坛讨论,我给你移动过去了。楼主有什么初步的想法和思路,先发帖引导大家交流吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-5-18 14:44:06 | 显示全部楼层
这题目,生成每个实体的盒子是必须的,关键是找出哪些盒子是外围的。有想法在跟帖。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 394个

财富等级: 日进斗金

 楼主| 发表于 2013-5-18 14:44:20 | 显示全部楼层
有前辈指点用vla-GetBoundingBox得到每个对象的外圈,然后减掉那些角,一系列点排序。
但弄不出来,
看看高手有没有更简单的方法,求指导...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-5-18 15:13:50 | 显示全部楼层
kwok 发表于 2013-5-18 14:44
有前辈指点用vla-GetBoundingBox得到每个对象的外圈,然后减掉那些角,一系列点排序。
但弄不出来,
看看 ...

QQ截图20130518151149.png

楼主,左下角位置, 这种情况,你不需要边界是黄色线那样? 什么时候进去,什么时候不进去,能说个规则吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 394个

财富等级: 日进斗金

 楼主| 发表于 2013-5-18 15:21:11 | 显示全部楼层
Lispboy 发表于 2013-5-18 15:13
楼主,左下角位置, 这种情况,你不需要边界是黄色线那样? 什么时候进去,什么时候不进去,能说个规 ...

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-5-18 15:27:15 | 显示全部楼层
kwok 发表于 2013-5-18 15:21
这个黄色线位的我想是距离小于一定距离就怱略吧,如小于15cm,这个值可以设最好.

是不是复杂了?这是我想起来的一种情况,还可能有未知的,ACAD画图其实在程序处理前,还是需要用户有好的习惯,组织好数据的,比如需要处理的实体添加下扩展实体数据,归档到指定的图层什么的,便于快速找到要处理的图形。

你看你这个问题,是不是应该先交互下,让用户选择下哪些是最外面的实体 ,然后在用程序处理更好?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 394个

财富等级: 日进斗金

 楼主| 发表于 2013-5-18 15:31:02 | 显示全部楼层
Lispboy 发表于 2013-5-18 15:27
是不是复杂了?这是我想起来的一种情况,还可能有未知的,ACAD画图其实在程序处理前,还是需要用户有好的 ...

对对,我没想到,应是以选中最外面的实体 来生成外圈,怱略里面的那些图元,本来就是想要最外的那个线框
:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-5-18 22:20:10 | 显示全部楼层
本帖最后由 牢固 于 2016-5-7 16:40 编辑


                               
登录/注册后可看大图

游客,本帖隐藏的内容需要积分高于 100 才可浏览,您当前积分为 0






点评

要求是不是太高了哦100要什么时候  详情 回复 发表于 2023-3-19 23:20
请教G版,点击"购买"按钮无反应啊。。是不是过期了,请G版再次放出来让大家学习一下啊,谢谢你  发表于 2016-4-29 13:46
ngc
cad2012中,加载要把"boundary"改成"-boundary",就好了,很实用的代码,一直向你学习  发表于 2013-10-24 22:24

评分

参与人数 2D豆 +15 收起 理由
/db_自贡黄明儒_ + 10 很给力!经验;技术要点;资料分享奖!
炫翔 + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-18 22:30:00 | 显示全部楼层
G版,Q群不发言,闷声做功课呢啊,效率。

和大家讲讲程序的思路,关键的算法啊{:soso_e113:}

点评

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

使用道具 举报

已领礼包: 1757个

财富等级: 堆金积玉

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

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-5-18 23:02:39 | 显示全部楼层
XDSoft 发表于 2013-5-18 22:30
G版,Q群不发言,闷声做功课呢啊,效率。

和大家讲讲程序的思路,关键的算法啊

程序的思路如下:
1、计算选到的每个对象包围框四个角点坐表组成点表pl
2、处理点表pl,将x坐标相同的点各分组,并只保留Y值最大和最小的点组成点对,在图上画出竖线,再将Y坐标相同的点各分组,并只保留X值最大和最小的点组成点对,在图上画出水平线,所有画的线组成选择集SS
3、将选择集SS中的每条线用extend命令对SS进行延伸,这个过程可以多做几次,我的代码只做了两次,根据所选的图形的复杂程度,延伸不同次数可能结果不尽相同!
3、在物体外画一个大框,用boundary生成边界,生成的边界对象中保留面积第二大的边界(就是所要的结果),其余的删除,然后再删除线SS
任务完成!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1757个

财富等级: 堆金积玉

发表于 2013-5-18 23:06:15 | 显示全部楼层
这是TT运行之后 我设置的 这几种情况的结果。现在应该是针对线或者多线段的最小外接矩形,而不是最小外接面积矩形
未命名.jpg

评分

参与人数 1D豆 +4 收起 理由
XDSoft + 4 及时回复奖!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 11:18 , Processed in 0.242893 second(s), 74 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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