AutoLISP関数 関数解説

AutoCADの設定を自動化!システム変数を自在に操るAutoLISP関数2種

system-variable_eyecatch
  • 手動で設定を変更するのはめんどくさい
  • もっと自分好みに画面や作図環境を調整したい
  • システム変数ってなに?

システム変数を活用すれば、AutoCADでの作図や表示の設定などを自由にカスタマイズできます。便利なシステム変数がたくさん用意されている一方で、扱い方がわからずお困りの方も多いはず。

私はAutoLISPを独学し、業務の自動化・効率化に役立つプログラムを5年以上作成しています。数行で書けるような簡単なプログラムから、1000行以上の少し複雑なプログラムまで様々なツールを作成してきました。

そもそもAutoLISPってなに?という方はこちらの記事をご覧ください。
>>AutoCADユーザー必見!【AutoLISPを覚えるべきメリット5選】デメリットも解説

当記事ではシステム変数をコントロールするAutoLISP関数について初心者向けに解説します。さらに、作図を効率化できる便利なシステム変数も厳選してご紹介。作図環境をもっと快適にするヒントを見つけたい方は、ぜひ最後までお読みください。

あなたに代わってAutoLISPプログラムを作成します

AutoLISPで作業を自動化したいけど、プログラミングに詳しくないのでツールが作れずにお悩みの方へ。5年以上のAutoLISP経験を活かしてAutoCADを自動化するツールを作成します。既にお持ちのAutoLISPプログラム修正も対応可能です。

AutoCADの面倒くさい作業から解放されたい方は、下記リンク先の「ココナラ」からお気軽にご相談ください。
>>AutoCADが楽になるプログラムを作成します|ココナラ

システム変数とはAutoCADの設定を決める変数

system-variable_caption1

システム変数とはAutoCADの動作や設定を裏で決めている変数です。スナップの種類、文字サイズ、単位の形式など、多くの設定はシステム変数で管理されています。

たとえば、システム変数には以下のようなものがあります。

システム変数内容
OSMODE端点、交点などのスナップ設定
CLAYER現在層の画層名の取得や、現在層の変更
TEXTSIZE既定とする文字の高さ
LUNITS長さの単位(小数・建築)

ちなみに、通常はオプションなどからダイアログを表示して設定の確認や変更を行いますが、AutoLISPを使えば確認や変更も簡単。

(getvar "OSMODE")         ; 今の設定を確認  
(setvar "OSMODE" 1)       ; スナップを端点に変更
はこさん。
はこさん。

getvarとsetvarについては後述するのでお楽しみに

AutoCADで「思い通りに描ける」「いつも通りの環境で作業できる」ためには、システム変数の使い方を知ることがとても大切です。

システム変数を自在に操るAutoLISP関数2種

system-variable_caption2

今回は以下のAutoLISP関数をご紹介します。どちらもシステム変数を使いこなすためには欠かせない関数です。

  • getvar
  • setvar
はこさん。
はこさん。

順番に解説していきます。

getvar システム変数の現在値を取得する

system-variable_getvar

getvarは指定したシステム変数の現在値を取得できるAutoLISP関数です。getvarを使いこなすために押さえておきたいポイントは次の3つ。

  • 引数にはシステム変数名の文字列を与える
  • 指定したシステム変数の現在値をそのまま返す
  • 無効なシステム変数名を指定したときはnilを返す

引数にシステム変数名の文字列を与えると、指定したシステム変数の現在値を取得できます。たとえば、現在の画層を取得したいときは以下のように書いてください。

(getvar "CLAYER")

変数を使ってシステム変数名の文字列を間接的に与えることもできます。

(setq sysvar "CLAYER")
(getvar sysvar)

引数の文字列は大文字小文字どちらでもかまいません。下記のような大文字小文字が混ざっている文字列でも返り値は同じになります。

(getvar "Clayer")
(getvar "claYer")
はこさん。
はこさん。

返り値は同じになりますが、わかりやすさを優先して大文字か小文字どちらかに統一することをおすすめします。

getvarはシステム変数の現在値をそのまま返すので、数値の変数なら整数や実数、文字列なら文字列で返します。返り値の形式はシステム変数ごとに変わるので注意してください。

ちなみに、sysvarmonitorコマンドを使うと、リスト内に登録した任意のシステム変数を確認できます。登録されたシステム変数の値が変更されるとコマンドラインに通知が表示されるため、誤った設定変更を防げます。

system-variable_sysvarmonitor

sysvarmonitorについてもっと知りたい方は公式のヘルプをご覧ください。
>>AutoCAD 2025 ヘルプ|Autodesk|[システム変数をモニタ]ダイアログ ボックス

