8.2 HU値オーバーライドのチェック

目的

HU値がオーバーライドされているストラクチャが存在するかチェックし、存在する場合はそのストラクチャのIDとHU値を表示する。

必要な情報

ストラクチャのHU値がオーバーライドされているか、オーバーライドされている場合はその割り当てられているHU値

与えられている引数

PlanSetupクラスのインスタンスplan

必要な情報へのアクセス方法

GetAssignedHU()メソッドはbool型でHU値オーバーライドの有無を返します。またout修飾子で割り当てられているHU値を返します。

1
2
3
4
5
//割り当てられているHU値を格納するdouble型AssignedHUを定義
double AssignedHU = new Double();

//最初のストラクチャのHU値オーバーライドの有無をisAssignedに、割り当てられているHU値をAssignedHUに取得する。
bool isAssigned = plan.StructureSet.ElementAt(0).GetAssignedHU(out AssignedHU);

plan.StructureSet.StructuresはIEnumerableインターフェースを実装しているので、 以下のようにforeachで各Structureを順次処理可能です。

1
2
3
4
foreach(var structure in plan.StructureSet.Structures)
{
    //処理
}

必要な情報の表示

Exercise_PlanCheck_Ex1.3.csを開き、関数CheckStructureFunc内に以下のコードを記述します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
string HUAssigned = "";

foreach (Structure st in ss.Structures)
{
    double AssignedHU = 0;
    bool isAssigned = st.GetAssignedHU(out AssignedHU);
    if (isAssigned)
    {
        HUAssigned +=  st.Id + ": " + string.Format("{0}", AssignedHU) + "HU" + "\n";
    }
}
MessageBox.Show(HUAssigned);
HU値がオーバーライドされているストラクチャのIDとそのHU値が表示されます。 表示されている内容に間違いがないかEclipseで確認しましょう。

実装

HU値がオーバーライドされているかの判定に利用するbool型AssignedFlag、チェックをパスしなかった場合に表示する文字列をstring型HUAssignedで定義します。

1
2
bool AssignedFlag = false;
string HUAssigned = "";

foreachで各ストラクチャを順次処理します。 HU値オーバーライドの有無をisAssignedに、割り当てられているHU値をAssignedHUに取得し、HU値オーバーライドがある場合はそのストラクチャIDと割り当てられているHU値をHUAssignedに追加します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
foreach (Structure st in ss.Structures)
{
    double AssignedHU = 0;
    bool isAssigned = st.GetAssignedHU(out AssignedHU);
    if (isAssigned)
    {
        AssignedFlag = true;
        HUAssigned += " (" + st.Id + ": " + string.Format("{0}", AssignedHU) + "HU" + ")";
    }
}

判定フラグの内容によりMakeFormatTextによりそれぞれの場合の文字列を生成します。

1
2
3
4
5
6
7
8
if (AssignedFlag == false)
{
    oText += "No Structure HU Overridden";
}
else
{
    oText += MakeFormatText(false, checkName, HUAssigned);
}