Cad船长 发表于 2016-8-25 21:00:00

请问AutoLISP能不能选择多个对象后马上执行操作,而不必右键确认。

AutoCAD的“延伸”命令,可以只选择一个对象,也可以一次选择多个对象,选中后都能马上执行延伸操作。
而LISP的ssget函数选择对象后必须右键或回车确认,才能执行操作,entsel函数一次只能选一个对象。
请问在AutoLISP中有没有可以一次选择多个对象,然后不用右键或回车确认,就能马上执行操作的方法?

论坛搜索不能用了,不知道这个有没有人讨论过,了解的提点一下,谢谢!

Sylvanas 发表于 2016-8-26 16:00:14

Cad船长 发表于 2016-8-26 14:38 static/image/common/back.gif
能不能把你的这个手册发一个给我,我这里的跟你的不一样,谢谢!

明经网站上就有,自己搜索一下吧,我也是搜的

VBALISPER 发表于 2016-8-25 21:16:32

ssget S: 看这个参数的说明

Cad船长 发表于 2016-8-25 22:41:36

VBALISPER 发表于 2016-8-25 21:16 static/image/common/back.gif
ssget S: 看这个参数的说明

我翻了 vlisp参考手册里只有 X P L I 等几个参数,没找S的,是我这个手册版本不对?

Sylvanas 发表于 2016-8-26 09:08:13

本帖最后由 Sylvanas 于 2016-8-26 09:10 编辑

Cad船长 发表于 2016-8-25 22:41 static/image/common/back.gif
我翻了 vlisp参考手册里只有 X P L I 等几个参数,没找S的,是我这个手册版本不对?
给你附一段手册内容

-------------------------------------

根据选定对象创建选择集

(ssget ] )
选择集中可以包含图纸空间和模型空间两个空间中的对象,但该选择集用于某操作时,那些在当前无效的空间中的对象会被 ssget 过滤掉。由 ssget 函数返回的选择集中仅包含主图元(不包含属性和多段线顶点)。

参数

sel-method

字符串,指定对象选择方法。有效选择方法包括:

C 窗交。

CP 圈交(指定多段线内和与该多段线相交的所有对象)。

F 栏选。

I 隐含窗口选择(在执行 PICKFIRST 期间选择的对象)。

L 添加到数据库的最后一个可见对象。

P 最后一个创建的选择集。

W 窗口选择。

WP 圈围(指定多边形内的所有对象)。

X 整个数据库。如果指定了 X 选择方法,而又没有提供 filter-list 参数,则 ssget 选择数据库中的所有图元,包括关闭、冻结图层中的图元和可见屏幕外的图元。

:E 光标的对象选择拾取框中的所有对象。

:N 在执行 ssget 操作的过程中,为选定图元调用 ssnamex 获得容器块和转换矩阵的附加信息。只有通过窗口、窗交点拾取等图形选择方法选定的图元,这一附加信息才可以使用。

与其他对象选择方法不同,:N 可能会返回选择集中的多个同名图元。例如,如果用户选择了一个复杂图元(如 BlockReference、PolygonMesh 或老式多段线)的子图元,那么 ssget 将查看该子图元是否已被选中。不过,ssget 实际上会将主图元(如 BlockReference 和 PolygonMesh)添加到选择集中。这样就会在选择集中出现多个同名图元,而 ssnamex 获得的每个图元的子图元信息各不相同。

:S 仅允许单一选择集。

pt1

与选择相关的点。

pt2

与选择相关的点。

pt-list

点表。

filter-list

关联表,指定对象的特性。与 filter-list 相匹配的对象将被添加到选择集。

如果省略所有参数,则 ssget 函数给出“选择对象”提示,允许用户交互式地构造选择集。

如果仅提供了一个点,而没有提供对象选择方法,AutoCAD 假定用户拾取单个点来选择对象。

返回值

如果成功则返回创建选择集的名称。如果没有选定对象则返回 nil。

-------------------------------------

自己慢慢看吧

Cad船长 发表于 2016-8-26 14:38:00

Sylvanas 发表于 2016-8-26 09:08 static/image/common/back.gif
给你附一段手册内容

-------------------------------------


能不能把你的这个手册发一个给我,我这里的跟你的不一样,谢谢!



edata 发表于 2016-8-26 14:55:39

(setq pt1(getpoint))
(setq pt3(getcorner pt1))
ssget "w" pt1 pt3
ssget "c" pt1 pt3

oldstone 发表于 2023-11-8 15:45:47

题主的意思是:仅仅一次,而这一次是选择多个实体

wzg356 发表于 2023-11-8 17:14:23

(if(setq ss(ssget":s"))(函数ss))

llsheng_73 发表于 2023-11-8 22:52:34

本帖最后由 llsheng_73 于 2023-11-8 22:55 编辑


如果已有图元被事先选中,则从中过滤,否则进行一次手动选择;根据需要修改最后的过滤表
(setq s(apply(function ssget)(vl-remove nil(list(if(cadr(ssgetfirst))nil":S")'((0 . "lwpolyline"))))))
页: [1]
查看完整版本: 请问AutoLISP能不能选择多个对象后马上执行操作,而不必右键确认。