시작 시 AutoLISP 루틴을 로드하고 도면 세션 동안 특정 시간에 명령 또는 함수를 실행합니다.
AutoCAD 기반 제품 및 AutoCAD LT는 세 개의 사용자 정의 가능한 파일의 컨텐츠를 자동으로 로드합니다.
사용자 정의 가능한 파일 | Windows | Mac OS | ||
---|---|---|---|---|
AutoCAD | AutoCAD LT | AutoCAD | AutoCAD LT | |
acad.lsp | ✓ | -- | ✓ | -- |
acaddoc.lsp | ✓ | -- | ✓ | -- |
acadlt.lsp | -- | ✓ | -- | -- |
acadltdoc.lsp | -- | ✓ | -- | -- |
현재 사용자화 파일과 함께 제공되는 MNL 파일 | ✓ | -- | ✓ | -- |
기본적으로 acad.lsp 또는 acadlt.lsp 파일은 제품이 시작될 때 한 번만 로드되는 반면, acaddoc.lsp 또는 acadltdoc.lsp 파일은 각 개별 문서(또는 도면)와 함께 로드됩니다. 이 기능을 사용하면 acad.lsp 또는 acadlt.lsp 파일의 로드를 응용프로그램 시작과 연관시키고, acaddoc.lsp 또는 acadltdoc.lsp 파일을 문서(또는 도면) 시작과 연관시킬 수 있습니다. 이러한 시작 파일을 로드하는 기본 방법은 ACADLSPASDOC 시스템 변수의 설정을 변경하여 수정할 수 있습니다.
이러한 파일 중 하나가 특수한 유형의 함수인 S::STARTUP을 정의하는 경우, 이 루틴은 도면이 완전히 초기화되는 즉시 실행됩니다. 대안으로 APPLOAD 명령은 파일을 편집하지 않고도 지정된 응용프로그램을 로드하는 시작하기 세트 옵션을 제공합니다.
acad.lsp 또는 acadlt.lsp 및 acaddoc.lsp 또는 acadltdoc.lsp 시작 파일은 제품과 함께 제공되지 않습니다. 이들 파일은 사용자가 작성하고 유지할 수 있습니다.
AutoLISP 파일을 로드하면 명령을 실제로 사용하는지 여부와 관계없이 파일의 명령 정의가 메모리를 차지합니다. AutoLISP autoload 함수는 전체 루틴을 메모리에 로드하지 않고 명령을 사용할 수 있게 합니다. 다음 코드를 acaddoc.lsp 또는 acadltdoc.lsp 파일에 추가하면 cmds.lsp 파일에서 명령 CMD1, CMD2 및 CMD3이, 그리고 newcmd.lsp 파일에서 NEWCMD 명령이 자동으로 로드됩니다.
(autoload "CMDS" '("CMD1" "CMD2" "CMD3")) (autoload "NEWCMD" '("NEWCMD"))
자동으로 로드되는 명령을 처음 명령 프롬프트에서 입력하면 AutoLISP는 연관된 파일에서 전체 명령 정의를 로드합니다. AutoLISP는 ObjectARX 응용프로그램을 위해 autoarxload 함수도 제공합니다.
특정 AutoLISP 루틴을 정기적으로 사용하는 경우 acad.lsp 또는 acadlt.lsp 파일을 작성할 수 있습니다. AutoCAD를 시작할 때 acad.lsp 또는 acadlt.lsp 파일의 지원 파일 검색 경로가 검색됩니다. acad.lsp 또는 acadlt.lsp 파일을 찾으면 메모리에 로드합니다.
acad.lsp 또는 acadlt.lsp 파일은 응용프로그램 고유의 시작 루틴에 사용되도록 만들어졌기 때문에 acad.lsp 또는 acadlt.lsp 파일에 정의된 모든 함수와 변수는 첫 번째 도면에서만 사용 가능합니다. 사용자는 모든 문서에서 사용할 수 있는 루틴을 acad.lsp 또는 acadlt.lsp 파일에서 acaddoc.lsp 또는 acadltdoc.lsp 파일로 이동하려고 할 것입니다.
acad.lsp 또는 acadlt.lsp 및 acaddoc.lsp 또는 acadltdoc.lsp의 권장 기능은 ACADLSPASDOC 시스템 변수를 사용하여 재지정할 수 있습니다. ACADLSPASDOC 시스템 변수가 0(기본 설정)으로 설정되었으면 acad.lsp 또는 acadlt.lsp 파일은 응용프로그램 시작 시 한 번만 로드됩니다. 1로 설정한 경우 새 도면을 작성하거나 기존 도면 파일을 열면 acad.lsp 또는 acadlt.lsp 파일이 다시 로드됩니다.
acad.lsp 또는 acadlt.lsp 파일에는 하나 이상의 루틴에 대한 AutoLISP 코드 또는 일련의 load 함수 호출이 포함될 수 있습니다. 수정하기가 쉽기 때문에 두 번째 방법이 더 선호됩니다. 다음 코드를 acad.lsp 또는 acadlt.lsp 파일로 저장하면 제품을 시작할 때마다 mysessionapp1.lsp, databasesynch.lsp 및 drawingmanager.lsp 파일이 로드됩니다.
(load "mysessionapp1") (load "databasesynch") (load "drawingmanager")
acaddoc.lsp 또는 acadltdoc.lsp 파일은 각 문서(또는 도면) 초기화와 연관시킬 목적으로 만들어졌습니다. 이 파일은 새 도면을 시작할 때마다(또는 기존 도면을 열 때마다) AutoLISP 루틴 라이브러리를 사용 가능한 상태로 로드하려는 경우에 유용합니다.
도면이 열릴 때마다 AutoCAD는 라이브러리 경로에 acaddoc.lsp 또는 acadltdoc.lsp 파일이 있는지 검색합니다. 하나의 파일을 찾으면 그 파일이 메모리에 로드됩니다. ACADLSPASDOC의 설정과 관계없이 각 도면마다 항상 acaddoc.lsp 또는 acadltdoc.lsp 파일이 로드됩니다.
대부분 사용자는 모든 문서 기반 AutoLISP 루틴에 대해 단일 acaddoc.lsp 또는 acadltdoc.lsp 파일을 갖습니다. 프로그램에서는 라이브러리 경로에 정의된 순서대로 acaddoc.lsp 또는 acadltdoc.lsp 파일을 검색합니다. 따라서 이 기능을 사용하면 각 도면 디렉토리에 각기 다른 acaddoc.lsp 또는 acadltdoc.lsp 파일을 가질 수 있습니다. 이 디렉토리는 특정 유형의 도면이나 작업에 대해 특정 AutoLISP 루틴을 로드합니다.
acaddoc.lsp 또는 acadltdoc.lsp 파일에는 하나 이상의 루틴에 대한 AutoLISP 코드 또는 일련의 load 함수 호출이 포함될 수 있습니다. 수정하기가 쉽기 때문에 두 번째 방법이 더 선호됩니다. 다음 코드를 acaddoc.lsp 또는 acadltdoc.lsp 파일로 저장하면 mydocumentapp1.lsp, build.lsp 및 counter.lsp 파일이 새 문서를 열 때마다 로드됩니다.
(load "mydocumentapp1") (load "build") (load "counter")
이 제품은 사용자화(CUI/CUIx) 파일을 로드할 때 파일 이름이 일치하는 MNL 파일을 검색합니다. 하나의 파일을 찾으면 그 파일이 메모리에 로드됩니다. 이 기능은 사용자 인터페이스 요소의 올바른 작동에 필요한 AutoLISP 함수가 로드되도록 합니다.
예를 들어, 제품이 custom.cuix라는 사용자화 파일을 로드하는 경우 사용자화 파일의 사용자 인터페이스 요소에서 사용되는 많은 AutoLISP 함수를 정의할 수 있는 custom.mnl 파일을 찾습니다. MNL 파일은 acaddoc.lsp 파일 다음에 로드됩니다.
(command "menu" "newmenu") (princ "Newmenu utilities… Loaded.") (Princ)
이 예제에서 princ 함수에 대한 호출을 사용하여 상태 메시지를 표시할 수 있습니다. princ를 처음 사용하면 명령 프롬프트에 다음과 같이 표시됩니다.
새 메뉴 유틸리티… 로드됨.
princ를 두 번째 호출하면 AutoLISP 함수가 종료됩니다. princ에 대한 두 번째 호출을 하지 않으면 메시지가 두 번 표시됩니다. 앞에서 설명한 대로 보다 신중한 사전 예방 조치를 위해 load 함수에 대한 호출에 onfailure 인수를 포함시킬 수 있습니다.
S::STARTUP 함수를 정의하여 도면이 초기화된 후에 임의의 필요한 설정 작업을 수행할 수 있습니다.
시작 LISP 파일(acad.lsp 또는 acadlt.lsp 및 acaddoc.lsp 또는 acadltdoc.lsp)은 도면이 완전히 초기화되기 전에 자동으로 로드된 MNL 파일과 함께 메모리에 모두 로드됩니다. 도면이 초기화된 후까지 올바르게 작동한다는 보장이 없는 command 함수를 사용하지만 않으면 일반적으로 이로 인해 문제가 발생하지 않습니다.
사용자 정의 함수 S::STARTUP이 acad.lsp, acadlt.lsp, acaddoc.lsp, acadltdoc.lsp 또는 MNL 파일에 포함되어 있을 경우, 새 도면을 입력하거나 기존 도면을 열 때 이 함수가 호출됩니다. 따라서 S::STARTUP의 정의를 AutoLISP 시작 파일에 포함시켜 설정 작업을 수행할 수 있습니다.
예를 들어, 메시지를 추가한 다음 BHATCH 명령으로 전환하여 표준 HATCH 명령을 재지정하려는 경우 다음이 포함된 acaddoc.lsp 또는 acadltdoc.lsp 파일을 사용하십시오.
(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") )
도면이 초기화되기 전에 defun 함수를 사용하여 HATCH 및 OLDHATCH의 새 정의가 정의됩니다. 도면이 초기화되고 난 후에는 S::STARTUP 함수가 호출되고 HATCH의 표준 정의가 해제됩니다.
S::STARTUP 함수는 여러 위치(acad.lsp 또는 acadlt.lsp, acaddoc.lsp 또는 acadltdoc.lsp, MNL 파일 또는 이러한 파일로부터 로드된 다른 AutoLISP 파일)에 정의할 수 있기 때문에 이전에 정의된 S::STARTUP 함수를 덮어쓸 수 있습니다.
다음 예제에서는 시작 함수가 다른 함수와 함께 작동하게 해 주는 확실한 방법을 보여줍니다.
(defun-q MYSTARTUP ( )
... 시작 함수 ...
) (setq S::STARTUP (append S::STARTUP MYSTARTUP))
앞에 나온 코드는 기존의 S::STARTUP 함수에 시작 함수를 추가한 다음, S::STARTUP 함수를 재정의하여 시작 코드를 포함시킵니다. 이 작업은 S::STARTUP 함수가 존재하는지 여부에 관계없이 올바르게 작동합니다.