还在为你的ssget不能带关键字烦恼么,那么你现在不必烦恼了。
DynamicLisp的新版本里面提供了带关键字的ssget。
下面是几个函数的用法
=============================================================
可定义提示、关键字的SSGET
-------------------------------------------------------------
(HFB_initGet [prompt]
[kword]
[kwordCallback]
[OtherCallback]
[RemovePrompt])
输入:
<prompt>
提示字符串。选择时候的提示字符串。可缺省。
<kword>
关键字.ARX选择关键字定义和一般的关键字有所不同,下划线前
定义的是关键字下划线后定义的是输入关键字后返回的字符串。
例如: XCircle XLine_XCircle XLine。可缺省。
<kwordCallback>
回调函数字符串,如不指定,选择关键字后将中断选择直接返回
关键字字符串。可缺省。
<OtherCallback>
如果输入的非关键字,所进行的回调函数名。可缺省。
<RemovePrompt>
为移除所选的某些物体的提示字符串。可缺省。
说明:
所有参数均为可选,但如果指定关键字就必须指定提示字符串.
选择集使用完,要使用HFB_ssFree (由于我没定义储存列队,记
得使用完选择集后用HFB_ssFree 释放选择集,否则超过128个选
择集后将 无法创建)。
输出:如果成功返回T,否则返回nil.
-------------------------------------------------------------
(HFB_ssget [sel-method]
[pt1 [pt2]]
[pt-list]
[filter-list])
参数说明与用法及返回值与SSGET相同.
使用前需要用HFB_initGet进行设置。如果不进行设置或者无参数调用
HFB_initGet,则与SSGET一致。如有设置,则有些模式可能无效果。
-------------------------------------------------------------
(HFB_ssFree [sel])
输入: [sel] 为选择集,可缺省。
说明: 不带参数调用为释放图中所有选择集,包括命名和未命名的。
sel如果为pickset类型,则释放这个选择集。如果为命名的选
择集,则这个参数应为字符串。
输出: 如果成功返回T,否则返回nil
=============================================================
测试样例:
- (defun c:test (/ kwordCallback OtherCallback ss)
- (defun kwordCallback (Kword /) ;关键字回调函数
- (princ (strcat "\n选择了关键字: " kword))
- (cond
- ( (= kword "XCircle")
- (ssget "x" '((0 . "CIRCLE")))
- )
- ( (= kword "XLine")
- (ssget "x" '((0 . "LINE")))
- )
- (T (princ "\n错误的关键字。"))
- )
- )
- (defun OtherCallback (Kword /) ;非关键字回调函数
- (princ (strcat "\n选择了非关键字: " kword))
- kword
- )
- (vl-acad-defun 'kwordCallback) ;让lisp函数能被arx调用
- (vl-acad-defun 'OtherCallback) ;让lisp函数能被arx调用
- (sssetfirst nil nil)
- (HFB_initGet "选择对象或[全部圆(XC)/所有直线(XL)]: " ;选择时的提示
- "XCircle XLine_XCircle XLine" ;关键字
- "kwordCallback" ;关键字回调函数名
- "OtherCallback" ;非关键字回调函数名
- "移除物体: " ;移除选择时的提示
- )
- (setq ss (HFB_SSGet)) ;开始自定义关键字选择.
- (cond
- ( (= (type ss) 'STR)
- (princ (strcat "\n你输入了关键字: " ss))
- )
- ( (= (type ss) 'PICKSET)
- (princ "\n你的选择集是:")
- (princ ss)
- (princ ", 选择集中图元个数是: ")
- (princ (sslength ss))
- (sssetfirst ss ss)
- (HFB_ssFree ss) ;释放选择集
- )
- )
- (princ)
- )
|