找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2602|回复: 5

[研讨] Vlax-Invoke vlax-get vlax-put三合一

[复制链接]
发表于 2013-11-29 12:16:45 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 Free-Lancer 于 2013-11-29 13:58 编辑

Vlax-invoke 和 Vlax-Get 及 vlax-put 三合一
  1. (defun invoke (obj name var / tf)
  2.   (if (and (setq tf (vlax-method-applicable-p obj name)) var)
  3.     (vl-catch-all-apply
  4.       'vlax-invoke
  5.       (append (list obj name) var)
  6.     )
  7.     (if        (null var)
  8.       (if tf
  9.         (vlax-invoke obj name)
  10.         (vlax-get obj name)
  11.       )
  12.       (progn
  13.         (vl-catch-all-apply 'vlax-put (list obj name var))
  14.         obj
  15.       )
  16.     )
  17.   )
  18. )

配套函数
  1. (defun fy:acapp        nil
  2.   (eval        (list 'defun
  3.               'fy:acapp
  4.               'nil
  5.               (vlax-get-acad-object)
  6.         )
  7.   )
  8.   (fy:acapp)
  9. )
  10. (defun Fy:acDoc        nil
  11.   (eval        (list 'defun
  12.               'FY:acdoc
  13.               'nil
  14.               (vla-get-activedocument (vlax-get-acad-object))
  15.         )
  16.   )
  17.   (fy:acdoc)
  18. )
  19. (defun FY:acMs nil
  20.   (eval        (list 'defun
  21.               'FY:acMs
  22.               'nil
  23.               (vla-get-modelspace (FY:acdoc))
  24.         )
  25.   )
  26.   (FY:acMs)
  27. )
  28. (defun e2o (e)
  29.   (if (eq (type e) 'ENAME)
  30.     (vlax-ename->vla-object e)
  31.     e
  32.   )
  33. )

1 (invoke (fy:acms) 'Addline (list (getpoint) (getpoint))) ;绘制直线
2 (invoke (e2o (car (entsel))) 'Textstring nil);获取文字字符
3 (invoke (fy:acms) 'AddLightweightpolyline (fy:acms) (list (apply 'appdend (pnt:cutz pts)))) ;点表绘制 pline

评分

参与人数 2D豆 +10 贡献 +1 收起 理由
xshrimp + 5 + 1 很给力!经验;技术要点;资料分享奖!
牢固 + 5 技术引导讨论和指点奖!

查看全部评分

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

已领礼包: 604个

财富等级: 财运亨通

发表于 2013-11-29 13:29:38 | 显示全部楼层
太有才了!!!

点评

更新一下,改为三个一 命令: (invoke (e2o (car (entsel))) 'Startpoint (getpoint)) 选择对象: nil 命令: (invoke (e2o (car (entsel))) 'Startpoint nil) 选择对象: (-7.60847e+010 -1.05471e+010 0.0  详情 回复 发表于 2013-11-29 13:59
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2013-11-29 13:59:32 | 显示全部楼层
本帖最后由 Free-Lancer 于 2013-11-29 14:02 编辑

更新一下,改为三合一

命令: (invoke (e2o (car (entsel))) 'Startpoint (getpoint))

选择对象: nil

命令: (invoke (e2o (car (entsel))) 'Startpoint nil)

选择对象: (-7.60847e+010 -1.05471e+010 0.0)

下次更新,支持列表
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-29 16:02:41 | 显示全部楼层
支持多属性效果
命令: (invoke (e2o (entlast)) '(startpoint endpoint color layer thickness linetype) nil)
((-513.271 -223.469 0.0) (-37.2793 429.718 0.0) 256 "0" 0.0 "ByLayer")

命令: (invoke (e2o (entlast)) '(color startpoint endpoint) (list 1 (getpoint) (getpoint)))
(#<VLA-OBJECT IAcadLine 1484a07c> #<VLA-OBJECT IAcadLine 1484a07c> #<VLA-OBJECT IAcadLine 1484a07c>)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 208个

财富等级: 日进斗金

发表于 2013-11-29 16:39:09 | 显示全部楼层
泼点冷水,这样写,程序的可读性会下降吧.

点评

要 对 ActiveX 熟悉才行  详情 回复 发表于 2013-11-29 17:13
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-29 17:13:38 | 显示全部楼层
本帖最后由 Free-Lancer 于 2013-11-29 17:15 编辑
xshrimp 发表于 2013-11-29 16:39
泼点冷水,这样写,程序的可读性会下降吧.

要 对 ActiveX 熟悉才行 ,部分 getpropertyvalue + setpropertyvalue 合一


  1. ;;****************************************************************;
  2. ;;;---------------------------------------------------------------;
  3. ;;;功能: vlax-invoke + vlax-get + vlax-put                        ;
  4. ;;; var -- nil 为获取                                             ;
  5. ;;;        修改时和 Name 要一一对应                               ;
  6. ;;;限制: Get 或 Put 属性时不能有两个及以上参数                    ;
  7. ;;;      如 coordinate                                            ;
  8. ;;;---------------------------------------------------------------;
  9. (defun invoke (obj name var / tf sinvoke val)
  10.   (defun sinvoke (obj name var / tf)
  11.     (if        (and (setq tf (vl-catch-all-error-p
  12.                         (vl-catch-all-apply
  13.                           'vlax-method-applicable-p
  14.                           (list obj name)
  15.                         )
  16.                       )
  17.              )
  18.              var
  19.         )
  20.       (if (vl-catch-all-apply
  21.             'vlax-invoke
  22.             (append (list obj name) var)
  23.           )
  24.         obj
  25.         tf
  26.       )
  27.       (if (null var)
  28.         (if tf
  29.           (if (not (vl-catch-all-error-p
  30.                      (setq val
  31.                             (vl-catch-all-apply 'vlax-invoke (list obj name))
  32.                      )
  33.                    )
  34.               )
  35.             val
  36.             nil
  37.           )
  38.           (if (not (vl-catch-all-error-p
  39.                      (setq
  40.                        val (vl-catch-all-apply 'vlax-get (list obj name))
  41.                      )
  42.                    )
  43.               )
  44.             val
  45.             nil
  46.           )
  47.         )
  48.         (progn
  49.           (vl-catch-all-apply 'vlax-put (list obj name var))
  50.           obj
  51.         )
  52.       )
  53.     )
  54.   )
  55.   (cond
  56.     ((and (listp name) (not (null var)))
  57.      (mapcar '(lambda (x y)
  58.                 (sinvoke obj x y)
  59.               )
  60.              name
  61.              var
  62.      )
  63.     )
  64.     ((listp name)
  65.       (mapcar '(lambda (x)
  66.                       (sinvoke obj x var)
  67.                     )
  68.                    name
  69.            )
  70.       )
  71.     (t (sinvoke obj name var))
  72.   )
  73. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 20:33 , Processed in 0.194871 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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