AutoLISP入門

AutoCADの環境設定をお手軽にカスタマイズ!便利なシステム変数4選

製図1
  • システム変数とは?
  • AutoCADの環境設定をいじりたい
  • AutoLISP開発で便利なシステム変数を知りたい

簡単に説明すると、システム変数とはAutoCADの環境設定に関する数値や文字列が格納されている変数のことです。

システム変数は多数存在するため、この記事ではAutoLISP開発をする上で便利なシステム変数に注目してご紹介していきます。

その他のシステム変数を知りたい方は下記のリンクからAutoCADのヘルプをご覧ください。
外部リンクAutoCAD 2021 ヘルプ - システム変数

AutoCADの環境設定をお手軽にカスタマイズ!便利なシステム変数4選

そもそもシステム変数とは何?

システム変数についてもう少し具体的に説明します。

AutoCADのヘルプではシステム変数についてこのように説明されています。

システム変数は、特定のコマンドの動作をコントロールする設定です。

コマンドが通常、動作を開始したりダイアログ ボックスを表示するのに対して、システム変数は、コマンドの動作や、操作の既定値、ユーザ インタフェースの外観をコントロールします。たとえば、スナップ、グリッド、直交などのモードのオン/オフを切り替えます。

システム変数を使用して、設定を変更したり、現在の状態を表示できます。多くのシステム変数の設定は、ダイアログ ボックスまたはリボンでも修正できます。

AUTODESK ヘルプ

要するに、オプションを開かなくても環境設定を変更できる優れものです!

システム変数を取得・書き換える関数 getvar / setvar

システム変数をあつかうには「getvar」と「setvar」の2つの関数が必要です。

getvarはシステム変数に現在格納されている値を取得することができます。

そして、setvarはシステム変数の値を新しい値に書き換える関数です。

構文内容
(getvar システム変数名)引数に指定したシステム変数の現在値を取得する。
(setvar システム変数名 値)指定したシステム変数を引数の値に書き換える。

引数に指定するシステム変数名は「"」ではさんで、文字列にする必要があるので注意してください。

;現在のスナップ設定を取得する
(getvar "osmode")

;現在のスナップ設定を0(解除)にする
(setvar "osmode" 0)

便利なシステム変数4選

ご紹介するシステム変数は次の4つです。

  1. スナップ設定 OSMODE
  2. 現在層の設定 CLAYER
  3. 日付と時刻を取得 CDATE
  4. ユーザー名の取得 LOGINNAME

1. スナップ設定 OSMODE

オブジェクトスナップの設定を管理するシステム変数です。

各スナップ対象にはビットコード(数字)が割り当てられており、それらの合計値がOSMODEに格納されています。

スナップ対象とそれに対応するビットコードは以下のようになっています。

ビットコードスナップ対象
0スナップ解除
1端点
2中点
4中心
8
16四半円点
32交点
64挿入基点
128垂線
256接線
512近接点
1024図心
2048仮想交点
4096延長
8192平行

例えば、中心と交点のみをスナップしたい場合は中心のビットコード4と交点のビットコード32の合計値36をOSMODEに格納することになります。

0のときはすべてのスナップが解除されます。

;中心と交点のみをスナップする設定
(setvar "osmode" 36)

AutoLISPで作図を行うときに他の図形にスナップを取られて狙った座標に作図できない場合がありますが、OSMODEを0にすると余計な箇所にスナップを取られずに作図することができます。

ただし、作図が終わったらスナップ設定を元に戻す必要があるのであらかじめOSMODEの値を別の変数に格納しておいてください。

OSMODEが元に戻ればスナップ設定も元に戻ります。

2. 現在層の設定 CLAYER

現在層を管理するシステム変数です。

現在層の画層名が格納されており、設定したい画層名に書き換えることで現在層を変更できます。

例えば、「画層1」という画層を現在層にしたい場合は次のように記述します。

;画層1を現在層にする
(setvar "clayer" "画層1")

CIRCLEやRECTANGなどの作図コマンドでは現在層に作図されるため、あらかじめCLAYERで現在層を変更しておいた方が配置する画層を間違えずに済みます。

作図コマンドについて知りたい方はこちらの記事をご覧ください。
関連記事:【AutoLISP】作図コマンドの使い方 【circle / rectang / line】

3. 日付と時刻を取得 CDATE

日付と時刻を取得したいときはCDATEが使えます。

CDATEに格納されている値は実数です。

小数点より前が現在の年月日、少数点より後が時刻を表しています。

例えば、2001年10月4日16時25分の場合は20011004.1625という実数が格納されています。

また、CDATEは読み取り専用のシステム変数のため書き換えはできません。

fixという実数の整数分を取得する関数を使うと、年月日のみを取得できます。

;CDATEの年月日のみ取得
(fix (getvar "cdate"))

時刻のみを取得するには少数部分のみ取り出して、10000を掛ける方法があります。

;CDATEの時刻のみ取得
(setq tmp (getvar "cdate"))
(* (- tmp (fix tmp)) 10000)

4. ユーザー名の取得 LOGINNAME

現在のユーザーのログイン名が文字列で格納されているシステム変数です。

こちらも読み取り専用のため書き換えることはできません。

特定のユーザーのみ実行できるAutoLISPコマンドを作成したいときにはLOGINNAMEの文字列を比較する方法があります。

また、出力ファイルに実行したユーザーを書き込みときにも使えます。

まとめ

  • システム変数とはAutoCADの環境設定に関する値が格納されている変数
  • getvarはシステム変数の値を取得できる
  • setvarはシステム変数の値を書き換える
システム変数内容
OSMODE スナップ設定に対応したビットコードの合計値を格納。
CLAYER 現在層の画層名を文字列で格納。
DATE 日付と時刻を実数で格納。整数部が日付、小数部が時刻。
LOGINNAME 現在のユーザーのログイン名を文字列格納。

AutoLISPを書籍で学びたい方には「AutoCAD 自動化攻略読本」がおすすめ。初心者向けに解説されており、AutoLISP以外の自動化方法も学べるお得な一冊。とにかくAutoCADで楽をしたい方はぜひご覧ください。

だれでも簡単にAutoCADを自動化

-AutoLISP入門

AutoLISPのおすすめ書籍はコチラ
AutoLISPのおすすめ書籍はコチラ