让LISP也能使用ARX的acedSSGet自定义提示和关键字
本帖最后由 Gdlprfcu 于 2013-5-12 22:15 编辑一直都不喜欢lisp的SSGET不能自定义提示和关键字,最近学习ObjectARX终于能把arx的acedSSGet函数做了LISP的了,欢迎大家下载测试,也希望大家能一起来学习ObjectARX,一起进步,源码我也帖在这了:http://bbs.xdcad.net/thread-668031-1-1.html
;==============================================================
;可定义提示、关键字的SSGET
;(myssget prompt kword pfunction fileetlist)
;参数:
; prompt 提示字符串。
; kword关键字.ARX选择关键字定义和一般的关键字有所不同,下划线前定义的是关键字下划线后定义的是输入关键字后返回的字符串。
; pfunction 回调函数字符串,如何不指定,选择关键字后将中断选择直接返回关键字字符串。
; fileetlist 过虑表,与SSGET相同
;说明:
; 所有参数均为可选,但如果指定关键字就必须指定提示字符串.
;返回值:
; 如何成功返回选择集或定义的关键字字符串,否则返回nil.
;示例:
; 命令:(myssget)
; 选择对象:
; 命令:(myssget "我喜欢的:")
; 我喜欢的:
; 命令:(myssget "[是(Y)否(N)]:" "Yes No _ Yes No")
; [是(Y)否(N)]:Y "Yes"
;===============================================================
(defun c:MySSGet(/ ssgetpfunc ss)
(defun ssgetpfunc(Kword / );SSGET选择关键字回调函数
(princ (strcat "选择了关键字" kword))
(cond
((= kword "Xcircle")
(ssget "x" '((0 . "CIRCLE")))
)
((= kword "Xline")
(ssget "x" '((0 . "LINE")))
)
(T("错误的。"))
)
)
(vl-acad-defun 'ssgetpfunc);让lisp函数能被arx调用
(setq ss (MYssget "选择对象,或[全部圆(XC)/所有直线(XL)]" ;;选择时的提示
"XC XL _ Xcircle Xline" ;;关键字
"ssgetpfunc" ;回调函数字符串
))
(if ss(ssfree ss));由于我没定义储存列队,选择集使用完,记得使用完选择集后用ssfree释放选择集,否则超过128个选择集后将无法创建。
)
ll_j 发表于 2013-5-13 15:36
楼主的函数还是使用arx的,并不是真正意义上的a/vlisp函数。
到目前为止,个人认为最好的ssget变体还是飞 ...
我是个比较追求完美的人,用LISP模仿我也做过,飞诗版主模仿的虽是不错,但模仿的就是模仿的用LISP不可能做到和acedSSGet函数一样效果的,acedSSGet关键字触发的是事件,在你选择的时候可以真正意义上的去做其它事,做完了再返回。当然如果没追求的话完全可以无视,而且我也说了是用ARX编写的呀。 很好的想法,我刚想做这个研究呢。 Highflybird 发表于 2013-5-12 22:26
很好的想法,我刚想做这个研究呢。
能盼到高飞大哥来捧我的帖实在真是太高兴了{:soso_e128:} 不错的思路。学习了 楼主的函数还是使用arx的,并不是真正意义上的a/vlisp函数。
到目前为止,个人认为最好的ssget变体还是飞诗版主发表在明经上的“带关键字的ssget”,虽然也有些限制,而且有一个很长的字串显示,但使用起来还是可以的。
原帖:http://bbs.mjtd.com/forum.php?mod=viewthread&tid=71545,相信大家都看过。 新的知识点。 好........................... 请问如何使用,我测试提示错误“命令: MYSSGET
; 错误: no function definition: MYSSGET” 源代码没有注册MYssget 函数,ssfree这个函数也没有注册,我研究研究 学习学习学习{:1_12:}{:1_12:}{:1_12:}
页:
[1]