AutoCADLT2002 Tips−01




 
DIESEL 文字列関数
 DIESEL 関数は、ステータスを調べたり、計算や表示を行う。関数名自体を含めてパラメータが 10 個に制限されている。
DIESEL 関数を持ったマクロコマンドの能力と限界は?

 
加減乗除と等号、不等号
 

$(+, val1[, val2, ..., val9] )
$(-, val1[, val2, ..., val9] )
$(*, val1[, val2, ..., val9] )
$(/, val1[, val2, ..., val9] )

 $(..)の内側がDIESEL関数文字言語とするルールのため、このようなスタイルになる。

$(=, val1, val2)
$(< , val1, val2)
$(>, val1, val2)
$(!=, val1, val2)
!=(等しくない)
$(>=, val1, val2)
$(<=, val1, val2)

 条件式が真なら 1 を返し、それ以外の場合は 0 。

 
論理式
 

 整数論理式。
AND(ビット論理積)
$(and, val1[, val2,..., val9] )
OR(ビット論理和)
$(or, val1[, val2,..., val9])
XOR(ビット排他論理和)
$(xor, val1[, val2,..., val9] )

 

文字列
 

$(eq, str1, str2)
str1,str2が一致した場合は 1 を返す。 それ以外の場合は 0。

$(eval, str)
文字列strをDIESEL の評価プロセスに渡し、評価結果を返す。

$(strlen, string)
stringの長さを文字数で返す。

$(substr, string, start[, length] )
start で指定した文字から length で指定した文字数の部分文字列が返される。
文字には、1 から番号が割り当てられる。 length を省略すると、文字列の残り全部を返す。

$(upper, string)
stringが、大文字に変換して返される。

$(linelen)
ディスプレイで表示可能な最長のステータス行の長さを文字数で返す。 MODEMACRO のステータス行にのみ有効。


 

書式
 

実数
$(fix, value)
実数valueの小数点以下を切り捨て整数を返す。

$(rtos, value[, mode, precision] )
value を、mode と precision で指定した形式の実数として編集する。省略した場合は、UNITS コマンドで選択した現在の値が使用われる。
     mode :
     1: 指数表記 1.55E+01
     2: 十進表記 15.50
     3: 工業図面表記 1'-3.50"
     4: 建築図面表記 1'-3 1/2"
     5: 分数表記 15 1/2

角度の値
$(angtos, value[, mode, precision] )
角度の値valueを、単位mode と precision で指定した形式で編集しますprecisionを省略すると、UNITS[単位管理]コマンドで選択した現在の値が使用される。

日付と時刻
$(edtime, time, picture)
timeで与えられたユリウス暦の日付を編集します (与えられた picture に基づいて たとえば $(getvar,date)から取得した日付を編集します)。picture は、特定の表現の日付と時刻に置き換えられる 書式文字列で構成されています。


 

変数
 

$(getenv, varname)
環境変数varnameの値を返す。
変数が定義されていない場合は、空の文字列を返す。

$(getvar, varname)
varnameで指定されたシステム変数の値を返す。

 

選択
 

$(if, expr, dotrue[, dofalse] )
exprの値がゼロ以外の場合にdotrueを処理。それ以外はdofalse。


$(index, which, string)
カンマで区切られた文字列のうちの指定されたメンバを返。
引数stringには、カンマで区切られた 1 つ以上の値が格納されているとする。引数whichは、それらの値の 1 つを抽出するための番号で、先頭の番号はゼロ。
この関数は、$(getvar)によって返される点の座標からX、Y、Zを抽出するために頻繁に使用さる。

$(nth, which, arg0[, arg1,..., arg7] )
whichで選択された引数を評価して返す。
whichが 0 の場合は arg0を返す。他の値の場合もこの要領で返す。


$(nth)は、一連の引数のうちの 1 つを返す。一方、$(index)は、単一の引数として渡されたカンマで区切られた文字列から 1 つの値を抽出する。


 

システム変数
 

AutoCADLTのシステム変数は200個程ある。ヘルプのリファランスを 参照されたい。
その中で、使えそうと思えるものは少ない。目的を「オブジェクト の長さや面積を集計計算して表を作成」という観点に立っての話しだが。 以下、リファランス抜粋をメモする。

CMDNAMES
(読み込み専用)
タイプ: 文字列
保存先: なし
アクティブなコマンドと割り込みコマンドの名前を表示。
値が LINE'ZOOM の場合、LINEコマンドの実行中にZOOMコマンド
が割り込みモードで使用されていることを示す。

DISTANCE 
(読み込み専用)
タイプ: 実数
保存先: なし
DIST[距離計算]コマンドによって計算された距離を格納。

AREA 
(読み込み専用)
タイプ: 実数
保存先: なし
AREA には、コマンドとシステム変数の両方がある。
システム変数 AREA は、AREA[面積計算]コマンドで最後に計算
された面積を格納。
 コマンドプロンプトにarea と入力すると AREA コマンドが実行
されるので、システム変数 AREA にアクセスするには
SETVAR[enter]AREA[enter]とする。

