lisp ssget 浩辰_ssget 详解

原标题:ssget 详解

autoLisp 语言编程用 ssget 函数实现程序与 CAD 图形的实时交互,使得杂乱纷繁的图形对象在 ssget 面前变得规规矩矩。充分体现了 autoLisp 相对其他开发语言的优点(比如 vba)。

然而强大的 ssget 很多新手感到茫然,各种流行的 autoLisp 语言开发教程对 ssget 的描述都不够全面,本文作者进行了一些测试,并试图总结 ssget 的用法,不足之处请读者指正。

语法:

(ssget [sel-method] [pt1 [pt2]] [pt-list] [filter-list])

ssget 的参数均为可选参数,需要注意的是可选参数之间的组合条件。

以下语法表示中 尖括号代表必选,[parameter]方括号代表可选。

一、选择集的窗口参数

[sel-method]字符串类型,不区分大小写,指定一个选择方法。

[pt1 [pt2]]表类型,由三个数字的点参数表,表示 xyz 坐标,也可以是仅包括xy 的坐标。

[pt-list]表类型,由点参数表组成的表。

C 窗交(反选)

如果指定了该参数,则必须跟一对点创建一个矩形窗口,与矩形窗口相交的对象均被加入选择集。注意:此模式仅选择绘图区域内的可见对象,而且线框选择模式均有这个限制。

参数语法: (ssget "c" [filter-list])

此时,[pt-list]参数不能出现,否则 ssget将会返回一个错误提示:错误的点参数

示例:

(setq pt1 (getpoint "First Pt:"))

(setq pt2 (getpoint "Second Pt:"))

(setq ss (ssget "_c" pt1 pt2))

W 窗口(正选)

与 C 参数语法及用法类似,但功能不同,只有在矩形窗口内完整的对象才会被加入选择集。仅选绘图区可见对象。

参数语法: (ssget "w" [filter-list])

注意: 字符串参数前加下划线 “_” 可以使 模式字符串在非英文版的 AutoCAD 里安全运行,建议写上。中文版 AutoCAD 与英文版编码兼容,添加下划线前缀不是必须的。

CP 圈交(多边形反选)

如果指定了该参数,则必须用构成多边形的点表响应,与多边形相交的对象被加入选择集。仅选绘图区可见对象。

参数语法: (ssget "CP" [filter-list])

此时点参数 [pt1] [pt2] 不能出现,而且,CP 参数依赖 的顺序来构成一个多边形。

例如四个点按顺序连接为一个8字型,而不是一个矩形,ssget 将返回一个空选择集,即使对象与窗口相交。

如果参数为少于3个点的表,也将返回一个 nil。

示例:

(setq pt1 (getpoint "Piont1:"))

(setq pt2 (getpoint "Piont2:"))

(setq pt3 (getpoint "Piont3:"))

(setq pt4 (getpoint "Piont4:"))

(setq ss (ssget "_cp" (list pt1 pt2 pt4 pt4)))

WP 圈围(多边形正选)

与 CP 参数语法及用法类似,但只有被多边形窗口包围的对象才会被加入选择集。仅选绘图区可见对象。

参数语法: (ssget "wp" [filter-list])

F 栏选

将参数点表连接为一条折线,与折线相交的对象被加入选择集。仅选绘图区可见对象。

参数语法: (ssget "f" [filter-list])

pt-list 最少由2个点组成表,CP/WP 参数最少需要 3 个点。

示例:选择穿越(0 10) (100 100)两点的连线的所有可见文字

(ssget "_f" '((0 10)(100 100)) '((0 . "text")))

P 前一批创建的图形

包括 CAD 命令或 LISP 程序创建的图形对象。

参数语法: (ssget "p" [filter-list])

P 参数不能和 [pt1 [pt2]] [pt-list] 任何一个点参数组合,否则将返回一个错误,有的 CAD 版本会返回 nil

当分解(EXPLODE)一个 CAD 图形时,p 方法特别有用,可以一次性建立分解后的所有对象选择集。

L 最后一个创建的对象

包括 CAD 命令或 LISP 程序创建的对象,注意和 P 参数的区别。

