明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: shh_188

[提问] 如何向多个文件发送命令?

[复制链接]
 楼主| 发表于 2014-6-16 21:53:40 | 显示全部楼层
nzl1116 发表于 2014-6-16 21:43
多文档之间的操作就是跟你想的一样,当lisp把控制权交给另外一个文档时,它就停止执行,一直到那个文档执 ...

是的,我想要的结果,就是你说描述的
只是说,因为完全没有多文档这方面的经验,再加上今天在论坛里也没找到需要的样例,弄得现在仍然是一头雾水

所以说想请问下,是不是能提供一个样例,如果是链接也非常需要的
发表于 2014-6-16 22:12:09 | 显示全部楼层
shh_188 发表于 2014-6-16 21:53
是的,我想要的结果,就是你说描述的
只是说,因为完全没有多文档这方面的经验,再加上今天在论坛里也没 ...

  1. (defun getcommandname (file   /     acadapp   documents
  2.                                          actdoc   mnlfile   tmpfile   tmpf
  3.                                         value     str1      abcDoc
  4.                                          )
  5.   (vl-load-com)
  6.   (setq  acadapp    (vlax-get-acad-object)
  7.            documents (vla-get-documents acadapp)
  8.               actdoc    (vla-get-activedocument acadapp)
  9.   )
  10.   ;;寻找自动加载的"acad.mnl"文件,并在同目录下创建"tmpfile.lsp"文件
  11.   (setq  mnlfile  (findfile "acad.mnl")
  12.            tmpfile  (strcat (vl-filename-directory mnlfile) "\\tmpfile.lsp")
  13.            tmpf  (open tmpfile "w")
  14.   )
  15.   ;;在tmpfile.lsp"文件里写入 findfunc 函数定义
  16.   (princ (vl-prin1-to-string
  17.               '(defun findfunc (file / lst1 lst2 lst3)
  18.               (mapcar
  19.                 '(lambda (x)
  20.                    (if (or (wcmatch x "C:*")
  21.                            (wcmatch x "c:*")
  22.                       )
  23.                    (setq lst1 (cons x lst1))
  24.                  )
  25.                )
  26.         (atoms-family 1)
  27.        )
  28.        (load file (princ))
  29.        (mapcar
  30.         '(lambda (x)
  31.      (if (or (wcmatch x "C:*")
  32.        (wcmatch x "c:*")
  33.          )
  34.        (setq lst2 (cons x lst2))
  35.      )
  36.          )
  37.         (atoms-family 1)
  38.        )
  39.        (mapcar
  40.         '(lambda (x)
  41.      (if (not (member x lst1))
  42.        (setq lst3 (cons x lst3))
  43.      )
  44.          )
  45.         lst2
  46.        )
  47.        (vl-bb-set 'a lst3)
  48.       ) ;_ 结束defun
  49.    ) ;_ 结束 vl-princ1-to-string
  50.    tmpf
  51.   ) ;_ 结束 princ
  52.   ;;在文件的后面添加两行代码
  53.   ;;(findfunc file) ;_ 执行自定义函数
  54.   ;;(vl-load-com) ;_ 在第二个文档的名称空间里加载ActiveX支持[?这一步不知道是否需要]
  55.   ;;(vla-Activate actDoc) ;_ 激活前一个文档,把控制权交还给它
  56.   (princ (strcat "\n(findfunc " (vl-prin1-to-string file) " )")
  57.    tmpf
  58.   )
  59.   (princ "\n(vl-load-com)" tmpf)
  60.   (princ "\n(vla-Activate actdoc)" tmpf)
  61.   ;;关闭"tmpfile.lsp"文件
  62.   (close tmpf)
  63.   ;;从头到尾依次读取指定文件的每一行,
  64.   ;;如果文件存在指定的字符串,就返回这
  65.   ;;条字符串,并停止搜索,否则返回nil。
  66.   (defun readeveryline (fd string / str)
  67.     (if  (setq str (read-line fd))
  68.       (if (/= string str)
  69.   (readeveryline fd string)
  70.   str
  71.       )
  72.     )
  73.   )
  74.   ;;打开"acad.mnl"文件,依次读取每一行
  75.   ;;寻找是不是存在(load tmpfile (princ))这一行代码
  76.   ;;若不存在,就在文件里添加
  77.   (setq  tmpf (open mnlfile "r")
  78.   str1 (strcat "(load " (vl-prin1-to-string tmpfile) " (princ))")
  79.   )
  80.   (if (readeveryline tmpf str1)
  81.     (close tmpf)
  82.     (progn (close tmpf)
  83.      (setq tmpf (open mnlfile "a"))
  84.      (princ (strcat "\n" str1) tmpf)
  85.      (close tmpf)
  86.     )
  87.   )
  88.   ;;新建一个文档,同时,把控制权交给它
  89.   (setq abcDoc (vla-add documents ""))
  90.   ;;第二个文档执行完所有的代码后,自动把控制权交还给第一个文档
  91.   ;;第一个文档得到控制权后,就关闭第二个文档
  92.   (vla-close abcDoc)
  93.   ;;从黑板读取变量值
  94.   (setq value (vl-bb-ref 'a))
  95.   ;;删除黑板的变量
  96.   (vl-bb-set 'a nil)
  97.   ;;删除文件
  98.   (vl-file-delete tmpfile)
  99.   value
  100. )
 楼主| 发表于 2014-6-16 22:14:30 | 显示全部楼层
nzl1116 发表于 2014-6-16 22:12

非常感谢!!
发表于 2014-6-22 21:01:58 | 显示全部楼层
nzl1116 发表于 2014-6-16 22:12

留个记号,以后慢慢来学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-24 13:57 , Processed in 0.186406 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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