明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 38396|回复: 101

[【不死猫】] [不死猫出品] VBA-LISP 代码转换工具(源码)

    [复制链接]
发表于 2011-7-18 14:50:45 | 显示全部楼层 |阅读模式
本帖最后由 nonsmall 于 2013-5-28 22:32 编辑

大家好!
好久没发东西了,今天翻箱底发现这个,拿上来与大伙分享
原文思路在这里:
http://bbs.mjtd.com/thread-72391-1-1.html
完整源码收1个明经币

下面是部分源代码……

  1. (defun vba(vba_str / p1 p2 vba_express vba_item vba_items vba_lst vba_num vba_object vba_ref vba_tmp)
  2. (setq vba_lst (non_string_to_list vba_str "."))
  3. (foreach vba_item vba_lst
  4.   (cond
  5.    ((= (strcase vba_item) "APP");根对象
  6.     (setq vba_object (vlax-get-acad-object))
  7.    )
  8.    ((= (strcase vba_item) "THISDRAWING");当前图档
  9.     (setq vba_object (vla-get-activedocument(vlax-get-acad-object)))
  10.    )
  11.    ((= vba_item (car vba_lst));获取对象
  12.     (setq vba_object (eval (read vba_item)))
  13.    )
  14.    ((vl-string-search "ITEM" (strcase vba_item));集合中的vba_item处理
  15.     (setq vba_tmp (non_string_to_list vba_item "("))
  16.     (setq vba_item (car vba_tmp))
  17.     (setq vba_item (vl-string-right-trim " " vba_item))
  18.     (setq vba_num (read (vl-string-right-trim ")" (cadr vba_tmp))))
  19.     (cond
  20.      ((= (type vba_num) 'INT)
  21.       (setq vba_num (vl-string-right-trim ")" (cadr vba_tmp)))
  22.      )
  23.      ((= (type vba_num) 'SYM)
  24.       (setq vba_num (vl-string-right-trim ")" (cadr vba_tmp)))
  25.      )
  26.      ((= (type vba_num) 'STR)
  27.       (setq vba_num (vl-string-right-trim ")" (cadr vba_tmp)))
  28.      )
  29.     )
  30.     (setq vba_express (strcat "(setq vba_object (vla-item  vba_object " vba_num "))"))
  31.     (if (vl-catch-all-error-p(vl-catch-all-apply 'eval (list (read vba_express))))
  32.      (eval (read (strcat "(setq vba_object (vlax-get-property  vba_object 'item " vba_num "))")))
  33.     )
  34.    )
  35. ((and (vl-string-position (ascii "(") vba_item);索引处理
  36.     (setq p1 (vl-string-position (ascii "(") vba_item))
  37.     (setq p2 (vl-string-position (ascii ")") vba_item))
  38.     (numberp (eval (read (setq vba_num (substr vba_item (+ p1 2) (- p2 p1 1))))))
  39.     )
  40.     (setq vba_tmp (non_string_to_list vba_item "("))
  41.     (setq vba_ref (car vba_tmp))
  42.     (setq vba_ref (vl-string-right-trim " " vba_ref))   
  43.     (if (vl-string-position (ascii "=") vba_item)
  44.      (progn
  45.       (setq vba_tmp (non_string_to_list vba_item "="))
  46.       (eval (read (strcat "(setq vba_object (vlax-put-property vba_object '" vba_ref " " vba_num " " (cadr vba_tmp) "))")))
  47.      )
  48.      (eval (read (strcat "(setq vba_object (vlax-get-property vba_object '" vba_ref " " vba_num "))")))
  49.     )
  50.    )
  51.   )
  52. )
  53. (cond
  54.   ((= vba_object :vlax-true)
  55.    T
  56.   )
  57.   ((= vba_object :vlax-false)
  58.    nil
  59.   )
  60.   (T
  61.    vba_object
  62.   )
  63. )
  64. )



本帖子中包含更多资源

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

x

评分

参与人数 2明经币 +2 收起 理由
LPACMQ + 1 很给力!
ylzhaosjz + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-7-18 14:54:02 | 显示全部楼层
非常厉害的版主,学习了!
呵呵!
回复 支持 0 反对 1

使用道具 举报

发表于 2022-3-21 09:37:34 | 显示全部楼层
本帖最后由 lee50310 于 2022-3-21 09:39 编辑

奇怪了!   
下載後,載入程式 照樓主提供的方式執行 出現錯誤
(setq newlay (vba "layers.add(\"234\")"))
錯誤: 損壞的引數類型: VLA-OBJECT nil

(vba "lay.color=3")
; 錯誤: 損壞的引數類型: VLA-OBJECT nil






发表于 2022-9-30 00:17:53 | 显示全部楼层
很好很强大,最近在开发某些自己需要的功能,这个刚好可以学习各种转换的代码。
发表于 2011-7-18 14:52:40 | 显示全部楼层
猫猫发帖子啦~~~
 楼主| 发表于 2011-7-18 14:58:44 | 显示全部楼层
额 好快的抢楼手法……

程序的返回值还是vlisp格式的 先转换而后执行 其他的代码?大家DIY好了

命令: (setq layers (vba "activedocument.layers"))
#<VLA-OBJECT IAcadLayers2 0266a7a4>
命令: (setq newlay (vba "layers.add(\"234\")"))
#<VLA-OBJECT IAcadLayer2 026b3844>
命令: (vba "newlay.color=6")
nil

命令: (setq lay(vba "activedocument.layers.add(\"111\")"))
#<VLA-OBJECT IAcadLayer2 026b4954>
命令: (vba "lay.color=3")
nil
命令: (vba "activedocument.layers.item(\"111\").color=1")
nil
发表于 2011-7-18 15:05:19 | 显示全部楼层
挖个坑蹲着。
发表于 2011-7-18 16:51:02 | 显示全部楼层
使用这个操控excel岂不是很方便了?
发表于 2011-7-18 17:48:51 | 显示全部楼层
支持猫猫工具,
发表于 2011-7-18 17:54:02 | 显示全部楼层
没想到真的把这想法变成了现实,楼主真是神人也
发表于 2011-7-18 18:09:38 | 显示全部楼层
老猫要常来逛逛啊,你的帖子都很具代表性啊
发表于 2011-7-18 18:17:10 | 显示全部楼层
本帖最后由 xchrimp 于 2011-7-18 18:20 编辑

没有实用性,网友定制程序不会用到这些。学习LISP也不会学这没价值的附加资料
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 07:01 , Processed in 0.170712 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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