690994
发表于 2021-9-14 22:14:52
etoxp 发表于 2021-9-14 19:44
(sam_fillet 0.0 nil)中不能用(vla-sendcommand *doc* (strcat "._Lengthen DE " NV " ")),重复命令时, ...
你再看看我发的代码最后几行
(if n(vl-catch-all-apply 'vla-SendCommand (list(vla-get-ActiveDocument (vlax-get-acad-object)) "SmartCommand ")))
(princ)
)
(defun c:SmartCommand( / *doc* )
(vla-startundomark (setq *doc*(vla-get-activedocument (vlax-get-acad-object))))
(setvar "cmdecho" 0)
(if(and (=(type samcom) 'str)(wcmatch samcom "(sam_*\) "))
(vl-catch-all-apply 'eval (list (read samcom))))
这几行
我是定义了一个命令smartcommand,vla-sendcommand发送的永远都是它,它运行时就是执行Samcom这个全局变量中的内容,只有Samcom中的内容不变,就可以一直重复命令
etoxp
发表于 2021-9-15 11:55:43
690994 发表于 2021-9-14 22:14
你再看看我发的代码最后几行
(if n(vl-catch-all-apply 'vla-SendCommand (list(vla-get-ActiveDocumen ...
知道我的问题在哪了,(sam_fillet 0.0 nil)中不能用vla-sendcommand,只能用vl-cmdf或command。
690994
发表于 2021-9-15 18:02:30
etoxp 发表于 2021-9-15 11:55
知道我的问题在哪了,(sam_fillet 0.0 nil)中不能用vla-sendcommand,只能用vl-cmdf或command。
你还没有明白你的问题,(sam_fillet 0.0 nil)就是一个子函数,能用任何lisp命令,包括vla-sendcommand,vl-cmdf或command,你方便的话可以将你的代码发出来,我看看能不能帮你改改
andyzha
发表于 2021-9-15 21:58:16
690994 发表于 2021-9-15 18:02
你还没有明白你的问题,(sam_fillet 0.0 nil)就是一个子函数,能用任何lisp命令,包括vla-sendcommand,v ...
能解决高版本CAD带小数点命令报错的问题吗?
etoxp
发表于 2021-9-16 08:58:54
690994 发表于 2021-9-15 18:02
你还没有明白你的问题,(sam_fillet 0.0 nil)就是一个子函数,能用任何lisp命令,包括vla-sendcommand,v ...
(vl-load-com)
(or *doc*
(setq *doc* (vla-get-ActiveDocument (vlax-get-acad-object)))
)
(or *unknownCommand*
(setq *unknownCommand*
(vlr-editor-reactor
nil
'((:vlr-unknownCommand . unknownCommand))
)
)
)
(defun unknownCommand (a b / CMD CMDLST CMDSTR FLAG I NV UNCMDSTR)
;;---------------------------------------------------
(setq UNCmdStr (strcase (car b)))
(setq cmdLst (list "DE" "CH"))
(setq flag T
i 0
)
;;---------------------------------------------------
(while (and flag (< i (length cmdLst)))
(progn
(if (wcmatch UNCmdStr (strcat (nth i cmdLst) "*"))
(progn
(setq flag nil)
(setq cmd (nth i cmdLst))
)
)
(setq i (+ i 1))
)
)
;;---------------------------------------------------
(if flag
(progn
(princ "\n UNKOWNCOMMAND:未找到对应的命令!")
(exit)
)
(progn
;;-------------------------------
(cond
((= cmd "DE")
(progn
(setq NV (substr UNCmdStr (+ (strlen cmd) 1)))
(setq FCTN (strcat "(XP-UNKOWNCMD-LengthenDE "
(vl-princ-to-string NV)
") "
)
)
)
)
)
;;-------------------------------
(cond
((= cmd "CH")
(progn
(setq NV (substr UNCmdStr (+ (strlen cmd) 1)))
(setq FCTN (strcat "(XP-UNKOWNCMD-Chamfer "
(vl-princ-to-string NV)
") "
)
)
)
)
)
;;-------------------------------
(vl-catch-all-apply
'vla-SendCommand
(list (vla-get-ActiveDocument (vlax-get-acad-object))
"SmartCommand "
)
)
;;-------------------------------
)
)
;;---------------------------------------------------
(princ)
)
(defun c:SmartCommand (/ *doc*)
(vla-startundomark
(setq *doc* (vla-get-activedocument (vlax-get-acad-object)))
)
(setvar "cmdecho" 0)
(vl-catch-all-apply 'eval (list (read FCTN)))
(setvar "cmdecho" 1)
(vla-endundomark *doc*)
(princ)
)
(defun XP-UNKOWNCMD-LengthenDE (NV /)
(vl-cmdf "._Lengthen" "DE" NV)
)
(defun XP-UNKOWNCMD-Chamfer (NV /)
(vl-cmdf "Chamfer" "D" NV NV "Chamfer")
)
请帮我看看。上面代码中的 XP-UNKOWNCMD-LengthenDE相当于(sam_fillet),(FCTN)相当于(samcom)。
麻烦将XP-UNKOWNCMD-LengthenDE中的vl-cmdf改用vla-sendcommand调试一下。
mercio
发表于 2021-9-16 10:14:42
大神代码,来学习一下。
690994
发表于 2021-9-16 13:09:09
andyzha 发表于 2021-9-15 21:58
能解决高版本CAD带小数点命令报错的问题吗?
没有用过高版本,不是很了解这方面问题
690994
发表于 2021-9-16 13:13:01
etoxp 发表于 2021-9-16 08:58
请帮我看看。上面代码中的 XP-UNKOWNCMD-LengthenDE相当于(sam_fillet),(FCTN)相当于(samcom)。
麻 ...
你的代码已经能运行,
将XP-UNKOWNCMD-LengthenDE中的vl-cmdf改用vla-sendcommand有什么特别用途?
etoxp
发表于 2021-9-16 19:18:27
690994 发表于 2021-9-16 13:13
你的代码已经能运行,
将XP-UNKOWNCMD-LengthenDE中的vl-cmdf改用vla-sendcommand有什么特别用途?
没有特别用途,只是奇怪为什么改成vla-sendcommand后为什么不能成功运行。
690994
发表于 2021-9-16 19:38:55
etoxp 发表于 2021-9-16 19:18
没有特别用途,只是奇怪为什么改成vla-sendcommand后为什么不能成功运行。
改成vla-sendcommand,最后运行的就是lengthen命令了
如果硬是要改成vla-sendcommand也行,
可以在它的后面再运行一个空的smartcommand转回来,就是有点闲得蛋疼:lol
页:
6
7
8
9
10
11
12
13
14
15
[16]
17