参数语法:(ssget "l" [filter-list])

在获取最后一个对象的图元名时,与 entlast 作用相同,但是后者不能提供直接过滤功能,而且返回值不同。

(ssname (ssget "L") 0) == (entlast)

I 隐含窗口选择

参数语法: (ssget “i” [filter-list])

CAD 命令有两种执行方式,第一种先命令后选择,第二种先选择后命令。所以在 Lisp 中也允许先选择后命令,

而且这方式可以通过 系统变量 pickfirst 来关闭(值为 0),此时 I 参数失效,(ssget “i”) 将返回 nil。

选择对象后,选择集呈现亮显状态,可以用 (sssetfirst nil) 取消选择集的亮显。

X 整个文件

在当前打开的CAD文件中搜索所有对象,包括关闭、冻结图层中的图元和可见屏幕外的图元对象,不分大小写。

参数语法:(ssget "x" [filter-list])

X 用法与 A 用法等价,(ssget “A”) 也是选择所有对象,但是 A 模式不包括冻结图层上的对象。

:E 拾取框

用鼠标拾取框选择对象,此时 ssget 将不再拉出一个矩形窗口,直到点右键结束选择。此模式可与 “+” 组合使用。

参数语法:(ssget ":E" [filter-list])

与 :E 对应的 :N 参数为只能拉出一个矩形窗口选择,而不能通过点选拾取对象。

:S 仅允许单一选择集

使用:s参数时,ssget 将点选对象一次就会结束,无论是否选中对象,未选中则返回 nil,可节省一次回车确认。

参数语法:(ssget ":S" [filter-list])

说明: “:S” 参数和 “:E” 可以同时使用,例如:(ssget "_:S:E"),此时 ssget 与 entsel 作用相同,但是返回值不同。

: D 重复选择

允许同一个对象多次加入选择集,每选择一次,则加入一次。

参数语法:(ssget ":D" [filter-list])

例如:画两条直线,然后运行代码(setq ss (ssget ":D")),框选3次直线后。(sslength ss)返回 6

:L 不选择锁定图层对象

注意: L、:L、-L 的参数是不同的。

参数语法:(ssget ":L" [filter-list])

ssget 默认选择所有图层对象,这样在程序中需判断图层是否锁定,才能编辑,否则 lisp 代码将返回错误。

其他

其他方法还有A :A -A _:V _:U _:R -M -P :P -G -L :?等参数以及组合用法,有兴趣的朋友可以测试。

使用 AutoCAD 命令 select 然后用 “?” 响应对象选择,就会出现选择提示符如下:

需要点或窗口(W)/上一个(L)/窗交(C)/框(BOX)/全部(ALL)/栏选(F)/圈围(WP)/圈交(CP)/编组(G)/添加(A)/删除(R)/多个(M )/前一个(P)/放弃(U)/自动(AU)/单个(SI)/子对象(SU)/对象(O)

命令行里提示的参数与 ssget 基本兼容。例如:在使用 “G” 作为 ssget 的模式字符串时,没有参数将编组名称传递给 ssget,因此该参数虽然有效,但无法返回期望结果,不知道新版的 CAD 会不会改进。

ssget 带点参数调用时,可能会受到自动捕捉的影响,一般先将系统变量 osmode 置零。

一些系统变量可能会影响模式字符串的使用,例如 pickadd, pickauto, pickdrag, pickfirst, pickstyle 等。

ssget 点参数包围的矩形、多边形应在当前绘图区域内可见,否则 ssget 仅返回可见区域内的对象选择集。

创建选择集会消耗 AutoCAD 的临时文件存储区,所以 AutoLISP 不允许同时创建多于 128 个选择集。 例如:画一个圆,然后执行以下代码: (repeat 130 (setq a (cons (ssget "l") a))) 这段程序循环了 130 次,AutoCAD提示 “错误: 超出选择集数量的最大范围”,如果继续调用 (ssget) 将返回 nil;此时,只有清空选择集变量 (setq a nil) 才能继续调用 ssget。

ssget 选择时没有自定义提示,如果特别需要可用第三方函数,比如飞诗的: Fsxm-ssget

责任编辑:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值