Carregar rotinas do AutoLISP na inicialização e executar comandos ou funções em horas específicas durante uma sessão de desenho.
Os produtos baseados no AutoCAD e no AutoCAD LT carregam automaticamente o conteúdo de três arquivos definíveis pelo usuário:
Arquivo definível pelo usuário | Windows | Mac OS | ||
---|---|---|---|---|
AutoCAD | AutoCAD LT | AutoCAD | AutoCAD LT | |
acad.lsp | ✓ | -- | ✓ | -- |
acaddoc.lsp | ✓ | -- | ✓ | -- |
acadlt.lsp | -- | ✓ | -- | -- |
acadltdoc.lsp | -- | ✓ | -- | -- |
Arquivo MNL acompanhado pelo arquivo de personalização atual | ✓ | -- | ✓ | -- |
Por padrão, o arquivo acad.lsp ou acadlt.lsp é carregado somente uma vez, quando o produto é iniciado, enquanto o arquivo acaddoc.lsp ou acadltdoc.lsp é carregado com cada documento individual (ou desenho). Isso permite associar o carregamento do arquivo acad.lsp ou acadlt.lsp à inicialização do aplicativo e o arquivo acaddoc.lsp ou acadltdoc.lsp à inicialização do documento (ou desenho). É possível modificar o método padrão de carregamento dos arquivos de inicialização, alterando a configuração da variável de sistema ACADLSPASDOC.
Se um desses arquivos definir uma função de tipo especial S::STARTUP, essa rotina será executada imediatamente após a inicialização completa do desenho. Como alternativa, o comando CARRAPLIC fornece uma opção Conjunto de inicialização que carrega os aplicativos especificados sem precisar editar os arquivos.
Os arquivos de inicialização acad.lsp ou acadlt.lsp e acaddoc.lsp ou acadltdoc.lsp não são fornecidos com o produto. É o usuário que deve criar e manter esses arquivos.
Durante o carregamento de um arquivo AutoLISP, as definições de comandos no arquivo consumirão memória, independentemente de esses comandos serem usados ou não. A função autoload do AutoLISP torna um comando disponível sem carregar a rotina inteira na memória. Adicionar o seguinte código ao arquivo acaddoc.lsp ou acadltdoc.lsp carrega automaticamente os comandos CMD1, CMD2 e CMD3 do arquivo cmds.lsp e o comando NEWCMD do arquivo newcmd.lsp.
(autoload "CMDS" '("CMD1" "CMD2" "CMD3")) (autoload "NEWCMD" '("NEWCMD"))
Na primeira vez em que você insere um comando carregado automaticamente no prompt de comando, o AutoLISP carrega a definição inteira do comando do arquivo associado. O AutoLISP também fornece uma função autoarxload para aplicativos ObjectARX.
Será possível criar um arquivo acad.lsp ou acadlt.lsp se você usar regularmente rotinas específicas do AutoLISP. Durante o início do AutoCAD, ele procura no caminho de pesquisa do arquivo de suporte um arquivo acad.lsp ou acadlt.lsp. Se um arquivo acad.lsp ou acadlt.lsp for encontrado, ele será carregado na memória.
Como o arquivo acad.lsp ou acadlt.lsp deve ser usado para rotinas de inicialização de aplicativos específicos, todas as funções e variáveis definidas no arquivo acad.lsp ou acadlt.lsp só estarão disponíveis no primeiro desenho. É conveniente mover as rotinas que devem estar disponíveis em todos os documentos do arquivo acad.lsp ou acadlt.lsp para o arquivo acaddoc.lsp ou acadltdoc.lsp.
A funcionalidade recomendada de acad.lsp ou acadlt.lsp e acaddoc.lsp ou acadltdoc.lsp pode ser sobrescrita pela variável de sistema ACADLSPASDOC. Se a variável de sistema ACADLSPASDOC estiver configurada como 0 (a configuração padrão), o arquivo acad.lsp ou acadlt.lsp será carregado apenas uma vez: na inicialização do aplicativo. Se estiver definida como 1, o arquivo acad.lsp ou acadlt.lsp será recarregado quando um novo desenho for criado ou um arquivo de desenho existente for aberto.
O arquivo acad.lsp ou acadlt.lsp pode conter o código do AutoLISP para uma ou mais rotinas ou apenas uma série de chamadas de função load. O último método é o preferido, pois a modificação é mais fácil. Se você salvar o seguinte código como um arquivo acad.lsp ou acadlt.lsp, os arquivos mysessionapp1.lsp, databasesynch.lsp e drawingmanager.lsp serão carregados sempre que o produto for iniciado.
(load "mysessionapp1") (load "databasesynch") (load "drawingmanager")
O arquivo acaddoc.lsp ou acadltdoc.lsp foi projetado para ser associado a cada inicialização do documento (ou desenho). Esse arquivo será útil se você desejar carregar um biblioteca de rotina AutoLISP para que ela esteja disponível sempre que iniciar um novo desenho (ou abrir um desenho existente).
Sempre que um desenho é aberto, o AutoCAD procura no caminho de biblioteca um arquivo acaddoc.lsp ou acadltdoc.lsp. Se ele encontrar um, carregará o arquivo na memória. O arquivo acaddoc.lsp ou acadltdoc.lsp sempre é carregado com cada desenho, independentemente das configurações de ACADLSPASDOC.
A maioria dos usuários terá um único arquivo acaddoc.lsp ou acadltdoc.lsp para todas as rotinas do AutoLISP baseadas em documentos. O programa procura um arquivo acaddoc.lsp ou acadltdoc.lsp na ordem definida pelo caminho de biblioteca; portanto, com esse recurso, é possível ter um arquivo acaddoc.lsp ou acadltdoc.lsp diferente em cada diretório de desenho, que carrega rotinas específicas do AutoLISP para determinados tipos de desenhos ou trabalhos.
O arquivo acaddoc.lsp ou acadltdoc.lsp pode conter o código do AutoLISP para uma ou mais rotinas ou apenas uma série de chamadas de função load. O último método é o preferido, pois a modificação é mais fácil. Se você salvar o seguinte código como um arquivo acaddoc.lsp ou acadltdoc.lsp, os arquivos mydocumentapp1.lsp, build.lsp e counter.lsp serão carregados sempre que um novo documento for aberto.
(load "mydocumentapp1") (load "build") (load "counter")
Quando o produto carrega um arquivo de personalização (CUI/CUIx), ele procura um arquivo MNL com um nome de arquivo correspondente. Se encontrar o arquivo, ele o carregará na memória. Essa função garante que as funções do AutoLISP necessárias para uma operação adequada de elementos da interface do usuário sejam carregadas.
Por exemplo, se o produto carregar um arquivo de personalização denominado custom.cuix, ele procurará um arquivo denominado custom.mnl que possa definir várias funções do AutoLISP usadas por elementos da interface do usuário no arquivo de personalização. O arquivo MNL é carregado depois do arquivo acaddoc.lsp.
(command "menu" "newmenu") (princ "Newmenu utilities… Loaded.") (Princ)
Nesse exemplo, é possível usar a chamada para a função princ para exibir mensagens de status. O primeiro uso de princ exibe o seguinte no prompt de comando:
Newmenu utilities… Loaded.
A segunda chamada de princ sai da função do AutoLISP. Sem a segunda chamada para princ, a mensagem seria exibida duas vezes. Como mencionado anteriormente, é possível incluir o argumento onfailure com chamadas de função load como um cuidado adicional.
É possível definir uma função S::STARTUP para executar as operações de configuração necessárias depois que o desenho for inicializado.
Os arquivos de inicialização LISP (acad.lsp ou acadlt.lsp e acaddoc.lsp ou acadltdoc.lsp) são todos carregados na memória junto com os arquivos MNL carregados automaticamente antes que o desenho seja completamente inicializado. Normalmente, isso não significa um problema, exceto se desejar usar a função command, que pode não funcionar depois da inicialização do desenho.
Se a função S::STARTUP definida pelo usuário for incluída em um arquivo acad.lsp ou acadlt.lsp, acaddoc.lsp ou acadltdoc.lsp ou MNL, ela será chamada quando você inserir um novo desenho ou abrir um desenho existente. Portanto, é possível incluir uma definição de S::STARTUP no arquivo de inicialização AutoLISP para executar as operações de configuração.
Por exemplo, se você desejar anular o comando HACHURA padrão adicionando uma mensagem e, em seguida, alternando para o comando HACHLIM, use um arquivo acaddoc.lsp ou acadltdoc.lsp que contém o seguinte:
(defun C:HATCH ( ) (alert "Using the BHATCH command!") (princ "\nEnter OLDHATCH to get to real HATCH command.\n") (command "BHATCH") (princ) ) (defun C:OLDHATCH ( ) (command ".HATCH") (princ) ) (defun-q S::STARTUP ( ) (command "undefine" "hatch") (princ "\nRedefined HATCH to BHATCH!\n") )
Antes da inicialização do desenho, novas definições para HATCH e OLDHATCH são definidas com a função defun. Depois da inicialização do desenho, a função S::STARTUP é chamada e a definição padrão de HATCH é indefinida.
Como uma função S::STARTUP pode ser definida em vários locais (um arquivo acad.lsp ou acadlt.lsp, acaddoc.lsp ou acadltdoc.lsp ou MNL ou qualquer outro arquivo do AutoLISP carregado de um desses arquivos), é possível sobrescrever a função S::STARTUP definida anteriormente.
O exemplo a seguir mostra um método para garantir que a função de inicialização funciona com as outras funções.
(defun-q MYSTARTUP ( )
... a função de inicialização...
) (setq S::STARTUP (append S::STARTUP MYSTARTUP))
O código anterior anexa a função de inicialização à função S::STARTUP existente e, em seguida, redefine a função S::STARTUP para incluir o código de inicialização. Isso funciona adequadamente independente da existência anterior de uma função S::STARTUP.