找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 45471|回复: 11

[每日一码] vl-catch-all-apply的几例用法

[复制链接]

已领礼包: 2个

财富等级: 恭喜发财

发表于 2013-8-1 00:21:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 taner 于 2013-8-4 10:33 编辑
  1. (defun Th-Catch-Apply (func params / result)
  2.   (if (not (vl-catch-all-error-p (setq result (Vl-Catch-All-Apply func
  3.                                                                   params
  4.                                               )
  5.                                  )
  6.            )
  7.       )
  8.     result
  9.   )
  10. );;;与Vl-Catch-All-Apply用法完全相同
  11. (defun T2-Catch-Apply (lambdafunc / result)
  12.   (if (not (vl-catch-all-error-p (setq result (Vl-Catch-All-Apply
  13.                                                                   (function lambdafunc)
  14.                                               )
  15.                                  )
  16.            )
  17.       )
  18.     result
  19.   )
  20. );;;应用范围最广
  21. (defun Bq-Catch-Apply (Lst / res)
  22.   (if
  23.     (/=
  24.       (type
  25.         (setq res
  26.           (vl-catch-all-apply
  27.             (quote (car Lst))
  28.             (cdr Lst)
  29.           )
  30.         )
  31.       )
  32.       (quote VL-CATCH-ALL-APPLY-ERROR)
  33.     )
  34.     res
  35.   )
  36. )
  37. (defun Tt-Catch-Apply (lst / result)
  38.   (if (not (vl-catch-all-error-p
  39.              (setq result (Vl-Catch-All-Apply
  40.                             (list 'lambda 'nil lst)
  41.                           )
  42.              )
  43.            )
  44.       )
  45.     result
  46.   )
  47. )
  48. ;;;(Tt-Catch-Apply'(vlax-get-property (vlax-ename->vla-object(car(entsel))) 'color))
  49. ;;;(Bq-Catch-Apply '(lvlax-get-property (vlax-ename->vla-object(car(entsel))) 'color))
  50. ;;;(th-Catch-Apply  'vlax-get-property (list(vlax-ename->vla-object(car(entsel))) 'color))
  51. ;;;(t2-Catch-Apply  (lambda()(vlax-get-property (vlax-ename->vla-object(car(entsel))) 'color)))

评分

参与人数 3D豆 +15 收起 理由
xshrimp + 5 很给力!经验;技术要点;资料分享奖!
Lispboy + 5 好主题奖!
wowan1314 + 5 好主题奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-8-1 09:43:57 | 显示全部楼层
感谢分享!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-8-1 10:06:11 | 显示全部楼层
顶楼主,支持分享。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-1 14:23:49 | 显示全部楼层
看不明白,:P希望楼主给简单讲解讲解
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2013-8-2 23:02:34 | 显示全部楼层
本帖最后由 taner 于 2013-8-3 22:23 编辑
  1. ;;;再改一下,这个可以少输入一个LAMBDA,且表里可以有N项表达式
  2. ;;;(Catch-Apply  '((vlax-put-property (setq o(th2o(car(entsel)))) 'color 1)(vla-put-closed o :vlax-true)))
  3. (defun Catch-Apply (funlstforlambda)
  4.   (Th-Catch-Apply (cons 'lambda (cons 'nil funlstforlambda)) nil)
  5. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-3 07:30:27 来自手机 | 显示全部楼层
本来就不太清楚,看完更迷糊了:)来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2013-8-8 19:25:38 | 显示全部楼层
没明白这样做有什么用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-8-8 19:56:29 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2013-8-8 19:25
没明白这样做有什么用。

  1. ;;一般可以这样重定义 VL-CATCH-ALL-APPLY,参数 fun = 执行的函数 lst = 函数fun 的参数表
  2. ;;返回结果 :函数执行正确,返回函数的结果,函数运行错误,返回 nil
  3. (defun catchapply (fun lst)
  4.   (if (not
  5.   (VL-CATCH-ALL-ERROR-P
  6.     (setq  res
  7.      (VL-CATCH-ALL-APPLY
  8.        (if (= 'SYM (type fun))
  9.          fun
  10.          (function fun)
  11.        )
  12.        lst
  13.      )
  14.     )
  15.   )
  16.       )
  17.     res
  18.   )
  19. )
  20. ;;
  21. 用法一:
  22. (catchapply vla-offset (list (vlax-ename->vla-object (car(entsel))) 1.0))
  23. 用法二:
  24. (catchapply 'vla-offset (list (vlax-ename->vla-object (car(entsel))) 1.0))

  25. ;;如下用法,参数错误,返回nil
  26. (catchapply vla-offset (list (car(entsel)) 1.0))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2013-8-8 22:08:15 | 显示全部楼层
本帖最后由 taner 于 2013-8-8 22:26 编辑
  1. (defun catchapply (fun lst)
  2.   (if (not (VL-CATCH-ALL-ERROR-P
  3.        (setq res (VL-CATCH-ALL-APPLY
  4.        (if
  5.          (or
  6.            (=  'SYM
  7.         (type fun)
  8.            )
  9.            (=  'list
  10.         (type fun)
  11.            )
  12.          )
  13.           fun
  14.           (function fun)
  15.        )
  16.        lst
  17.            )
  18.        )
  19.      )
  20.       )
  21.     res
  22.   )
  23. )
  24. ;|(catchapply (lambda ()
  25.         (vla-put-color (car (vlax-invoke
  26.                  (vlax-ename->vla-object
  27.                        (car
  28.                       (entsel)
  29.                        )
  30.                  ) 'offset 1.0
  31.           )
  32.            ) 5
  33.         )
  34.       ) nil
  35. )
  36. (catchapply '(lambda ()
  37.          (vla-put-color (car (vlax-invoke
  38.             (vlax-ename->vla-object
  39.                   (car
  40.                        (entsel)
  41.                   )
  42.             ) 'offset 1.0
  43.            )
  44.             ) 5
  45.          )
  46.        ) nil
  47. )|;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2013-8-15 03:10:32 | 显示全部楼层
  1. (defun Tt-Catch-Apply (expression-wiTh-parenTheses / catch:err)
  2.   (setq catch:err (Vl-Catch-All-Apply 'mapcar (cons 'eval (LIst expression-wiTh-parenTheses))))
  3.   (if (vl-catch-all-error-p catch:err)
  4.     (prompt (strcat "\n" (vl-catch-all-error-message catch:err)
  5.                     "\n怀具了,执行表达式: "
  6.                     (vl-princ-to-string expression-wiTh-parenTheses)
  7.                     "时出错.\n"
  8.             )
  9.     )
  10.     (last catch:err)
  11.   )
  12. )
  13. ;;;(Tt-catch-apply '((vlax-put-property (setq o(th2o(car(entsel)))) 'color 5)(vla-put-closed o :vlax-true)(vla-get-layer o)))
  14. ;;;只能用带单引号的表
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2226个

财富等级: 金玉满堂

发表于 2014-3-20 22:56:16 | 显示全部楼层
源码是好东西
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1094个

财富等级: 财源广进

发表于 2021-6-6 00:15:08 | 显示全部楼层
感谢楼主分享vl-catch-all-apply的几例用法!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 14:04 , Processed in 0.386220 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表