- 积分
- 12349
- 明经币
- 个
- 注册时间
- 2002-10-21
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2004-10-1 03:18:00
|
显示全部楼层
本帖最后由 作者 于 2004-10-1 3:49:52 编辑
呵呵,没办法,来了精神了. - ;|声明:使用 本函数.你可以改动函数名,及部分程序内容.但请保留本声明及作者注释信息.本函数仅供学习参考,不对可能造成的后果负责.版权所有,未经允许不得用于商业用途.作者:梁雄啸函数:(x-cond-getpt msg doel dopt dolst) 功能:扩展getpoint功能,支持取点,取点选中实体,关键字,并执行相应功能函数及语句.
- 参数: msg = 提示信息.
- doel = '(自定义传递变量 语句1 语句2...);传递变量的值为(nentselp)返回值格式,可在语句*中应用,如同 getboundingbox的'minp,'maxp 自定义变量.
- dopt = '(自定义传递变量 语句1 语句2...);传递变量的值为(getpoint)返回值格式,可在语句*中应用,如同 getboundingbox的'minp,'maxp 自定义变量.
- dolst = '((关键字1 语句1 语句1 ...)(关键字2 语句1 语句2 ...)...);如(("A" fa1 fa2...)("B" fb1 fb2 ...)...);关键字大小写无关!
- 返回值: 符合条件的各条语句的执行结果列表.
- 如果要取最后结果返回值,可使用(last 返回值)
- 说明: doel,dopt,dolst应用时表前需加 ' 号或用(FUNCTION ())将内容包括起来.如同使用lambda函数.
- 版本: v1.0-200410.
- 更新:
- 实例: (defun test (pt) (angle '(0 0 0) pt)) ;;测试用的临时函数.
- (x-cond-getpt "\n点选实体/取点/A-/B-:"
- nil
- '(pt (setq ptx pt)(test ptx)) ;;调用test函数.
- '(("a" (princ "a"))
- ("B" (princ "\n返回值: ")(princ "B"))
- )
- )
- |;;;主函数:
- (defun x-cond-getpt (msg doel dopt dolst / k el ass)
- (setq dolst (mapcar '(lambda(x)(cons (strcase (car x))(cdr x))) dolst))
- (initget (apply 'strcat (mapcar '(lambda(x)(strcat (car x) " ")) dolst)))
- (setq k (getpoint msg))
- (cond
- ((and k doel (listp k) (setq el (nentselp k)))
- (set (car doel) el)
- (mapcar 'eval (cdr doel)))
- ((and k dopt (listp k))
- (set (car dopt) k)
- (mapcar 'eval (cdr dopt)))
- ((and k (= 'STR (type k))(setq ass (assoc k dolst)))
- (mapcar 'eval (cdr ass)))
- (T nil)
- )
- )
 - ;|应用实例:
- (setq a
- (x-cond-getpt "\n指定第一个角点或 [对象(O)/加(A)/减(S)]:"
- '(entl (print (car entl))(princ (cadr entl)))
- '(pt (print pt)(princ " 角度:")(princ (angle '(0. 0. 0.) pt)))
- '(("O" (print "O"))
- ("a" (print "A"))
- ("S" (print "S"))
- )
- )
- )
- ;;如果要执行的最末值作为返回值,使用下面语句,或将程序中(mapcar 'eval ...)改为(last(mapcar 'eval ...)).
- ;;(setq b (if a (last a) nil)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;应用实例效果测试;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; vl控制台显示信息(行末注释为后期加注):----------------------------;;
- (140824.0 528880.0 0.0) 角度:1.31057 ;;点击绘图区,选中实体的执行过程.
- ((140824.0 528880.0 0.0) " 角度:" 1.31057) ;;返回值.
- _$ <图元名: 7efb4dd8> (247879.0 491409.0 0.0) ;;点击绘图区,无实体的执行过程.
- (<图元名: 7efb4dd8> (247879.0 491409.0 0.0)) ;;返回值.
- _$ "O" ;;输入"o"后的执行过程.
- ("O") ;;返回值.
- _$ "S" ;;输入"S"
- ("S")
- _$ nil ;;回车,执行过程无显示,返回值为nil
- _$;; cad命令行显示信息:----------------------------;;
- 指定第一个角点或 [对象(O)/加(A)/减(S)]:
- (140824.0 528880.0 0.0) 角度:1.31057
- 指定第一个角点或 [对象(O)/加(A)/减(S)]:
- <图元名: 7efb4dd8> (247879.0 491409.0 0.0)
- 指定第一个角点或 [对象(O)/加(A)/减(S)]:o
- "O"
- 指定第一个角点或 [对象(O)/加(A)/减(S)]:t
- 需要点或选项关键字。
- 指定第一个角点或 [对象(O)/加(A)/减(S)]:s
- "S"
- 指定第一个角点或 [对象(O)/加(A)/减(S)]:
- 命令:
- |;
|
评分
-
参与人数 1 | 金钱 +2 |
贡献 +5 |
激情 +2 |
收起
理由
|
龙龙仔
| + 2 |
+ 5 |
+ 2 |
【好评】小程序不錯 |
查看全部评分
|