Exemple #1
0
        //Get list of materials and their corresponding gauge values
        protected override void BeforeSolveInstance()
        {
            Grasshopper.Kernel.Parameters.Param_Integer myMaterialParam = Params.Input[0] as Grasshopper.Kernel.Parameters.Param_Integer;
            myMaterialParam.ClearNamedValues();
            Grasshopper.Kernel.Parameters.Param_Integer myGaugeParam = Params.Input[1] as Grasshopper.Kernel.Parameters.Param_Integer;
            myGaugeParam.ClearNamedValues();

            //////////  Code for automatically loading Materials from XML when intance of class is initiated.
            IBIS_XML.Load("D:\\Dropbox\\_F13\\6338\\GH Plugin\\Ibis\\Ibis\\IBIS_XML.xml");
            List <String> myMaterialNameList = new List <string>();
            XmlNodeList   myList             = IBIS_XML.GetElementsByTagName("ThicknessMaterial");

            foreach (XmlNode mx in myList)
            {
                XmlElement x             = mx as XmlElement;
                string     myXMLMaterial = x.GetAttribute("type");
                myMaterialNameList.Add(myXMLMaterial);
            }

            for (int i = 0; i < myMaterialNameList.Count; i++)
            {
                myMaterialParam.AddNamedValue(myMaterialNameList[i], i + 1);
            }


            Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.GH_Integer> myMaterialValue = myMaterialParam.VolatileData as Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.GH_Integer>;

            if (myMaterialValue.IsEmpty)
            {
                return;
            }

            //Code to load the Gauge list depending on user Material input:-
            List <String> myGaugeList = new List <string>();

            IBIS_XML.Load("D:\\Dropbox\\_F13\\6338\\GH Plugin\\Ibis\\Ibis\\IBIS_XML.xml");
            foreach (Grasshopper.Kernel.Types.GH_Integer myThis in myMaterialValue.AllData(true))
            {
                switch (myThis.Value)
                {
                case 1:     //for standard steel
                    //////////Gauge numbers
                    XmlNodeList myNodeList1 = IBIS_XML.SelectNodes("IBIS/ThicknessGauge/ThicknessMaterial[@id=1]/Gauge");
                    foreach (XmlNode myNode in myNodeList1)
                    {
                        XmlElement myElement  = myNode as XmlElement;
                        String     myXMLGauge = myElement.GetAttribute("type");
                        myGaugeList.Add(myXMLGauge);
                    }

                    for (int i = 0; i < myGaugeList.Count; i++)
                    {
                        myGaugeParam.AddNamedValue(myGaugeList[i], i + 1001);
                    }
                    break;
                }
                return;
            }
        }
        public void SetComponentOutputs(Schema schema, IGH_DataAccess DA, List <IGH_Param> outputParams, GH_ActiveObject component)
        {
            foreach (var datatree in schema.Values)
            {
                string outputParamName = datatree.ParamName;
                if (outputParamName.StartsWith("RH_OUT:"))
                {
                    var chunks = outputParamName.Split(new char[] { ':' });
                    outputParamName = chunks[chunks.Length - 1];
                }
                int paramIndex = 0;
                for (int i = 0; i < outputParams.Count; i++)
                {
                    if (outputParams[i].Name.Equals(outputParamName))
                    {
                        paramIndex = i;
                        break;
                    }
                }

                var structure = new Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.IGH_Goo>();
                Grasshopper.Kernel.Types.IGH_Goo goo = null;
                foreach (var kv in datatree.InnerTree)
                {
                    var        tokens   = kv.Key.Trim(new char[] { '{', '}' }).Split(';');
                    List <int> elements = new List <int>();
                    foreach (var token in tokens)
                    {
                        if (!string.IsNullOrWhiteSpace(token))
                        {
                            elements.Add(int.Parse(token));
                        }
                    }

                    var path        = new Grasshopper.Kernel.Data.GH_Path(elements.ToArray());
                    var localBranch = structure.EnsurePath(path);
                    for (int gooIndex = 0; gooIndex < kv.Value.Count; gooIndex++)
                    {
                        goo = GooFromReshopperObject(kv.Value[gooIndex]);
                        localBranch.Add(goo);
                        //structure.Insert(goo, path, gooIndex);
                    }
                }
                if (structure.DataCount == 1)
                {
                    DA.SetData(paramIndex, goo);
                }
                else if (structure.PathCount == 1)
                {
                    DA.SetDataList(paramIndex, structure.AllData(false)); // let grasshopper handle paths
                }
                else
                {
                    DA.SetDataTree(paramIndex, structure);
                }
            }

            foreach (var error in schema.Errors)
            {
                component.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, error);
            }
            foreach (var warning in schema.Warnings)
            {
                component.AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, warning);
            }
        }
