Sobre como carregar automaticamente e executar rotinas do AutoLISP

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.

Nota: Começando com os produtos baseados no AutoCAD 2014, os aplicativos personalizados devem funcionar em modo seguro; quando a variável de sistema SECURELOAD estiver definida como 1 ou 2. Quando operado no modo seguro, o produto se restringe a carregar e executar arquivos que contenham código de localizações confiáveis, as quais são especificadas pela variável de sistema TRUSTEDPATHS.

Comando Autoloader

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.

Nota: Os arquivos de inicialização do AutoLISP nomeados da mesma forma são carregados com base na marcação de horário Modificado; o arquivo LSP com a marcação de horário mais recente será carregado exceto se você especificar o nome de arquivo completo (incluindo a extensão do arquivo).

Arquivo ACAD.LSP ou ACADLT.LSP

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")
Nota: Não modifique os arquivos reservados acad<release>.lsp ou acadlt<release>.lsp A Autodesk fornece o arquivo acad<versão>.lsp ou acadlt<versão>.lsp, que contém as funções definidas do AutoLISP necessárias, específicas da versão. Esse arquivo é carregado na memória imediatamente antes do carregamento do arquivo acad.lsp ou acadlt.lsp. <versão> representa a versão do produto; por exemplo, acad2024.lsp seria o arquivo carregado pelos produtos baseados no AutoCAD e no AutoCAD 2024 e acadlt2024.lsp seria o arquivo carregado pelo AutoCAD LT 2024.

Arquivo ACADDOC.LSP ou ACADLTDOC.LSP

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")
Nota: Não modifique o arquivo reservado acad<versão>doc.lsp ou acadlt<versão>doc.lsp A Autodesk fornece o arquivo acad<versão>doc.lsp ou acadlt<versão>doc.lsp, que contém as funções definidas do AutoLISP específicas da versão. Esse arquivo é carregado na memória imediatamente antes do carregamento do arquivo acaddoc.lsp ou acadltdoc.lsp. <versão> representa a versão do produto; por exemplo, acad2024doc.lsp seria o arquivo carregado pelos produtos baseados no AutoCAD e no AutoCAD 2024 e acadlt2024doc.lsp seria o arquivo carregado pelo AutoCAD LT 2024.

Arquivos MNL e AutoLISP – Personalização de menus

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.

Nota: O AutoCAD LT não oferece suporte ao carregamento automático de arquivos MNL, mas os arquivos podem ser carregados usando a função LOAD do AutoLISP de outro arquivo LISP.

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.

Nota: Se um arquivo de personalização for carregado com a função command do AutoLISP com sintaxe semelhante a (comando “menu” “newmenu”), o arquivo MNL associado não será carregado antes que a rotina inteira do AutoLISP seja executada.
(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.

Função S::STARTUP: execução após a inicialização

É 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.

Nota: O AutoCAD LT não oferece suporte ao carregamento automático de arquivos MNL, mas os arquivos podem ser carregados usando a função LOAD do AutoLISP de outro arquivo LISP.

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.

Nota: Para ser anexada, a função S::STARTUP deve ser definida com a função defun-q em vez de defun.

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.