Reactor e Xdata; Coisas de doido

Por estes dias me perguntaram como usar reactors. Bem, não é complicado, mas o help não ajuda muito... enfim... Considere o exemplo abaixo:

;nome da xdata
(setq xdata:nome "TESTEXDATAREACTOR")

;carrega funções vl*
(vl-load-com)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;subrotina para adicionar xdata na entidade
;ent -> ename, por exemplo: <Entity name: 7ffff4104e0>
;xdappname -> string, nome da xdada
;xdata elista da xdata, formato:
;((ExtendDataDxfCode . Valor) ... (ExtendDataDxfCode . Valor))
(defun xdata->put  (ent xdappname xdata / elist)
  ;garanta que o nome da xdata esta no banco de dados do cad
  (regapp xdappname)
  

  ;adiciona a xdata no elist da entidade
  (setq elist (entget ent)
    elist (cons (list -3 (cons xdappname xdata)) elist))

  ;atualiza a entidade
  (entmod elist)
  (
entupd ent)
  )


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;reactor para ação da linha sendo modificada
;note que este reactor não causa modificações na LINHA, apenas no texto
;se fazemos um reactor causar modificações em algo que dispara reactors,
;temos de desabilitar eles antes de modificar
;parametros:
;linha, é o objeto que notificou o reactor, no caso a linha
;rea, é o ponteiro para o objeto do reactor
;par, são parâmetros adicionais que podem ser passados ao reactor
;na hora que o criamos, no caso, não passamos nenhum dado extra
;então não usamos o seu valor, que será nil
(defun reactor->modified (linha rea par / params texto)
  ;obter os dados do reactor. note que não seria necessario
  ;pois poderiamos encontrar o texto pelo xdata.
  ;no caso é só para mostrar o uso da função vlr-data
  ;para obter o texto pela xdata, veja a subrotina reactors->aciona
  (setq params (vlr-data rea)
    texto  (car params))

  ;atualizar o conteudo do texto:
  (vla-put-textstring
    texto
    (strcat "l=" (rtos (vla-get-length linha) 2 2)))

  (
vla-put-insertionpoint texto (vla-get-startpoint linha))
  )


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;subrotina para "ligar" os reators para as linhas já desenhadas
;em um desenho com o nosso novo comando "teste"
(defun reactors->aciona (/ ss ent linha xdata texto)
  ;seleção das linhas que tem a nossa xdata
  (setq ss (ssget "X" (list
            '(0 . "LINE")
            (
list -3 (list xdata:nome)))))

  ;se ela existir, processa as linhas
  (if ss
    (repeat (sslength ss)

      ;pega a primeira linha
      (setq ent   (ssname ss 0) ;ename
        linha (vlax-ename->vla-object ent) ;ename para vla
        xdata (assoc -3 (entget ent (list xdata:nome))) ;xdata da linha
        ;agora, pega o handle, que é string, acha o ename e obtem o vla
        texto (vlax-ename->vla-object (handent (cdr (cadadr xdata))))
        )



      ;cria o reactor para a linha
      (vlr-object-reactor
          (list linha) ;objeto modificado que notifica o reactor
          (list texto) ;parametros a serem passados
          '((:vlr-modified . reactor->modified)))

      ;tira a linha da seleção e reinicia o looping
      (ssdel ent ss)
      )
    )

  ;perfumaria:
  (princ "\nReactors criados")
  )




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;função principal
(defun c:teste (/ linha texto pa pb thisdrawing model xdata)

  ;desenha uma lina e um texto no modelspace:
  (setq pa          (getpoint "\nPa")
    pb          (getpoint pa "\nPb")
    

    ;obtem o ponteiro para o modelspace
    thisdrawing (vla-get-activedocument(vlax-get-acad-object))
    model       (vla-get-modelspace thisdrawing)

    ;cria uma linha no model
    linha       (vla-addline model
              (vlax-3d-point pa)
              (
vlax-3d-point pb))

    ;cria um texto no model
    texto       (vla-addtext model
              (strcat "l=" (rtos (vla-get-length linha) 2 2))
              (
vlax-3d-point pa)
              4)
     )


  ;vincula a linha ao texto usando um xdata
  ;1005 é o dxfcode de xdata para "handle" da entidade
  (xdata->put
    (vlax-vla-object->ename linha) ;ename da linha
    xdata:nome ;nome da xdata
    (list (cons 1005 (vla-get-handle texto))) ;a xdata propriamente dita
    )
  


  ;cria um reactor para linha, associando ao evento de modificar a linha
  (vlr-object-reactor
          (list linha) ;objeto modificado que notifica o reactor
          (list texto) ;parametros a serem passados
          '((:vlr-modified . reactor->modified) ;evento a ser chamado ao disparar o reactor
        ))

  ;perfumaria
  (princ "\nFeito")
  )



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;sempre que a lisp for carregada com APPLOAD,
;será acionada a função 'reactors->aciona' para "ligar" os reactors nas linhas criadas
;com o comando que criamos
(reactors->aciona)


