Sobre a Compatibilidade com o AutoLISP

Os programas AutoLISP normalmente requerem muito poucas alterações para serem executados na versão mais recente.

No entanto, um programa AutoLISP pode não funcionar corretamente na versão mais recente, porque uma função do AutoLISP, uma variável de sistema ou um comando do produto baseado no AutoCAD foi alterado ou reprovado.

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 está definida como 1 ou 2. Ao operar em modo seguro, o produto baseado no AutoCAD se restringe a carregar e executar arquivos que contenham códigos de localizações confiáveis, as quais são especificadas pela variável de sistema TRUSTEDPATHS. Para obter mais informações, consulte “Sobre a segurança e proteção contra vírus”.

Informações gerais

Comandos e variáveis de sistema obsoletos

Analise seus programas personalizados quanto a comandos e variáveis de sistema que foram designados como obsoletos. Em alguns casos, um comando ou variável de sistema obsoleto ainda pode ser usado por seus programas personalizados, mesmo que não possa ser inserido diretamente no prompt do comando ou acessado a partir da interface do usuário.

Nota: Mesmo que um comando ou variável de sistema obsoleto ainda funcione com um programa personalizado, não há garantia de que ele continuará funcionando em uma futura versão do produto. Recomenda-se substituir seus programas personalizados para evitar o uso de qualquer comando ou variável de sistema obsoleto.

As seguintes técnicas podem ser úteis ao tentar usar um comando ou variável de sistema obsoleto em um programa personalizado:

  • Adicione um nome de comando com um ponto. Por exemplo, .BLIPMODE permite o uso do comando BLIPMODE.
  • Evite executar uma variável de sistema obsoleta com a função COMMAND, que pode resultar em uma mensagem de erro Comando desconhecido; em vez disso, use as funções GETVAR e SETVAR. Por exemplo, (getvar “BLIPMODE”) retorna o valor atual da variável de sistema BLIPMODE.
Nota: Os comandos e variáveis de sistema que foram removidos do produto podem ser restaurados usando as técnicas mencionadas anteriormente.

Produtos baseados no AutoCAD 2025 e versões posteriores

Os programas do AutoLISP personalizados que usam uma ou mais funções das bibliotecas do Utilitário Express Tools agora devem fazer uma chamada para a função acet-load-expresstools antes de usar qualquer função definida como parte dessas bibliotecas. A função acet-load-expresstools inicializa as funções do Utilitário Express Tools.

Produtos baseados no AutoCAD 2021 e versões posteriores

Suporte ao Unicode

O ambiente do AutoLISP foi atualizado para suportar caracteres Unicode que afetam as funções que são usadas para manipular ou que retornam valores de sequência. Para obter mais informações sobre quais funções foram atualizadas para oferecer suporte ao Unicode, consulte O que há de novo ou o que mudou no AutoLISP.

Com base nas funções usadas nos programas, as alterações podem ser necessárias para que eles lidem com caracteres Unicode. Por exemplo, o valor de retorno da função ASCII agora pode ser maior do que 255 ou ser diferente quando um caractere Unicode é passado para a função em comparação com versões anteriores. É possível usar a variável de sistema LISPSYS para identificar e controlar o ambiente padrão do AutoLISP que é carregado no programa; 0 e 2 = suporte a MBCS (ambiente herdado) e 1 = suporte a Unicode.

O seguinte fragmento de código mostra como determinar qual ambiente do AutoLISP está carregado no programa e como controlar a execução do código com base no ambiente carregado:

(if (= (getvar "LISPSYS") 1)
  (alert (strcat 
             "Unicode support enabled"
             "\n(ASCII \"€\") returns 8364"
         )
  )
  (alert (strcat 
             "MBCS (Legacy) support enabled"
             "\n(ASCII \"€\") returns 128"
         )
  )
)
Nota: Ao compilar arquivos de origem (LSP) do AutoLISP com o Ambiente de desenvolvimento integrado do Visual LISP (VL IDE) ou o comando FAZERLISPAPP, o valor atual da variável de sistema LISPSYS controla o formato no qual os arquivos são compilados. Não é possível carregar arquivos compilados com a variável de sistema LISPSYS definida com um valor de 1, formato Unicode, no AutoCAD 2020 nem em versões anteriores. Defina LISPSYS com um valor de 0 ou 2 antes de compilar os arquivos para garantir que eles também possam ser carregados em versões anteriores, mas fazer isso limitará o suporte ao formato Unicode.

Produtos baseados no AutoCAD 2020 e versões posteriores

Comando INSERIR

O comando INSERIR agora exibe a paleta Blocos, enquanto o novo comando INSERCAOCLASSICA exibe a caixa de diálogo Inserir “herdada”. Se o programa AutoLISP se basear no uso da caixa de diálogo Inserir, você precisará alterar o programa existente. Anteriormente, você podia usar as instruções do AutoLISP a seguir para exibir a caixa de diálogo Inserir:

