【DynamicLisp的高级应用】-- 带关键字的SSGET
还在为你的ssget不能带关键字烦恼么,那么你现在不必烦恼了。DynamicLisp的新版本里面提供了带关键字的ssget。
下面是几个函数的用法
=============================================================
可定义提示、关键字的SSGET
-------------------------------------------------------------
(HFB_initGet
)
输入:
<prompt>
提示字符串。选择时候的提示字符串。可缺省。
<kword>
关键字.ARX选择关键字定义和一般的关键字有所不同,下划线前
定义的是关键字下划线后定义的是输入关键字后返回的字符串。
例如: XCircle XLine_XCircle XLine。可缺省。
<kwordCallback>
回调函数字符串,如不指定,选择关键字后将中断选择直接返回
关键字字符串。可缺省。
<OtherCallback>
如果输入的非关键字,所进行的回调函数名。可缺省。
<RemovePrompt>
为移除所选的某些物体的提示字符串。可缺省。
说明:
所有参数均为可选,但如果指定关键字就必须指定提示字符串.
选择集使用完,要使用HFB_ssFree (由于我没定义储存列队,记
得使用完选择集后用HFB_ssFree 释放选择集,否则超过128个选
择集后将 无法创建)。
输出:如果成功返回T,否则返回nil.
-------------------------------------------------------------
(HFB_ssget
]
)
参数说明与用法及返回值与SSGET相同.
使用前需要用HFB_initGet进行设置。如果不进行设置或者无参数调用
HFB_initGet,则与SSGET一致。如有设置,则有些模式可能无效果。
-------------------------------------------------------------
(HFB_ssFree )
输入: 为选择集,可缺省。
说明: 不带参数调用为释放图中所有选择集,包括命名和未命名的。
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)
)
让lisp能释放选择集是一件很惬意的事 这是伪码吧,代码不全,运行不了
页:
[1]