找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 726|回复: 10

[求助] [求助]:选择集中提取实体

[复制链接]
发表于 2004-8-16 09:23:18 | 显示全部楼层 |阅读模式

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

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

×
在SSGET生成的选择集(包含线段和圆弧)中,分别提出最大圆弧半径和最小圆弧半径的实体。
我想不到办法。
(最好是LISP,如是VLISP请加点注解。)
多谢先!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-8-16 11:28:54 | 显示全部楼层
(DEFUN TEST(ss / lst)
  (setq lst (sset->EnList ss))
  (setq lst (vl-remove-if-not '(lambda (e) (= (cdr (assoc 0 (entget e))) "ARC")) lst))
  (setq lst (vl-sort lst '(lambda (e1 e2) (< (cdr (assoc 40 (entget e1)))
                                             (cdr (assoc 40 (entget e2)))))))
  (setq en1 (car lst); Smallest radius
        en2 (last lst)); Greatest radius
)
(defun sset->EnList (ss / idx RetLst)
  (setq idx -1)
  (repeat (sslength ss)
    (setq RetLst (cons (ssname ss (setq idx (1+ idx))) RetLst)))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-8-16 16:03:10 | 显示全部楼层
AutoLisp的代码
[PHP](defun max_min_rad (s / e entlst n )
  (repeat (setq n (sslength s))
    (setq e (ssname s (setq n (1- n))))
    (setq entlst (cons (list (cdr (assoc 40 (entget e))) e) entlst))
  )
  (list        (cadr (assoc (apply 'max (mapcar 'car entlst)) entlst))
        (cadr (assoc (apply 'min (mapcar 'car entlst)) entlst))
  )
)[/PHP]
测试
[PHP](defun c:test ()
  (and (setq s (ssget '((0 . "ARC"))))
       (mapcar '(lambda (x) (redraw x 3)) (max_min_rad s))
  )
)[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-16 16:30:46 | 显示全部楼层
最初由 wkai 发布
[B]AutoLisp的代码
[PHP](defun max_min_rad (s / e entlst n )
  (repeat (setq n (sslength s))
    (setq e (ssname s (setq n (1- n))))
    (setq entlst (cons (list (cdr (assoc 40 (entget e))) e) entlst)... [/B]

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

使用道具 举报

发表于 2004-8-16 16:59:35 | 显示全部楼层
To 小妹丁:
1 选择时已经过滤了呀,只能选到ARC
2 max_min_rad  函数返回的就是最大和最小半径的圆弧呀!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-16 17:11:54 | 显示全部楼层
最初由 wkai 发布
[B]To 小妹丁:
1 选择时已经过滤了呀,只能选到ARC
2 max_min_rad  函数返回的就是最大和最小半径的圆弧呀! [/B]

选择时还要可以选到其它对象,不能只选圆弧。
[php]
(defun max_min_rad (s)
  (repeat (setq n (sslength s))
    (setq e (ssname s (setq n (1- n))))
    (setq entlst (cons (list (cdr (assoc 40 (entget e))) e) entlst))
  )
  (setq
    kk
     (list (cadr (assoc (apply 'max (mapcar 'car entlst)) entlst))
           (cadr (assoc (apply 'min (mapcar 'car entlst)) entlst))
     )
  )
  (setq maxrac (car kk));最大圆弧
  (setq minrac (cadr kk));最小圆弧
)

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

使用道具 举报

发表于 2004-8-16 17:24:01 | 显示全部楼层
[PHP](defun max_min_rad (s / n e s maxrac minrac)
  (repeat (setq n (sslength s))
    (setq e (ssname s (setq n (1- n))))
    (and (= "ARC" (cdr (assoc 0 (entget e))))
         (setq entlst (cons (list (cdr (assoc 40 (entget e))) e) entlst))
    )
  )
  (setq        maxrac (cadr (assoc (apply 'max (mapcar 'car entlst)) entlst))
        minrac (cadr (assoc (apply 'min (mapcar 'car entlst)) entlst))
  )  
)[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-16 19:17:33 | 显示全部楼层
[php]
(defun m-indxf (ss fil id / i e a lst)
  (if (and ss (setq i -1 ss (ssget "p" fil)))
    (progn
     (while (setq e (ssname ss (setq i (1+ i))))
      (if (setq a (assoc id (entget e)))(setq lst (cons (cdr a) lst)))
     )
    (if (setq lst (vl-sort lst '< )) (list (car lst)(last lst)) nil)
    )
    nil)
)[/php]
[php]
;应用:
(defun c:tt ( / ss)
  (setq ss (ssget))
  (m-indxf ss '((0 . "ARC")) 40)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-16 21:17:04 | 显示全部楼层
最初由 梦断江南 发布
[B][php]
(defun m-indxf (ss fil id / i e a lst)
  (if (and ss (setq i -1 ss (ssget "p" fil)))
    (progn
     (while (setq e (ssname ss (setq i (1+ i))))
      (if (setq a (assoc id (entget e)))(set... [/B]

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

使用道具 举报

发表于 2004-8-16 23:07:39 | 显示全部楼层
[php]
(defun m-indxf (ss fil id / i e a lst)
  (if (and ss (setq i -1 ss (ssget "p" fil)))
    (progn
     (while (setq e (ssname ss (setq i (1+ i))))
      (if (setq a (assoc id (entget e)))(setq lst (cons (list e (cdr a)) lst)))
     )
    (if (setq lst (vl-sort lst '(lambda(x y)(<(cadr x)(cadr y)))))
      (list (car lst)(last lst))
      nil)
    )
    nil)
)
[/php]

命令: tt
选择对象: 指定对角点: 找到 4 个
选择对象:
((<图元名: 7ef8ae78> 1467.33) (<图元名: 7ef8ae50> 10750.9))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 11:52 , Processed in 0.189441 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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