LASTANGLE 
(読み込み専用)
タイプ: 実数
保存先: なし
最後に入力された円弧の終点での角度を格納。
現在のUCS の XY 平面を基準としてる。

LASTPOINT 
タイプ: 3D 点
保存先: なし
初期値: 0.0000,0.0000,0.0000
最後に入力された点を、現在UCS 座標値で格納。
この点は、キーボードからの入力時に、
アット記号(@)で参照できる。

MODEMACRO
タイプ: 文字列
保存先: なし
初期値: ""
文字列をステータス行に表示する。 

MODEMACROを使用すれば、普通の文字列を表示できます。
また マクロ特殊文字列を指定すれば、その文字列を
 AutoCAD LT に評価させながら、ステータス行をユーザ
の選択条件に基づいて表示できる。 


PERIMETER 
(読み込み専用)
タイプ: 実数
保存先: なし
AREA[面積計算]またはLIST[オブジェクト情報]の各コマンド
で最後に計算した周囲の長さを格納。

これらは、マクロコマンド内では$(getvar, varname)で読み取られる。 直接コマンドラインに打ち込んでも閲覧できる。

$(getenv, varname)
環境変数varnameの値を返す。
変数が定義されていない場合は、空の文字列を返す。


 

MODEMACRO を使って見る。
 

システム変数 MODEMACRO は、ステータス行のユーザ定義領域をコントロールできます。文字列の長さとしては最大 460 文字の範囲です。
MODEMACRO は、 コマンド: に対して modemacro と入力することによりアクセスできます。
MODEMACRO の設定を変えることで、さまざまな形式のステータス行を試すことができますが、この方法で入力できる最大文字数は 255 です。

ステータス行に会社名を表示するには、次のように入力します。
コマンド: modemacro[enter]
MODEMACRO の新しい値、または .=なし <" ">: 東海工務設計事務所
MODEMACRO の新しい値、または .=なし <"東海工務設計事務所">:

ピリオド(.)を入力して、MODEMACRO を空白の文字列にすると、標準のステータス行が表示されます。

ステータス行に現在の文字スタイル名を表示してみます。
コマンド:modemacro[enter]
MODEMACRO の新しい値、または .=なし <" ">:文字スタイル:$(getvar, textstyle)

$(getvar, varname) と入力することで、どのシステム変数の値でも取得できます。ステータス行のマクロ式が現在の設定で置き換えられます。次に、文字スタイルを切り替えると、新しい文字スタイル名がステータス行に表示されます。

DIESEL はドル記号($)、または引用符で囲まれた文字列を検出するまで、入力を直接、出力にコピーします。

引用符で囲まれた文字列を使用すると、DIESEL 関数として翻訳されないようにすることができます。
文字列内でクォーテーションを使用するには、クォーテーションを 2 つ続けます。


 

環境変数
 

 環境変数に記録するsetenvは、dieselにはない。コマンド には、setenvがある。システム変数に関してもsetvarv はない。コマンドとしてsetvarがある。
 diesel関数ルーチンはシステム情報を読み取り加工してコマンド に渡す。あとはコマンドが読書きする。diesel関数ルーチン 内部では、条件判断で値の選択ができる。待っているコマンド に渡して、それなりの動作をさせることができる。
 diesel関数はコマンドの能力を大きく補完していることが 分る。だが、一連のコマンドの流れの中でのボタンの オン/オフといった動きしかできない。diesel関数ルーチンから 抜け出したシークエンスには条件分岐のジャンプやリターンが ない。これはマクロというものの限界なのだろう。

 リターンやジャンプがないのなら、マクロで扱えるのは 一連の作業の一つの区切りでしかない。その後は、オペレーター が判断してマウスを操る。マクロがすべきことは、小さな区切り の洗練化である。このポジションでは、このオプションスイッチは 使わないとなれば、そのスイッチはなくすべきだろう。それが ツールバーのカスタマイズということだ。
 洗練された部署が連携するオートメーションはすばらしい。 だが、ある部署から次の部署への情報伝達が無かったら、 トータルとしてのシステムはひどく貧弱なものであろう。

 貧弱なマクロではあろうが、プルダウンメニューという 構造の中で洗練されたツールとするのには、各マクロ間 での情報の蓄積場所が必要だ。システム変数はシステムの 稼働情報を収集するリソース(資源)だろう。 加工した情報を蓄積する場所が必要だ。そこが環境変数ということ なのだろう。少なくともプルダウンメニューで行われる 一連の作業中に不安定になったり、消えてしまわない場所 があればいい。
 MS-DOS時代、PATHなどが環境変数に記録されていた。Windows でもシステムの各種情報を保持している。多くのアプリケーション はWindowsの環境変数を確認してインストールが行われる。 AutoCADLTはOSではないのでWindowsの環境変数領域に書き込みは しない。レジストリーのautodeskのAutocCADLTキーに書き込んでいる。 user1,user2を作り、適当な数字を設定して確認しておいた。

 必要の中から生まれる道具は、見た目の派手さはないが、 見る人によっては、キラッと光るものがある。そんな道具を ひとつくらいは持ちたいと思っている。

2003.10.13
by Kon