Exemple #3
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            Grasshopper.Kernel.Data.GH_Structure<DHr> hourTreeIn = new Grasshopper.Kernel.Data.GH_Structure<DHr>();
            string key = "";
            int subdivs = 0;
            if ((DA.GetDataTree(0, out hourTreeIn)) && (DA.GetData(1, ref key)) && (DA.GetData(3, ref subdivs)))
            {
                Interval ival_overall = new Interval();
                if (!DA.GetData(2, ref ival_overall)) {
                    // go thru the given hours and find the max and min value for the given key
                    ival_overall.T0 = MDHr.INVALID_VAL;
                    ival_overall.T1 = MDHr.INVALID_VAL;
                    foreach (DHr dhr in hourTreeIn.AllData(true)) {
                        float val = dhr.val(key);
                        if ((ival_overall.T0 == MDHr.INVALID_VAL) || (val < ival_overall.T0)) ival_overall.T0 = val;
                        if ((ival_overall.T1 == MDHr.INVALID_VAL) || (val > ival_overall.T1)) ival_overall.T1 = val;
                    }
                }

                Grasshopper.Kernel.Data.GH_Structure<DHr> hourTreeOut = new Grasshopper.Kernel.Data.GH_Structure<DHr>();
                Grasshopper.Kernel.Data.GH_Structure<Grasshopper.Kernel.Types.GH_Integer> freqTreeOut = new Grasshopper.Kernel.Data.GH_Structure<Grasshopper.Kernel.Types.GH_Integer>();
                Grasshopper.Kernel.Data.GH_Structure<Grasshopper.Kernel.Types.GH_Interval> ivalTreeOut = new Grasshopper.Kernel.Data.GH_Structure<Grasshopper.Kernel.Types.GH_Interval>();

                List<Interval> ivalList = new List<Interval>();
                if (ival_overall.IsDecreasing) ival_overall.Swap();
                double delta = ival_overall.Length / subdivs;
                for (int n = 0; n < subdivs; n++) {  ivalList.Add(new Interval(ival_overall.T0 + n * delta, ival_overall.T0 + ((n + 1) * delta)));  }

                for (int b = 0; b < hourTreeIn.Branches.Count; b++)
                {
                    Grasshopper.Kernel.Data.GH_Structure<DHr> hourBranch = new Grasshopper.Kernel.Data.GH_Structure<DHr>();
                    for (int n = 0; n < subdivs; n++) { hourBranch.EnsurePath(n); }
                    List<int> freqOut = new List<int>();

                    List<DHr> hrsIn = hourTreeIn.Branches[b];
                    foreach (DHr dhr in hrsIn)
                    {
                        if (dhr.val(key) < ivalList[0].T0)
                        {
                            hourBranch.Append(dhr, new Grasshopper.Kernel.Data.GH_Path(0));
                            continue;
                        }
                        if (dhr.val(key) > ivalList[ivalList.Count - 1].T1)
                        {
                            hourBranch.Append(dhr, new Grasshopper.Kernel.Data.GH_Path(ivalList.Count - 1));
                            continue;
                        }
                        for (int n = 0; n < subdivs; n++)
                        {
                            if (ivalList[n].IncludesParameter(dhr.val(key)))
                            {
                                hourBranch.Append(dhr,new Grasshopper.Kernel.Data.GH_Path(n));
                                break;
                            }
                        }
                    }

                    for (int bb = 0; bb < hourBranch.Branches.Count; bb++)
                    {
                        Grasshopper.Kernel.Data.GH_Path branch_path = hourTreeIn.Paths[b].AppendElement(bb);
                        hourTreeOut.AppendRange(hourBranch.Branches[bb], branch_path);
                        Grasshopper.Kernel.Types.GH_Integer freq = new Grasshopper.Kernel.Types.GH_Integer(hourBranch.Branches[bb].Count);
                        freqTreeOut.Append(freq, branch_path);
                        Grasshopper.Kernel.Types.GH_Interval ival = new Grasshopper.Kernel.Types.GH_Interval(ivalList[bb]);
                        ivalTreeOut.Append(ival, branch_path);
                    }

                }

                hourTreeOut.Simplify(Grasshopper.Kernel.Data.GH_SimplificationMode.CollapseAllOverlaps);
                freqTreeOut.Simplify(Grasshopper.Kernel.Data.GH_SimplificationMode.CollapseAllOverlaps);
                ivalTreeOut.Simplify(Grasshopper.Kernel.Data.GH_SimplificationMode.CollapseAllOverlaps);

                DA.SetDataTree(0, freqTreeOut);
                DA.SetDataTree(1, ivalTreeOut);
                DA.SetDataTree(2, hourTreeOut);
            }
        }
