S::STARTUP

提供:GizmoLabs - だいたい CAD LISP なサイト
2021年8月17日 (火) 08:38時点におけるGizmon (トーク | 投稿記録)による版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

S::STARTUP 関数による初期化の実行

S::STARTUP 関数は、AutoCAD において、図面が初期化された後に実行される、必要なセットアップ操作を行うことができる関数である。

  • 互換CADではあったりなかったり、仕様が違ったりするので要確認。


起動 LISP ファイル(acad.lsp、acaddoc.lsp、MNL)は、図面が完全に初期化される前にメモリにロードされるため、通常は、command 関数を使用せず、command 関数を使用すると図面が初期化された後の動作は保証されない。


ユーザ定義関数 S::STARTUP を acad.lsp、acaddoc.lsp、または MNLファイルに含めると、この関数は、新しい図面を開始したときや既存の図面を開いたときに呼び出される。このため、LISP 起動ファイルに S::STARTUP の定義を含めると、セットアップ操作を実行できる。

たとえば、標準の HATCH[ハッチング]コマンドを、メッセージを表示した後に BHATCH[境界ハッチング]コマンドに切り替えるように変更したいときは、次のコードを含む acaddoc.lsp ファイルを使用する。

(defun C:HATCH ( ) 
  (alert "BHATCH コマンドを使用します!")
  (princ "¥n本来の HATCH コマンドを実行するには OLDHATCH と入力してください。¥n")
  (command "BHATCH")
  (princ)
) 

(defun C:OLDHATCH ( ) 
  (command ".HATCH")
  (princ)
) 

(defun-q S::STARTUP ( ) 
  (command "undefine" "hatch") 
  (princ "¥nHATCH を BHATCHに再定義しました!¥n")
)


図面が初期化される前に、HATCH と OLDHATCH の新しい定義が defun 関数で定義され、図面が初期化後に S::STARTUP 関数が呼び出され、標準の HATCH の定義が再定義される。

  • 注: S::STARTUP 関数を追加するには、defun ではなく defun-q 関数を使用して定義する必要がある。

複数の S::STARTUP 関数定義を確実に実行させるには

S::STARTUP 関数はいろいろな場所(acad.lsp、acaddoc.lsp、MNLファイル、またはこれらのファイルからロードされるその他の AutoLISP ファイル)で定義できるため、以前に定義した S::STARTUP 関数が上書きされる可能性がある。 例として起動関数が他の関数と一緒に確実に動作する 1 つの方法を次に示す。

(defun-q MYSTARTUP ( )
  独自の起動関数 ...
)

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

上記のコードは、独自の起動関数を既存の S::STARTUP 関数のコードに追加し、次に S::STARTUP 関数を再定義することによって、独自の起動コードを追加している。 これにより、前から存在していた S::STARTUP 関数に関係なく正しく動作することになるので、これをデフォルトの処理としておくと、LISPによるカスタマイズがバッティングして問題になるケースが減る。