O exemplo pede dois pontos, por ele faz passar uma linha e cria um texto no inicio da linha.

Na linha, cria um vinculo com o texto atravez de xdata.

Por fim, cria um reactor, que é um evento. Este evento modifica o conteúdo e a posição do texto conforme modificamos a linha. Simples, não?

O evento que você informa no reactor é monitorado pelo cad e quando acontece o evento, o reactor dispara uma função que informamos.

Igual aos eventos do VBA ou VB. Claro que o exemplo é bem simples, ainda falta monitorar o que acontece se apagamos o texto por exemplo.

O reactor não teria o que atualizar e um erro seria mostrado.

Outro exemplo: Se copiássemos a linha, o texto também poderia ser copiado.....

Outro exemplo: Se editássemos o texto, o reactor não faria nada até modificar a linha.
Neste caso, poderíamos monitorar edições no texto.

Se o fizermos, temos de ter em mente que se precisar modificar o texto, o reactor que o monitora precisa ser desligado antes de editar ele....

Para esta situação, procure por reactor no meu blog. Tem algumas rotinas bem legais!!!

Autodesk University - Promoção!!!

Olá pessoal!!!

Precisamos comemorar!!! Este ano, serei palestrante no Autodesk University!!!




Para comemorar, o site TBN2NET está com uma super promoção!!!


Compre uma licença e leve duas!!! Isso mesmo, DUAS LICENÇAS PELO PREÇO DE UMA!!!

São diversos plugins para AutoCAD e Civil 3D que com certeza vão ser de grande ajuda em seus projetos de engenharia!!!

Promoção válida até durarem os estoques, ehehehe!!!, brincadeira, válido até 15-10-2014

Parcerias

Depois do post anterior, se alguém ainda ler este blog, só posso dizer: Que Bom!!!
Mas desta vez vamos falar de algo mais proveitoso a todos: Parcerias.

Um tempo atrás postei na rede social que queria fazer parcerias com pessoas que possuam uma página na internet, onde trocaríamos banners com links para páginas dos parceiros.

Bem, já consegui alguns, veja na coluna da esquerda!!

Veja:
Então se você tem uma página e quer participar, entre em contato para trocarmos nossos banners e links!!! Todos ganhamos com isso!!!

Gatinhos e salada de batatas

A alguns anos atrás, comecei a escrever este blog... 
 
Mais porque eu queria dividir alguns conhecimentos que tinha de autolisp e tal... 
 
Depois veio o Civil 3D e a medida que eu aprendia algo novo foram saindo os tutoriais que estão aí na página.

Um dia li sobre o adsense do oráculo e até criei uma conta nele.... Consegui 34 doletas!!! Quer dizer, o google disse que eu consegui, mas nunca recebi, violei (ui!!) alguma regra, sei lá.

Mas o conteúdo foi crescendo, as visitas crescendo....

Apareci no scribd, no 4shared e nuns dvds de tutoriais que rolam por aí... Claro, não pediram autorização, tão pouco recebi qualquer gratificação por isso....

