public CollisionCheckViewModel GetFieldCollisionSummary(Beam beam, bool view, string shortestDistanceBody, string shortestDistanceTable, string status) { var collisionSummary = new CollisionCheckViewModel { View = view, FieldID = beam.Id, GantryToBodyDistance = shortestDistanceBody + " cm", GantryToTableDistance = shortestDistanceTable + " cm", Status = status }; return collisionSummary; }
public CollisionCheckViewModel CalculateBeamCollision(PlanSetup planSetup, Beam beam) { var calculator = new CollisionSummariesCalculator(); var modelGroup = new Model3DGroup(); var isoctr = GetIsocenter(beam); bool isVMAT = false; bool isStatic = false; bool isElectron = false; bool isSRSArc = false; var collisionSummary = new CollisionCheckViewModel(); MeshGeometry3D bodyMesh; var iso3DMesh = CalculateIsoMesh(isoctr); var body = planSetup.StructureSet.Structures.Where(x => x.Id.Contains("BODY")).First(); Structure couch = null; MeshGeometry3D couchMesh = null; try { foreach (Structure structure in planSetup.StructureSet.Structures) { if (structure.StructureCodeInfos.FirstOrDefault().Code == "Support") { couch = structure; couchMesh = couch.MeshGeometry; } } } catch { couch = null; } bodyMesh = body.MeshGeometry; var collimatorMaterial = new DiffuseMaterial(new SolidColorBrush(Colors.Green)); if (beam.EnergyModeDisplayName.Contains("E")) { isElectron = true; } if (beam.EnergyModeDisplayName.Contains("SRS")) { isSRSArc = true; } if (beam.MLCPlanType.ToString() == "VMAT" || beam.Technique.Id.Contains("ARC")) { isVMAT = true; collimatorMaterial = collimatorMaterialVMAT; } if (beam.Technique.ToString().Contains("STATIC")) { isStatic = true; collimatorMaterial = collimatorMaterialStatic; } MeshGeometry3D collimatorMesh = CalculateCollimatorMesh(beam, isoctr, isVMAT, isStatic, isElectron, isSRSArc); collisionSummary = calculator.GetFieldCollisionSummary(beam, couch, body); modelGroup.Children.Add(new GeometryModel3D { Geometry = iso3DMesh, Material = redMaterial, BackMaterial = redMaterial }); modelGroup.Children.Add(new GeometryModel3D { Geometry = collimatorMesh, Material = collimatorMaterial, BackMaterial = darkblueMaterial }); return(collisionSummary); }
public CollisionCheckViewModel GetFieldCollisionSummary(Beam beam, Structure couch, Structure body) { Point3D isoctr = GetIsocenter(beam); MeshGeometry3D iso3DMesh = CalculateIsoMesh(isoctr); bool isVMAT = false; bool isStatic = false; bool isElectron = false; bool isSRSArc = false; var collimatorMaterial = new DiffuseMaterial(new SolidColorBrush(Colors.Green)); if (beam.EnergyModeDisplayName.Contains("E")) { isElectron = true; } if (beam.EnergyModeDisplayName.Contains("SRS")) { isSRSArc = true; } if (beam.MLCPlanType.ToString() == "VMAT" || beam.Technique.Id.Contains("ARC")) { isVMAT = true; collimatorMaterial = collimatorMaterialVMAT; } if (beam.Technique.ToString().Contains("STATIC")) { isStatic = true; collimatorMaterial = collimatorMaterialStatic; } var bodyMesh = body.MeshGeometry; MeshGeometry3D collimatorMesh = CalculateCollimatorMesh(beam, isoctr, isVMAT, isStatic, isElectron, isSRSArc); string shortestDistanceBody = "2000000"; string shortestDistanceTable = "2000000"; string status = "Clear"; shortestDistanceBody = ShortestDistance(collimatorMesh, bodyMesh); if (couch != null) { var couchMesh = couch.MeshGeometry; shortestDistanceTable = ShortestDistance(collimatorMesh, couchMesh); } else { shortestDistanceTable = " - "; status = " - "; } Console.WriteLine(beam.Id + " - gantry to body is " + shortestDistanceBody + " cm"); Console.WriteLine(beam.Id + " - gantry to table is " + shortestDistanceTable + " cm"); if (shortestDistanceTable != " - ") { if ((Convert.ToDouble(shortestDistanceBody) < 3.0) || (Convert.ToDouble(shortestDistanceTable) < 3.0)) { collimatorMaterial = new DiffuseMaterial(new SolidColorBrush(Colors.Red)); status = "Collision"; } if ((Convert.ToDouble(shortestDistanceBody) < 4.0) || (Convert.ToDouble(shortestDistanceTable) < 4.0)) { collimatorMaterial = new DiffuseMaterial(new SolidColorBrush(Colors.Red)); status = "Warning"; } } var collisionSummary = new CollisionCheckViewModel { View = true, FieldID = beam.Id, GantryToBodyDistance = shortestDistanceBody + " cm", GantryToTableDistance = shortestDistanceTable + " cm", Status = status }; return(collisionSummary); }