明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: gbhsu

cmd+num 命令简称加任意数字组成智能命令[07.20]

    [复制链接]
发表于 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中的内容不变,就可以一直重复命令
发表于 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。
发表于 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,你方便的话可以将你的代码发出来,我看看能不能帮你改改
发表于 2021-9-15 21:58:16 | 显示全部楼层
690994 发表于 2021-9-15 18:02
你还没有明白你的问题,(sam_fillet 0.0 nil)就是一个子函数,能用任何lisp命令,包括vla-sendcommand,v ...

能解决高版本CAD带小数点命令报错的问题吗?
发表于 2021-9-16 08:58:54 | 显示全部楼层
690994 发表于 2021-9-15 18:02
你还没有明白你的问题,(sam_fillet 0.0 nil)就是一个子函数,能用任何lisp命令,包括vla-sendcommand,v ...

  1. (vl-load-com)
  2. (or *doc*
  3.     (setq *doc* (vla-get-ActiveDocument (vlax-get-acad-object)))
  4. )
  5. (or *unknownCommand*
  6.     (setq *unknownCommand*
  7.            (vlr-editor-reactor
  8.              nil
  9.              '((:vlr-unknownCommand . unknownCommand))
  10.            )
  11.     )
  12. )


  13. (defun unknownCommand (a b / CMD CMDLST CMDSTR FLAG I NV UNCMDSTR)
  14.   ;;---------------------------------------------------
  15.   (setq UNCmdStr (strcase (car b)))
  16.   (setq cmdLst (list "DE" "CH"))
  17.   (setq        flag T
  18.         i 0
  19.   )
  20.   ;;---------------------------------------------------
  21.   (while (and flag (< i (length cmdLst)))
  22.     (progn
  23.       (if (wcmatch UNCmdStr (strcat (nth i cmdLst) "*"))
  24.         (progn
  25.           (setq flag nil)
  26.           (setq cmd (nth i cmdLst))
  27.         )
  28.       )
  29.       (setq i (+ i 1))
  30.     )
  31.   )
  32.   ;;---------------------------------------------------
  33.   (if flag
  34.     (progn
  35.       (princ "\n UNKOWNCOMMAND:未找到对应的命令!")
  36.       (exit)
  37.     )
  38.     (progn      
  39.       ;;-------------------------------
  40.       (cond
  41.         ((= cmd "DE")
  42.          (progn
  43.            (setq NV (substr UNCmdStr (+ (strlen cmd) 1)))
  44.            (setq FCTN (strcat "(XP-UNKOWNCMD-LengthenDE "
  45.                               (vl-princ-to-string NV)
  46.                               ") "
  47.                       )
  48.            )
  49.          )
  50.         )
  51.       )
  52.       ;;-------------------------------
  53.       (cond
  54.         ((= cmd "CH")
  55.          (progn
  56.            (setq NV (substr UNCmdStr (+ (strlen cmd) 1)))
  57.            (setq FCTN (strcat "(XP-UNKOWNCMD-Chamfer "
  58.                               (vl-princ-to-string NV)
  59.                               ") "
  60.                       )
  61.            )
  62.          )
  63.         )
  64.       )
  65.       ;;-------------------------------
  66.       (vl-catch-all-apply
  67.         'vla-SendCommand
  68.         (list (vla-get-ActiveDocument (vlax-get-acad-object))
  69.               "SmartCommand "
  70.         )
  71.       )
  72.       ;;-------------------------------
  73.     )
  74.   )
  75.   ;;---------------------------------------------------
  76.   (princ)
  77. )

  78. (defun c:SmartCommand (/ *doc*)
  79.   (vla-startundomark
  80.     (setq *doc* (vla-get-activedocument (vlax-get-acad-object)))
  81.   )
  82.   (setvar "cmdecho" 0)
  83.   (vl-catch-all-apply 'eval (list (read FCTN)))
  84.   (setvar "cmdecho" 1)
  85.   (vla-endundomark *doc*)
  86.   (princ)
  87. )


  88. (defun XP-UNKOWNCMD-LengthenDE (NV /)
  89.   (vl-cmdf "._Lengthen" "DE" NV)
  90. )

  91. (defun XP-UNKOWNCMD-Chamfer (NV /)
  92.   (vl-cmdf "Chamfer" "D" NV NV "Chamfer")
  93. )


请帮我看看。上面代码中的 XP-UNKOWNCMD-LengthenDE相当于(sam_fillet),(FCTN)相当于(samcom)。
麻烦将XP-UNKOWNCMD-LengthenDE中的vl-cmdf改用vla-sendcommand调试一下。
发表于 2021-9-16 10:14:42 | 显示全部楼层
大神代码,来学习一下。
发表于 2021-9-16 13:09:09 | 显示全部楼层
andyzha 发表于 2021-9-15 21:58
能解决高版本CAD带小数点命令报错的问题吗?

没有用过高版本,不是很了解这方面问题
发表于 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有什么特别用途?
发表于 2021-9-16 19:18:27 | 显示全部楼层
690994 发表于 2021-9-16 13:13
你的代码已经能运行,
将XP-UNKOWNCMD-LengthenDE中的vl-cmdf改用vla-sendcommand有什么特别用途?

没有特别用途,只是奇怪为什么改成vla-sendcommand后为什么不能成功运行。
发表于 2021-9-16 19:38:55 | 显示全部楼层
etoxp 发表于 2021-9-16 19:18
没有特别用途,只是奇怪为什么改成vla-sendcommand后为什么不能成功运行。

改成vla-sendcommand,最后运行的就是lengthen命令了
如果硬是要改成vla-sendcommand也行,
可以在它的后面再运行一个空的smartcommand转回来,就是有点闲得蛋疼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 12:42 , Processed in 0.149522 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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