マクロを作成したり、プルダウン メニュー ラベルを変更する付加的な方法として、カスタマイズ(CUI/CUIx)ファイルで DIESEL 文字列式を使用することができます。
ユーザ インタフェース要素で使用することができる DIESEL 式は、$セクション=サブメニュー形式に従う必要があります。ここでは、セクション名は M で、サブメニューは任意の DIESEL 式です。
次の例を考えてみます。
^C^C^P$M=$(if,$(=,$(getvar,cvport),1),mspace,pspace)
この DIESEL 式は、システム変数 CVPORT の現在の値に基づいて、モデル空間とペーパー空間を切り替える方法を提供します。CVPORT が 1 に設定されている場合は MSPACE[モデル空間]コマンドが実行され、それ以外の場合は PSPACE[ペーパー空間]コマンドが実行されます。この式は割り込みで評価されます。MENUECHO のオン/オフを切り替える特殊文字 ^P を省略すると、この式では、実行されたコマンドだけが表示されます。
次の例の DIESEL 式は、システム変数 DIMSCALE の現在の値に 0.5 を掛けて、-INSERT[ブロック挿入]コマンドで Note ブロックを挿入するときの尺度係数を計算するために使用されます。
^C^C-insert;note;0,0;$M=$(*,$(getvar,dimscale),0.5);;0;
DIESEL 式は、プルダウン メニュー項目のラベルを定義する場合にも使用できるので、メニューを使用できなくする、またはメニューの表示方法を変更することができます。DIESEL 式をプルダウン メニューのラベルで使用するときは、最初の文字は $ にする必要があります。
この例では、現在の画層は BASE に設定され、以下の DIESEL 式がプルダウン メニューのラベルとして使用されます。
$(eval,"Current layer: " $(getvar,clayer))
この結果、現在の画層が変更されるとプルダウン メニューが更新され、常に適切なプルダウン メニューが表示されます。たとえば、現在の画層が BASE に設定されていると、次のように表示されます。
現在の画層: BASE
DIESEL で生成されたメニュー ラベルの幅が広くなりそうな場合は、次の例を使用すると、確実にラベルをメニュー幅に収めることができます。この例では、システム変数 CLAYER の現在の値の最初の 10 文字が表示されます。
$(eval,"Current value: " $(substr,$(getvar,clayer),1,10))
メニュー ラベルの行末に空白を挿入しても、メニュー幅を広げることはできません。これは、メニューのロード時には、行末の空白は無視されるからです。メニュー ラベルの幅を広げるための空白は、DIESEL 式の中になければなりません。
次の例では、同じ DIESEL 式をラベルとメニュー マクロの一部に使用しています。 これは、現在の日付を図面に入力する実用的な方法です。
メニュー ラベル
$(edtime,$(getvar,date),DDD", "D MON YYYY)
マクロ
^C^Ctext \\\ $M=$(edtime,$(getvar,date),DDD", "D MON YYYY);
また、DIESEL マクロを使用すると、プルダウン メニュー ラベルにマークを付けたり、使用できないようにすることができます。コマンドがアクティブになっている間は、次に示すプルダウン メニュー ラベルは使用できない状態で表示されます。コマンドがアクティブになっていないときには、通常表示になります。
$(if,$(eq,$(getvar,tilemode),1),~)&Polygonal Viewport
同様の方法で、プルダウン メニュー項目の横にマークを付けたり、そのマークに使用される文字を変更することができます。
$(if,$(and,$(getvar,ucsicon),1),!.)&On