Exemple #4
0
        protected override void BeforeSolveInstance()
        {
            Grasshopper.Kernel.Parameters.Param_Integer myMaterialParam = Params.Input[0] as Grasshopper.Kernel.Parameters.Param_Integer;
            myMaterialParam.ClearNamedValues();

            //////////  Code for automatically loading Materials from XML when intance of class is initiated.
            IBIS_XML.Load("D:\\Dropbox\\_F13\\6338\\GH Plugin\\Ibis\\Ibis\\IBIS_XML.xml");
            List <String> myMaterialNameList = new List <string>();
            XmlNodeList   myList             = IBIS_XML.GetElementsByTagName("Material");

            foreach (XmlNode mx in myList)
            {
                XmlElement x             = mx as XmlElement;
                string     myXMLMaterial = x.GetAttribute("type");
                myMaterialNameList.Add(myXMLMaterial);
            }

            for (int i = 0; i < myMaterialNameList.Count; i++)
            {
                myMaterialParam.AddNamedValue(myMaterialNameList[i], i + 1);
            }

            Grasshopper.Kernel.Parameters.Param_Integer myGrainParam = Params.Input[2] as Grasshopper.Kernel.Parameters.Param_Integer;
            myGrainParam.ClearNamedValues();


            Grasshopper.Kernel.Parameters.Param_Integer myThicknessParam = Params.Input[3] as Grasshopper.Kernel.Parameters.Param_Integer;
            myThicknessParam.ClearNamedValues();


            Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.GH_Integer> myMaterialValue = myMaterialParam.VolatileData as Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.GH_Integer>;
            //GH_Structure<GH_Integer> data = param0.VolatileData as GH_Structure<GH_Integer>;

            if (myMaterialValue.IsEmpty)
            {
                return;
            }

            //Code to load the thickness list depending on user Material input:-
            List <String> myThicknessList = new List <string>();
            List <String> myBendList      = new List <string>();

            IBIS_XML.Load("D:\\Dropbox\\_F13\\6338\\GH Plugin\\Ibis\\Ibis\\IBIS_XML.xml");
            foreach (Grasshopper.Kernel.Types.GH_Integer myThis in myMaterialValue.AllData(true))
            {
                switch (myThis.Value)
                {
                case 1:
                    //////////for thickness:
                    XmlNodeList myNodeList1 = IBIS_XML.SelectNodes("IBIS/DryBending/Material[@id=1]/BendDirection/Thickness");
                    foreach (XmlNode myNode in myNodeList1)
                    {
                        XmlElement myElement      = myNode as XmlElement;
                        String     myXMLThickness = myElement.GetAttribute("type");
                        myThicknessList.Add(myXMLThickness);
                    }


                    for (int i = 0; i < 6; i++)     //This needs to be changed!!
                    {
                        myThicknessParam.AddNamedValue(myThicknessList[i], i + 1001);
                    }
                    //////////for benddirection
                    XmlNodeList myNodeList1b = IBIS_XML.SelectNodes("IBIS/DryBending/Material[@id=1]/BendDirection");
                    foreach (XmlNode myNode in myNodeList1b)
                    {
                        XmlElement myElement = myNode as XmlElement;
                        String     myXMLBend = myElement.GetAttribute("type");
                        myBendList.Add(myXMLBend);
                    }


                    for (int i = 0; i < myBendList.Count; i++)
                    {
                        myGrainParam.AddNamedValue(myBendList[i], i + 101);
                    }
                    break;

                case 2:
                    //////////for thickness:
                    XmlNodeList myNodeList2 = IBIS_XML.SelectNodes("IBIS/DryBending/Material[@id=2]/BendDirection/Thickness");
                    foreach (XmlNode myNode in myNodeList2)
                    {
                        XmlElement myElement      = myNode as XmlElement;
                        String     myXMLThickness = myElement.GetAttribute("type");
                        myThicknessList.Add(myXMLThickness);
                    }


                    for (int i = 0; i < myThicknessList.Count; i++)
                    {
                        myThicknessParam.AddNamedValue(myThicknessList[i], i + 1001);
                    }
                    //////////for benddirection
                    XmlNodeList myNodeList2b = IBIS_XML.SelectNodes("IBIS/DryBending/Material[@id=2]/BendDirection");
                    foreach (XmlNode myNode in myNodeList2b)
                    {
                        XmlElement myElement = myNode as XmlElement;
                        String     myXMLBend = myElement.GetAttribute("type");
                        myBendList.Add(myXMLBend);
                    }


                    for (int i = 0; i < myBendList.Count; i++)
                    {
                        myGrainParam.AddNamedValue(myBendList[i], i + 101);
                    }
                    break;

                case 3:
                    XmlNodeList myNodeList3 = IBIS_XML.SelectNodes("IBIS/DryBending/Material[@id=3]/BendDirection/Thickness");
                    foreach (XmlNode myNode in myNodeList3)
                    {
                        XmlElement myElement      = myNode as XmlElement;
                        String     myXMLThickness = myElement.GetAttribute("type");
                        myThicknessList.Add(myXMLThickness);
                    }


                    for (int i = 0; i < myThicknessList.Count; i++)
                    {
                        myThicknessParam.AddNamedValue(myThicknessList[i], i + 1001);
                    }
                    break;
                }
                return;
            }
        }