Los programas de AutoLISP suelen requerir muy pocos cambios para poder ejecutarlos en la versión más reciente.
Sin embargo, es posible que un programa de AutoLISP ya no se ejecute correctamente en la versión más reciente debido a que una función de AutoLISP, o un comando o una variable de sistema de un producto basado en AutoCAD hayan cambiado o se hayan dejado de utilizar.
Revise los programas personalizados en busca de comandos y variables de sistema que se hayan designado como obsoletos. En algunos casos, un comando o una variable de sistema obsoletos se pueden seguir utilizando mediante los programas personalizados, incluso aunque no se puedan introducir directamente en la solicitud de comando o acceder a ellos desde la interfaz de usuario.
Las técnicas siguientes pueden ser útiles para utilizar un comando o una variable de sistema obsoletos en un programa:
El entorno de AutoLISP se ha actualizado para admitir caracteres Unicode que afectan a funciones utilizadas para la manipulación o que devuelven valores de cadena. Para obtener más información sobre las funciones que se han actualizado para ofrecer compatibilidad con Unicode, consulte Novedades o modificaciones de AutoLISP.
Según las funciones utilizadas en los programas, es posible que deban realizarse cambios en ellas para que puedan gestionar los caracteres Unicode. Por ejemplo, el valor de retorno de la función ASCII ahora puede ser superior a 255 o diferente si se transfiere un carácter Unicode a la función en comparación con versiones anteriores. Puede utilizar la variable de sistema LISPSYS para identificar y controlar el entorno de AutoLISP por defecto que se carga en el programa; 0 y 2 = compatibilidad con MBCS (entorno heredado) y 1 = compatibilidad con Unicode.
En el siguiente fragmento de código, se muestra cómo determinar el entorno de AutoLISP que se está cargando en el programa y la ejecución de código de control en función del entorno cargado:
(if (= (getvar "LISPSYS") 1) (alert (strcat "Unicode support enabled" "\n(ASCII \"€\") returns 8364" ) ) (alert (strcat "MBCS (Legacy) support enabled" "\n(ASCII \"€\") returns 128" ) ) )
El comando INSERT ahora muestra la paleta de bloques, mientras que el nuevo comando INSERTCLASICO muestra el cuadro de diálogo Insertar "heredado". Si el programa de AutoLISP se basa en el uso del cuadro de diálogo Insertar, deberá cambiar el programa existente. Anteriormente, es posible que haya utilizado las siguientes instrucciones de AutoLISP para visualizar el cuadro de diálogo Insertar:
(initdia) (command "insert")
Para seguir visualizando el cuadro de diálogo Insertar con los programas de AutoLISP, deberá cambiar los programas existentes para utilizar uno de estos enfoques:
(initcommandversion 2) (initdia) (command "insert")
(command "classicinsert")
La variable de sistema LOCALE ahora devuelve un código que contiene una abreviatura de dos o más letras que representa el idioma actual en lugar de una abreviatura de tres letras que representa los idiomas principal y secundario. La abreviatura de dos o más letras se basa en la función GetLocaleInfo de Windows mediante la constante LOCALE_SISO639LANGNAME.
Antes de los productos basados en AutoCAD 2019, el código era una abreviatura de tres letras devuelta por la función GetLocaleInfo de Windows mediante la constante LOCALE_SABBREVLANGNAME. La abreviatura de tres letras se basaba en dos componentes: una abreviatura de idioma principal de dos letras, junto con una letra que indicaba un idioma secundario. Por ejemplo, ENU representa una combinación del idioma principal inglés (EN) y la variante estadounidense (U) como idioma secundario.
Los valores almacenados en las variables de sistema CDATE y DATE ya no representan la fecha y hora actuales al milisegundo o la centésima parte de segundo más próximos. Los segundos son ahora la unidad de tiempo más pequeña en la que se expresan los valores de estas dos variables de sistema. Si necesita realizar un seguimiento de intervalos inferiores a un segundo, considere la posibilidad de usar el valor devuelto por la variable de sistema MILLISECS, que almacena la diferencia de tiempo en milisegundos desde que se inició la estación de trabajo.
Las siguientes variables de sistema relacionadas con la fecha/hora también se han visto afectadas por la eliminación de los milisegundos:
Si alguno de los programas existentes requiere diferencias de tiempo hasta el milisegundo más próximo, puede obtener los últimos 2 o 3 dígitos del valor almacenado en la variable de sistema MILLISECS y añadirlos al valor devuelto por la variable del sistema CDATE que generará un valor comparable al que ha devuelto la variable de sistema CDATE en productos basados en AutoCAD 2016 y versiones anteriores. En el siguiente código de ejemplo, se muestra cómo puede obtener un valor de fecha/hora que incluya milisegundos en función de la versión de AutoCAD de destino:
; 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))) ) ) )
El nombre de la variable de sistema EPDFSHX integrada en AutoCAD 2016 Update 1 ha cambiado a PDFSHX. Como resultado del cambio de nombre, deben modificarse las instrucciones de AutoLISP que hacen referencia a la variable de sistema EPDFSHX. Estas son las funciones que probablemente se verán afectadas por este cambio en los programas personalizados:
Los archivos de AutoLISP ahora se pueden firmar digitalmente. Al firmar digitalmente un archivo de AutoLISP, este se puede cargar en el entorno de dibujo de AutoCAD sin recibir una advertencia de que el archivo no es de confianza. Los archivos VLX con firma digital no se pueden cargar en la versión 2015 y anteriores de los productos basados en AutoCAD.
La función REFENT ya no admite el modo de referencia rápida a objetos (qui). Las referencias al modo qui deben eliminarse todas las sentencias que utilicen la función REFENT de los programas de AutoLISP. Si el modo no se elimina, la función REFENT devuelve nil en lugar de un valor de coordenadas de un punto válido en el área de dibujo.