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;
 }
Example #2
0
        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);
        }
Example #3
0
        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);
        }