DIESEL

提供:GizmoLabs - だいたい CAD LISP なサイト
2020年9月9日 (水) 07:53時点におけるGizmon (トーク | 投稿記録)による版 (→‎評価タイミングの問題)

DIESEL式

DIESEL(Direct Interpretively Evaluated String Expression Language)式は、文字列を受け取り結果として文字列を返す言語。
DIESEL はメニュー マクロの中で使用したり、ステータス行に文字列を表示するために使用される。

DIESEL の関数

関数名 構文 内容
+ (加算) $(+, val1 [, val2, …, val9]) 数値 val1、val2、…、val9 の合計を返す。
- (減算) $(-, val1 [, val2 , …, val9]) 数値 val2 から val9 までの合計を val1 から減算した結果を返す。
* (乗算) $(*, val1 [, val2, …, val9]) 数値 val1、val2、…、val9 を乗算した結果を返す。
/ (除算) $(/, val1 [, val2, …, val9]) 数値 val1 を val2、…、val9 で除算した結果を返す。
= (に等しい) $(=, val1, val2) 数値 val1 と val2 が等しいと、この文字列は 1 を返し、それ以外の場合は 0(ゼロ)を返す。
< (より小さい) $(< , val1, val2) 数値 val1 が val2 より小さいと、この文字列は 1 を返し、それ以外の場合は 0(ゼロ)を返す。
> (より大きい) $(>, val1, val2) 数値 val1 が val2 より大きいと、この文字列は 1 を返し、それ以外の場合は 0(ゼロ)を返す。
!= (に等しくない) $(!=, val1, val2) 数値 val1 と val2 が等しくないと、この文字列は 1 を返し、それ以外の場合は 0(ゼロ)を返す。
>= (より小さいか等しい) $(<=, val1, val2) 数値 val1 が val2 より小さいか等しいと、この文字列は 1 を返し、それ以外の場合は 0(ゼロ)を返す。
<= (より大きいか等しい) $(>=, val1, val2) 数値 val1 が val2 より大きいか等しいと、この文字列は 1 を返し、それ以外の場合は 0(ゼロ)を返す。
and $(and, val1 [, val2, …, val9]) val1 から val9 までの整数の AND(ビット方式の論理積)を返す。
angtos $(angtos, value [, mode, precision]) 指定された形式と精度の角度値を返す。
edtime $(edtime, time, picture) 指定された picture に基づいて書式化された日付と時刻を返す。
eq $(eq, val1, val2) 文字列 val1 と val2 が同じなら、この文字列は 1 を返し、それ以外の場合は 0(ゼロ)を返す。
eval $(eval, str) 文字列 str を DIESEL 式として評価し、結果を返す。
fix $(fix, value) 実数 value の小数部を切り捨てて整数に変換する。
getenv $(getenv, varname) 環境変数 varname の値を返す。
getvar $(getvar, varname) varname で指定されたシステム変数の値を返す。
if $(if, expr, dotrue [, dofalse]) 条件評価式。
index $(index, which, string) カンマで区切られた文字列内の指定されたメンバーを返す。
nth $(nth, which, arg0 [, arg1,…, arg7]) which で選択した引数を評価して返す。
or $(or, val1 [, val2,…, val9]) val1 から val9 までの整数の OR(ビット方式の論理和)を返す。
rtos $(rtos, value [, mode, precision]) 指定された形式と精度の実数を返す。
strlen $(strlen, string) string の長さ(文字数)を返す。
substr $(substr, string, start [, length]) string の部分文字列を返す。返される部分文字列は start から始まり、length で指定された長さ。
upper $(upper, string) 各国語の規則に従って大文字に変換された string を返す。全角のアルファベットも正常に変換される。
xor $(xor, val1 [, val2,…, val9]) val1 から val9 までの整数の XOR(ビット方式の排他的論理和)を返す。


DIESEL エラー メッセージ

DIESEL 式では、エラーの性質に応じて、出力ストリームにエラー表示が埋め込まれる。 (IJCADではない。)

エラー メッセージ 説 明
$? 構文エラーです(通常、右括弧が抜けていたり、文字列がない場合)。
$(func,??) func の引数が間違っている。
$(func)?? func は、未定義の関数。
$(++) 出力文字列が長すぎます。評価は中止される。


DIESEL カスタマイズでのデバック

AutoCADでは、macrotrace を有効にすることで各ステップの評価を確認する事が出来る。
これによりステップの多い DIESEL 式を利用したカスタマイズを行いやすくなる。
(IntelliCADには、この機能はない。)


評価タイミングの問題

DIESEL カスタマイズを行っていると出てくる問題として、メニューマクロの評価タイミングの差異によりうまく動作しないというものがある。これは、PCの性能などにより、同じ DIESEL式でもPCによっては期待通りに動かない(評価結果が反映されない)というものである。 この問題については、メニューマクロの記述を変えることで評価のタイミングを変えるいうトリッキーな手法で回避できる場合があるが、状況対応であり根本的な解決にはならない。

例. 中心線を作成するマクロでの利用
^C^C_select;si;\$M=_select;p;\$M=_dist;nea;@;per;$(getvar,lastpoint);_offset;"""$M=$(/,$(getvar,distance),2)""";non;$(getvar,lastpoint);non;"$(getvar,lastpoint)";;

メニューで使用する制御文字

  • ^A : グループ選択 ON/OFF
  • ^B : スナップ ON/OFF
  • ^C : コマンドをキャンセル(ESCと同義)
  • ^D : 座標表示 ON/OFF
  • ^E : 等角面 切替
  • ^F : Oスナップ ON/OFF
  • ^G : グリッド ON/OFF
  • ^H : バックスペース([BackSpace])を発行
  • ^I : TABを発行
  • ^J : キャリッジ リターンを発行(;と同義)
  • ^K : -
  • ^L : -
  • ^M : キャリッジ リターンを発行(;と同義)
  • ^N : -
  • ^O : 直交モード ON/OFF
  • ^P : MENUECHO ON/OFF
  • ^Q : -
  • ^R : -
  • ^S : -
  • ^T : タブレット ON/OFF
  • ^U : 極スナップ ON/OFF
  • ^V : -
  • ^W : Oスナップトラッキング
  • ^X : バックスペース
  • ^Y : -
  • ^Z : メニュー項目の終わりの[Spacerbar]の実行追加を抑止