自贡黄明儒 发表于 2016-7-26 09:28:47

话说ssget

本帖最后由 自贡黄明儒 于 2016-7-26 15:31 编辑

;;1 "当前选择集"与ssget
(defun C:w1 (/ ss)
(sslength (setq ss (ssget)))
)
(defun C:w2 ()
(sslength (ssget "_p"))
)
Command: (C:w1)
Select objects: Specify opposite corner: 2 found
Select objects:
2
Command: (C:w2)
2
由此可见,"当前选择集"Autocad保存在某个地方

;;2ssgetfirst与ssget
(defun w3 (/ SS)
(sslength (setq ss (cadr (ssgetfirst))))
)
(defun w4 ()
(sslength (ssget "_p"))
)
先选择3个对象,然后执行(w3)
Command: (w3)
3
Command: (w4)
3
表面上看来,通过ssgetfirst,可以取得"当前选择集"。断续看下面的
(defun W5 (/ SS1 SS2)
(sslength (setq ss1 (ssget)));这里假定选择2个对象
(sslength (setq ss2 (ssget)));这里假定选择3个对象
(sssetfirst ss1 ss1)
(princ "\n")
(princ (sslength (cadr (ssgetfirst))))
(princ "\n")
(princ(sslength (ssget "_p")))
(princ)
)
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时,通常可以先选择后执行,也可执行命令对象。
(defun W6 (/ ss)
(setq ss (ssget '((0 . "DIMENSION"))))
)
如果先选择对象,然后执行(w6),则不提示选择对象

;;[功能] 先选择,后执行通用函数
;;(sslength (StrartSSget '((0 . "DIMENSION"))))
(defun StrartSSget (fil / SS)
(cond ((cadr (ssgetfirst)) (setq ss (apply 'ssget (list "p" fil)))))
(cond      (SS (sssetfirst nil nil))
      (T (setq ss (apply 'ssget (list fil))))
)
ss
)
看过w5,则StrartSSget完全可以改写如下
(defun StrartSSget (fil / SS)
(apply 'ssget (list fil))
)
未完,待续......

fl202 发表于 2016-7-27 09:44:55

本帖最后由 fl202 于 2016-7-27 09:48 编辑

老黄我请教你几个问题。
    (ssgetfirst)
功能及参数
    此函数将用来决定哪一个图形已被选取。之后将返回两个选择集的表。在此图元选择集表里的第1个图元, 已经被获取, 但是却未被选取。表里的第二个图元既为被获取, 也是被选取的。只有在模型空间与纸张空间的图元可以被此函数来分析。而非图形图元与图块图元则无法使用此函数。
(sssetfirst gripset )
功能及参数
    此函数将用来设定哪一个图形要被选取与获取。gripset 参数将用来指定只要获取的图形选择集。pickset参数则用来指定要获取也要选取的图形选择集。如果这两个参数均有指定, 则sssetfirst仅获取并选择经过pickset参数所指定的选择集。若只指定 gripset 参数, 则此函数将获取经过 gripset 参数所指定的选择集。sssetfirst 函数将返回选择集的两个变量的表。
    【注意】 当 AutoCAD 正在执行命令时, 不要调用ads_ssetfirst() 函数

没看懂上面的解释。获取和选取有什么区别?

(ssget "P") 选择您最近所选取的图形
(ssget "L") 选择您最后加入数据库内的图元
(ssget "I") 建立在 Implied 选择模式下所选取图元的选择集。(PICKFIRST 有效时)
   (command "_copy" (entsel) "" (getpoint "pt1:") (getpoint "pt2:") (getpoint "pt3:") )
   (command "_break" (entsel)"f" (getpoint) (getpoint) )
   (command "chprop" (entlast) "" "C" "19" "")
    (command "chprop"(ssget "_p") "" "C" "19" "")
关于break命令打断后的2个对象,怎么获取?似乎哪个是(entlast)没什么规律啊?(defun c:W5 (/ SS1 SS2)
(sslength (setq ss1 (ssget)));这里假定选择2个对象
(sslength (setq ss2 (ssget)));这里假定选择3个对象
(sssetfirst ss1 ss1)
(princ "\n")
(princ (sslength (cadr (ssgetfirst))))
(command "chprop" (cadr (ssgetfirst)) "" "C" "29" "")
(princ "\n")
(princ(sslength (ssget "_p")))
(command "chprop"(ssget "_p") "" "C" "19" "")
(princ)
)
命令: w5
选择对象: 指定对角点: 找到 4 个
选择对象:
选择对象: 指定对角点: 找到 3 个
选择对象:
4
4
我执行的结果和你的不一致。???

命令: (apply 'ssget (list'((0 . "TEXT"))))
选择对象: 指定对角点: 找到 6 个
选择对象:<Selection set: 5a3c>
命令: *取消*
命令: (type (apply 'ssget (list'((0 . "TEXT")))))
选择对象: 指定对角点: 找到 6 个
选择对象:PICKSET

自贡黄明儒 发表于 2016-7-27 10:37:24

第一个问题,sssetfirst。以前在本论坛上看到讨论,好像有个参数没什么用。
第二个问题,(ssget "P")。我以上说的就是(ssget "P")与sssetfirst,他们之间没有什么关系。当我们先选择后执行程序时,创建了“当前选择集”,因而(ssget "P")可以获取它。
第三个问题,(ssget "I") ,可以查《AutoLisp葵花宝典A.chm》sssetfirst,上面说得很清楚。
第四个,(ssget "L") 与(entlast)应该差不多,但后都删除后,可能结果不一样
第五,打断后的对象通常(setq e (entlast)),然后用(entnext e)来搜索。

fl202 发表于 2016-7-27 14:05:58

自贡黄明儒 发表于 2016-7-27 10:37 static/image/common/back.gif
第一个问题,sssetfirst。以前在本论坛上看到讨论,好像有个参数没什么用。
第二个问题,(ssget "P")。我 ...

为什么W5我的执行结果与你的不一致呢?

fl202 发表于 2016-7-29 08:46:28

fl202 发表于 2016-7-27 14:05 static/image/common/back.gif
为什么W5我的执行结果与你的不一致呢?

命令: w5
选择对象: 指定对角点: 找到 4 个
选择对象:
选择对象: 指定对角点: 找到 3 个
选择对象:
4
4
我执行的结果和你的不一致。???

Sylvanas 发表于 2016-8-8 11:10:13

黄大师我有问题请教

(setq ss0 (ssget))
(setq ss (ssget "p" '((0 . "TEXT") (62 . 6))))
(command "erase" ss "")

之后我还想再次利用ss0怎么做?

如果 (setq ss (ssget "p" '((0 . "INSERT")))) 就取不到选择集了

实在不想遍历啊

yhly555 发表于 2016-9-29 23:43:40

请教楼主,"当前选择集"Autocad应该是保存在某个地方,我们怎么操作才能释放(清空)“当前选择集”

alexmai 发表于 2019-3-23 11:54:05

本帖最后由 alexmai 于 2019-3-23 12:03 编辑

老师,这是你写的原码,发现有些问题,请回复一下,感激!

http://bbs.mjtd.com/thread-179168-1-1.html

999999 发表于 2020-9-11 23:56:23

收藏,顶一下,,,
页: [1]
查看完整版本: 话说ssget