Boa tarde, pessoal! Eu tenho uma ideia e gostaria de verificar se é possível sua implementação. Suponha que eu tenho a seguinte situação:
- No AutoCAD eu tenho um bloco dinâmico com 3 visibilidades, que são nomeadas como A, B e C.
- Em cada visibilidade eu tenho um desenho diferente, aqui neste exemplo vamos considerar que na A eu tenho um quadrado, na B eu tenho um triângulo e na C um círculo.
- Eu tenho também uma tabela dentro do AutoCAD que está vinculada a uma planilha externa, então tudo que eu mudo na planilha externa vai atualizar dentro do AutoCAD.
- Dentro desta planilha/tabela, eu vou ter uma célula específica que vai servir de referencia para determinar qual dos desenhos do meu bloco dinamico eu devo apresentar.
- Por exemplo, nessa célula eu vou ter os números 1, 2 ou 3. Se tiver o número 1, significa que eu devo apresentar o quadrado (visibilidade A), se tiver o numero 2 devo apresentar o triângulo (visibilidade B) e se tiver o número 3 devo apresentar o círculo (visibilidade C).
- Atualmente, para fazer isso, eu preciso manualmente verificar qual é o numero que está na célula, clicar no bloco e alterar para a visibilidade que eu quero apresentar, o que demora bastante tempo.
Minha dúvida: é possível utilizar uma rotina LISP ou VBA (ou talvez um pouco de cada) para fazer com que esse processo seja automático? Ou seja, o código irá ler a célula de referência e automaticamente mudar a visibilidade do bloco.
Se for necessário adaptar o nome das visibilidades não há problema (se precisar por exemplo que a visibilidade corresponda exatamente com a informação da célula, e passar a chamar elas de "1", "2" e "3" ao invés de "A", "B" e "C". Preferencialmente eu prefiro não precisar fazer essa adaptação, mas se for necessário não há problema.
Desde já agradeço pela ajuda.
Solucionado! Ir para Solução.
Solucionado por hmsilva. Ir para Solução.
Solucionado por guilherme_meurer. Ir para Solução.
Solucionado por hmsilva. Ir para Solução.
Olá @guilherme_meurer é possivel sim.
Anexei uma rotina em lisp apenas como uma 'demo' e um ponto de partida...
Anexei também um dwg com uma tabela e um bloco dinâmico para teste.
Nesta 'demo' é pedido ao utilizador para efectuar a seleção, mas pode sempre ser feita sem interferencia do utilizador.
Espero que ajude
Henrique
Showw, funcionou mais ou menos como eu queria, precisei fazer algumas modificações no código para ele rodar mas a principio deu certo. Agora, vou fazer uma outra modificação, se você tiver alguma ideia pra me ajudar será muito bem vinda. Será o seguinte:
Eu tenho um DWG padrão, que tem todas essas visibilidades. Esse DWG vai ser copiado para uma outra pasta, onde será desenvolvido o projeto em especifico, que ai sim dependendo do projeto vai ser a visibilidade A, B ou C. Eu sempre preencho tudo na planilha, pois tem outras coisas além do DWG. Eu quero fazer o vinculo dessa LISP de uma forma que sempre que eu abrir o DWG ele altere automaticamente, sem que eu precise selecionar a tabela e o bloco novamente, sabe? pois a tabela e o bloco sempre serão o mesmo, somente o valor da celula que vai mudar. De preferencia, queria que essa alteração fosse automática sempre que mudar o valor da célula, não necessariamente só quando abrir o CAD. Alguma ideia de como deixar isso fixo? Pois essa automação até ajudou, mas se tiver que sempre selecionar a tabela e o bloco, o tempo para alterar tudo no final vai ficar praticamente o mesmo sabe?
Em anexo coloco a lisp "demo" atualizada e funcionando, já com as modificações que eu fiz.
é possivel utilizando um 'reactor' tipo 'vlr-commandended' para apanhar o comando '_DATALINKUPDATE' cada vez que se altera a folha do excel...
É necessário o nome do bloco para quando se fizer uma procura na coleção de blocos se fazer a alteração da visibilidade.
O 'reactor' poderá ser carregado sempre que o dwg é aberto se se colocar o codigo no 'acad.lsp' ou no 'acadoc.lsp'
Só existe uma tabela no dwg, correto?
Espero que ajude
Henrique
Sim, realmente só existe uma tabela no DWG. Eu nunca usei um 'reactor', conseguirias me ajudar de forma um pouco mais detalhada? Já ouvi falar e li algumas coisas, mas o máximo que usei foram as rotinas lisp diretamente, que é algo que to mais familiarizado. O nome do bloco atualmente é "teste" pois primeiro quero fazer tudo funcionar certinho, mas depois eu consigo ajudar os códigos com o nome correto quando eu realmente for usar, não será muito dificil.
@guilherme_meurer vou sair do escritorio agora.
Mais tarde, quando regressar, faço uma demo para o 'Reactor' e a 'Callback'
Henrique
@guilherme_meurer aqui vai uma 'demo' de um reactor...
o nome do comando é
reactordemo
quando se chama a primeira vez inicia o rector e da segunda vez para o reactor...
Espero que ajude
Henrique
@hmsilva amigo, funcionou perfeitamente, vou apenas modificar o código para funcionar de acordo com as funções que eu precisar, mas é exatamente o que eu estava esperando. Uma pequena dúvida: eu sei que pra deixar ele "fixo" eu preciso ajustar no CAD pra ele carregar sempre que abrir, isso sei fazer e já ta tranquilo. Mas para ativar o reactor em si, eu preciso ativar toda vez que abrir o arquivo ou se eu ativar uma vez e salvar ele já permanece ativo?
De qualquer forma, te agradeço muito pela ajuda!
@guilherme_meurer wrote:
@hmsilva amigo, funcionou perfeitamente, vou apenas modificar o código para funcionar de acordo com as funções que eu precisar, mas é exatamente o que eu estava esperando. Uma pequena dúvida: eu sei que pra deixar ele "fixo" eu preciso ajustar no CAD pra ele carregar sempre que abrir, isso sei fazer e já ta tranquilo. Mas para ativar o reactor em si, eu preciso ativar toda vez que abrir o arquivo ou se eu ativar uma vez e salvar ele já permanece ativo?
De qualquer forma, te agradeço muito pela ajuda!
@guilherme_meurer o reactor pode ser salvo no acad.lsp ou no acaddoc,lsp e assim carrega sempre que se abrir um arquivo.
não é necessário a parte do comando, apenas colocar no acad ou no acaddoc o conteudo do ficheiro anexo.
Espero que ajude
Henrique
@guilherme_meurer wrote:
Cara, perfeito, consegui aqui! Muito obrigado pela ajuda!
@guilherme_meurer fico feliz por ter podido ajudar!
Henrique
Olá @guilherme_meurer
Obrigada pelo retorno com a solução é muito importante porque poderá ajudar outros usuários com a mesma duvida.
Você achou uma postagem útil? Então fique à vontade para curtir essas postagens!
Sua pergunta obteve uma resposta que resolveu a duvida? Então clique no botão 'Aceitar Solução ' . 
Claudia Campos
Comunidade de Usuários Autodesk Português - Coordenadora
Não encontrou o que está procurando? Pergunte à comunidade ou compartilhe seu conhecimento.