5.3 同一アイソセンタのチェック¶
目的¶
各フィールドのアイソセンタ座標が同一であることをチェックします。
必要な情報¶
各フィールドのアイソセンタ座標
与えられている引数¶
PlanSetup
クラスのインスタンスplan
必要な情報へのアクセス方法¶
現在開いているプランからフィールド情報へアクセスするには、以下のようにします。
各フィールド(Beam)のアイソセンタ情報 IsocenterPosition はVVector構造体として返され、座標をmm単位で取得できます。
VVector はEclipse Scripting APIで提供されている「VMS.TPS.Common.Model.Types」の名前空間で定義された構造体で、3D空間でのベクトルを表します。
1 2 3 4 5 6 7 8 9 10 | //Beamクラスのインスタンスbeamsを取得 var beams = plan.Beams; //最初のフィールドのアイソセンタ情報を取得 VVector isoCNT = beam.ElementAt(0).IsocenterPosition; //アイソセンタ座標の取得 double iso_X = isoCNT.x; double iso_Y = isoCNT.y; double iso_Z = isoCNT.z; |
2つのVVectorで表される座標間の距離を計算するにはVVector構造体のDistanceメソッドを使います。
1 | distance = VVector.Distance(isoCNT1, isoCNT2); |
必要な情報の表示¶
Exercise_PlanCheck_Ex1.2.cs
を開き、関数 CheckPlanFunc 内にコードを記述してみましょう。
1 2 3 4 | //最初のフィールドのアイソセンタ情報を取得 VVector isoCNT = plan.Beams.ElementAt(0).IsocenterPosition; MessageBox.Show(string.Format("Isocenter(X) position[mm]: {0}\nIsocenter(Y) position[mm]: {1}\nIsocenter(Z) position[mm]: {2}\n", isoCNT.x, isoCNT.y, isoCNT.z)); |
実装¶
Exercise_PlanCheck_Ex1.2.cs
を開き、関数 CheckPlanFunc 内の次の1行のコメントを解除します。
1 | //checkName = "Check single isocenter";
|
関数 CheckFieldFunc 内の下記部分にコードを記述しましょう。
1 2 3 4 5 | // Check isocenter // Plan isocenter must be single point checkName = "Check single isocenter"; ~~以下にコードを記述~~ |
各フィールドのアイソセンタを表すVVector間の距離がそれぞれゼロであれば、アイソセンタが同一であると言えますので、 foreach 文と VVector.Distance メソッドを使って計算します。
判定結果を保持させるbool変数 isoChkFlg を定義し、1番目とその他のフィールドのアイソセンタ座標の距離をそれぞれ計算し、論理演算子を用いて距離がゼロではない場合に isoChkFlg を false に変更します。
isoChkFlg が false の場合は、アイソセンタが同一ではないという文字列を生成させます。
記述するコードは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | bool isoChkFlg = true; // Get 1st field isocenter position VVector isoCNT = plan.Beams.ElementAt(0).IsocenterPosition; foreach (var beam in plan.Beams) { // Compare isocenter position of 1st field with others if (VVector.Distance(beam.IsocenterPosition, isoCNT) != 0) { isoChkFlg = false; } } if (isoChkFlg == true) { // If true, add text[O] to the string oText += MakeFormatText(true, checkName, ""); } else { //If false, add the parameters and text[X] to the string oText += MakeFormatText(false, checkName, "multiple isocenter"); } |