Reactor e tempo de edição

Hoje vou postar uma lisp que monitora o open/save do seu desenho, bem legal para quem precisa controlar o tempo de edição do dwg, mas não confia no timer do cad, até porque pouca gente lembra de zerar ele... aí está:

(vl-load-com
(
defun log_me_SAVE (rea par / TMP H
  (
setq tmp (open (strcat (getvar "dwgprefix") "open_save_log.txt") "a"
       H   (menucmd "M=$(edtime,$(getvar,date),DD/M/YYYY hh:mm:ss)")) 
  (
write-line  (STRCAT 
               "OPEN\t" log_me_open_date "\tSAVE\t" 
               
               "\t" (getvar "loginname") "\t" 
               (getvar "dwgname"
               ) 

    TMP
  (
SETQ log_me_open_date H) ;RESETA A HORA DE ABERTURA PARA A HORA DO SAVE 
  

(
DEFUN log_me_OPEN (/ TMP
  (
setq log_me_open_date (menucmd "M=$(edtime,$(getvar,date),DD/M/YYYY hh:mm:ss)"
  )) 

(
vlr-dwg-reactor (getvar "loginname" ) '((:vlr-saveComplete . log_me_SAVE))) 

(
log_me_OPEN
(
princ)



coloque-a na startup suite do cad, ou cole na acaddoc.lsp da pasta support. Pronto, experimente abrir um desenho qualquer, e clique save... aparecerá um arquivo de texto na pasta onde este desenho estava, listando a hora de abertura, do save e o nome do usuário...

É um uso interessante do reactor

vlr-dwg-reactor é uma função que cria um monitor de eventos associado ao desenho, sua sintaxe é a seguinte:
(vlr-dwg-reactor dados  '((evento1 . função1)))
onde "evento1" pode ser aquele :vlr-saveComplete qe aparece na minha rotina, ou qualquer um daqueles que estão no help, dependendo do evento que vc quer monitorar, no caso o "savecomplete"

"função1" é o nome da função a ser chamada quando o evento é disparado, ela deve existir, estar carregada e aceitar os argumentos que serão passadas a ela

para saber que argumentos são esses: o help diz o numero de argumentos para cada evento, numa tabela, veja lá

no geral é isso:
"reactor", "parameter"
mas pra ter certeza, inicie a função que o numero de variaveis que o evento pede, e usa o prompt para mostrar essas variaveis, por exemplo:
( função1 ( var1 var2 
(
 prompt ( strcat ( vl-princ-to-string var1 )  "\n" ( vl-princ-to-string var2 ) ) 
)

aí na linha de comando será mostrado o que foi passado para a função

o "dados" são dados que você queira passar para a "função1", voce os obtem com
( vlr-data var1 )
var1 é sempre ( ou quase ) o objeto "reactor" retornado pela função ( vlr-*-reactor ), onde esse asterisco pode ser dwg, editor, command, etc...

Nenhum comentário:

Postar um comentário