8.1 輪郭命名規則のチェック¶
目的¶
輪郭名の命名規則をチェックします。本実習では、DICOM typeが PTV になっている輪郭が、「PTV」という名前から始まっているかを判定しましょう。
必要な情報¶
輪郭名、輪郭のDICOM Type
与えられている引数¶
PlanSetup
クラスのインスタンスplan
必要な情報へのアクセス方法¶
プランで用いられているStructureSetの取得
1 | var ss = plan.StructureSet; |
StructureSetに含まれるStructureオブジェクトのコレクション
1 | var structures = ss.Structures; |
必要な情報の表示¶
Exercise_PlanCheck_Ex1.3.cs
を開き、関数CheckStructureFunc
内に以下のコードを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var ss = plan.StructureSet; var structures = ss.Structures; string m = ""; // foreachでstructuresをループ foreach (var s in structures) { if (s.DicomType == "PTV") { m += s.Id + "\n"; } } MessageBox.Show(m); |
StructureのDicomTypeがPTVのものだけ抽出し、それを表示しています。 表示されたStructureのDicomTypeをEclipseで表示し、間違いがないか確認しましょう。
実装¶
まず、Exercise_PlanCheck_Ex1.3.cs
のCheckStructureFunc
内の以下の部分をコメントアウトします。
1 2 3 | // 輪郭の命名規則のチェック // Volume TypeがPTVの場合に輪郭名がPTVから始まっているかチェック checkName = "Check structure ID"; |
まず、チェック判定を行うフラグと、出力する文字列を定義しておきましょう。
1 2 | string checkStructureText = "\n"; bool checkStructureId = true; |
foreach
文を使い、Structure
オブジェクトを順番に取得して処理します。
DICOM Type を取得する場合は、Structure
クラスのDicomType
プロパティにアクセスします。
また、輪郭名の文字列が「PTV」から始まっているかは、string.StartsWith(文字列)
とすることで判定可能です。
1 2 3 4 5 6 7 8 9 10 11 | foreach (var s in ss.Structures) { if (s.DicomType == "PTV") { if (!s.Id.StartsWith("PTV")) { checkStructureText += string.Format("{0} should start with PTV\n", s.Id); checkStructureId = false; } } } |
最後に結果を出力すればOKです。
1 2 3 4 5 6 7 8 | if (checkStructureId) { oText += MakeFormatText(true, checkName, ""); } else { oText += MakeFormatText(false, checkName, checkStructureText); } |