また、無効な(存在しない)システム変数名を指定した場合、getvarはnilを返します。エラーで処理が止まるわけではないので、取得した値を活用して画層管理を行ったり、設定状況をチェックしたりできます。

(setq currentLayer (getvar "CLAYER"))
(if currentLayer
  (princ (strcat "現在の画層は " currentLayer " です。"))
  (princ "指定した変数は無効です。")
)
はこさん。
はこさん。

getvarはAutoCADの設定を簡単に知ることができる便利な関数です。

setvar システム変数の現在値を変更する

system-variable_setvar

setvarは指定したシステム変数の現在値を直接変更できるAutoLISP関数です。setvarの特徴は以下のとおり。

  • 引数にはシステム変数名の文字列と変更後の値を与える
  • 指定したシステム変数の現在値をすぐに変更できる
  • システム変数の値を変更できた場合は変更後の値を返す
  • 無効なシステム変数名を指定したときはエラーで処理が止まる

setvarでシステム変数の値を変更するにはシステム変数名の文字列と変更後の値が必要です。たとえば現在の画層をLayer1に変更したい場合は、以下のように記述してください。

(setvar "CLAYER" "Layer1")

setvarは指定したシステム変数の値をすぐに変更するため、上記の1行を実行した直後に現在層がLayer1に切り替わります。

はこさん。
はこさん。

意図しないタイミングで値が変わらないように、setvarを実行するタイミングには注意してください。

ちなみに、getvarと同様に引数は変数で与えることもできます。

(setq sysvar "CLAYER")
(setq layername "Layer1")
(setvar sysvar layername)

変更が正常に行われると変更後の値を返すため、以下のように後の処理で値を再利用することも可能。

(setq result (setvar "OSMODE" 1))
(princ (strcat "OSMODEの設定値を " (itoa result) " に変更しました。"))

無効な(存在しない)システム変数名や対応していない値を与えられた場合は、エラーを出して処理を止めてしまいます。エラー処理で回避する方法もありますが、まずはシステム変数の名前と値の形式を確認することが大切です。

扱いたいシステム変数について知りたい方は公式のヘルプで検索してみてください。
>>AutoCAD 2025 ヘルプ|Autodesk

はこさん。
はこさん。

setvarはAutoCADの設定を簡単に変更できるので、役立つ場面の多い関数です。

AutoCADの効率化に役立つシステム変数42選

system-variable_caption3

作図の効率化に役立つシステム変数をご紹介します。先に解説したsetvarとgetvarを使えば設定変更も簡単。ちょっとした工夫で作業効率がぐんとアップしますので、ぜひ活用してみてください。

① 画面表示と操作

CMDECHO

command関数を実行中にプロンプトとユーザー入力をエコーバックするか設定できる。

内容
0エコーバックしない
1(初期値)エコーバックする

command関数についてはこちらの記事で解説していますので参考にしてください。
>>【作図を自動化】コマンドを実行するAutoLISP関数「command」を解説

CMDDIA

インプレイス テキストエディタや、特定のダイアログ ボックスを表示するか設定できる。

内容
0表示しない
1(初期値)表示する

関連コマンド: LEARDER、PLOT、TEXT

FILEDIA

ファイル選択のダイアログを表示するか設定できる。

内容
0ダイアログを表示しない
1(初期値)ダイアログを表示する

FILLMODE

ハッチングや幅のあるポリラインを塗りつぶすか設定する。

内容
0オブジェクトを塗りつぶさない
1(初期値)オブジェクトを塗りつぶす

関連コマンド:SOLID、PLINE、TRACE、DONUT

HIGHLIGHT

選択したオブジェクトをハイライトするか設定できる。

内容
0ハイライトしない
1(初期値)ハイライトする

LASTPOINT

現在の空間で指定された最後の座標を取得できる。キーボードから「@」と入力したときに参照される座標と同じ。

内容
3D座標
(初期値:0.0000,0.0000,0.0000)
現在の空間で指定された最後の座標

PICKBOX

オブジェクトを選択するときに表示されるピックボックスのサイズをピクセル単位で変更する。0にするとオブジェクトのプレビューが表示されない。

内容
0~50の整数
(初期値 3)
ピックボックスのサイズ

QTEXTMODE

文字の省略モードをコントロールする。再作図(REGENコマンド)で設定が反映される。

内容
0(初期値)文字の省略モードをオフにする。文字が表示される。
1文字の省略モードがオンになる。
文字の代わりにボックスが表示される。
system-variable_qtextmode

