feargt 发表于 2022-7-5 18:51:02

命令计数

有人有一个lisp例程来计算autocad会话中使用的命令吗?我曾尝试使用google,但我发现一个例程在acad 2006之前可用,在Civ3d 2008上不可用。
 
提前感谢您提供的任何帮助。

ReMark 发表于 2022-7-5 18:56:38

为什么对这样的命令感兴趣?你能不能适应你发现的与软件一起工作的常规?

ASMI 发表于 2022-7-5 19:00:18

只是为了好玩。使用LookCount命令查看命令计数。它仅适用于标准AutoCAD命令。可以添加Lisp、arx、vba命令计数。
 
(defun CmdCount()
(vl-load-com)
(if(not cmdcount:reactor)
   (setq cmdcount:reactor
   (vlr-Command-Reactor nil
   '((:vlr-commandEnded . CmdCountReaction))
   )
cmdcount:count 0)
   ); end if
(princ)
); end of c:cmdcount

(defun CmdCountReaction(Reac Arg)
(setq cmdcount:count(1+ cmdcount:count))
(princ)
); end of CmdCount


(defun c:LookCount()
(if cmdcount:count
   (alert
   (strcat "\nCommands number = "
      (itoa cmdcount:count))
   ); end alert
   ); end if
(princ)
); end of LookCount

(CmdCount)

feargt 发表于 2022-7-5 19:02:48

你好
我正在寻找的目的是帮助我向老板提出一个关于如何提高生产力的建议。我想向他展示一下,只要投入少量的时间,我们就能提高生产力。这是我们目前非常缺乏的一件事,因此任何提案都必须代表我好好研究。

feargt 发表于 2022-7-5 19:04:02

嗨,阿斯米,
 
谢谢,但这个例程似乎只对使用的命令进行计数。我需要的东西,也将列出使用的命令和频率。

ReMark 发表于 2022-7-5 19:09:05

谢谢你把事情弄清楚一点。看起来您已经修改了原始请求,而不仅仅是计算。

ASMI 发表于 2022-7-5 19:12:30

 
好啊
 
(defun CmdSpy()
(vl-load-com)
(if(not cmdspy:cmdreactor)
   (setq cmdspy:cmdreactor
   (vlr-Command-Reactor nil
   '((:vlr-CommandEnded . CmdSpyReaction))
   ); end vlr-Command-Reactor
); end setq
   ); end if
(princ)
); end of CmdSpy

(CmdSpy)

(defun CmdSpyReaction(Reac Args / cLst)
(if
   (not
   (setq cLst(assoc(car Args)cmdspy:list)))
       (setq cmdspy:list(cons(cons(car Args) 1)cmdspy:list))
       (setq cmdspy:list(subst(cons(car Args)(1+(cdr cLst)))
                                     cLst cmdspy:list))
   ); end if
(princ)
); end of CmdSpyReaction

(defun c:lookcmdlist()
(if cmdspy:list
   (progn
   (setq cmdspy:list
(vl-sort cmdspy:list
           '(lambda(a b)(>(cdr a)(cdr b)))))
   (princ "\n====== Command Statistic ======\n")
   (foreach i cmdspy:list
(princ(strcat "\n "(car i)" "))
(repeat(- 25(strlen(car i)))(princ "."))
(princ(itoa(cdr i)))
); end foreach
   (princ "\n\n========== End Report =========")
   (textscr)
   ); end progn
    (princ "\nNo command history found ")
   ); end if
(princ)
); end of c:lookcmdlist
 
键入LookCmdList以运行。
 
Command: lookcmdlist

====== Command Statistic ======

CIRCLE ...................8
LINE .....................5
ELLIPSE ..................2
SETVAR ...................1

========== End Report =========

 
它只有一个会话报告,只有标准命令。是否要使用开始/结束日期/时间和用户名在图形中保存报告?

CmdrDuh 发表于 2022-7-5 19:13:16

这不是现成的,但可以很容易地写出来。困难的部分将是你打算如何衡量你所做的事情。如果是我,我不会计算命令数,而是编写一个程序来记录在特定图形上执行X个命令所需的时间。糟糕的是,你打算如何量化自动化将如何改善情况?你几乎需要在适当的位置实现自动化,然后与手动版本进行比较。

feargt 发表于 2022-7-5 19:18:28

谢谢你,阿斯米,
 
这正是我在mo中寻找的。
 
CmdrDuh,
 
谢谢你的建设性意见。计时在图形上执行x数量的命令需要多长时间对我来说目前是一个不现实的选择。我需要能够说多少更少的命令可以用来做相同的绘图,我需要能够把这作为一个百分比。很明显,不同的用户需要不同的时间来完成一个绘图,而反过来会产生不同的百分比。但这将是未来关于培训提案的考虑事项。
 
再次感谢

ASMI 发表于 2022-7-5 19:19:36

我认为需要添加总计数器:
 
(defun CmdSpy()
(vl-load-com)
(if(not cmdspy:cmdreactor)
   (setq cmdspy:cmdreactor
   (vlr-Command-Reactor nil
   '((:vlr-CommandEnded . CmdSpyReaction))
   ); end vlr-Command-Reactor
); end setq
   ); end if
(princ)
); end of CmdSpy

(CmdSpy)

(defun CmdSpyReaction(Reac Args / cLst)
(if
   (not
   (setq cLst(assoc(car Args)cmdspy:list)))
       (setq cmdspy:list(cons(cons(car Args) 1)cmdspy:list))
       (setq cmdspy:list(subst(cons(car Args)(1+(cdr cLst)))
                                     cLst cmdspy:list))
   ); end if
(princ)
); end of CmdSpyReaction

(defun c:lookcmdlist(/ cTot)
(if cmdspy:list
   (progn
   (setq cmdspy:list
(vl-sort cmdspy:list
           '(lambda(a b)(>(cdr a)(cdr b))))
    cTot(apply '+(mapcar 'cdr cmdspy:list))
    ); end setq
   (princ "\n====== Command Statistic ======\n")
   (foreach i cmdspy:list
(princ(strcat "\n "(car i)" "))
(repeat(- 26(strlen(car i)))(princ "."))
(princ " ")(princ(itoa(cdr i)))
); end foreach
   (princ(strcat "\n\n TOTAL: "(itoa cTot)))
   (princ "\n\n========== End Report =========")
   (textscr)
   ); end progn
    (princ "\nNo command history found ")
   ); end if
(princ)
); end of c:lookcmdlist
 

Command: lookcmdlist

====== Command Statistic ======

INSERT .................... 9
GRIP_STRETCH .............. 4
MOVE ...................... 3
SETVAR .................... 3
LINE ...................... 3
MIRROR .................... 2
CIRCLE .................... 2
COPY ...................... 1
BLOCK ..................... 1
ERASE ..................... 1
+DSETTINGS ................ 1

TOTAL: 30

========== End Report =========
页: [1] 2
查看完整版本: 命令计数