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番目とその他のフィールドのアイソセンタ座標の距離をそれぞれ計算し、論理演算子を用いて距離がゼロではない場合に isoChkFlgfalse に変更します。 isoChkFlgfalse の場合は、アイソセンタが同一ではないという文字列を生成させます。

記述するコードは以下の通りです。

 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");
}