② 点・線・スナップ設定

PDMODE

点オブジェクトの表示方法を設定する。点の中心と外周のマーク形状を変更できる。

内容
0~4
(初期値:0)
system-variable_pdmode-1
32~36system-variable_pdmode-2
64~68system-variable_pdmode-3
96~100system-variable_pdmode-4

関連コマンド: POINT、DIVIDE、MEASURE、PTYPE

PDSIZE

点オブジェクトの表示サイズを設定する。

内容
0.0000(初期値) 図面領域の高さの5%のサイズで点を作成する
0より大きい実数 絶対サイズを指定する
0より小さい実数 ビューポート サイズに対する比率(%)で指定する

関連コマンド: POINT、DIVIDE、MEASURE、PTYPE

PLINEWID

ポリラインの幅の規定値を設定する。

内容
実数ポリラインの幅

関連コマンド:PLINE

LTSCALE

図面全体の線種尺度(グローバル線種尺度)を設定する。作成される図形にはLTSCALEとCELTSCALEの値をかけた尺度が適用される。

内容
0より大きい実数
(初期値:1.0000)
図面全体の線種尺度
(グローバル線種尺度)

CELTSCALE

新しく作成する図形の線種尺度を設定する。作成される図形にはLTSCALEとCELTSCALEの値をかけた尺度が適用される。

内容
0より大きい実数
(初期値:1.0000)
新しく作成する図形の線種尺度

OSMODE

オブジェクトスナップを設定する。値を合計することで複数のスナップ対象を設定できる。

内容
0解除
1端点
2中点
4中心
8
16四半円点
32交点
内容
64挿入基点
128垂線
256接線
512近接点
1024図心
2048 仮想交点
4096延長
8192平行
はこ
はこ

7を設定した場合は端点、中点、中心がスナップの対象になります。

PSLTSCALE

ペーパー空間ビューポートに表示される、図形の線種尺度を設定する。

内容
0図形が存在する空間の尺度設定に従う
1(初期値) ペーパー空間の尺度設定に従う

SNAPBASE

現在のビューポートでのスナップとグリッドの原点を設定する。

内容
2D座標
(初期値:0.0000,0.0000)
ビューポートでのスナップ原点

SNAPUNIT

現在のビューポートでのスナップ間隔(X方向とY方向)を設定する。

内容
2D座標ビューポートでのX方向とY方向のスナップ間隔

③ 図面範囲

EXTMAX

オブジェクト範囲の右上座標が格納される。読み込み専用なので値の書き換えはできない。

内容
3D座標オブジェクト範囲の右上座標

EXTMIN

オブジェクト範囲の左下座標が格納される。 読み込み専用なので値の書き換えはできない。

内容
3D座標オブジェクト範囲の左下座標

LIMMAX

図面範囲の右上座標が格納される。ペーパー空間がアクティブで、用紙の背景または余白が表示されている場合は読み込み専用。

内容
2D座標図面範囲の右上座標

関連コマンド:LIMITS

LIMMIN

図面範囲の左下座標が格納される。ペーパー空間がアクティブで、用紙の背景または余白が表示されている場合は読み込み専用。

内容
2D座標図面範囲の左下座標

関連コマンド:LIMITS

④ 単位と角度設定

ANGBASE

現在のユーザー座標系での0度方向を設定する。

内容
0~360
(初期値 0.0000)
0度方向を表す角度

関連コマンド:UNITS

ANGDIR

角度を測るときの正となる方向を設定する。

内容
0(初期値)反時計回りを正の方向とする
1時計回りを正の方向とする

関連コマンド:UNITS

AUNITS

角度の単位を設定する。

内容
0(初期値)十進数
1度 / 分 / 秒
2グラジエント
3ラジアン
4測量用単位

関連コマンド:UNITS

AUPREC

角度の小数点以下を何桁表示するか設定できる。

内容
0~8の整数
(初期値:0)
角度を表示するときの少数点以下の桁数

関連コマンド:UNITS

LUNITS

長さの単位を設定する。

内容
1指数表記
2(初期値)十進数
3工業図面表記
4建築図面表記
5分数表記

関連コマンド:UNITS

LUPREC

長さの小数点以下を何桁表示する設定できる。

内容
0~8の整数
(初期値:4)
長さを表示するときの少数点以下の桁数

⑤ 面取り・フィレット

CHAMMODE

面取りを作成するときの入力方法を設定する。

内容
0(初期値) 2つの面取り長さを指定する
1 面取り後の長さと角度を指定する

関連コマンド:CHAMFER

CHAMFERA

