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.
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.
As seguintes técnicas podem ser úteis ao tentar usar um comando ou variável de sistema obsoleto em um programa personalizado:
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.
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"
)
)
)
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")
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.
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:
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)))
)
)
)
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:
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.
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.