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
查看完整版本: cmd+num 命令简称加任意数字组成智能命令[07.20]