CHAMMODEが0に設定されているとき、1本目の面取り長さを設定する。

内容
実数
(初期値:0.0000)
1本目の面取り長さ

関連コマンド:CHAMFER

CHAMFERB

CHAMMODEが0に設定されているとき、2本目の面取り長さを設定する。

内容
実数
(初期値:0.0000)
2本目の面取り長さ

関連コマンド:CHAMFER

CHAMFERC

CHAMMODEが1に設定されているとき、面取り後の長さを設定する。

内容
実数
(初期値:0.0000)
面取り後の長さ

関連コマンド:CHAMFER

CHAMFRED

CHAMMODEが1に設定されているとき、面取りの角度を設定する。

内容
実数
(初期値:0.0000)
面取りの角度

関連コマンド:CHAMFER

FILLETRAD

FILLETコマンドで使用する円弧の半径を設定する。

内容
実数
(初期値:0.0000)
FILLETコマンドで使用する円弧の半径

関連コマンド:FILLET

⑥ 画層と現在設定

CLAYER

現在層を設定する。存在しない画層は設定できない。

内容
画層名
(初期値:"0")
現在層の名前

関連コマンド:LAYER

CELCOLOR

作図する図形の色を設定する。

内容
BYLAYER(初期値)画層の色に従う
BYBLOCK ブロックの色に従う
1~255の整数カラーインデックス
000,000,000~255,255,255 RGB値またはHSL値
red、yellow、green、
cyan、blue、magenta、while
あらかじめ設定されている色の名前
(カラーインデックスの1~7)

関連コマンド:COLOR

CELTYPE

作図する図形の線種を設定する。ロードしていない線種は設定できない。

内容
線種名
(初期値:BYLAYER)
作図する図形の線種名

関連コマンド:LINETYPE

DIMLAYER

新しい寸法が作成される画層を指定する。ピリオド(.) 以外の値を指定した場合は、現在層(システム変数 CLAYER)より優先され、存在しない画層を指定したときは対象の画層が自動的に作成される。

内容
画層名
※初期値:ピリオド(.) (現在層)
寸法を作成する画層

HPLAYER

新しく作成するハッチングおよび塗り潰しの画層を指定する。ピリオド(.) 以外の値を指定した場合は現在層(システム変数 CLAYER)より優先され、存在しない画層を指定したときは対象の画層が自動的に作成される。

内容
画層名
※初期値:ピリオド(.) (現在を使用)
ハッチングおよび塗り潰しを作成する画層

TEXTLAYER

新しく作成する文字オブジェクトおよび新規マルチテキストオブジェクトの画層を指定する。ピリオド(.) 以外の値を指定した場合は現在層(システム変数 CLAYER)より優先され、存在しない画層を指定したときは対象の画層が自動的に作成される。

内容
画層名
※初期値:ピリオド(.) (現在を使用)
文字オブジェクトおよびマルチテキストオブジェクトを作成する画層

⑦ その他

COMPAREPROPS

COMPAREコマンドで比較対象に含めるオブジェクトプロパティを指定する。値を合計することで複数のオブジェクトプロパティを指定できる。

内容
0オブジェクトプロパティの変更は図面比較に含めない
1
2画層
4線種
8線種尺度
16線の太さ
32透過性
64厚さ
はこ
はこ

7を指定した場合は色、画層、線種が比較対象に追加されます。

関連コマンド:COMPARE

MIRRTEXT

MIRRORコマンドで文字をどのように鏡像するか設定できる。

内容
0(初期値)文字の表示方向は変更しないで鏡像にする
1文字をそのまま鏡像にする
system-variable_mirrtext

関連コマンド:MIRROR

TDINDWG

直前の保存操作から次の保存操作までの総経過時間(日数)が格納される。読み込み専用。

内容
実数総経過時間を日数で表した実数
はこさん。
はこさん。

秒数を求めるときは小数点以下の値に86400をかけてください。

AutoLISP×システム変数で効率化を始めよう

system-variable_caption4

今回はご紹介したgetvarとsetvarについて以下にまとめます。

関数内容使用例
getvarシステム変数の現在値を取得する(getvar "CLAYER") → 現在層を取得
setvarシステム変数の現在値を変更する(setvar "CLAYER" "layer1") → 現在層を"layer1"に変更

システム変数を変更したり、現在の設定を確認したりすることで、作図の効率や快適さが大きく変わります。システム変数を上手に活用して、もっと自分に合ったAutoCADの作図環境を整えてみてください。

AutoCADが楽になるプログラムを作成します AutoCADを効率化して面倒な作業から解放されましょう!

-AutoLISP関数, 関数解説