本帖最后由 edata 于 2015-9-24 20:39 编辑
新版反应器不能跨文件执行,构建的vlr-documentBecameCurrent反应器,只能在当前文档执行,
而vla-add-cmd构建命令之后,在新旧文档都存在这个命令。不过新文件的命令没有函数的支持,造成命令不匹配,所以提示 Visual LISP command document mismatch 。解决方式是(vlax-remove-cmd shortCMD);删除已定义的命令.然后重新定义。
反应器无效,所以建议采用启动组的方式加载这个lisp,或者acad.lsp。总之能启动这个lisp就能加载自定义命令。
2015年9月24日20:38:41
因为没了反应器,所以会造成前面的文档无法使用,因此直接更改为defun版。
- ;;;********************************
- ;;; 工具快捷命令初始化 函数
- ;;;********************************
- (defun C:ark_qgqc (/ PGPFile fp i xString aList shortCMD GlobalCMD)
- (princ"\n自定义文件已经重新加载!")
- (vl-load-com)
- (setq PGPFile "Arktools.pgp") ;
- (if (setq PGPFile (findfile PGPFile))
- (progn ;then
- (setq fp (open PGPFile "r"))
- (setq i 1)
- (while (setq xString (read-line fp))
- (if (= (type xString) 'SYM)
- (setq xString (vl-symbol-name xString))
- ) ;转换数据文件中无引号的字符串.
- (while (vl-string-search " " xstring) ;去掉所有的空格.
- (setq xString (vl-string-subst "" " " xstring)) ;空格.
- (setq xString (vl-string-subst "" " " xstring)) ;tab符.
- ) ;end_while
- (if (and (/= (substr xString 1 1) ";")
- (vl-string-search "," xstring)
- (vl-string-search "*" xstring)
- )
- (progn
- (setq aList
- (read (strcat "("
- (vl-string-subst " . C:" ",*" xString)
- ")"
- )
- )
- )
- (setq shortCMD
- (vl-string-trim " " (vl-symbol-name (car aList)))
- )
- (setq GlobalCMD (cdr aList))
- ;(vlax-remove-cmd shortCMD);删除已定义的命令.
- ;(vlax-add-cmd shortCMD GlobalCMD)
- (eval(read(strcat "(defun c:" (vl-symbol-name (car aList)) "() (" (vl-symbol-name (cdr aList)) "))")))
- ) ;end_progn
- ) ;end_if
- (setq i (+ i 1))
- ) ;end_while read-line
- (close fp)
- ) ;end_progn then
- (princ
- "\n工具简化命令定义文件 Arktools.pgp 没找到或不存在!"
- )
- ) ;end_if
- (setvar "RE-INIT" 16)
- ) ;end_defun
- (C:ark_qgqc) ;调用工具快捷命令自动加载函数.
|