Tinha o orkut, onde sempre dava para postar um linkezinho, mas acabou por virar só piadinha e fazendinha...

Depois veio o face... ah o face....


Você cria o conteúdo, põe um botão pro cara "curtir" e tals... tipo, você promove o face na sua página e ganha.... adivinha, nada!!!

Se tu falar que ganha "visibilidade", te digo isso: o caralho!!! (sim, eu posso dizer isso aqui)

Pense bem, você curtiu, 2 dos seus 1500 "amigos" do face viram que você curtiu.... Se EU pagar pro zucker uns 20 obamas, talvez mais umas 50 pessoas vejam que você curtiu...

Bem, aí aplique a taxa de retorno desse tipo de publicidade, que é de 0,1 %... e pronto!!! Talvez, se 10 pessoas curtirem, no final essa publicidade tenha me rendido 1 visitante.... que clicou sem querer...

E o "joinha" está lá, no final do post...


é a mesma coisa, só muda o dono....

Você cria o conteúdo, mas para que alguém veja, tem que colocar nas redes "sociais". Sociais? Onde?

O que tem de social ficar clicando a porcaria da tela de um telefone pra ver aqueles memes????

O guri na cadeira de rodas "rumo a um milhão de curtidas" não curtiu a minha página. Não fui "+1" no plus pra ele....

Coloque uns peitinhos na página e quem sabe você atrai uns caras... e só...

Hoje, olhando o número de visitas da página e olhando as origens, dá pra eu ter ideia do tipo de público que atraí....


O analytics do google é cruel mesmo...
Sério!!!, tenho mais visitas vindos dos forums da autodesk do que a soma do 3 ao 7 da lista!!!!
E olha que eu sempre coloco link pra minha página no face e g+!!!

Não farei mais isso. Vocês não querem isso, querem aquela piadinha nova sobre 7x1.

O que, tu ainda tá lendo isso?

Então tá...  talvez você concorde que o único que ganha algo com os posts que estão aqui é o google, que indexou tudo, relacionou com os anúncios dele e mostrou nas buscas... e você clica pra vir até aqui, descobrir "comofas" alguma coisa... ou só pra criticar.... tinha um cara que fazia bastante isso... 

O link pra você doar uns caraminguás pelo paypal está aí ao lado, a pelo menos 1 ano... eu já ganhei, deixa eu ver aqui... ZERO.

Hoje, lendo notícias, vi que um cara ganhou quase 50 mil obamas no kickstarter pra fazer... uma salada de batatas!!!!!

É!!!! 

Salada de batatas!!!

E eu aqui, perdendo meu tempo pra escrever um tutorial ou outro!!!

Sim, as vezes vale a pena você ouvir: "valeu cara, comecei a mexer no civil lendo seus tutoriais".  
Mas é só... a cerveja não se paga sozinha!!
 
Até tentei o adwords... sério!! gaste uns cobres PAGANDO anuncio no google e tive, olha só, um aumento de uns 10 cliques pra minha página.....

PAGUEI pro face veicular um "evento" para promover minha página... hehehe chega a ser piada.... O evento rendeu 1600 convidados e 70 "confirmados". Entenda confirmado como: só cliquei, não quer dizer que participarei de qualquer forma. Mas o que me chateou nem foi isso. Foi o fato de ninguem participar... Ninguém quis o prêmio...., sem problemas... Talvez preferiram ver outro gatinho, gina, jesus, prozac, ou qualquer outro comédia.....

Na visita 400 mil, dei umas licenças se não me engano, em troca do "print" da tela onde aparecesse o número...

Bem, coloquei no face um anuncio falando que daria uma licença pro visitante 700 mil.

Mais uma vez ninguém participou... Até tentei localizar o maldito anúncio no face, mas só vi as piadinhas mais repetidas da copa....

Bem... nem sei porque ainda mantenho isso... o lucro não justifica... talvez seja por isso que as postagens caíram tanto e as que tem, são questionáveis.... 

Então continuem a encher os bolsos do zucker.

Ah, já que é isso que vocês querem, toma:




Ah, me façam o favor de curtir. Ou não.