本帖最后由 作者 于 2008-12-7 11:41:59 编辑
再传一个,koyote版变种ssget函数,部分代码是nonsmall提供,其他都是自己找的,思路是本人想出来的 ;| 增强型及变种型ko->ssget 语法: (ko->ssget msg keyword action filter_list firstss) 功能及参数 功能:支持直接点选和多选或先选择对象再执行程序,返回选择集或字符串(包括关键字或实数或整数)或用空格结束返回nil 可控制关键字是否需要空格或回车键或右键来响应程序 参数 [类型]: msg = 注释 [STR] 值为空字符串"",或 "\n程序爱好者:鬼谷子或koyote或liminnet:" keyword = initget的keyword 关键字[STR],不考虑时参数为nil或关键字必须大写和单词间至少留一位空格 "W G"或"Undo Option eXit" action =控制keword是否需要空格或回车键或右键来响应,具备天正的命令的功能 T或nil(大小写不分)[SYM] filter_list = 过滤字符表.参见ssget [LIST],不考虑时参数为nil '((0 . "*LINE,CIRCLE,ARC"))或(list '(0 . "*LINE,CIRCLE,ARC")) firstss =ssgetfirst功能,参数值nil或选择集,nil的话命令没有启动时所选择的对象集无效,反之则是,如果filter_list存在,会过滤掉不符合条件的 对象 注意:firstss参数如果要启用时,语句(setq firstss (cadr (ssgetfirst)))一定要放在主程序最前面一行 范例: 1.(ko->ssget "\n选择直线或圆/Undo/Option/eXit" "Undo Option eXit" t '((0 . "*LINE,CIRCLE,ARC")) nil) 2.firstss用法例子 测试: (defun c:tt() (setq firstss (cadr (ssgetfirst)));;注意:firstss参数如果要启用时,语句(setq firstss (cadr (ssgetfirst)))一定要放在主程序最前面一行 (setq xh t) (while xh (setq ent (ko-ssget "\n测试ko-ssget函数(X)/(H):" "X H" T '((0 . "*LINE,CIRCLE,ARC")) firstss)) (cond ((= ent "X") (alert "等于字符串X你要执行的程序一") ent) ((= ent "H") (alert "等于字符串H你要执行的程序二") ent) ((= (type ent) 'PICKSET) (alert "这个功能是返回选择集") (setq xh nil) ent) ((numberp ent) (alert (strcat "此项功能是判断输入的是否是实数或整理, 用于不用进入子选项而直接设置一个值" "\n" "请选择要拉伸的对象或[当前默认值(500)或直接输入值回车改变默认值]")) ent ) ((= ent nil) (setq xh nil)) ) ) ) (defun c:ff() (ko-ssget "\n[选择你要标注的对象或修改(F)/(W)]<" "Fdf dWg eXit" t (list '(0 . "*LINE,CIRCLE,ARC")) nil) ) |; |