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 em AutoCAD carregam automaticamente o conteúdo de três arquivos definíveis pelo usuário: acad.lsp, acaddoc.lsp e o arquivo MNL que acompanha seu arquivo atual de personalização.

Por padrão, o arquivo acad.lsp é carregado somente uma vez, quando o programa é iniciado, enquanto o arquivo acaddoc.lsp é carregado com cada documento (ou desenho) individual. Isso permite associar o carregamento do arquivo acad.lsp à inicialização do aplicativo e o arquivo acaddoc.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 e acaddoc.lsp não são fornecidos com os produtos baseados em AutoCAD. É 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. Ao operar no modo seguro, o programa se restringe a carregar e executar arquivos que contenham código das localizações confiáveis, as quais são especificadas pela variável de sistema TRUSTEDPATHS.

Comando Autoloader

Ao carregar um arquivo AutoLISP, o comando de definições do arquivo puxará da memória, caso você utilize esses comandos. 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 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: 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 é carregado exceto se você especificar o nome de arquivo completo (incluindo a extensão do arquivo).

O arquivo ACAD.LSP

É possível criar um arquivo acad.lsp se você usar regularmente rotinas específicas do AutoLISP. Ao iniciar o AutoCAD, ele procura no caminho de pesquisa do arquivo de suporte por um arquivo acad.lsp. Se um arquivo acad.lsp for encontrado, ele é carregado na memória.

Como o arquivo acad.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 estarão disponíveis no primeiro desenho. Você provavelmente desejará mover as rotinas que devem estar disponíveis em todos os documentos do seu arquivo acad.lsp para o arquivo acaddoc.lsp.

A funcionalidade recomendada de acad.lsp e acaddoc.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 é carregado apenas uma vez: na inicialização do aplicativo. Se definido como 1, o arquivo acad.lsp será recarregado quando um novo desenho é criado ou um arquivo de desenho existente é aberto.

O arquivo acad.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, os arquivos mysessionapp1.lsp, databasesynch.lsp e drawingmanager.lsp serão carregados cada vez que você iniciar o programa.

(load "mysessionapp1")
(load "databasesynch")
(load "drawingmanager")
Nota: Não modifique o arquivo reservado acad<versão>.lsp. A Autodesk fornece o arquivoacad<versão>.lsp, que contém as funções definidas do AutoLISP, específicas da versão. Esse arquivo é carregado na memória imediatamente antes do arquivo acad.lsp ser carregado. <release> representa a versão do produto baseado no AutoCAD. Por exemplo, acad2015.lsp seria o arquivo carregado pelos produtos baseados no AutoCAD 2016.

O arquivo ACADDOC.LSP

O arquivo acaddoc.lsp foi projetado para ser associado a cada inicialização de documento (ou desenho). Esse arquivo é ú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 pesquisa no caminho de biblioteca por um arquivo acaddoc.lsp. Se ele encontrar um, carregará o arquivo na memória. O arquivo acaddoc.lsp sempre é carregado com cada desenho, independentemente das configurações de ACADLSPASDOC.

A maioria dos usuários terá um único arquivo acaddoc.lsp para todas as rotinas do AutoLISP baseadas em documentos. O programa procura um arquivo acaddoc.lsp na ordem definida pelo caminho de biblioteca; portanto, com esse recurso, é possível ter um arquivo acaddoc.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 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, os arquivos mydocumentapp1.lsp, build.lsp e counter.lsp sã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. A Autodesk fornece o arquivo acad<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 de o arquivo acaddoc.lsp ser carregado. <release> representa a versão do produto baseado no AutoCAD. Por exemplo, acad2015doc.lsp seria o arquivo carregado pelos produtos baseados no AutoCAD 2016.

Arquivos MNL e AutoLISP: Personalização de menu

Quando o programa 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 carrega na memória. Esta 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, o arquivo de personalização acad.cuix busca pelo arquivo acad.mnl que pode definir várias funções AutoLISP usadas pelos elementos da interface de usuário no arquivo de personalização. O arquivo MNL é carregado depois do arquivo acaddoc.lsp.

Nota: Se um arquivo de personalização é carregado com a função command do AutoLISP com sintaxe semelhante a (comando "menu" "newmenu") e o arquivo MNL associado não é carregado antes que a rotina inteira do AutoLISP seja executada.
(command "menu" "newmenu")

(princ "Newmenu utilities… Loaded.")
(Princ)

Nesse exemplo, a chamada para a função princ pode ser usada 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, você pode 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

Você pode definir uma função S::STARTUP para executar quaisquer operações de configuração necessárias depois que o desenho for inicializado.

Os arquivos de inicialização LISP (acad.lsp, acaddoc.lsp e MNL) são todos carregados na memória antes da inicialização completa do desenho. Normalmente, isso não significa um problema, exceto se desejar utilizar 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, acaddoc.lsp ou MNL, ela será chamada quando você inserir um novo desenho ou abrir um desenho existente. Portanto, você pode incluir uma definição de S::STARTUP no arquivo de inicialização AutoLISP para executar quaisquer operações de configuração.

Por exemplo, se desejar anular o comando HACHURA padrão adicionando uma mensagem e, em seguida, alternando para o comando HACHLIM, utilize um arquivo acaddoc.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, acaddoc.lsp ou MNL ou em 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 sua função de inicialização trabalha com outras funções.

(defun-q MYSTARTUP ( )

... sua função de inicialização...

)
(setq S::STARTUP (append S::STARTUP MYSTARTUP))

O código anterior anexa sua 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.