找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: amwkto2011

[每日一码] 过淲同心

[复制链接]

已领礼包: 24个

财富等级: 恭喜发财

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

使用道具 举报

 楼主| 发表于 2014-12-23 11:55:38 | 显示全部楼层
st788796 发表于 2014-12-23 11:41
只是给你说明个方法
1 cad 是最小圆,cadr 是最大圆

一下理解不了,你这方法
我还需再努力学下
不用XD的函数,用什么方法,取到最小,还有最大
直线暂是不管了。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-23 12:36:45 来自手机 | 显示全部楼层
本帖最后由 st788796 于 2014-12-23 13:11 编辑
amwkto2011 发表于 2014-12-23 11:55
一下理解不了,你这方法
我还需再努力学下
不用XD的函数,用什么方法,取到最小,还有最大

xd::list:groupbyindex是通用函数,有源码,构造lijiao已经给了遍历 entget assoc ,分组,最后排序
  1. (defun c:tt (/ ss lst)
  2.   (if (setq ss (ssget '((0 . "circle,line"))))
  3.     (progn
  4.       (setq lst
  5.                 (mapcar
  6.                   '(lambda (x)
  7.                      (setq typ (xdrx_getpropertyvalue x))
  8.                      (if (= typ "AcDbLine")
  9.                        (reverse
  10.                          (cons
  11.                            x
  12.                            (xdrx_getpropertyvalue x "startpoint" "midpoint")
  13.                          )
  14.                        ) ;_直线 (中点 0.0 直线)
  15.                        (reverse
  16.                          (cons x
  17.                                (xdrx_getpropertyvalue x "radius" "center")
  18.                          )
  19.                        ) ;_圆 (圆心 半径 圆)
  20.                      )
  21.                    )
  22.                   (xdrx_pickset->ents ss)
  23.                 )
  24.             lst        (cdr (xd::list:groupbyindex lst 1e-6)) ;_区分同心
  25.             lst        (vl-remove-if
  26.                   '(lambda (x)
  27.                      (or
  28.                        (= (length x) 2) ;_单个圆
  29.                        (= (length (vl-remove-if
  30.                                     '(lambda (a)
  31.                                        (zerop (cadr a))
  32.                                      ) ;_去掉直线只有一个圆
  33.                                     x
  34.                                   )
  35.                           )
  36.                           1
  37.                        )
  38.                      )
  39.                    )
  40.                   lst
  41.                 ) ;_单个的剔除
  42.             lst        (mapcar 'cdr lst);_(((r1 e1)  (r2 e2) ...) (...) (...))
  43.             lst        (mapcar
  44.                   '(lambda (x)
  45.                      (vl-sort x '(lambda (x1 x2) (< (car x1) (car x2))))
  46.                    )
  47.                   lst
  48.                 )
  49.            ;;同一组内再将直线和圆区分出来
  50.       )
  51.     )
  52.   )
  53.   (princ)
  54. )

点评

遍历 entget assoc 这个 (遍历)是什么意思啊,能详细点不,只听高手经常这样说,遍历  详情 回复 发表于 2014-12-23 16:55
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-12-23 15:06:10 | 显示全部楼层
  1. (defun cs-remove-same (lst / ITEM OUT X)
  2.   (setq out '())
  3.   (while lst
  4.     (setq item (car lst))
  5.     (setq out (cons item out))
  6.     (setq lst (vl-remove nil
  7.                          (mapcar '(lambda (x)
  8.                                     (if        (not (equal item x 0.0001))
  9.                                       x
  10.                                     )
  11.                                   )
  12.                                  lst
  13.                          )
  14.               )
  15.     )
  16.   )
  17.   (reverse out)
  18. )
  19. (defun cs-fenzu        (lst / CS_KEY ITEM OUT SUB_LIST)
  20.   (setq        out        '()
  21.         keylist        (cs-remove-same (mapcar 'car lst))
  22.   )
  23.   (foreach item        keylist
  24.     (setq sub_list (vl-remove nil
  25.                               (mapcar '(lambda (x)
  26.                                          (if (equal (car x) item 0.001)
  27.                                            (cdr x)
  28.                                          )
  29.                                        )
  30.                                       lst
  31.                               )
  32.                    )
  33.     )
  34.     (setq out (cons (cons item sub_list) out))
  35.   )
  36.   (reverse out)
  37. )

  38. (defun get-c (ss key / DATA ELST ENTS LEN X Y Z)
  39.   (repeat (setq len (sslength ss))
  40.     (setq ents (cons (ssname ss (setq len (1- len))) ents))
  41.     )
  42.   (setq data (mapcar '(lambda(x)
  43.                         (setq elst (entget x))
  44.                         (mapcar '(lambda(y)
  45.                                    (cdr (assoc y elst)))
  46.                                 '(10 40 -1))
  47.                         )
  48.                      ents)
  49.         )
  50.   (setq data (cs-fenzu data))
  51.   (setq data (mapcar 'cdr data))
  52.   (setq        data (mapcar '(lambda (z)
  53.                         (if (> (length z) 1)
  54.                           (mapcar 'cadr (vl-sort z
  55.                                    '(lambda (x y)
  56.                                       (< (car x) (car y))
  57.                                     )
  58.                           ))
  59.                           (cdr (car z))
  60.                         )
  61.                       )
  62.                      data
  63.              )
  64.   )
  65.   (cond
  66.     ((= key 'max) (mapcar 'last data))
  67.     ((= key 'min) (mapcar 'car data))
  68.     ((= key 'cen) (vl-remove nil (mapcar '(lambda(x)
  69.                                             (if (> (length x) 1)
  70.                                               x)
  71.                                             )
  72.                                          data)))
  73.     )
  74.   )
给你几个函数

_$ (setq ss (ssget))
<Selection set: 34b>
_$ (get-c ss 'max)
(<图元名: 7ff6b941aa50> <图元名: 7ff6b941a470> <图元名: 7ff6b941a490>)
_$ (get-c ss 'min)
(<图元名: 7ff6b941a450> <图元名: 7ff6b941a4b0> <图元名: 7ff6b941a490>)
_$ (get-c ss 'cen)
((<图元名: 7ff6b941a450> <图元名: 7ff6b941a430> <图元名: 7ff6b941aa30> <图元名: 7ff6b941aa50>) (<图元名: 7ff6b941a4b0> <图元名: 7ff6b941a470>))
_$
余下的事情自己搞定

点评

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

使用道具 举报

 楼主| 发表于 2014-12-23 16:54:27 | 显示全部楼层
lijiao 发表于 2014-12-23 15:06
给你几个函数

_$ (setq ss (ssget))

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

使用道具 举报

 楼主| 发表于 2014-12-23 16:55:46 | 显示全部楼层
st788796 发表于 2014-12-23 12:36
xd::list:groupbyindex是通用函数,有源码,构造lijiao已经给了遍历 entget assoc ,分组,最后排序

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

使用道具 举报

已领礼包: 1094个

财富等级: 财源广进

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-27 06:42 , Processed in 0.184597 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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