找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3964|回复: 5

[每日一码] [功能] 图元列表=>选择集(另类)

[复制链接]
发表于 2016-7-26 09:59:00 | 显示全部楼层 |阅读模式

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

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

×
;;[功能] 图元列表=>选择集(另类)

  1. (defun Lst=>SS (Lst)
  2.   (setq Lst (append Lst (list "")))
  3.   (apply 'vl-cmdf (cons "_.select" Lst))
  4.   (ssget "_p")
  5. )

评分

参与人数 1D豆 +5 收起 理由
newer + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

已领礼包: 5601个

财富等级: 富甲天下

发表于 2016-7-26 14:35:28 | 显示全部楼层
;;; 有时不能返回正确的选择集的:
(setq ss (ssget) ;随便选择一两根线等
(Lst=>SS nil) ;并不出错.
(command "_.move" "_p") ;将会把SS选择集选中。这是我们不想要的结果.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-26 15:43:43 | 显示全部楼层
;;1 "当前选择集"与ssget

  1. (defun C:w1 (/ ss)
  2.   (sslength (setq ss (ssget)))
  3. )
  4. (defun C:w2 ()
  5.   (sslength (ssget "_p"))
  6. )

Command: (C:w1)
Select objects: Specify opposite corner: 2 found
Select objects:
2
Command: (C:w2)
2
由此可见,"当前选择集"Autocad保存在某个地方

;;2  ssgetfirst与ssget

  1. (defun w3 (/ SS)
  2.   (sslength (setq ss (cadr (ssgetfirst))))
  3. )
  4. (defun w4 ()
  5.   (sslength (ssget "_p"))
  6. )

先选择3个对象,然后执行(w3)
Command: (w3)
3
Command: (w4)
3
表面上看来,通过ssgetfirst,可以取得"当前选择集"。断续看下面的

  1. (defun W5 (/ SS1 SS2)
  2.   (sslength (setq ss1 (ssget)));这里假定选择2个对象
  3.   (sslength (setq ss2 (ssget)));这里假定选择3个对象
  4.   (sssetfirst ss1 ss1)
  5.   (princ "\n")
  6.   (princ (sslength (cadr (ssgetfirst))))
  7.   (princ "\n")
  8.   (princ(sslength (ssget "_p")))
  9.   (princ)
  10. )

Command: (w5)
Select objects: Specify opposite corner: 2 found
Select objects:
Select objects: Specify opposite corner: 3 found
Select objects:
2
3
从这个例子可看出,"当前选择集"是用户作出的选择,可以(ssget "_p")的方式取得,是ss2(同w4);ssgetfirst取得的是sssetfirst的选择集ss1(同w3)。
通过sssetfirst亮显的对象,不能做为"当前选择集"。与以上执w3不同,当我们先选择时,就已经取得了"当前选择集"

;;4 选选择,后执行
使用Autocad时,通常可以先选择后执行,也可执行命令对象。

  1. (defun W6 (/ ss)
  2.   (setq ss (ssget '((0 . "DIMENSION"))))  
  3. )

如果先选择对象,然后执行(w6),则不提示选择对象

;;[功能] 先选择,后执行通用函数
;;(sslength (StrartSSget '((0 . "DIMENSION"))))

  1. (defun StrartSSget (fil / SS)
  2.   (cond ((cadr (ssgetfirst)) (setq ss (apply 'ssget (list "p" fil)))))
  3.   (cond        (SS (sssetfirst nil nil))
  4.         (T (setq ss (apply 'ssget (list fil))))
  5.   )
  6.   ss
  7. )

看过w5,则StrartSSget完全可以改写如下

  1. (defun StrartSSget (fil / SS)
  2.   (apply 'ssget (list fil))
  3. )

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

使用道具 举报

已领礼包: 24个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 1094个

财富等级: 财源广进

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

使用道具 举报

发表于 2023-8-13 09:39:25 | 显示全部楼层
;;;(setq lst '(<图元名: 1dc8ed0ad50> <图元名: 1dc8ed0ad40> <图元名: 1dc8ed0ad30> <图元名: 1dc8ed0ad20> <图元名: 1dc8ed0ad10> <图元名: 1dc8ed0ad00>))
;;;(c:tt lst)
(defun c:tt (lst / n ss)
  (setq n -1)
  (setq ss (ssadd))
  (foreach x lst
    (ssadd (nth (setq n (1+ n)) lst) ss)
  )
  ss
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 05:22 , Processed in 0.172600 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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