找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3104|回复: 19

[教学] 关于筛选同心圆

[复制链接]
发表于 2014-8-14 17:42:22 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 Free-Lancer 于 2014-8-14 17:49 编辑

lzh 版主用 Net 写的
http://bbs.xdcad.net/forum.php?m ... 5463&extra=page%3D1
  1. (defun c:tt (/ e el p ss i l filter ss1 il ss2 ee)
  2.   (if (and (setq e (car (entsel "\nPick Circle: ")))
  3.            (setq el (entget e))
  4.            (= (cdr (assoc 0 el)) "CIRCLE");_必须是圆
  5.            (setq p (assoc 10 el))
  6.            (setq ss (ssget "x" (list p)))
  7.            (> (sslength ss) 1);_必须有同心圆
  8.            (progn
  9.              (setq i (sslength ss))
  10.              (while (setq c (ssname ss (setq i (1- i))))
  11.                (setq l (cons (assoc 40 (entget c)) l))
  12.              );_找出所有半径
  13.              (setq filter (append (cons '(-4 . "<or") l) '((-4 . "or>"))))
  14.              (setq ss1 (ssget "x" filter));_选择所有同半径圆
  15.            )
  16.       )
  17.     (progn
  18.       (setq il        (sslength ss1)
  19.             ss2        (ssadd)
  20.       )
  21.       ;;过滤掉只有一个圆情况
  22.       (while (setq e (ssname ss1 (setq il (1- il))))
  23.         (setq el (entget e)
  24.               p         (assoc 10 el)
  25.         )
  26.         (if (and (setq s (ssget "x" (list p)))
  27.                  (> (sslength s) 1)
  28.             )
  29.           (progn
  30.             (setq n (sslength s))
  31.             (while (setq ee (ssname s (setq n (1- n))))
  32.               (ssadd ee ss2)
  33.             )
  34.           )
  35.         )
  36.       )
  37.       (sssetfirst nil ss2)
  38.     )
  39.   )
  40.   (princ)
  41. )

评分

参与人数 2D豆 +10 收起 理由
炫翔 + 5 很给力!经验;技术要点;资料分享奖!
lucas3 + 5 技术引导讨论和指点奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2014-8-14 18:04:09 | 显示全部楼层
用 API  就这样写
  1. (defun c:tt (/ e ss filter)
  2.   (if
  3.     (and (setq e (car (xdrx_entsel "\nPick Circle: " '((0 . "CIRCLE")))))
  4.          (setq
  5.            ss (ssget "X"
  6.                      (list '(0 . "CIRCLE")
  7.                            (cons 10 (xdrx_getpropertyvalue e "Center"))
  8.                      )
  9.               )
  10.          )
  11.          (> (sslength ss) 1)
  12.          (progn
  13.            (setq filter        (append        (cons '(-4 . "<or")
  14.                                       (mapcar
  15.                                         '(lambda (x)
  16.                                            (cons
  17.                                              40
  18.                                              (xdrx_getpropertyvalue
  19.                                                x
  20.                                                "Radius"
  21.                                              )
  22.                                            )
  23.                                          )
  24.                                         (xdrx_pickset->ents
  25.                                           ss
  26.                                         )
  27.                                       )
  28.                                 )
  29.                                 '((-4 . "or>"))
  30.                         )
  31.            )
  32.            (setq ss (ssget "X" filter))
  33.          )
  34.     )
  35.      (progn
  36.        (setq lst (mapcar '(lambda (x)
  37.                             (list (xdrx_getpropertyvalue x "Center")
  38.                                   x
  39.                             )
  40.                           )
  41.                          (xdrx_pickset->ents ss)
  42.                  )
  43.              lst (mapcar 'cdr (XD::List:GroupByIndex lst 1e-3))
  44.              lst (apply        'append
  45.                         (vl-remove-if '(lambda (x) (= (length x) 1)) lst)
  46.                  )
  47.        )
  48.        (sssetfirst nil (XD::Entity->Pickset lst))
  49.      )
  50.   )
  51.   (princ)
  52. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

发表于 2014-8-14 18:12:09 | 显示全部楼层
感谢Free-Lancer作出的贡献
为什么用API函数写的程序比普通的还要长呢?

点评

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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-14 18:22:09 来自手机 | 显示全部楼层
本帖最后由 csharp 于 2014-8-14 18:28 编辑
lucas3 发表于 2014-8-14 18:12
感谢Free-Lancer作出的贡献
为什么用API函数写的程序比普通的还要长呢?


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

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

发表于 2014-8-14 20:01:57 | 显示全部楼层
什么这句可以成立?? (setq ss (ssget "x" (list p)))

点评

(ssget "X" (list '(-4 . "*,=") (cons 10 (getpoint))));Y坐标相等的对象  发表于 2014-8-15 13:45
只要P是符合的列表就可以,上面P不是有定义了吗,当然可以  详情 回复 发表于 2014-8-15 10:49
试试不就知道了!  详情 回复 发表于 2014-8-14 20:32
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-14 20:32:45 来自手机 | 显示全部楼层
ysq101 发表于 2014-8-14 20:01
什么这句可以成立?? (setq ss (ssget "x" (list p)))

试试不就知道了!

点评

我试过了 P的值为 座标点的值 而且其中包括了 组码10 在里面 这样也行?  详情 回复 发表于 2014-8-15 12:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-8-15 10:49:29 | 显示全部楼层
ysq101 发表于 2014-8-14 20:01
什么这句可以成立?? (setq ss (ssget "x" (list p)))

只要P是符合的列表就可以,上面P不是有定义了吗,当然可以

点评

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

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

发表于 2014-8-15 12:30:49 | 显示全部楼层
csharp 发表于 2014-8-14 20:32
试试不就知道了!

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

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

发表于 2014-8-15 12:31:34 | 显示全部楼层
czx663 发表于 2014-8-15 10:49
只要P是符合的列表就可以,上面P不是有定义了吗,当然可以

主要是变量P的表中
有组码10  也可以??

点评

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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-15 12:50:34 来自手机 | 显示全部楼层
ysq101 发表于 2014-8-15 12:31
主要是变量P的表中
有组码10  也可以??

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2014-8-15 14:52:07 | 显示全部楼层
应该加个误差范围,不然很难选中

...(-4 . "<=,*,*") ....(-4 . ">=,*,*")... 组合一下

点评

这样才可以选择圆心在 p p1 范围内的圆  详情 回复 发表于 2014-8-15 16:13
这个好像不能组合  详情 回复 发表于 2014-8-15 15:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-15 15:22:16 | 显示全部楼层
aeo 发表于 2014-8-15 14:52
应该加个误差范围,不然很难选中

...(-4 . "=,*,*")... 组合一下

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

使用道具 举报

 楼主| 发表于 2014-8-15 16:13:07 | 显示全部楼层
本帖最后由 Free-Lancer 于 2014-8-15 16:14 编辑
aeo 发表于 2014-8-15 14:52
应该加个误差范围,不然很难选中

...(-4 . "=,*,*")... 组合一下

这样才可以选择圆心在 p p1 范围内的圆
  1. (ssget (list '(0 . "CIRCLE")
  2.              '(-4 . "<and")             
  3.              '(-4 . ">=,>=,*")
  4.              (cons 10 p)
  5.              '(-4 . "<=,<=,*")
  6.              (cons 10 p1)
  7.              '(-4 . "and>")
  8.        )
  9. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 00:37 , Processed in 1.026538 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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