Gコードパーサー-1の続き
rs274ngcparser
ユーティリティ的なクラスについて
ValueXYZEF
Gコードの中でよく利用される距離に関係する、X, Y, Z, E, Fに関して、情報を保持している。Fは若干違うが。
一応、それぞれの値は次のような意味を持っている。
- X, Y, Z
それぞれの軸に関しての絶対座標値
ValueXYZEF内での単位はmmで取り扱っている。 - E
フィラメントの送り出し量
ValueXYZEF内での単位はmmで取り扱っている。 - F
移動時のスピードに関しての情報
ValueXYZEF内での単位はmm/分で取り扱っている。
Gコードでは、これら座標値の単位・取扱いはG91, G90, G20, G21で変わってくる。
G90/91が指定されていると、それ以降の座標値は、それぞれ相対座標・絶対座標で示されることを表す。
G20/21がが指定されていると、それ以降の座標値は、それぞれインチ・mmで示されることを表す。
ValueXYZEF内では、G90/91, G20/21を解釈し、G1が指定されたときに、X, Y, Z, E, Fをmmの絶対値になるよう変換し保持している。
自分自身のICommandActor派生クラス内では、ValueXYZEFを保持し、PreAction(), ActionLine()で呼び出すことで、利用するのがいい。
例えば以下のような感じ。
class HogeHoge: ICommandActor {
ValueXYZEF current_ = new ValueXYZEF();
public bool ActionLine(LineCommand line) {
if (current_.ActionLine(line)) {
// 独自処理
return true;
}
return false;
}
public void PostAction() {
current_.PostAction();
}
public void PreAction() {
current_.PreAction();
}
}
OutputGCode
修正したGコードの情報をファイルに出力するためのメソッド類を保持するクラス。
ToString()にて、LineCommandもしくはValuePositionの情報を文字列化する。
例えば、以下の様に使うことで、読み込んだ行とほぼ同じ内容のものをコンソールに出力することができる。
public bool ActionLine(LineCommand line) {
Console.WriteLine(OutputGCode.ToString(line));
return true;
}
座標値に関しては、ValuePositionの小数点桁数も利用している。そのため、特に何も指定せずとも、例えばX1.00と記述されたものをX1.00と出力することが可能になっている。
OutputGCodeはLineCommand.Modifyで編集した結果を出力するようなケースで使うのが多いと思う。
例えば、上記コードに対して、さらに情報を修正するコードを入れてみると。
public bool ActionLine(LineCommand line) {
line.Modify('Z', (x) => x.Value += offsetZ);
Console.WriteLine(OutputGCode.ToString(line));
return true;
}
これで、Z座標に対してオフセットした結果を出力するというコマンドになる。
rs274ngcparserの説明に関しては以上。
コメント