Sponsored links

【AutoLISP エラー処理】システム変数とエラー処理 1

Sponsored links
AutoLISP
Sponsored links

システム変数を変更すると各種設定を変更でき、より便利なコマンドを作成できるようになります。

しかし、作ったコマンドがエラーで中断することもを想定しないと、予期せぬことが起きてイラつくことも。。。

Sponsored links

基礎知識

システム変数の変更について。

システム変数を変えるコマンド

システム変数は、現在画層、レイアウト、文字スタイル、寸法設定などなど、AutoCADのいろんな設定を決めている変数です。

特定の画層に図形を描く、オブジェクトスナップをコマンド実行時だけ変更する、特定の寸法スタイルを使う、などなど、システム変数を変更することで、自作コマンドでできる幅が広がります。

エラー中断で設定が変わる例

例として、Jagaimoという名前の画層に寸法を入れるコマンドを用意しました。
コマンドの内容は、

  • 現在画層名を変数OldLyに保存
  • 現在画層をJagaimoに変更(画層Jagaimoが無ければ作成)
  • 寸法コマンドを実行
  • 現在画層を変数OldLyに入れた画層に戻す

途中で現在画層を変更していますが、最初に現在画層の設定を保存して、コマンドの最後には最初の設定に戻しています。一見、問題なさそうですね。
しかし、エラーで中断されたとき、最後の現在画層設定を戻す部分が実行されません。

このコマンドを例にエラー対策がなぜ必要か解説していきます。

AutoLISP プログラム

(defun c:Test1 ()
   (setq OldLy (getvar "CLAYER")) ;現在画層名をOldLyに入れる

   (if (not (tblsearch "LAYER" "Jagaimo" )) ;もしJagaimo画層がなければ
       (command-s "._LAYER" "N" "Jagaimo" "" );作る
   );if	
  
  (setvar "CLAYER" "Jagaimo");現在画層をJagaimoにする
  (command-s "._DIMLINEAR");寸法を入れる

(setvar "CLAYER" OldLy);最初の現在画層に戻す
(princ))

AutoLISP(画層変更部分) の説明

(setq OldLy (getvar “CLAYER”))

CLAYERは、現在画層のシステム変数です。
まず最初にgetvar で現在画層名を得て、変数OldLyに入れています。

(setvar “CLAYER” “Jagaimo”)

setvar を使って、現在画層を“Jagaimo”に変更しています。
(もし画層Jagaimoが無ければ作成されます。)

(setvar “CLAYER” OldLy)

最後に、変数OldLyに入れておいた最初の現在画層に戻します。

途中でエラーが起きたら???

最初に画層名を変数に保存しておいて、最後に変数を使って戻す。
普通に終えれば、問題なく終わります。

しかし、途中でエラーが起きてプログラムが中断された場合、最後の(setvar “CLAYER” OldLy)が実行されないままで、現在画層がJagaimoになってしまいます。

自作コマンドを使うことで予期せぬ設定変更が起きた場合、例えば、設定が変更したと気付かずに作業を続けることでミスにつながるかもしれません。

エラー中断の例

わざと途中でエラーを起こした例も作りました。
画層をJagaimoに変更した後、寸法コマンドで空の変数Ptがエラーを引き起こして中断します。

(defun c:Test1-Err ()
   (setq OldLy (getvar "CLAYER")) ;現在画層名をOldLyに入れる
  
   (if (not (tblsearch "LAYER" "Jagaimo" )) ;もしJagaimo画層がなければ
       (command-s "._LAYER" "N" "Jagaimo" "" );作る
   );if	
  
  (setvar "CLAYER" "Jagaimo");現在画層をJagaimoにする
  (command-s "._DIMLINEAR" Pt);!!!エラーを起こす!!!

(setvar "CLAYER" OldLy);最初の現在画層に戻す
(princ))

これを実行すると、現在画層は最初の設定に戻らずJagaimoになったままです。

エラー対策の必要性

このように予期せぬ設定の変更があると気付かないままエラーやミスにつながることもあります。

現在画層がいつのまにやら印刷されない画層になっていて、気づかずそこに作図してしまったり、便利なコマンドを作成したけれど、実行する度にオブジェクトスナップがオフになってしまうコマンドだと、かえって不便に感じるかもしれません。

そして、他人に使ってもらう時は特に、予期せぬこと起きると嫌がられます
例えば、作った本人はただ現在画層が変わっただけとかわかりますが、中身を知らずに使う方にとっては、現在画層がいつの間にか変更していただけでも、AutoLISPプログラムって、勝手に設定が変わったり何が起きるかわからない怪しいものだいう印象を受ける人もいるでしょう。

そんな理由で、システム変数をいじるコマンドを作成するときにはエラー対策を入れましょう。

長くなってしまったので、システム変数のエラー対策は別記事にします。

今回はシステム変数をいじるコマンドを作るときはエラー対策をしましょうという注意喚起まで。

まとめ

  • システム変数を変更することで、AutoCADの設定を変えることができる。
  • 予期せぬ設定の変更は何かと問題の元なので、エラーで中断時は最初の設定に戻するように対策が必要。

関連記事

基礎編でのシステム変数記事に出てきたコマンドは、AutoCADの設定を変更することが目的なのでエラー処理が必要ないパターンです。

Comments