(initdia)
(command "insert")

Para continuar a exibir a caixa de diálogo Inserir com os programas AutoLISP, você precisará alterar os programas existentes para usar uma destas abordagens:

  • (initcommandversion 2)
    (initdia)
    (command "insert")
  • (command "classicinsert")

Produtos baseados no AutoCAD 2019 e versões posteriores

Variável de sistema LOCALE

A variável de sistema LOCALE agora retorna um código que contém uma abreviação de duas ou mais letras que representa o idioma atual em vez de uma abreviação de três letras que representa o idioma e o subidioma. A abreviação de duas ou mais letras é baseada na função GetLocaleInfo do Windows usando a constante LOCALE_SISO639LANGNAME.

Antes dos produtos baseados no AutoCAD 2019, o código era uma abreviação de três letras retornada pela função GetLocaleInfo do Windows usando a constante LOCALE_SABBREVLANGNAME. A abreviação de três letras foi baseada em duas informações; uma abreviação de duas letras junto com uma terceira letra que indicava subidioma. Por exemplo, ENU representou uma combinação de língua inglesa (EN) e Estados Unidos (U) como o subidioma.

Produtos baseados no AutoCAD 2017 e versões posteriores

CDATE, DATA e outras variáveis de sistema relacionadas à data/hora

Os valores armazenados nas variáveis de sistema CDATE e DATE não representam mais a data\hora atual até o milésimo de segundo mais próximo ou a centésima parte de segundo. Agora, os segundos são a menor unidade de tempo em que se expressam os valores dessas duas variáveis de sistema. Se você precisar monitorar intervalos de tempo menores que um segundo, considere a possibilidade de usar o valor retornado pela variável de sistema MILLISECS que armazena a diferença de tempo desde o momento em que a estação de trabalho foi iniciada em milésimos de segundo.

As seguintes variáveis de sistema relacionadas à data/hora também foram afetadas pela remoção de milissegundos:

  • TDCREATE
  • TDINDWG
  • TDUCREATE
  • TDUPDATE
  • TDUSRTIMER
  • TDUUPDATE

Se qualquer um dos seus programas existentes exigir que as diferenças de tempo sejam reduzidas até o milésimo de segundo mais próximo, você poderá obter os últimos 2 ou 3 dígitos do valor armazenado na variável de sistema MILLISECS e anexá-los ao valor retornado pela variável de sistema CDATE que produzirá um valor comparável ao retornado pela variável de sistema CDATE em produtos baseados no AutoCAD 2016 e versões anteriores. O código de amostra a seguir mostra como você pode começar a obter um valor de data/hora que inclui milissegundos com base na versão de destino do AutoCAD:

; Returns a CDATE value that includes milliseconds based on release
; Usage: (CDate)
; Replaces (rtos (getvar "CDATE") 2 8)
(defun CDate ( / ms)
  ; Check to see which AutoCAD release is being used
  (if (<= (atof (getvar "ACADVER")) 22.0)
    (rtos (getvar "CDATE") 2 8)
    (progn
      ; Get the current milliseconds and append it to the CDATE value
      (setq ms (itoa (getvar "MILLISECS")))
      (strcat (rtos (getvar "CDATE") 2 6)(substr ms (- (strlen ms) 2)))
    )
  )
)
Variável de sistema EPDFSHX

A variável de sistema EPDFSHX apresentada com o AutoCAD 2016 Update 1 foi renomeada como PDFSHX. Como resultado da alteração do nome, todas as declarações do AutoLISP que fazem referência à variável de sistema EPDFSHX devem ser revisadas. Estas são as funções que, mais provavelmente, serão afetadas por essa alteração nos programas personalizados:

  • GETVAR – Um valor nulo será retornado em vez de um valor inteiro de 0 ou 1
  • SETVAR – A execução do programa pode ser interrompida e a mensagem de erro ; erro: configuração da variável do AutoCAD rejeitada: “epdfshx” será exibida
  • COMMAND – A execução do programa pode ser interrompida e a mensagem de erro Comando EPDFSHX desconhecido “EPDFSHX” será exibida

Produtos baseados no AutoCAD 2016 e versões posteriores

Arquivos assinados digitalmente

Agora os arquivos AutoLISP podem ser assinados digitalmente. A assinatura digital de um arquivo AutoLISP permite que seja carregado no ambiente de desenho do AutoCAD sem avisar ao usuário que o arquivo não é confiável. Os arquivos VLX assinados digitalmente não podem ser carregados em produtos baseados no AutoCAD 2015 ou versões anteriores.

Função osnap

A função osnap não oferece mais suporte ao modo de snap ao objeto rápido (qui). As referências ao modo qui devem ser removidas de todas as instruções que usam a função osnap nos programas do AutoLISP. Se o modo não for removido, a função osnap retornará nulo em vez de um valor de coordenada para um ponto válido na área de desenho.