AutoLISP 프로그램을 최신 릴리즈에서 실행하기 위해 수행해야 할 변경 사항은 일반적으로 매우 적습니다.
그러나 AutoLISP 함수, AutoCAD 기반 제품 명령 또는 시스템 변수가 변경되거나 사용되지 않아 AutoLISP 프로그램이 최신 릴리즈에서 더 이상 제대로 실행되지 않을 수 있습니다.
사용자 프로그램에서 사용되지 않음으로 지정된 명령 및 시스템 변수를 검토합니다. 경우에 따라, 사용되지 않는 명령 또는 시스템 변수를 명령 프롬프트에서 직접 입력할 수 없거나 사용자 인터페이스에서 액세스할 수 없더라도 사용자 프로그램에서 이러한 명령 또는 시스템 변수를 계속 사용할 수 있습니다.
사용자 프로그램에서 사용되지 않는 명령 또는 시스템 변수를 사용하려고 하는 경우 다음 기술이 유용할 수 있습니다.
조작하는 데 사용되거나 문자열 값을 반환하는 함수에 영향을 주는 유니코드 문자를 지원하도록 AutoLISP 환경이 업데이트되었습니다. 유니코드 지원을 위해 업데이트된 함수에 대한 자세한 내용은 AutoLISP의 새로운 기능 또는 변경 사항을 참고하십시오.
프로그램에서 사용되는 함수에 따라, 유니코드 문자를 처리하기 위해 변경이 필요할 수도 있습니다. 예를 들어, 이전 릴리즈와 비교하면 이제 ASCII 함수의 반환 값이 255보다 클 수도 있고, 함수에 유니코드 문자가 전달되는 경우 다를 수도 있습니다. LISPSYS 시스템 변수를 사용하여 프로그램에 로드되는 기본 AutoLISP 환경을 식별 및 제어할 수 있습니다. 0 및 2는 MBCS 지원(기존 환경)을 나타내고 1은 유니코드 지원을 나타냅니다.
다음 코드 조각은 프로그램에 현재 로드되는 AutoLISP 환경을 확인하고 로드된 환경을 기준으로 코드 실행을 제어하는 방법을 보여 줍니다.
(if (= (getvar "LISPSYS") 1) (alert (strcat "Unicode support enabled" "\n(ASCII \"€\") returns 8364" ) ) (alert (strcat "MBCS (Legacy) support enabled" "\n(ASCII \"€\") returns 128" ) ) )
이제 INSERT 명령은 블록 팔레트를 표시하는 반면, 새 CLASSICINSERT 명령은 "기존" 삽입 대화상자를 표시합니다. AutoLISP 프로그램에서 삽입 대화상자를 사용하는 경우, 기존 프로그램을 변경해야 합니다. 이전에는 다음의 AutoLISP 문을 사용하여 삽입 대화상자를 표시했을 수 있습니다.
(initdia) (command "insert")
AutoLISP 프로그램에서 삽입 대화상자를 계속 표시하려면, 다음 접근 방식 중 한 가지를 활용하도록 기존 프로그램을 변경해야 합니다.
(initcommandversion 2) (initdia) (command "insert")
(command "classicinsert")
이제 LOCALE 시스템 변수가 언어 및 하위 언어를 나타낸 3자의 약어 대신 현재 언어를 나타내는 2자 이상의 약어가 포함된 코드를 반환합니다. 2자 이상의 약어는 LOCALE_SISO639LANGNAME 상수를 사용하여 Windows GetLocaleInfo 함수를 기반으로 합니다.
AutoCAD 2019 기반 제품 이전에 이 코드는 LOCALE_SABBREVLANGNAME 상수를 사용하여 Windows GetLocaleInfo 함수에서 반환되는 3자의 약어였습니다. 3자의 약어는 두 가지 정보, 즉 2자의 언어 약어와 하위 언어를 표시한 3번째 문자를 기반으로 했습니다. 예를 들어, ENU는 영어(EN)와 하위 언어인 미국(U)의 조합을 나타냈습니다.
CDATE 및 DATE 시스템 변수에 저장된 값은 더 이상 가장 가까운 밀리초 또는 100분의 1초로 내림된 현재 날짜₩시간을 나타내지 않습니다. 이제 이 두 시스템 변수의 값이 표현되는 가장 작은 시간의 단위는 초입니다 1초보다 작은 시간 간격을 추적해야 할 경우에는 워크스테이션이 밀리초 단위로 부팅된 이후의 시간 차이를 저장하는 MILLISECS 시스템 변수가 반환하는 값을 사용해 보십시오.
다음 날짜₩시간 관련 시스템 변수 또한 밀리초가 제거된 것에 영향을 받습니다.
기존 프로그램에서 가장 가까운 밀리초로 내림된 시간 차이를 요구할 경우 MILLISECS 시스템 변수에 저장된 값의 마지막 2 또는 3자릿 수를 가져와 CDATE 시스템 변수가 반환하는 값에 추가하면 AutoCAD 2016 기반 제품 및 이전 제품의 CDATE 시스템 변수가 반환하는 값에 필적하는 값을 생성할 수 있습니다. 다음 코드 샘플은 대상 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))) ) ) )
AutoCAD 2016 Update 1에 도입된 EPDFSHX 시스템 변수 이름이 PDFSHX로 바뀌었습니다. 이 이름 변경에 따라 EPDFSHX 시스템 변수를 참조하는 모든 AutoLISP 문이 수정되어야 합니다. 다음은 사용자 프로그램에서 이러한 변경으로 인해 영향을 받을 가능성이 큰 함수입니다.
이제 AutoLISP 파일에 디지털 서명이 가능합니다. AutoLISP 파일을 디지털 서명하면 사용자에게 파일을 신뢰할 수 없다고 알리는 경고 없이 이 파일을 AutoCAD 도면 환경에 로드할 수 있습니다. 디지털 서명된 VLX 파일은 AutoCAD 2015 기반 또는 그 이전 제품에 로드할 수 없습니다.
osnap 함수는 빠른(qui) 객체 스냅 모드를 더 이상 지원하지 않습니다. AutoLISP 프로그램의 osnap 함수를 사용하는 모든 문에서 qui 모드에 대한 참조를 제거해야 합니다. 이 모드를 제거하지 않으면 osnap 함수가 도면 영역의 유효한 점에 대한 좌표 값이 아닌 nil을 반환합니다.