|
||
DIESEL 関数は、ステータスを調べたり、計算や表示を行う。関数名自体を含めてパラメータが 10 個に制限されている。 DIESEL 関数を持ったマクロコマンドの能力と限界は? |
$(-, val1[, val2, ..., val9] ) $(*, val1[, val2, ..., val9] ) $(/, val1[, val2, ..., val9] ) $(..)の内側がDIESEL関数文字言語とするルールのため、このようなスタイルになる。 $(< , val1, val2) $(>, val1, val2) $(!=, val1, val2) !=(等しくない) $(>=, val1, val2) $(<=, val1, val2) 条件式が真なら 1 を返し、それ以外の場合は 0 。 |
整数論理式。 |
$(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 コマンドで選択した現在の値が使用われる。
角度の値 $(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 は、ステータス行のユーザ定義領域をコントロールできます。文字列の長さとしては最大 460 文字の範囲です。 MODEMACRO は、 コマンド: に対して modemacro と入力することによりアクセスできます。 MODEMACRO の設定を変えることで、さまざまな形式のステータス行を試すことができますが、この方法で入力できる最大文字数は 255 です。
ステータス行に会社名を表示するには、次のように入力します。 |
環境変数に記録するsetenvは、dieselにはない。コマンド
には、setenvがある。システム変数に関してもsetvarv
はない。コマンドとしてsetvarがある。 diesel関数ルーチンはシステム情報を読み取り加工してコマンド に渡す。あとはコマンドが読書きする。diesel関数ルーチン 内部では、条件判断で値の選択ができる。待っているコマンド に渡して、それなりの動作をさせることができる。 diesel関数はコマンドの能力を大きく補完していることが 分る。だが、一連のコマンドの流れの中でのボタンの オン/オフといった動きしかできない。diesel関数ルーチンから 抜け出したシークエンスには条件分岐のジャンプやリターンが ない。これはマクロというものの限界なのだろう。 リターンやジャンプがないのなら、マクロで扱えるのは 一連の作業の一つの区切りでしかない。その後は、オペレーター が判断してマウスを操る。マクロがすべきことは、小さな区切り の洗練化である。このポジションでは、このオプションスイッチは 使わないとなれば、そのスイッチはなくすべきだろう。それが ツールバーのカスタマイズということだ。 洗練された部署が連携するオートメーションはすばらしい。 だが、ある部署から次の部署への情報伝達が無かったら、 トータルとしてのシステムはひどく貧弱なものであろう。 貧弱なマクロではあろうが、プルダウンメニューという 構造の中で洗練されたツールとするのには、各マクロ間 での情報の蓄積場所が必要だ。システム変数はシステムの 稼働情報を収集するリソース(資源)だろう。 加工した情報を蓄積する場所が必要だ。そこが環境変数ということ なのだろう。少なくともプルダウンメニューで行われる 一連の作業中に不安定になったり、消えてしまわない場所 があればいい。 MS-DOS時代、PATHなどが環境変数に記録されていた。Windows でもシステムの各種情報を保持している。多くのアプリケーション はWindowsの環境変数を確認してインストールが行われる。 AutoCADLTはOSではないのでWindowsの環境変数領域に書き込みは しない。レジストリーのautodeskのAutocCADLTキーに書き込んでいる。 user1,user2を作り、適当な数字を設定して確認しておいた。 必要の中から生まれる道具は、見た目の派手さはないが、 見る人によっては、キラッと光るものがある。そんな道具を ひとつくらいは持ちたいと思っている。 |
|