Dicas técnicas: Olha mãe! Nenhuma linha de comando.
Em um programa quanto mais eu uso, mais eu aprendo. Quando eu estava aprendendo a programar, o meu código era muito desorganizado e pouco versátil. Eu tinha várias funções com o mesmo propósito, mas o resultado desejado era ligeiramente diferente. Eu tenho aprendido bastante, algumas dicas úteis ao longo desses anos, e que eu gostaria de compartilhar com vocês. Vamos ver então a programação em AutoLISP nesse próximo nível.
Fazendo uma limpeza
AutoCAD é similar a sua casa – a melhor limpeza da sua casa é quanto menor o tempo gasto com ela. Lembre-se que limpar é muito importante. O AutoLISP é mais complacente do que outras linguagens de programação, mas você deve ser bem diligente com suas variáveis. Se você abrir qualquer coisa, certifique-se de fechá-la ou apagá-la. Nossos computadores estão ficando cada vez mais rápidos, mas os programas que escrevemos não precisam inchar nossas máquinas. Quando você usa SETQ, o AutoCAD irá manter isso na memória até que o AutoCAD seja fechado ou, melhor ainda, quando libera-lo da memória. Variáveis de pequeno porte não irão atrapalhar muito seu computador, mas é um bom hábito de limpá-los de qualquer maneira. Então, quando utilizar objetos maiores, você não deve se esquecer de limpá-los. Uma maneira fácil de limpar as suas variáveis é adicioná-las à lista de parâmetros, no comando:
(defun c:RunMe ( / Var1 Var2)
Aqui, estamos definindo uma função na linha de comando do AutoCAD, e mostrando que é preciso limpar as variáveis Var1 e Var2 da memória quando o comando for concluído com sucesso.
Eliminando a linha de comando
É fácil de usar o que estamos acostumados, mas devemos usar apenas como ponto de partida. Muitos autores de longa data e projetistas já sabem como funciona um comando. Se não, podemos rapidamente digitar o comando para ver os passos necessários. Então é muito fácil de copiar e colar na linha de comando e então usar em nossa rotina AutoLISP. Embora fácil, não é uma boa idéia criar uma função que pode ser usado em várias situações. Em vez disso, devemos usar as funções AutoLISP. Usando funções de linha de comando em um programa AutoLISP não é o ideal, é mais lento e limitado. Enquanto você pode encadear alguns comandos na linha de comando e usá-lo em LISP, esse tipo de codificação é mais adequado para a criação de scripts. Ele irá funcionar, mas não tão rápido, e não vai ser tão versátil. Você perderá alguma funcionalidade muito legal quando começar a adicionar chamadas de linha de comando ao seu programa.
Use Funções
Divida seu código em funções menores que você poderá usar em outros programas. Criando funções ajudará você em várias maneiras. Dividir o seu código para facilitar a leitura, permite uma fácil captura de erros, e lhe permite que o utilize várias vezes, até múltiplas vezes no mesmo programa ou em programas diferentes. Após trabalhar em várias indústrias de projeto, eu aprendi que se eu voltar a usar um monte de funções e código, em especial os pequenos. Pode ser mais rápido e usando menos linhas de código para alterar a cor de um objeto de texto, usando copiar a partir da linha de comando. No entanto, seu código será mais versátil, se você usar uma função em seu comando. Abaixo está uma função que irá alterar a cor de um objeto. Você fornece a função com o documento que você está procurando, o objeto para alterar, e a nova cor do objeto. Tendo o parâmetro documento que nos permite chamar esta função no comando que abre apenas a parte de banco de dados do desenho. Este poderia ser um desenho que não estaria necessariamente aberto no seu editor.
[media1]
O próximo comando chama a função de cima. Ter um verificador de erros para garantir que a nossa função será executado corretamente, é outra dica útil para evitar erros. Se você quiser apenas um número inteiro, use AutoLISP com a vantagem de usar GETINT. Usando essa função o usuário só pode entrar um número inteiro. No código a seguir, ao pedir uma cor só queremos inteiro, por isso usamos GETINT. Eu também coloquei tudo isso em um WHILE, o que impedirá o usuário de teclar ENTER e não fornecer um número inteiro. Na nossa seleção estabelecida, nos permite apenas linhas e polilinhas. Novamente, usamos uma verificação, com WHILE para garantir que o usuário selecione os objetos corretos. Depois de sabermos que o usuário ou cancelou o comando ou entrou com número inteiro e selecionou algumas linhas válidas, vamos continuar com o comando e executar a nossa função.
[media2]
Nós também podemos chamar essa função em outro comando e alterar todas as linhas e polilinhas no desenho.
[media3]
Com a função COLORLINE também podemos usá-lo em um reator. Um reator vai verificar o desenho aberto e quando algo acontece, o nosso reator é notificado e reagimos com base no que ele nos diz. Esse "algo" pode ser muitas coisas. Pode ser que um comando foi iniciado ou um objeto tenha sido apagado ou explodido. Reatores podem ser extremamente úteis quando se tenta manter os padrões de desenho e facilitar sua redação. Existem vários tipos de reatores disponíveis no Visual LISP.
Temos também a capacidade em AutoLISP para modificar desenhos sem abri-los na tela. Este processo é feito usando ObjectDBX. Um desenho de AutoCAD, em sua forma mais básica, é um banco de dados. Através do AutoLISP podemos acessar e modificar as informações no banco de dados. Há um notável aumento na velocidade quando se modifica desenhos usando ObjectDBX. A principal razão para o aumento da velocidade é que não há elementos gráficos do computador para processar. Existem algumas limitações no ObjectDBX, você não pode usar funções de linha de comando ou fazer qualquer coisa que exija interface com o AutoCAD. Por exemplo, você não pode fazer um usuário selecionar manualmente as linhas que você quer mudar, mas você pode ter isso no programa, para selecionar e alterar essas linhas para você. Ser capaz de modificar centenas de desenhos ao mesmo tempo é ótimo, mas você deve sempre testar seu código em alguns arquivos exemplo em primeiro lugar.
Conclusão
Esperemos que estas dicas ajudem você a criar comandos robustos que serão construídos sobre uma variedade de funções, funções versáteis o suficiente para lidar com diversas situações e usos.
Traduzido por Ladimir Abdala / Brasil