找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2696|回复: 21

[每日一码] 过淲同心

[复制链接]
发表于 2014-12-23 09:12:24 | 显示全部楼层 |阅读模式

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

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

×
  1. ;去除单独的表,保留相同的表
  2. ;函数来自 晓东网友 txc6853234 再次感谢谢各位st788796 newer lijiao等
  3. (defun getsameatom_list( oldlist /  old2list n a newlist)
  4.   (setq old2list (cdr oldlist))
  5.   (foreach n oldlist
  6.     (progn
  7.       (foreach a old2list
  8.         (if (equal n a) (progn(setq newlist (cons n newlist))
  9.                         (setq newlist (cons n newlist))))
  10.         )
  11.       (setq old2list(cdr old2list))
  12.       )
  13.     )   
  14.   (setq newlist(reverse newlist))
  15.   )
  16. ;*********以下为过淲同心主程序
  17. (defun c:tt(/ get len nn ns add pt pt2 to)
  18. (setq get (ssget '((0 . "CIRCLE"))))
  19. (setq len (sslength get))
  20. (repeat len
  21.   (setq nn (ssname get (setq len (1- len))))
  22.   (setq ns (cons nn ns))
  23.   );re
  24.   (setq add (ssadd))
  25.   (setq pt (getsameatom_list (mapcar '(lambda (x) (cdr (assoc 10 (entget x)))) ns)))
  26.   (foreach to ns
  27.     (setq pt2 (cdr (assoc 10 (entget to))))
  28.     (if  (member pt2 pt)
  29.       (ssadd to add)
  30.     )
  31.   )
  32.   (sssetfirst nil add)
  33.   (princ)
  34. )
  35. ;求优化下,把同心里面的直线也一起选到,再增加同心最小圆,与同心最大圆,还要加个同心误差值就完美


  36.   
  37.   

过滤同心

过滤同心

评分

参与人数 1D豆 +5 收起 理由
炫翔 + 5 出题引导交流奖!

查看全部评分

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

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2014-12-23 09:22:23 | 显示全部楼层
等分圆获取点表 用ssget WP PTS

点评

老大出手优化下啊,源码才能让大伙学习进步啊  详情 回复 发表于 2014-12-23 09:40
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-23 09:30:50 | 显示全部楼层
早就讨论过,有代码的
  1. (defun c:tt (/ ss el)
  2.   (if
  3.     (and (setq ss (ssget '((0 . "circle"))))
  4.          (setq
  5.            el (mapcar
  6.                 'cdr
  7.                 (vl-remove-if
  8.                   '(lambda (x) (= (length x) 2))
  9.                   (cdr (xd::list:groupbyindex
  10.                          (mapcar
  11.                            '(lambda (x)
  12.                               (list (xdrx_getpropertyvalue x "center") x)
  13.                             )
  14.                            (xdrx_pickset->ents ss)
  15.                          )
  16.                          1e-6
  17.                        )
  18.                   )
  19.                 )
  20.               )
  21.          )
  22.     )
  23.      (sssetfirst nil (xd::entity->pickset (apply 'append el)))
  24.   )
  25.   (princ)
  26. )

点评

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

使用道具 举报

 楼主| 发表于 2014-12-23 09:38:14 | 显示全部楼层
st788796 发表于 2014-12-23 09:30
早就讨论过,有代码的

缺函数XDRX_PICKSET->ENTS

点评

加载XDRX_API 多看看 xd::list:groupbyindex 源代码,这个是通用的分组包装函数,有特征值的,你过滤什么都行,过滤同层,同色,同起点,同面积,。。。。  详情 回复 发表于 2014-12-23 09:57
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-23 09:40:33 | 显示全部楼层
炫翔 发表于 2014-12-23 09:22
等分圆获取点表 用ssget WP PTS

{:soso_e100:}老大出手优化下啊,源码才能让大伙学习进步啊

点评

你把上面ST代码里面的 “CENTER” 换成 "AREA" 就是过滤同面积的,换成 “LENGTH",就是过滤出同周长的,换成 ”COLOR",就是过滤出同颜色的,换成"LINETYPE"就是过滤通过线型的。。。。  详情 回复 发表于 2014-12-23 09:59
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-23 09:57:22 | 显示全部楼层
amwkto2011 发表于 2014-12-23 09:38
缺函数XDRX_PICKSET->ENTS

加载XDRX_API

多看看 xd::list:groupbyindex 源代码,这个是通用的分组包装函数,有特征值的,你过滤什么都行,过滤同层,同色,同起点,同面积,。。。。

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-23 09:59:50 | 显示全部楼层
amwkto2011 发表于 2014-12-23 09:40
老大出手优化下啊,源码才能让大伙学习进步啊

你把上面ST代码里面的 “CENTER”  换成 "AREA" 就是过滤同面积的,换成 “LENGTH",就是过滤出同周长的,换成 ”COLOR",就是过滤出同颜色的,换成"LINETYPE"就是过滤通过线型的。。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-12-23 10:07:40 | 显示全部楼层
  1. (defun c:tt (/ ADD GET LEN NN NS)
  2.   (setq get (ssget ":S" '((0 . "CIRCLE"))))
  3.   (repeat (setq len (sslength get))
  4.     (setq nn (ssname get (setq len (1- len))))
  5.     (setq ns (cons (list (cdr (assoc 10 (entget nn))) nn) ns))
  6.   )
  7.   (setq add (ssadd))
  8.   (foreach to ns
  9.     (setq nn (cadr to)
  10.           to (car to)
  11.     )
  12.     (if        (assoc to (vl-remove (assoc to ns) ns))
  13.       (ssadd nn add)
  14.     )
  15.   )
  16.   (sssetfirst nil add)
  17.   (princ)
  18. )

点评

求优化下,把同心里面的直线也一起选到,再增加同心最小圆,与同心最大圆,还要加个同心误差值就完美  详情 回复 发表于 2014-12-23 10:17
可以如此精简,连前面的函数都没用了 选同心最小圆,还有最大圆  详情 回复 发表于 2014-12-23 10:11
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-23 10:11:36 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2014-12-23 10:14:22 | 显示全部楼层
newer 发表于 2014-12-23 09:57
加载XDRX_API

多看看 xd::list:groupbyindex 源代码,这个是通用的分组包装函数,有特征值的,你过滤 ...

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

使用道具 举报

 楼主| 发表于 2014-12-23 10:17:31 | 显示全部楼层

求优化下,把同心里面的直线也一起选到,再增加同心最小圆,与同心最大圆,还要加个同心误差值就完美
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-23 10:23:50 | 显示全部楼层
amwkto2011 发表于 2014-12-23 10:14
弱弱的问一句,XD函数源代码在哪,给个连接好不

开源函数库论坛。http://bbs.xdcad.net/forum-260-1.html
多看看 函数库论坛的源代码,对你肯定有帮助。

找哪个函数, 用搜索。

QQ截图20141223102255.png


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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-23 10:54:15 | 显示全部楼层
本帖最后由 st788796 于 2014-12-23 10:56 编辑
amwkto2011 发表于 2014-12-23 10:17
求优化下,把同心里面的直线也一起选到,再增加同心最小圆,与同心最大圆,还要加个同心误差值就完美

过滤同心园的最大和最小园
  1. (defun c:tt (/ ss el)
  2.   (if
  3.     (and (setq ss (ssget '((0 . "circle"))))
  4.          (setq
  5.            el
  6.             (mapcar
  7.               'cdr
  8.               (vl-remove-if
  9.                 '(lambda (x) (= (length x) 2))
  10.                 (cdr
  11.                   (xd::list:groupbyindex
  12.                     (mapcar
  13.                       '(lambda (x)
  14.                          (reverse
  15.                            (cons
  16.                              x
  17.                              (xdrx_getpropertyvalue x "radius" "center")
  18.                            )
  19.                          )
  20.                        )
  21.                       (xdrx_pickset->ents ss)
  22.                     )
  23.                     1e-6
  24.                   )
  25.                 )
  26.               )
  27.             )
  28.          )
  29.     )
  30.      (progn
  31.        (setq el        (mapcar        '(lambda (x / l)
  32.                            (if (> (length x) 2)
  33.                              (progn
  34.                                (setq
  35.                                  l (vl-sort x
  36.                                             '(lambda (x1 x2)
  37.                                                (< (car x1) (car x2))
  38.                                              )
  39.                                    )
  40.                                )
  41.                                (list (cadar l) (cadr (last l)))
  42.                              )
  43.                              (mapcar 'cadr x)
  44.                            )
  45.                          )
  46.                         el
  47.                 )
  48.        )
  49.        (sssetfirst nil (xd::entity->pickset (apply 'append el)))
  50.      )
  51.   )
  52.   (princ)
  53. )
20141223105517.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-23 11:30:47 | 显示全部楼层
st788796 发表于 2014-12-23 10:54
过滤同心园的最大和最小园

不是同时选到最大,与最小
是两个功能,一个选最大的,一个选最小的,还有一个同心的
同心要设个容差
过滤同心的时候,里面的直线有没有办法选到?


也就是这样的
请选择过滤方法   (A--同心    B--同心最大   C--同心最小)
也可以说是3个功能吧,一个命令执行,共同点都是要同心
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-23 11:41:01 | 显示全部楼层
amwkto2011 发表于 2014-12-23 11:30
不是同时选到最大,与最小
是两个功能,一个选最大的,一个选最小的,还有一个同心的
同心要设个容差

只是给你说明个方法
1 cad 是最小圆,cadr 是最大圆

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 06:57 , Processed in 0.538402 second(s), 69 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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