// SOLVER
        // Retrieves data from Grasshopper and changes component properties that can be accessed in the code-behind of stormcloud.xaml
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            //// GEOMETRY
            //// Use IGH_GeometricGoo to deal with different geometry types
            List <IGH_GeometricGoo> g = new List <IGH_GeometricGoo>();

            if (!DA.GetDataList <IGH_GeometricGoo>(0, g))
            {
                return;
            }                                                        // retrieves list of geometries as list of IGH_GeometricGoo
            List <Curve> curves = new List <Curve>();
            List <Mesh>  meshes = new List <Mesh>();
            List <Brep>  breps  = new List <Brep>();

            foreach (IGH_GeometricGoo goo in g)
            {
                GH_Line l = goo as GH_Line;
                if (l != null)
                {
                    GH_Curve lc = new GH_Curve();
                    l.CastTo <GH_Curve>(out lc);
                    curves.Add(lc.DuplicateCurve().Value);
                }
                GH_Curve c = goo as GH_Curve; // c = null if geometry is not a curve
                if (c != null)
                {
                    curves.Add(c.DuplicateCurve().Value); // add to curves if geometry is a curve
                    Console.WriteLine("There is a Curve");
                }
                GH_Mesh m = goo as GH_Mesh;
                if (m != null)
                {
                    GH_Brep br = new GH_Brep();
                    m.CastTo <GH_Brep>(out br);
                    breps.Add(br.DuplicateBrep().Value);
                }

                //GH_Surface s = goo as GH_Surface;
                //if (s != null)
                //{
                //    GH_Brep brs = new GH_Brep();
                //    s.CastTo<GH_Brep>(out brs);
                //    breps.Add(brs.DuplicateBrep().Value);
                //}

                GH_Brep b = goo as GH_Brep;
                if (b != null)
                {
                    breps.Add(b.DuplicateBrep().Value);
                }
            }



            //// Change values of relevant component properties

            DesignCurves = curves;
            DesignMeshes = meshes;
            DesignBreps  = breps;

            // DesignLines
            //List<Line> lines = new List<Line>();
            //if (!DA.GetDataList(0, lines)) { return; }
            //DesignLines = lines;
            // SCORE
            double score = 0; // instantiate score

            if (!DA.GetData(1, ref score))
            {
                return;
            }
            Score = score; // Change value of component property

            // Update model of main 3D viewports in stormcloud
            if (this.DesignView.InitialDesign.Score != 0)
            {
                DesignView.UpdateCurrentScore(Score);
            }
            else
            {
                DesignView.UpdateCurrentScore(1.00);
            }
            //DesignView.UpdateCurrentModel(DesignLines, RenderingSettings.diameter, RenderingSettings.resolutiontube, RenderingSettings.mat);
            DesignView.UpdateCurrentModelAdvanced(DesignCurves, DesignMeshes, DesignBreps, RenderingSettings.diameter, RenderingSettings.resolution, RenderingSettings.resolutiontube, RenderingSettings.mat);
        }