|
|
用户可以定义 S::STARTUP 函数,以在图形初始化之后执行所需的启动操作。
启动 LISP 文件(“acad.lsp”、“acaddoc.lsp”和 MNL)在图形完成初始化之前已全部加载到内存中。通常这并不会造成问题,除非使用了 command 函数,此函数在图形初始化前不能保证正常工作。
如果用户定义的函数 S::STARTUP 包含在“acad.lsp”、“acaddoc.lsp” 或 MNL 文件中,则输入新图形或打开现有图形时将调用此函数。因此,可以在 LISP 启动文件中包含 S::STARTUP 函数定义以完成启动操作。
例如,如果要通过添加一条信息然后切换到 BHATCH 命令来替代标准 HATCH 命令,请使用包含以下代码的“acaddoc.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 函数必须使用 defun-q 函数而不是 defun 定义。
由于 S::STARTUP 函数可以在许多位置(“acad.lsp”、“acaddoc.lsp”、MNL 文件或从这些文件中加载的其他任何 AutoLISP 文件)定义 ,因此可以替换先前定义的 S::STARTUP 函数。下例显示了一种确保启动函数与其他函数协同工作的方法。
(defun-q MYSTARTUP ( )
)
(setq S::STARTUP (append S::STARTUP MYSTARTUP))
上面的代码把启动函数附加到现有的 S::STARTUP 函数中,然后重定义 S::STARTUP 函数以包含该启动代码。不管以前的 S::STARTUP 函数是否存在,它都可以正常工作。