S::STARTUP 函数:初始化之后执行 (概念)

AutoCAD 2008

 
S::STARTUP 函数:初始化之后执行
概念 快速参考
 
 
 

用户可以定义 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 ( )

... your startup function ...

)
(setq S::STARTUP (append S::STARTUP MYSTARTUP))

上面的代码把启动函数附加到现有的 S::STARTUP 函数中,然后重定义 S::STARTUP 函数以包含该启动代码。不管以前的 S::STARTUP 函数是否存在,它都可以正常工作。