diff --git a/Examples/03 - Concrete Building/03 RFCOM - Concrete Building.rf5 b/Examples/03 - Concrete Building/03 RFCOM - Concrete Building.rf5
index 144793b..ed8da6a 100644
Binary files a/Examples/03 - Concrete Building/03 RFCOM - Concrete Building.rf5 and b/Examples/03 - Concrete Building/03 RFCOM - Concrete Building.rf5 differ
diff --git a/Examples/07 - Calculation/07 RFCOM - Calculation.rf5 b/Examples/07 - Calculation/07 RFCOM - Calculation.rf5
index d4f212d..b480c50 100644
Binary files a/Examples/07 - Calculation/07 RFCOM - Calculation.rf5 and b/Examples/07 - Calculation/07 RFCOM - Calculation.rf5 differ
diff --git a/Examples/08 - Optimization/08 RFCOM - Optimization.rf5 b/Examples/08 - Optimization/08 RFCOM - Optimization.rf5
index b90f16d..b30ca22 100644
Binary files a/Examples/08 - Optimization/08 RFCOM - Optimization.rf5 and b/Examples/08 - Optimization/08 RFCOM - Optimization.rf5 differ
diff --git a/Parametric_FEM_Toolbox/.vs/Parametric_FEM_Toolbox/v16/-RAZER-DAQ.suo b/Parametric_FEM_Toolbox/.vs/Parametric_FEM_Toolbox/v16/-RAZER-DAQ.suo
new file mode 100644
index 0000000..e195543
Binary files /dev/null and b/Parametric_FEM_Toolbox/.vs/Parametric_FEM_Toolbox/v16/-RAZER-DAQ.suo differ
diff --git a/Parametric_FEM_Toolbox/.vs/Parametric_FEM_Toolbox/v16/.suo b/Parametric_FEM_Toolbox/.vs/Parametric_FEM_Toolbox/v16/.suo
index c6b228a..bf7dcf9 100644
Binary files a/Parametric_FEM_Toolbox/.vs/Parametric_FEM_Toolbox/v16/.suo and b/Parametric_FEM_Toolbox/.vs/Parametric_FEM_Toolbox/v16/.suo differ
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Deprecated/Component_ResultsLineReactions_GUI_OBSOLETE.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Deprecated/Component_ResultsLineReactions_GUI_OBSOLETE.cs
new file mode 100644
index 0000000..f738fb3
--- /dev/null
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Deprecated/Component_ResultsLineReactions_GUI_OBSOLETE.cs
@@ -0,0 +1,164 @@
+using Grasshopper;
+using Grasshopper.Kernel;
+using Grasshopper.Kernel.Data;
+using Parametric_FEM_Toolbox.GUI;
+using Parametric_FEM_Toolbox.RFEM;
+using Rhino.Geometry;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Parametric_FEM_Toolbox.Deprecated
+{
+ public class Component_ResultsLineReactions_GUI_OBSOLETE : GH_Component
+ {
+ ///
+ /// Each implementation of GH_Component must provide a public
+ /// constructor without any arguments.
+ /// Category represents the Tab in which the component will appear,
+ /// Subcategory the panel. If you use non-existing tab or panel names,
+ /// new tabs/panels will automatically be created.
+ ///
+ public Component_ResultsLineReactions_GUI_OBSOLETE()
+ : base("Line Support Forces", "LSForces", "Get Line Support Forces from Calculation Results.", "B+G Toolbox", "RFEM")
+ {
+ }
+
+ ///
+ /// Registers all the input parameters for this component.
+ ///
+ protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
+ {
+ // Use the pManager object to register your input parameters.
+ // You can often supply default values when creating parameters.
+ // All parameters must have the correct access type. If you want
+ // to import lists or trees of values, modify the ParamAccess flag.
+ pManager.AddParameter(new Param_RFEM(), "Calculation Results", "Results", "Calculation results of a certain load case or load combination.", GH_ParamAccess.list);
+ }
+
+ ///
+ /// Registers all the output parameters for this component.
+ ///
+ protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
+ {
+ // Use the pManager object to register your output parameters.
+ // Output parameters do not have default values, but they too must have the correct access type.
+ pManager.AddIntegerParameter("Line Number", "No", "Index of the RFEM Line", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("Location", "Loc", "Location of results along line axis", GH_ParamAccess.tree);
+ pManager.AddVectorParameter("Forces", "F", "Reaction Forces [kN]", GH_ParamAccess.tree);
+ pManager.AddVectorParameter("Moments", "M", "Reaction Moments [kNm]", GH_ParamAccess.tree);
+ pManager.AddTextParameter("Results Flag", "Flag", "Results Flag", GH_ParamAccess.tree);
+ pManager.AddTextParameter("Results Type", "Type", "Results Value Type", GH_ParamAccess.list);
+
+ // Sometimes you want to hide a specific parameter from the Rhino preview.
+ // You can use the HideParameter() method as a quick way:
+ //pManager.HideParameter(0);
+ }
+
+ ///
+ /// This is the method that actually does the work.
+ ///
+ /// The DA object can be used to retrieve data from input parameters and
+ /// to store data in output parameters.
+ protected override void SolveInstance(IGH_DataAccess DA)
+ {
+ // Output variables
+ var treeNo = new DataTree();
+ var treeLoc = new DataTree();
+ var treeF = new DataTree();
+ var treeM = new DataTree();
+ //var listLoading = new List();
+ var treeFlag = new DataTree();
+ var treeType = new DataTree();
+
+ // Input
+ var inGH = new List();
+ var rfResults = new List();
+ if (!DA.GetDataList(0, inGH))
+ {
+ return;
+ }
+ foreach (var gh in inGH)
+ {
+ if (!(gh == null))
+ {
+ rfResults.Add((RFResults)gh.Value);
+ }
+ }
+ var support_forces = new DataTree();
+ for (int i = 0; i < rfResults.Count; i++)
+ {
+ if (!(rfResults[i].LineSupportForces == null))
+ {
+ var path = new GH_Path(i);
+ support_forces.AddRange(rfResults[i].LineSupportForces, path);
+ }
+ }
+
+ // Get output
+ if (support_forces.DataCount == 0)
+ {
+ AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "No results available");
+ return;
+ }
+ for (int i = 0; i < support_forces.BranchCount; i++)
+ {
+ for (int j = 0; j < support_forces.Branch(i).Count; j++)
+ {
+ var path1 = new GH_Path(i,j);
+ var path2 = new GH_Path(i);
+ treeNo.Add(support_forces.Branch(i)[j].LineNo, path2);
+ treeLoc.AddRange(support_forces.Branch(i)[j].Location, path1);
+ treeF.AddRange(support_forces.Branch(i)[j].Forces, path1);
+ treeM.AddRange(support_forces.Branch(i)[j].Moments, path1);
+ treeType.AddRange(support_forces.Branch(i)[j].Type, path1);
+ treeFlag.Add(support_forces.Branch(i)[j].Flag.ToString(), path2);
+ }
+ }
+
+ // Output
+ DA.SetDataTree(0, treeNo);
+ DA.SetDataTree(1, treeLoc);
+ DA.SetDataTree(2, treeF);
+ DA.SetDataTree(3, treeM);
+ DA.SetDataTree(4, treeFlag);
+ DA.SetDataTree(5, treeType);
+ }
+
+ ///
+ /// The Exposure property controls where in the panel a component icon
+ /// will appear. There are seven possible locations (primary to septenary),
+ /// each of which can be combined with the GH_Exposure.obscure flag, which
+ /// ensures the component will only be visible on panel dropdowns.
+ ///
+ public override GH_Exposure Exposure
+ {
+ get { return GH_Exposure.hidden; }
+ }
+
+ ///
+ /// Provides an Icon for every component that will be visible in the User Interface.
+ /// Icons need to be 24x24 pixels.
+ ///
+ protected override System.Drawing.Bitmap Icon
+ {
+ get
+ {
+ // You can add image files to your project resources and access them like this:
+ return Properties.Resources.Results_LineReactions;
+ }
+ }
+
+ ///
+ /// Each component must have a unique Guid to identify it.
+ /// It is vital this Guid doesn't change otherwise old ghx files
+ /// that use the old ID will partially fail during loading.
+ ///
+ public override Guid ComponentGuid
+ {
+ get { return new Guid("32254ac4-9fbe-400d-8b1a-f05756cddc4f"); }
+ }
+ }
+}
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Deprecated/Component_ResultsMemberForces_GUI_OBSOLETE-RAZER-DAQ.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Deprecated/Component_ResultsMemberForces_GUI_OBSOLETE-RAZER-DAQ.cs
new file mode 100644
index 0000000..4c5b577
--- /dev/null
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Deprecated/Component_ResultsMemberForces_GUI_OBSOLETE-RAZER-DAQ.cs
@@ -0,0 +1,166 @@
+using Grasshopper;
+using Grasshopper.Kernel;
+using Grasshopper.Kernel.Data;
+using Parametric_FEM_Toolbox.GUI;
+using Parametric_FEM_Toolbox.RFEM;
+using Rhino.Geometry;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Parametric_FEM_Toolbox.Deprecated
+{
+ public class Component_ResultsMemberForces_GUI_OBSOLETE : GH_Component
+ {
+ ///
+ /// Each implementation of GH_Component must provide a public
+ /// constructor without any arguments.
+ /// Category represents the Tab in which the component will appear,
+ /// Subcategory the panel. If you use non-existing tab or panel names,
+ /// new tabs/panels will automatically be created.
+ ///
+ public Component_ResultsMemberForces_GUI_OBSOLETE()
+ : base("Member Forces", "MForces", "Get Member Forces from Calculation Results.", "B+G Toolbox", "RFEM")
+ {
+ }
+
+ ///
+ /// Registers all the input parameters for this component.
+ ///
+ protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
+ {
+ // Use the pManager object to register your input parameters.
+ // You can often supply default values when creating parameters.
+ // All parameters must have the correct access type. If you want
+ // to import lists or trees of values, modify the ParamAccess flag.
+ pManager.AddParameter(new Param_RFEM(), "Calculation Results", "Results", "Calculation results of a certain load case or load combination.", GH_ParamAccess.list);
+ }
+
+ ///
+ /// Registers all the output parameters for this component.
+ ///
+ protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
+ {
+ // Use the pManager object to register your output parameters.
+ // Output parameters do not have default values, but they too must have the correct access type.
+ pManager.AddIntegerParameter("Member Number", "No", "Index of the RFEM Member", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("Location", "Loc", "Location of results along member axis", GH_ParamAccess.tree);
+ pManager.AddVectorParameter("Forces", "F", "Member Forces [kN]", GH_ParamAccess.tree);
+ pManager.AddVectorParameter("Moments", "M", "Member Moments [kNm]", GH_ParamAccess.tree);
+ pManager.AddTextParameter("Results Flag", "Flag", "Results Flag", GH_ParamAccess.tree);
+ pManager.AddTextParameter("Results Type", "Type", "Results Value Type", GH_ParamAccess.list);
+
+ // Sometimes you want to hide a specific parameter from the Rhino preview.
+ // You can use the HideParameter() method as a quick way:
+ //pManager.HideParameter(0);
+ }
+
+ ///
+ /// This is the method that actually does the work.
+ ///
+ /// The DA object can be used to retrieve data from input parameters and
+ /// to store data in output parameters.
+ protected override void SolveInstance(IGH_DataAccess DA)
+ {
+ // Output variables
+ var treeNo = new DataTree();
+ var treeLoc = new DataTree();
+ var treeF = new DataTree();
+ var treeM = new DataTree();
+ //var listLoading = new List();
+ var treeFlag = new DataTree();
+ var treeType = new DataTree();
+
+ // Input
+ var inGH = new List();
+ var rfResults = new List();
+ if (!DA.GetDataList(0, inGH))
+ {
+ return;
+ }
+ foreach (var gh in inGH)
+ {
+ if (!(gh == null))
+ {
+ rfResults.Add((RFResults)gh.Value);
+ }
+ }
+ var member_forces = new DataTree();
+ for (int i = 0; i < rfResults.Count; i++)
+ {
+ if (!(rfResults[i].MemberForces == null))
+ {
+ var path = new GH_Path(i);
+ member_forces.AddRange(rfResults[i].MemberForces, path);
+ }
+ }
+
+ // Get output
+ if (member_forces.DataCount == 0)
+ {
+ AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "No results available");
+ return;
+ }
+ for (int i = 0; i < member_forces.BranchCount; i++)
+ {
+ for (int j = 0; j < member_forces.Branch(i).Count; j++)
+ {
+ var path1 = new GH_Path(i,j);
+ var path2 = new GH_Path(i);
+ treeNo.Add(member_forces.Branch(i)[j].MemberNo, path2);
+ treeLoc.AddRange(member_forces.Branch(i)[j].Location, path1);
+ treeF.AddRange(member_forces.Branch(i)[j].Forces, path1);
+ treeM.AddRange(member_forces.Branch(i)[j].Moments, path1);
+ treeType.AddRange(member_forces.Branch(i)[j].Type, path1);
+ treeFlag.Add(member_forces.Branch(i)[j].Flag.ToString(), path2);
+ }
+ }
+
+ // Output
+ DA.SetDataTree(0, treeNo);
+ DA.SetDataTree(1, treeLoc);
+ DA.SetDataTree(2, treeF);
+ DA.SetDataTree(3, treeM);
+ DA.SetDataTree(4, treeFlag);
+ DA.SetDataTree(5, treeType);
+
+ this.AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Results have been updated from N to kN!!");
+ }
+
+ ///
+ /// The Exposure property controls where in the panel a component icon
+ /// will appear. There are seven possible locations (primary to septenary),
+ /// each of which can be combined with the GH_Exposure.obscure flag, which
+ /// ensures the component will only be visible on panel dropdowns.
+ ///
+ public override GH_Exposure Exposure
+ {
+ get { return GH_Exposure.hidden; }
+ }
+
+ ///
+ /// Provides an Icon for every component that will be visible in the User Interface.
+ /// Icons need to be 24x24 pixels.
+ ///
+ protected override System.Drawing.Bitmap Icon
+ {
+ get
+ {
+ // You can add image files to your project resources and access them like this:
+ return Properties.Resources.Results_MemberForces;
+ }
+ }
+
+ ///
+ /// Each component must have a unique Guid to identify it.
+ /// It is vital this Guid doesn't change otherwise old ghx files
+ /// that use the old ID will partially fail during loading.
+ ///
+ public override Guid ComponentGuid
+ {
+ get { return new Guid("799b9e5b-74eb-402d-8f3d-27da6df15cea"); }
+ }
+ }
+}
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Deprecated/Component_ResultsMemberForces_GUI_OBSOLETE_2.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Deprecated/Component_ResultsMemberForces_GUI_OBSOLETE_2.cs
new file mode 100644
index 0000000..b358f95
--- /dev/null
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Deprecated/Component_ResultsMemberForces_GUI_OBSOLETE_2.cs
@@ -0,0 +1,164 @@
+using Grasshopper;
+using Grasshopper.Kernel;
+using Grasshopper.Kernel.Data;
+using Parametric_FEM_Toolbox.GUI;
+using Parametric_FEM_Toolbox.RFEM;
+using Rhino.Geometry;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Parametric_FEM_Toolbox.Deprecated
+{
+ public class Component_ResultsMemberForces_GUI_OBSOLETE_2 : GH_Component
+ {
+ ///
+ /// Each implementation of GH_Component must provide a public
+ /// constructor without any arguments.
+ /// Category represents the Tab in which the component will appear,
+ /// Subcategory the panel. If you use non-existing tab or panel names,
+ /// new tabs/panels will automatically be created.
+ ///
+ public Component_ResultsMemberForces_GUI_OBSOLETE_2()
+ : base("Member Forces", "MForces", "Get Member Forces from Calculation Results.", "B+G Toolbox", "RFEM")
+ {
+ }
+
+ ///
+ /// Registers all the input parameters for this component.
+ ///
+ protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
+ {
+ // Use the pManager object to register your input parameters.
+ // You can often supply default values when creating parameters.
+ // All parameters must have the correct access type. If you want
+ // to import lists or trees of values, modify the ParamAccess flag.
+ pManager.AddParameter(new Param_RFEM(), "Calculation Results", "Results", "Calculation results of a certain load case or load combination.", GH_ParamAccess.list);
+ }
+
+ ///
+ /// Registers all the output parameters for this component.
+ ///
+ protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
+ {
+ // Use the pManager object to register your output parameters.
+ // Output parameters do not have default values, but they too must have the correct access type.
+ pManager.AddIntegerParameter("Member Number", "No", "Index of the RFEM Member", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("Location", "Loc", "Location of results along member axis", GH_ParamAccess.tree);
+ pManager.AddVectorParameter("Forces", "F", "Member Forces [kN]", GH_ParamAccess.tree);
+ pManager.AddVectorParameter("Moments", "M", "Member Moments [kNm]", GH_ParamAccess.tree);
+ pManager.AddTextParameter("Results Flag", "Flag", "Results Flag", GH_ParamAccess.tree);
+ pManager.AddTextParameter("Results Type", "Type", "Results Value Type", GH_ParamAccess.list);
+
+ // Sometimes you want to hide a specific parameter from the Rhino preview.
+ // You can use the HideParameter() method as a quick way:
+ //pManager.HideParameter(0);
+ }
+
+ ///
+ /// This is the method that actually does the work.
+ ///
+ /// The DA object can be used to retrieve data from input parameters and
+ /// to store data in output parameters.
+ protected override void SolveInstance(IGH_DataAccess DA)
+ {
+ // Output variables
+ var treeNo = new DataTree();
+ var treeLoc = new DataTree();
+ var treeF = new DataTree();
+ var treeM = new DataTree();
+ //var listLoading = new List();
+ var treeFlag = new DataTree();
+ var treeType = new DataTree();
+
+ // Input
+ var inGH = new List();
+ var rfResults = new List();
+ if (!DA.GetDataList(0, inGH))
+ {
+ return;
+ }
+ foreach (var gh in inGH)
+ {
+ if (!(gh == null))
+ {
+ rfResults.Add((RFResults)gh.Value);
+ }
+ }
+ var member_forces = new DataTree();
+ for (int i = 0; i < rfResults.Count; i++)
+ {
+ if (!(rfResults[i].MemberForces == null))
+ {
+ var path = new GH_Path(i);
+ member_forces.AddRange(rfResults[i].MemberForces, path);
+ }
+ }
+
+ // Get output
+ if (member_forces.DataCount == 0)
+ {
+ AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "No results available");
+ return;
+ }
+ for (int i = 0; i < member_forces.BranchCount; i++)
+ {
+ for (int j = 0; j < member_forces.Branch(i).Count; j++)
+ {
+ var path1 = new GH_Path(i,j);
+ var path2 = new GH_Path(i);
+ treeNo.Add(member_forces.Branch(i)[j].MemberNo, path2);
+ treeLoc.AddRange(member_forces.Branch(i)[j].Location, path1);
+ treeF.AddRange(member_forces.Branch(i)[j].Forces, path1);
+ treeM.AddRange(member_forces.Branch(i)[j].Moments, path1);
+ treeType.AddRange(member_forces.Branch(i)[j].Type, path1);
+ treeFlag.Add(member_forces.Branch(i)[j].Flag.ToString(), path2);
+ }
+ }
+
+ // Output
+ DA.SetDataTree(0, treeNo);
+ DA.SetDataTree(1, treeLoc);
+ DA.SetDataTree(2, treeF);
+ DA.SetDataTree(3, treeM);
+ DA.SetDataTree(4, treeFlag);
+ DA.SetDataTree(5, treeType);
+ }
+
+ ///
+ /// The Exposure property controls where in the panel a component icon
+ /// will appear. There are seven possible locations (primary to septenary),
+ /// each of which can be combined with the GH_Exposure.obscure flag, which
+ /// ensures the component will only be visible on panel dropdowns.
+ ///
+ public override GH_Exposure Exposure
+ {
+ get { return GH_Exposure.hidden; }
+ }
+
+ ///
+ /// Provides an Icon for every component that will be visible in the User Interface.
+ /// Icons need to be 24x24 pixels.
+ ///
+ protected override System.Drawing.Bitmap Icon
+ {
+ get
+ {
+ // You can add image files to your project resources and access them like this:
+ return Properties.Resources.Results_MemberForces;
+ }
+ }
+
+ ///
+ /// Each component must have a unique Guid to identify it.
+ /// It is vital this Guid doesn't change otherwise old ghx files
+ /// that use the old ID will partially fail during loading.
+ ///
+ public override Guid ComponentGuid
+ {
+ get { return new Guid("a40b9353-97a6-462e-bc68-01a97b4d988c"); }
+ }
+ }
+}
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Deprecated/Component_ResultsNodeReactions_GUI_OBSOLETE.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Deprecated/Component_ResultsNodeReactions_GUI_OBSOLETE.cs
new file mode 100644
index 0000000..29f14c2
--- /dev/null
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Deprecated/Component_ResultsNodeReactions_GUI_OBSOLETE.cs
@@ -0,0 +1,159 @@
+using Grasshopper;
+using Grasshopper.Kernel;
+using Grasshopper.Kernel.Data;
+using Parametric_FEM_Toolbox.GUI;
+using Parametric_FEM_Toolbox.RFEM;
+using Rhino.Geometry;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Parametric_FEM_Toolbox.Deprecated
+{
+ public class Component_ResultsNodeReactions_GUI_OBSOLETE : GH_Component
+ {
+ ///
+ /// Each implementation of GH_Component must provide a public
+ /// constructor without any arguments.
+ /// Category represents the Tab in which the component will appear,
+ /// Subcategory the panel. If you use non-existing tab or panel names,
+ /// new tabs/panels will automatically be created.
+ ///
+ public Component_ResultsNodeReactions_GUI_OBSOLETE()
+ : base("Nodal Support Forces", "NSForces", "Get Nodal Support Forces from Calculation Results.", "B+G Toolbox", "RFEM")
+ {
+ }
+
+ ///
+ /// Registers all the input parameters for this component.
+ ///
+ protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
+ {
+ // Use the pManager object to register your input parameters.
+ // You can often supply default values when creating parameters.
+ // All parameters must have the correct access type. If you want
+ // to import lists or trees of values, modify the ParamAccess flag.
+ pManager.AddParameter(new Param_RFEM(), "Calculation Results", "Results", "Calculation results of a certain load case or load combination.", GH_ParamAccess.list);
+ }
+
+ ///
+ /// Registers all the output parameters for this component.
+ ///
+ protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
+ {
+ // Use the pManager object to register your output parameters.
+ // Output parameters do not have default values, but they too must have the correct access type.
+
+ pManager.AddIntegerParameter("Support Number", "No", "Index of the RFEM Nodal Support", GH_ParamAccess.tree);
+ pManager.AddPointParameter("Location", "Loc", "Support Location", GH_ParamAccess.tree);
+ pManager.AddVectorParameter("Forces", "F", "Member Forces in global CSys [kN]", GH_ParamAccess.tree);
+ pManager.AddVectorParameter("Moments", "M", "Member Moments in global CSys [kNm]", GH_ParamAccess.tree);
+ pManager.AddTextParameter("Results Type", "Type", "Results Value Type", GH_ParamAccess.tree);
+
+ // Sometimes you want to hide a specific parameter from the Rhino preview.
+ // You can use the HideParameter() method as a quick way:
+ //pManager.HideParameter(0);
+ }
+
+ ///
+ /// This is the method that actually does the work.
+ ///
+ /// The DA object can be used to retrieve data from input parameters and
+ /// to store data in output parameters.
+ protected override void SolveInstance(IGH_DataAccess DA)
+ {
+ // Output variables
+ var treeNo = new DataTree();
+ var treeCoor = new DataTree();
+ var treeF = new DataTree();
+ var treeM = new DataTree();
+ var treeType = new DataTree();
+
+ // Input
+ var inGH = new List();
+ var rfResults = new List();
+ if (!DA.GetDataList(0, inGH))
+ {
+ return;
+ }
+ foreach (var gh in inGH)
+ {
+ if (!(gh == null))
+ {
+ rfResults.Add((RFResults)gh.Value);
+ }
+ }
+ var reaction_forces = new DataTree();
+ for (int i = 0; i < rfResults.Count; i++)
+ {
+ if (!(rfResults[i].NodalSupportForces == null))
+ {
+ var path = new GH_Path(i);
+ reaction_forces.AddRange(rfResults[i].NodalSupportForces, path);
+ }
+ }
+
+ // Get output
+ if (reaction_forces.DataCount == 0)
+ {
+ AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "No results available");
+ return;
+ }
+ for (int i = 0; i < reaction_forces.BranchCount; i++)
+ {
+ for (int j = 0; j < reaction_forces.Branch(i).Count; j++)
+ {
+ var path = new GH_Path(i);
+ treeNo.Add(reaction_forces.Branch(i)[j].NodeNo, path);
+ treeCoor.Add(reaction_forces.Branch(i)[j].Location, path);
+ treeF.Add(reaction_forces.Branch(i)[j].Forces, path);
+ treeM.Add(reaction_forces.Branch(i)[j].Moments, path);
+ treeType.Add(reaction_forces.Branch(i)[j].Type, path);
+ }
+ }
+
+ // Output
+ DA.SetDataTree(0, treeNo);
+ DA.SetDataTree(1, treeCoor);
+ DA.SetDataTree(2, treeF);
+ DA.SetDataTree(3, treeM);
+ DA.SetDataTree(4, treeType);
+ }
+
+ ///
+ /// The Exposure property controls where in the panel a component icon
+ /// will appear. There are seven possible locations (primary to septenary),
+ /// each of which can be combined with the GH_Exposure.obscure flag, which
+ /// ensures the component will only be visible on panel dropdowns.
+ ///
+ public override GH_Exposure Exposure
+ {
+ get { return GH_Exposure.hidden; }
+ }
+
+ ///
+ /// Provides an Icon for every component that will be visible in the User Interface.
+ /// Icons need to be 24x24 pixels.
+ ///
+ protected override System.Drawing.Bitmap Icon
+ {
+ get
+ {
+ // You can add image files to your project resources and access them like this:
+ return Properties.Resources.Results_Reactions;
+ }
+ }
+
+ ///
+ /// Each component must have a unique Guid to identify it.
+ /// It is vital this Guid doesn't change otherwise old ghx files
+ /// that use the old ID will partially fail during loading.
+ ///
+ public override Guid ComponentGuid
+ {
+ get { return new Guid("1dd90138-c7ef-4811-ac44-ad0e68199921"); }
+ }
+ }
+}
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Deprecated/Component_ResultsSurfaceForces_GUI_OBSOLETE.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Deprecated/Component_ResultsSurfaceForces_GUI_OBSOLETE.cs
new file mode 100644
index 0000000..f04b375
--- /dev/null
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Deprecated/Component_ResultsSurfaceForces_GUI_OBSOLETE.cs
@@ -0,0 +1,268 @@
+using Grasshopper;
+using Grasshopper.Kernel;
+using Grasshopper.Kernel.Data;
+using Parametric_FEM_Toolbox.GUI;
+using Parametric_FEM_Toolbox.RFEM;
+using Rhino.Geometry;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Parametric_FEM_Toolbox.Deprecated
+{
+ public class Component_ResultsSurfaceForces_GUI_OBSOLETE : GH_Component
+ {
+ ///
+ /// Each implementation of GH_Component must provide a public
+ /// constructor without any arguments.
+ /// Category represents the Tab in which the component will appear,
+ /// Subcategory the panel. If you use non-existing tab or panel names,
+ /// new tabs/panels will automatically be created.
+ ///
+ public Component_ResultsSurfaceForces_GUI_OBSOLETE()
+ : base("Surface Forces", "SForces", "Get Surface Forces from Calculation Results.", "B+G Toolbox", "RFEM")
+ {
+ }
+
+ ///
+ /// Registers all the input parameters for this component.
+ ///
+ protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
+ {
+ // Use the pManager object to register your input parameters.
+ // You can often supply default values when creating parameters.
+ // All parameters must have the correct access type. If you want
+ // to import lists or trees of values, modify the ParamAccess flag.
+ pManager.AddParameter(new Param_RFEM(), "Calculation Results", "Results", "Calculation results of a certain load case or load combination.", GH_ParamAccess.list);
+ }
+
+ ///
+ /// Registers all the output parameters for this component.
+ ///
+ protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
+ {
+ // Use the pManager object to register your output parameters.
+ // Output parameters do not have default values, but they too must have the correct access type.
+
+ //pManager.AddPointParameter("Nodes", "N", "Tensegrity nodes", GH_ParamAccess.tree);
+
+ pManager.AddIntegerParameter("Surface Number", "No", "Index of the RFEM Surface", GH_ParamAccess.tree);
+ pManager.AddPointParameter("Coordinates", "Pt", "Coordinates of results", GH_ParamAccess.tree);
+ pManager.AddIntegerParameter("Location", "Loc", "Location of results", GH_ParamAccess.tree);
+ pManager.AddTextParameter("Type", "Type", "Results Type", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("AxialForceAlphaM", "αm", "Axial force αm [kN/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("AxialForceN1", "n1", "Axial force n1 [kN/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("AxialForceN2", "n2", "Axial force n2 [kN/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("AxialForceNcD", "nc,D", "Axial force nc,D [kN/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("AxialForceNx", "nx", "Axial force nx [kN/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("AxialForceNxD", "nx,D", "Axial force nx,D [kN/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("AxialForceNxy", "nxy", "Axial force nxy [kN/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("AxialForceNy", "ny", "Axial force ny [kN/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("AxialForceNyD", "ny,D", "Axial force ny,D [kN/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("AxialForceVMaxM", "vmax,m", "Axial force vmax,m [kN/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("MomentAlphaB", "αb", "Moment αb [kNm/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("MomentM1", "m1", "Moment m1 [kNm/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("MomentM2", "m2", "Moment m2 [kNm/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("MomentMcDNegative", "mc,D-", "Moment mc,D- [kNm/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("MomentMcDPositive", "mc,D+", "Moment mc,D+ [kNm/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("MomentMx", "mx", "Moment mx [kNm/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("MomentMxDNegative", "mx,D-", "Moment mx,D- [kNm/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("MomentMxDPositive", "mx,D+", "Moment mx,D+ [kNm/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("MomentMxy", "mxy", "Moment mxy [kNm/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("MomentMy", "my", "Moment my [kNm/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("MomentMyDNegative", "my,D-", "Moment my,D- [kNm/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("MomentMxDPositive", "mx,D+", "Moment mx,D+ [kNm/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("MomentTMaxB", "mT,max,b", "Moment mT,max,b [kNm/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("ShearForceBetaB", "Βb", "Shear force Βb [kN/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("ShearForceVMaxB", "vmax,b", "Shear force vmax,b [kN/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("ShearForceVx", "vx", "Shear force vx [kN/m]", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("ShearForceVy", "vy", "Shear force vy [kN/m]", GH_ParamAccess.tree);
+
+ // Sometimes you want to hide a specific parameter from the Rhino preview.
+ // You can use the HideParameter() method as a quick way:
+ //pManager.HideParameter(0);
+ }
+
+ ///
+ /// This is the method that actually does the work.
+ ///
+ /// The DA object can be used to retrieve data from input parameters and
+ /// to store data in output parameters.
+ protected override void SolveInstance(IGH_DataAccess DA)
+ {
+ // Output variables
+ var treeNo = new DataTree();
+
+ var treeCoor = new DataTree();
+ var treeLoc = new DataTree();
+ var treeType = new DataTree();
+
+ var axialForceAlphaM = new DataTree();
+ var axialForceN1 = new DataTree();
+ var axialForceN2 = new DataTree();
+ var axialForceNcD = new DataTree();
+ var axialForceNx = new DataTree();
+ var axialForceNxD = new DataTree();
+ var axialForceNxy = new DataTree();
+ var axialForceNy = new DataTree();
+ var axialForceNyD = new DataTree();
+ var axialForceVMaxM = new DataTree();
+ var momentAlphaB = new DataTree();
+ var momentM1 = new DataTree();
+ var momentM2 = new DataTree();
+ var momentMcDNegative = new DataTree();
+ var momentMcDPositive = new DataTree();
+ var momentMx = new DataTree();
+ var momentMxDNegative = new DataTree();
+ var momentMxDPositive = new DataTree();
+ var momentMxy = new DataTree();
+ var momentMy = new DataTree();
+ var momentMyDNegative = new DataTree();
+ var momentMyDPositive = new DataTree();
+ var momentTMaxB = new DataTree();
+ var shearForceBetaB = new DataTree();
+ var shearForceVMaxB = new DataTree();
+ var shearForceVx = new DataTree();
+ var shearForceVy = new DataTree();
+
+ // Input
+ var inGH = new List();
+ var rfResults = new List();
+ if (!DA.GetDataList(0, inGH))
+ {
+ return;
+ }
+ foreach (var gh in inGH)
+ {
+ if (!(gh == null))
+ {
+ rfResults.Add((RFResults)gh.Value);
+ }
+ }
+ var sfc_forces = new DataTree();
+ for (int i = 0; i < rfResults.Count; i++)
+ {
+ if (!(rfResults[i].SurfaceForces == null))
+ {
+ var path = new GH_Path(i);
+ sfc_forces.AddRange(rfResults[i].SurfaceForces, path);
+ }
+ }
+
+ // Get output
+ if (sfc_forces.DataCount == 0)
+ {
+ AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "No results available");
+ return;
+ }
+ for (int i = 0; i < sfc_forces.BranchCount; i++)
+ {
+ for (int j = 0; j < sfc_forces.Branch(i).Count; j++)
+ {
+ var path = new GH_Path(i, j);
+ var path2 = new GH_Path(i);
+ treeNo.Add(sfc_forces.Branch(i)[j].SurfaceNo, path2);
+ treeCoor.AddRange(sfc_forces.Branch(i)[j].Location, path);
+ treeLoc.AddRange(sfc_forces.Branch(i)[j].LocationNo, path);
+ treeType.AddRange(sfc_forces.Branch(i)[j].Type, path);
+ axialForceAlphaM.AddRange(sfc_forces.Branch(i)[j].AxialForceAlphaM, path);
+ axialForceN1.AddRange(sfc_forces.Branch(i)[j].AxialForceN1, path);
+ axialForceN2.AddRange(sfc_forces.Branch(i)[j].AxialForceN2, path);
+ axialForceNcD.AddRange(sfc_forces.Branch(i)[j].AxialForceNcD, path);
+ axialForceNx.AddRange(sfc_forces.Branch(i)[j].AxialForceNx, path);
+ axialForceNxD.AddRange(sfc_forces.Branch(i)[j].AxialForceNxD, path);
+ axialForceNxy.AddRange(sfc_forces.Branch(i)[j].AxialForceNxy, path);
+ axialForceNy.AddRange(sfc_forces.Branch(i)[j].AxialForceNy, path);
+ axialForceNyD.AddRange(sfc_forces.Branch(i)[j].AxialForceNyD, path);
+ axialForceVMaxM.AddRange(sfc_forces.Branch(i)[j].AxialForceVMaxM, path);
+ momentAlphaB.AddRange(sfc_forces.Branch(i)[j].MomentAlphaB, path);
+ momentM1.AddRange(sfc_forces.Branch(i)[j].MomentM1, path);
+ momentM2.AddRange(sfc_forces.Branch(i)[j].MomentM2, path);
+ momentMcDNegative.AddRange(sfc_forces.Branch(i)[j].MomentMcDNegative, path);
+ momentMcDPositive.AddRange(sfc_forces.Branch(i)[j].MomentMcDPositive, path);
+ momentMx.AddRange(sfc_forces.Branch(i)[j].MomentMx, path);
+ momentMxDNegative.AddRange(sfc_forces.Branch(i)[j].MomentMxDNegative, path);
+ momentMxDPositive.AddRange(sfc_forces.Branch(i)[j].MomentMxDPositive, path);
+ momentMxy.AddRange(sfc_forces.Branch(i)[j].MomentMxy, path);
+ momentMy.AddRange(sfc_forces.Branch(i)[j].MomentMy, path);
+ momentMyDNegative.AddRange(sfc_forces.Branch(i)[j].MomentMyDNegative, path);
+ momentMyDPositive.AddRange(sfc_forces.Branch(i)[j].MomentMyDPositive, path);
+ momentTMaxB.AddRange(sfc_forces.Branch(i)[j].MomentTMaxB, path);
+ shearForceBetaB.AddRange(sfc_forces.Branch(i)[j].ShearForceBetaB, path);
+ shearForceVMaxB.AddRange(sfc_forces.Branch(i)[j].ShearForceVMaxB, path);
+ shearForceVx.AddRange(sfc_forces.Branch(i)[j].ShearForceVx, path);
+ shearForceVy.AddRange(sfc_forces.Branch(i)[j].ShearForceVy, path);
+ }
+ }
+
+ // Output
+ DA.SetDataTree(0, treeNo);
+ DA.SetDataTree(1, treeCoor);
+ DA.SetDataTree(2, treeLoc);
+ DA.SetDataTree(3, treeType);
+ DA.SetDataTree(4, axialForceAlphaM);
+ DA.SetDataTree(5, axialForceN1);
+ DA.SetDataTree(6, axialForceN2);
+ DA.SetDataTree(7, axialForceNcD);
+ DA.SetDataTree(8, axialForceNx);
+ DA.SetDataTree(9, axialForceNxD);
+ DA.SetDataTree(10, axialForceNxy);
+ DA.SetDataTree(11, axialForceNy);
+ DA.SetDataTree(12, axialForceNyD);
+ DA.SetDataTree(13, axialForceVMaxM);
+ DA.SetDataTree(14, momentAlphaB);
+ DA.SetDataTree(15, momentM1);
+ DA.SetDataTree(16, momentM2);
+ DA.SetDataTree(17, momentMcDNegative);
+ DA.SetDataTree(18, momentMcDPositive);
+ DA.SetDataTree(19, momentMx);
+ DA.SetDataTree(20, momentMxDNegative);
+ DA.SetDataTree(21, momentMxDPositive);
+ DA.SetDataTree(22, momentMxy);
+ DA.SetDataTree(23, momentMy);
+ DA.SetDataTree(24, momentMyDNegative);
+ DA.SetDataTree(25, momentMyDPositive);
+ DA.SetDataTree(26, momentTMaxB);
+ DA.SetDataTree(27, shearForceBetaB);
+ DA.SetDataTree(28, shearForceVMaxB);
+ DA.SetDataTree(29, shearForceVx);
+ DA.SetDataTree(30, shearForceVy);
+ }
+
+ ///
+ /// The Exposure property controls where in the panel a component icon
+ /// will appear. There are seven possible locations (primary to septenary),
+ /// each of which can be combined with the GH_Exposure.obscure flag, which
+ /// ensures the component will only be visible on panel dropdowns.
+ ///
+ public override GH_Exposure Exposure
+ {
+ get { return GH_Exposure.hidden; }
+ }
+
+ ///
+ /// Provides an Icon for every component that will be visible in the User Interface.
+ /// Icons need to be 24x24 pixels.
+ ///
+ protected override System.Drawing.Bitmap Icon
+ {
+ get
+ {
+ // You can add image files to your project resources and access them like this:
+ return Properties.Resources.Results_ShellForces;
+ }
+ }
+
+ ///
+ /// Each component must have a unique Guid to identify it.
+ /// It is vital this Guid doesn't change otherwise old ghx files
+ /// that use the old ID will partially fail during loading.
+ ///
+ public override Guid ComponentGuid
+ {
+ get { return new Guid("df9e7012-2731-47d4-987c-6e3ae4c6fb52"); }
+ }
+ }
+}
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_GetResults_GUI.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_GetResults_GUI.cs
index f26bcbd..87ace52 100644
--- a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_GetResults_GUI.cs
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_GetResults_GUI.cs
@@ -33,6 +33,7 @@ public class Component_GetResults_GUI : GH_SwitcherComponent
DataTree _memberdisplacementsByType = new DataTree();
List _deformedMembers = new List();
List _memberNo = new List();
+ bool _deformation_results = false;
//private List _loadCases = new List();
//private List _loadCombos = new List();
@@ -43,7 +44,7 @@ public class Component_GetResults_GUI : GH_SwitcherComponent
private int _countCases = 0;
private int _countCombos = 0;
private int _countRcombos = 0;
- private List _resultTypes = new List();
+ private HashSet _resultTypes = new HashSet();
ICalculation _results = null;
IFeMesh _rfemMesh = null;
IResults _lcresults = null;
@@ -65,6 +66,7 @@ public class Component_GetResults_GUI : GH_SwitcherComponent
private string _lastLoadCase;
private int _lastType;
private bool _restoreDropDown;
+ private MenuCheckBox _deformationsCheck;
private MenuCheckBox _memberForcesCheck;
private MenuCheckBox _surfaceForcesCheck;
private MenuCheckBox _nodalReactionsCheck;
@@ -177,25 +179,32 @@ protected override void RegisterEvaluationUnits(EvaluationUnitManager mngr)
// Select results
GH_ExtendableMenu gH_ExtendableMenu3 = new GH_ExtendableMenu(3, "Select Results");
gH_ExtendableMenu3.Name = "Select Results";
+ gH_ExtendableMenu3.Expand();
evaluationUnit.AddMenu(gH_ExtendableMenu3);
MenuPanel menuPanel2 = new MenuPanel(2, "panel_results");
menuPanel2.Header = "Select output results.\n";
- _memberForcesCheck = new MenuCheckBox(0, "check member forces", "Member Forces");
+
+ _deformationsCheck = new MenuCheckBox(0, "deformations", "Deformation");
+ _deformationsCheck.ValueChanged += _deformationsCheck__valueChanged;
+ _deformationsCheck.Active = true;
+ _deformationsCheck.Header = "Display deformed shape.";
+ _memberForcesCheck = new MenuCheckBox(1, "check member forces", "Member Forces");
_memberForcesCheck.ValueChanged += _memberForcesCheck__valueChanged;
_memberForcesCheck.Active = true;
_memberForcesCheck.Header = "Add member forces to output results.";
- _surfaceForcesCheck = new MenuCheckBox(1, "check surface forces", "Surface Forces");
+ _surfaceForcesCheck = new MenuCheckBox(2, "check surface forces", "Surface Forces");
_surfaceForcesCheck.ValueChanged += _surfaceForcesCheck__valueChanged;
_surfaceForcesCheck.Active = true;
_surfaceForcesCheck.Header = "Add surface forces to output results.";
- _nodalReactionsCheck = new MenuCheckBox(2, "check nodal reactions", "Nodal Reactions");
+ _nodalReactionsCheck = new MenuCheckBox(3, "check nodal reactions", "Nodal Reactions");
_nodalReactionsCheck.ValueChanged += _nodalReactionsCheck__valueChanged;
_nodalReactionsCheck.Active = true;
_nodalReactionsCheck.Header = "Add nodal reactions to output results.";
- _lineReactionsCheck = new MenuCheckBox(3, "check line reactions", "Line Reactions");
+ _lineReactionsCheck = new MenuCheckBox(4, "check line reactions", "Line Reactions");
_lineReactionsCheck.ValueChanged += _lineReactionsCheck__valueChanged;
_lineReactionsCheck.Active = true;
_lineReactionsCheck.Header = "Add line reactions to output results.";
+ menuPanel2.AddControl(_deformationsCheck);
menuPanel2.AddControl(_memberForcesCheck);
menuPanel2.AddControl(_surfaceForcesCheck);
menuPanel2.AddControl(_nodalReactionsCheck);
@@ -247,6 +256,28 @@ private void _loadDrop__valueChanged2(object sender, EventArgs e)
setModelProps();
}
+ private void _deformationsCheck__valueChanged(object sender, EventArgs e)
+ {
+ var box_state = ((MenuCheckBox)sender).Active;
+ if (!box_state)
+ {
+ _resulttypeDrop.Clear();
+ _feMeshes.Clear();
+ _meshdisplacements.Clear();
+ _meshdisplacementsByType.Clear();
+ _deformedMeshes.Clear();
+ _controlPoints.Clear();
+ _memberdisplacements.Clear();
+ _memberdisplacementsByType.Clear();
+ _deformedMembers.Clear();
+ _sfcNo.Clear();
+ _memberNo.Clear();
+ }
+ _resetLC = true; // Get results
+
+ setModelProps();
+ }
+
private void _memberForcesCheck__valueChanged(object sender, EventArgs e)
{
_ = ((MenuCheckBox)sender).Active;
@@ -304,28 +335,29 @@ private void updateDropDownMenu(List _lcs)
_loadDrop.Value = _loadDropLastValue;
}
- private void updateDropDownMenu2(List _results, ref int result_type)
+ private void updateDropDownMenu2(List resulttypes, ref int result_type)
{
- _resulttypeDrop.VisibleItemCount = Math.Min(10, _results.Count); // Maximum visible items = 10
+ _resulttypeDrop.VisibleItemCount = Math.Min(10, resulttypes.Count); // Maximum visible items = 10
//int value = 0;
//if (_results.Count == _resulttypeDrop.Items.Count)
//{
// value = _resulttypeDrop.Value;
//}
_resulttypeDrop.Clear();
- if (_results.Count > 0)
+ if (resulttypes.Count > 0)
{
- for (int i = 0; i < _results.Count; i++)
+ for (int i = 0; i < resulttypes.Count; i++)
{
- _resulttypeDrop.AddItem(((int)_results[i]).ToString(), _results[i].ToString());
+ _resulttypeDrop.AddItem(((int)resulttypes[i]).ToString(), resulttypes[i].ToString());
}
//if (_resulttypeDrop.Items.Count > value)
//{
// _resulttypeDrop.Value = value;
//}
+ _resulttypeDrop.Value = _resultDropLastValue;
+ result_type = Int32.Parse(_resulttypeDrop.Items[_resulttypeDrop.Value].name);
}
- _resulttypeDrop.Value = _resultDropLastValue;
- result_type = Int32.Parse(_resulttypeDrop.Items[_resulttypeDrop.Value].name);
+
}
///
@@ -383,11 +415,19 @@ protected override void SolveInstance(IGH_DataAccess DA, EvaluationUnit unit)
_lastType = 0;
_restoreDropDown = true;
}
- // Get members
- _rfMembers = Component_GetData.GetRFMembers(data.GetMembers().ToList(), data);
- // Get Fe Meshes from RFEM
- _rfemMesh = _results.GetFeMesh();
- _feMeshes = CreateFEMeshes(ref msg);
+ // Get deformed shape?
+ if (_deformationsCheck.Active)
+ {
+ _deformation_results = true;
+ // Get members
+ _rfMembers = Component_GetData.GetRFMembers(data.GetMembers().ToList(), data);
+ // Get Fe Meshes from RFEM
+ _rfemMesh = _results.GetFeMesh();
+ _feMeshes = CreateFEMeshes(ref msg);
+ }else
+ {
+ _deformation_results = false;
+ }
// Disconnect RFEM
Component_GetData.DisconnectRFEM(ref model, ref data);
@@ -419,6 +459,7 @@ protected override void SolveInstance(IGH_DataAccess DA, EvaluationUnit unit)
_deformedMembers.Clear();
_sfcNo.Clear();
_memberNo.Clear();
+ _deformation_results = false;
throw ex;
}
}
@@ -441,7 +482,7 @@ protected override void SolveInstance(IGH_DataAccess DA, EvaluationUnit unit)
AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Provide Valid Result Type.");
return;
}
- result_type_name = Enum.GetName(typeof(ResultsValueType), result_type);
+ result_type_name = Enum.GetName(typeof(ResultsValueType), result_type);
if (_lastLoadCase != iLoadCase || _lastType != result_type) // otherwise execution comes from change in scale and no need to reset load case
{
_resetLC = true;
@@ -498,7 +539,6 @@ protected override void SolveInstance(IGH_DataAccess DA, EvaluationUnit unit)
AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, $"{iLoadCase} has no results. Provide valid load case.");
return;
}
- var lcresultsraster = _results.GetResultsInRasterPoints(LoadingType.LoadCaseType, no);
if (value < _countCases)
{
_lcresults = _results.GetResultsInFeNodes(LoadingType.LoadCaseType, no);
@@ -517,25 +557,35 @@ protected override void SolveInstance(IGH_DataAccess DA, EvaluationUnit unit)
msg.Add("Load case or combo not found");
return;
}
- // Update drop down menu of result types
- _resultTypes = new List();
+ // Get analysis results
+ _resultTypes = new HashSet();
+ outResults = new RFResults(_lcresults, _saveddata, ref _resultTypes, iLoadCase,
+ _memberForcesCheck.Active, _surfaceForcesCheck.Active, _nodalReactionsCheck.Active,
+ _lineReactionsCheck.Active);
// Get deformations
- _meshdisplacements = GetMeshDisplacements(ref _sfcNo, ref msg);
- _memberdisplacements = GetMemberDisplacements(ref _memberNo, ref msg);
- //Get results by type
+ if (_deformationsCheck.Active)
+ {
+ if (!_deformation_results)
+ {
+ AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Run component again to get deformation results.");
+ }
+ else
+ {
+ _meshdisplacements = GetMeshDisplacements(ref _sfcNo, ref msg);
+ _memberdisplacements = GetMemberDisplacements(ref _memberNo, ref msg);
+ _meshdisplacementsByType = GetMeshDisplacementsByType(result_type);
+ _memberdisplacementsByType = GetMemberDisplacementsByType(result_type);
+ }
+ }
+ // Update drop down menu of result types
if (result_type == 0) // if no value obtaines through overwrite
{
_resultDropLastValue = 0;
- updateDropDownMenu2(_resultTypes.Distinct().ToList(), ref result_type);
+ updateDropDownMenu2(_resultTypes.ToList(), ref result_type);
}
- _meshdisplacementsByType = GetMeshDisplacementsByType(result_type);
- _memberdisplacementsByType = GetMemberDisplacementsByType(result_type);
- // Get analysis results
- outResults = new RFResults(_lcresults, _saveddata, iLoadCase,
- _memberForcesCheck.Active, _surfaceForcesCheck.Active, _nodalReactionsCheck.Active,
- _lineReactionsCheck.Active);
// Set _resetLC to false again
- _resetLC = false;
+ _resetLC = false;
+ _resetResultType = true;
}
if(_resetResultType) // when there are changes in drop down menu
{
@@ -543,12 +593,16 @@ protected override void SolveInstance(IGH_DataAccess DA, EvaluationUnit unit)
{
result_type = Int32.Parse(_resulttypeDrop.Items[_resulttypeDrop.Value].name);
}
- _meshdisplacementsByType = GetMeshDisplacementsByType(result_type);
- _memberdisplacementsByType = GetMemberDisplacementsByType(result_type);
+ if (_deformationsCheck.Active)
+ {
+ _meshdisplacementsByType = GetMeshDisplacementsByType(result_type);
+ _memberdisplacementsByType = GetMemberDisplacementsByType(result_type);
+ }
// Get analysis results
- outResults = new RFResults(_lcresults, _saveddata, iLoadCase,
- _memberForcesCheck.Active, _surfaceForcesCheck.Active, _nodalReactionsCheck.Active,
- _lineReactionsCheck.Active);
+ if(result_type>0)
+ {
+ outResults.ResultType = ((ResultsValueType)result_type).ToString();
+ }
// Set _resetType to false again
_resetResultType = false;
}
@@ -640,7 +694,10 @@ private DataTree GetMeshDisplacements(ref List sfcNo, ref List();
// Save defoirmation vectors into a tree
var surfaceResults = _lcresults.GetSurfacesDeformations(false).OrderBy(o => o.LocationNo); // Sort according to nodes so there are no errors when applying displacements
- _resultTypes.AddRange(surfaceResults.Select(x => x.Type));
+ foreach (var resulttype in surfaceResults.Select(x => x.Type).Distinct())
+ {
+ _resultTypes.Add(resulttype);
+ }
foreach (var result in surfaceResults) // GET RESULT TYPES!!!
{
var gh_path = new GH_Path(result.SurfaceNo, (int)result.Type);
@@ -712,8 +769,11 @@ private DataTree GetMemberDisplacements(ref List memberNo, ref Li
_controlPoints.EnsurePath(pts_path);
var baseline = member.BaseLine.ToCurve();
// Get deformations
- var memberResults = _lcresults.GetMemberDeformations(member.No, ItemAt.AtNo, MemberAxesType.GlobalAxes); // We can't sort this list
- _resultTypes.AddRange(memberResults.Select(x => x.Type));
+ var memberResults = _lcresults.GetMemberDeformations(member.No, ItemAt.AtNo, MemberAxesType.GlobalAxes); // We can't sort this list
+ foreach (var resulttype in memberResults.Select(x => x.Type).Distinct())
+ {
+ _resultTypes.Add(resulttype);
+ }
var valueType = memberResults[0].Type; // Get deformation types to avoid duplicate control points
memberNo.Add(member.No);
foreach (var result in memberResults)
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsLineReactions_GUI.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsLineReactions_GUI.cs
index 42d2749..bafea17 100644
--- a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsLineReactions_GUI.cs
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsLineReactions_GUI.cs
@@ -1,6 +1,7 @@
using Grasshopper;
using Grasshopper.Kernel;
using Grasshopper.Kernel.Data;
+using Parametric_FEM_Toolbox.GUI;
using Parametric_FEM_Toolbox.RFEM;
using Rhino.Geometry;
using System;
@@ -49,7 +50,6 @@ protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager
pManager.AddVectorParameter("Forces", "F", "Reaction Forces [kN]", GH_ParamAccess.tree);
pManager.AddVectorParameter("Moments", "M", "Reaction Moments [kNm]", GH_ParamAccess.tree);
pManager.AddTextParameter("Results Flag", "Flag", "Results Flag", GH_ParamAccess.tree);
- pManager.AddTextParameter("Results Type", "Type", "Results Value Type", GH_ParamAccess.list);
// Sometimes you want to hide a specific parameter from the Rhino preview.
// You can use the HideParameter() method as a quick way:
@@ -109,10 +109,15 @@ protected override void SolveInstance(IGH_DataAccess DA)
var path1 = new GH_Path(i,j);
var path2 = new GH_Path(i);
treeNo.Add(support_forces.Branch(i)[j].LineNo, path2);
- treeLoc.AddRange(support_forces.Branch(i)[j].Location, path1);
- treeF.AddRange(support_forces.Branch(i)[j].Forces, path1);
- treeM.AddRange(support_forces.Branch(i)[j].Moments, path1);
- treeType.AddRange(support_forces.Branch(i)[j].Type, path1);
+ for (int k = 0; k < support_forces.Branch(i)[j].Location.Count; k++)
+ {
+ if(support_forces.Branch(i)[j].Type[k] == rfResults[i].ResultType)
+ {
+ treeLoc.Add(support_forces.Branch(i)[j].Location[k], path1);
+ treeF.Add(support_forces.Branch(i)[j].Forces[k], path1);
+ treeM.Add(support_forces.Branch(i)[j].Moments[k], path1);
+ }
+ }
treeFlag.Add(support_forces.Branch(i)[j].Flag.ToString(), path2);
}
}
@@ -123,7 +128,6 @@ protected override void SolveInstance(IGH_DataAccess DA)
DA.SetDataTree(2, treeF);
DA.SetDataTree(3, treeM);
DA.SetDataTree(4, treeFlag);
- DA.SetDataTree(5, treeType);
}
///
@@ -157,7 +161,7 @@ protected override System.Drawing.Bitmap Icon
///
public override Guid ComponentGuid
{
- get { return new Guid("32254ac4-9fbe-400d-8b1a-f05756cddc4f"); }
+ get { return new Guid("d216ddd1-61c8-4c22-af07-31e58c22dbdc"); }
}
}
}
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsMemberForces_GUI-RAZER-DAQ.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsMemberForces_GUI-RAZER-DAQ.cs
new file mode 100644
index 0000000..30b4b88
--- /dev/null
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsMemberForces_GUI-RAZER-DAQ.cs
@@ -0,0 +1,163 @@
+using Grasshopper;
+using Grasshopper.Kernel;
+using Grasshopper.Kernel.Data;
+using Parametric_FEM_Toolbox.RFEM;
+using Rhino.Geometry;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Parametric_FEM_Toolbox.GUI
+{
+ public class Component_ResultsMemberForces_GUI : GH_Component
+ {
+ ///
+ /// Each implementation of GH_Component must provide a public
+ /// constructor without any arguments.
+ /// Category represents the Tab in which the component will appear,
+ /// Subcategory the panel. If you use non-existing tab or panel names,
+ /// new tabs/panels will automatically be created.
+ ///
+ public Component_ResultsMemberForces_GUI()
+ : base("Member Forces", "MForces", "Get Member Forces from Calculation Results.", "B+G Toolbox", "RFEM")
+ {
+ }
+
+ ///
+ /// Registers all the input parameters for this component.
+ ///
+ protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
+ {
+ // Use the pManager object to register your input parameters.
+ // You can often supply default values when creating parameters.
+ // All parameters must have the correct access type. If you want
+ // to import lists or trees of values, modify the ParamAccess flag.
+ pManager.AddParameter(new Param_RFEM(), "Calculation Results", "Results", "Calculation results of a certain load case or load combination.", GH_ParamAccess.list);
+ }
+
+ ///
+ /// Registers all the output parameters for this component.
+ ///
+ protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
+ {
+ // Use the pManager object to register your output parameters.
+ // Output parameters do not have default values, but they too must have the correct access type.
+ pManager.AddIntegerParameter("Member Number", "No", "Index of the RFEM Member", GH_ParamAccess.tree);
+ pManager.AddNumberParameter("Location", "Loc", "Location of results along member axis", GH_ParamAccess.tree);
+ pManager.AddVectorParameter("Forces", "F", "Member Forces [kN]", GH_ParamAccess.tree);
+ pManager.AddVectorParameter("Moments", "M", "Member Moments [kNm]", GH_ParamAccess.tree);
+ pManager.AddTextParameter("Results Flag", "Flag", "Results Flag", GH_ParamAccess.tree);
+ pManager.AddTextParameter("Results Type", "Type", "Results Value Type", GH_ParamAccess.list);
+
+ // Sometimes you want to hide a specific parameter from the Rhino preview.
+ // You can use the HideParameter() method as a quick way:
+ //pManager.HideParameter(0);
+ }
+
+ ///
+ /// This is the method that actually does the work.
+ ///
+ /// The DA object can be used to retrieve data from input parameters and
+ /// to store data in output parameters.
+ protected override void SolveInstance(IGH_DataAccess DA)
+ {
+ // Output variables
+ var treeNo = new DataTree();
+ var treeLoc = new DataTree();
+ var treeF = new DataTree();
+ var treeM = new DataTree();
+ //var listLoading = new List();
+ var treeFlag = new DataTree();
+ var treeType = new DataTree();
+
+ // Input
+ var inGH = new List();
+ var rfResults = new List();
+ if (!DA.GetDataList(0, inGH))
+ {
+ return;
+ }
+ foreach (var gh in inGH)
+ {
+ if (!(gh == null))
+ {
+ rfResults.Add((RFResults)gh.Value);
+ }
+ }
+ var member_forces = new DataTree();
+ for (int i = 0; i < rfResults.Count; i++)
+ {
+ if (!(rfResults[i].MemberForces == null))
+ {
+ var path = new GH_Path(i);
+ member_forces.AddRange(rfResults[i].MemberForces, path);
+ }
+ }
+
+ // Get output
+ if (member_forces.DataCount == 0)
+ {
+ AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "No results available");
+ return;
+ }
+ for (int i = 0; i < member_forces.BranchCount; i++)
+ {
+ for (int j = 0; j < member_forces.Branch(i).Count; j++)
+ {
+ var path1 = new GH_Path(i,j);
+ var path2 = new GH_Path(i);
+ treeNo.Add(member_forces.Branch(i)[j].MemberNo, path2);
+ treeLoc.AddRange(member_forces.Branch(i)[j].Location, path1);
+ treeF.AddRange(member_forces.Branch(i)[j].Forces, path1);
+ treeM.AddRange(member_forces.Branch(i)[j].Moments, path1);
+ treeType.AddRange(member_forces.Branch(i)[j].Type, path1);
+ treeFlag.Add(member_forces.Branch(i)[j].Flag.ToString(), path2);
+ }
+ }
+
+ // Output
+ DA.SetDataTree(0, treeNo);
+ DA.SetDataTree(1, treeLoc);
+ DA.SetDataTree(2, treeF);
+ DA.SetDataTree(3, treeM);
+ DA.SetDataTree(4, treeFlag);
+ DA.SetDataTree(5, treeType);
+ }
+
+ ///
+ /// The Exposure property controls where in the panel a component icon
+ /// will appear. There are seven possible locations (primary to septenary),
+ /// each of which can be combined with the GH_Exposure.obscure flag, which
+ /// ensures the component will only be visible on panel dropdowns.
+ ///
+ public override GH_Exposure Exposure
+ {
+ get { return GH_Exposure.senary; }
+ }
+
+ ///
+ /// Provides an Icon for every component that will be visible in the User Interface.
+ /// Icons need to be 24x24 pixels.
+ ///
+ protected override System.Drawing.Bitmap Icon
+ {
+ get
+ {
+ // You can add image files to your project resources and access them like this:
+ return Properties.Resources.Results_MemberForces;
+ }
+ }
+
+ ///
+ /// Each component must have a unique Guid to identify it.
+ /// It is vital this Guid doesn't change otherwise old ghx files
+ /// that use the old ID will partially fail during loading.
+ ///
+ public override Guid ComponentGuid
+ {
+ get { return new Guid("4bd4c1f0-12bb-4d87-a0c2-607b04b77277"); }
+ }
+ }
+}
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsMemberForces_GUI.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsMemberForces_GUI.cs
index fe9b20b..559e0bf 100644
--- a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsMemberForces_GUI.cs
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsMemberForces_GUI.cs
@@ -49,7 +49,6 @@ protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager
pManager.AddVectorParameter("Forces", "F", "Member Forces [kN]", GH_ParamAccess.tree);
pManager.AddVectorParameter("Moments", "M", "Member Moments [kNm]", GH_ParamAccess.tree);
pManager.AddTextParameter("Results Flag", "Flag", "Results Flag", GH_ParamAccess.tree);
- pManager.AddTextParameter("Results Type", "Type", "Results Value Type", GH_ParamAccess.list);
// Sometimes you want to hide a specific parameter from the Rhino preview.
// You can use the HideParameter() method as a quick way:
@@ -109,10 +108,16 @@ protected override void SolveInstance(IGH_DataAccess DA)
var path1 = new GH_Path(i,j);
var path2 = new GH_Path(i);
treeNo.Add(member_forces.Branch(i)[j].MemberNo, path2);
- treeLoc.AddRange(member_forces.Branch(i)[j].Location, path1);
- treeF.AddRange(member_forces.Branch(i)[j].Forces, path1);
- treeM.AddRange(member_forces.Branch(i)[j].Moments, path1);
- treeType.AddRange(member_forces.Branch(i)[j].Type, path1);
+ for (int k = 0; k < member_forces.Branch(i)[j].Location.Count; k++)
+ {
+ if(member_forces.Branch(i)[j].Type[k] == rfResults[i].ResultType)
+ {
+
+ }
+ treeLoc.Add(member_forces.Branch(i)[j].Location[k], path1);
+ treeF.Add(member_forces.Branch(i)[j].Forces[k], path1);
+ treeM.Add(member_forces.Branch(i)[j].Moments[k], path1);
+ }
treeFlag.Add(member_forces.Branch(i)[j].Flag.ToString(), path2);
}
}
@@ -123,7 +128,6 @@ protected override void SolveInstance(IGH_DataAccess DA)
DA.SetDataTree(2, treeF);
DA.SetDataTree(3, treeM);
DA.SetDataTree(4, treeFlag);
- DA.SetDataTree(5, treeType);
}
///
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsNodeReactions_GUI.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsNodeReactions_GUI.cs
index 658d12a..09673e0 100644
--- a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsNodeReactions_GUI.cs
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsNodeReactions_GUI.cs
@@ -49,7 +49,6 @@ protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager
pManager.AddPointParameter("Location", "Loc", "Support Location", GH_ParamAccess.tree);
pManager.AddVectorParameter("Forces", "F", "Member Forces in global CSys [kN]", GH_ParamAccess.tree);
pManager.AddVectorParameter("Moments", "M", "Member Moments in global CSys [kNm]", GH_ParamAccess.tree);
- pManager.AddTextParameter("Results Type", "Type", "Results Value Type", GH_ParamAccess.tree);
// Sometimes you want to hide a specific parameter from the Rhino preview.
// You can use the HideParameter() method as a quick way:
@@ -68,7 +67,6 @@ protected override void SolveInstance(IGH_DataAccess DA)
var treeCoor = new DataTree();
var treeF = new DataTree();
var treeM = new DataTree();
- var treeType = new DataTree();
// Input
var inGH = new List();
@@ -105,11 +103,13 @@ protected override void SolveInstance(IGH_DataAccess DA)
for (int j = 0; j < reaction_forces.Branch(i).Count; j++)
{
var path = new GH_Path(i);
- treeNo.Add(reaction_forces.Branch(i)[j].NodeNo, path);
- treeCoor.Add(reaction_forces.Branch(i)[j].Location, path);
- treeF.Add(reaction_forces.Branch(i)[j].Forces, path);
- treeM.Add(reaction_forces.Branch(i)[j].Moments, path);
- treeType.Add(reaction_forces.Branch(i)[j].Type, path);
+ if(reaction_forces.Branch(i)[j].Type == rfResults[i].ResultType)
+ {
+ treeNo.Add(reaction_forces.Branch(i)[j].NodeNo, path);
+ treeCoor.Add(reaction_forces.Branch(i)[j].Location, path);
+ treeF.Add(reaction_forces.Branch(i)[j].Forces, path);
+ treeM.Add(reaction_forces.Branch(i)[j].Moments, path);
+ }
}
}
@@ -118,7 +118,6 @@ protected override void SolveInstance(IGH_DataAccess DA)
DA.SetDataTree(1, treeCoor);
DA.SetDataTree(2, treeF);
DA.SetDataTree(3, treeM);
- DA.SetDataTree(4, treeType);
}
///
@@ -152,7 +151,7 @@ protected override System.Drawing.Bitmap Icon
///
public override Guid ComponentGuid
{
- get { return new Guid("1dd90138-c7ef-4811-ac44-ad0e68199921"); }
+ get { return new Guid("7672c4b1-7421-4639-bf4d-870bcf89a323"); }
}
}
}
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsSurfaceForces_GUI.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsSurfaceForces_GUI.cs
index 13f3425..78a4ca2 100644
--- a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsSurfaceForces_GUI.cs
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/Component_ResultsSurfaceForces_GUI.cs
@@ -49,8 +49,7 @@ protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager
pManager.AddIntegerParameter("Surface Number", "No", "Index of the RFEM Surface", GH_ParamAccess.tree);
pManager.AddPointParameter("Coordinates", "Pt", "Coordinates of results", GH_ParamAccess.tree);
- pManager.AddIntegerParameter("Location", "Loc", "Location of results", GH_ParamAccess.tree);
- pManager.AddTextParameter("Type", "Type", "Results Type", GH_ParamAccess.tree);
+ pManager.AddIntegerParameter("Location", "Loc", "Location of results", GH_ParamAccess.tree);
pManager.AddNumberParameter("AxialForceAlphaM", "αm", "Axial force αm [kN/m]", GH_ParamAccess.tree);
pManager.AddNumberParameter("AxialForceN1", "n1", "Axial force n1 [kN/m]", GH_ParamAccess.tree);
pManager.AddNumberParameter("AxialForceN2", "n2", "Axial force n2 [kN/m]", GH_ParamAccess.tree);
@@ -163,36 +162,42 @@ protected override void SolveInstance(IGH_DataAccess DA)
var path = new GH_Path(i, j);
var path2 = new GH_Path(i);
treeNo.Add(sfc_forces.Branch(i)[j].SurfaceNo, path2);
- treeCoor.AddRange(sfc_forces.Branch(i)[j].Location, path);
- treeLoc.AddRange(sfc_forces.Branch(i)[j].LocationNo, path);
- treeType.AddRange(sfc_forces.Branch(i)[j].Type, path);
- axialForceAlphaM.AddRange(sfc_forces.Branch(i)[j].AxialForceAlphaM, path);
- axialForceN1.AddRange(sfc_forces.Branch(i)[j].AxialForceN1, path);
- axialForceN2.AddRange(sfc_forces.Branch(i)[j].AxialForceN2, path);
- axialForceNcD.AddRange(sfc_forces.Branch(i)[j].AxialForceNcD, path);
- axialForceNx.AddRange(sfc_forces.Branch(i)[j].AxialForceNx, path);
- axialForceNxD.AddRange(sfc_forces.Branch(i)[j].AxialForceNxD, path);
- axialForceNxy.AddRange(sfc_forces.Branch(i)[j].AxialForceNxy, path);
- axialForceNy.AddRange(sfc_forces.Branch(i)[j].AxialForceNy, path);
- axialForceNyD.AddRange(sfc_forces.Branch(i)[j].AxialForceNyD, path);
- axialForceVMaxM.AddRange(sfc_forces.Branch(i)[j].AxialForceVMaxM, path);
- momentAlphaB.AddRange(sfc_forces.Branch(i)[j].MomentAlphaB, path);
- momentM1.AddRange(sfc_forces.Branch(i)[j].MomentM1, path);
- momentM2.AddRange(sfc_forces.Branch(i)[j].MomentM2, path);
- momentMcDNegative.AddRange(sfc_forces.Branch(i)[j].MomentMcDNegative, path);
- momentMcDPositive.AddRange(sfc_forces.Branch(i)[j].MomentMcDPositive, path);
- momentMx.AddRange(sfc_forces.Branch(i)[j].MomentMx, path);
- momentMxDNegative.AddRange(sfc_forces.Branch(i)[j].MomentMxDNegative, path);
- momentMxDPositive.AddRange(sfc_forces.Branch(i)[j].MomentMxDPositive, path);
- momentMxy.AddRange(sfc_forces.Branch(i)[j].MomentMxy, path);
- momentMy.AddRange(sfc_forces.Branch(i)[j].MomentMy, path);
- momentMyDNegative.AddRange(sfc_forces.Branch(i)[j].MomentMyDNegative, path);
- momentMyDPositive.AddRange(sfc_forces.Branch(i)[j].MomentMyDPositive, path);
- momentTMaxB.AddRange(sfc_forces.Branch(i)[j].MomentTMaxB, path);
- shearForceBetaB.AddRange(sfc_forces.Branch(i)[j].ShearForceBetaB, path);
- shearForceVMaxB.AddRange(sfc_forces.Branch(i)[j].ShearForceVMaxB, path);
- shearForceVx.AddRange(sfc_forces.Branch(i)[j].ShearForceVx, path);
- shearForceVy.AddRange(sfc_forces.Branch(i)[j].ShearForceVy, path);
+ for (int k = 0; k < sfc_forces.Branch(i)[j].Location.Count; k++)
+ {
+ if (sfc_forces.Branch(i)[j].Type[k] == rfResults[i].ResultType)
+ {
+ treeCoor.Add(sfc_forces.Branch(i)[j].Location[k], path);
+ treeLoc.Add(sfc_forces.Branch(i)[j].LocationNo[k], path);
+ treeType.Add(sfc_forces.Branch(i)[j].Type[k], path);
+ axialForceAlphaM.Add(sfc_forces.Branch(i)[j].AxialForceAlphaM[k], path);
+ axialForceN1.Add(sfc_forces.Branch(i)[j].AxialForceN1[k], path);
+ axialForceN2.Add(sfc_forces.Branch(i)[j].AxialForceN2[k], path);
+ axialForceNcD.Add(sfc_forces.Branch(i)[j].AxialForceNcD[k], path);
+ axialForceNx.Add(sfc_forces.Branch(i)[j].AxialForceNx[k], path);
+ axialForceNxD.Add(sfc_forces.Branch(i)[j].AxialForceNxD[k], path);
+ axialForceNxy.Add(sfc_forces.Branch(i)[j].AxialForceNxy[k], path);
+ axialForceNy.Add(sfc_forces.Branch(i)[j].AxialForceNy[k], path);
+ axialForceNyD.Add(sfc_forces.Branch(i)[j].AxialForceNyD[k], path);
+ axialForceVMaxM.Add(sfc_forces.Branch(i)[j].AxialForceVMaxM[k], path);
+ momentAlphaB.Add(sfc_forces.Branch(i)[j].MomentAlphaB[k], path);
+ momentM1.Add(sfc_forces.Branch(i)[j].MomentM1[k], path);
+ momentM2.Add(sfc_forces.Branch(i)[j].MomentM2[k], path);
+ momentMcDNegative.Add(sfc_forces.Branch(i)[j].MomentMcDNegative[k], path);
+ momentMcDPositive.Add(sfc_forces.Branch(i)[j].MomentMcDPositive[k], path);
+ momentMx.Add(sfc_forces.Branch(i)[j].MomentMx[k], path);
+ momentMxDNegative.Add(sfc_forces.Branch(i)[j].MomentMxDNegative[k], path);
+ momentMxDPositive.Add(sfc_forces.Branch(i)[j].MomentMxDPositive[k], path);
+ momentMxy.Add(sfc_forces.Branch(i)[j].MomentMxy[k], path);
+ momentMy.Add(sfc_forces.Branch(i)[j].MomentMy[k], path);
+ momentMyDNegative.Add(sfc_forces.Branch(i)[j].MomentMyDNegative[k], path);
+ momentMyDPositive.Add(sfc_forces.Branch(i)[j].MomentMyDPositive[k], path);
+ momentTMaxB.Add(sfc_forces.Branch(i)[j].MomentTMaxB[k], path);
+ shearForceBetaB.Add(sfc_forces.Branch(i)[j].ShearForceBetaB[k], path);
+ shearForceVMaxB.Add(sfc_forces.Branch(i)[j].ShearForceVMaxB[k], path);
+ shearForceVx.Add(sfc_forces.Branch(i)[j].ShearForceVx[k], path);
+ shearForceVy.Add(sfc_forces.Branch(i)[j].ShearForceVy[k], path);
+ }
+ }
}
}
@@ -200,34 +205,33 @@ protected override void SolveInstance(IGH_DataAccess DA)
DA.SetDataTree(0, treeNo);
DA.SetDataTree(1, treeCoor);
DA.SetDataTree(2, treeLoc);
- DA.SetDataTree(3, treeType);
- DA.SetDataTree(4, axialForceAlphaM);
- DA.SetDataTree(5, axialForceN1);
- DA.SetDataTree(6, axialForceN2);
- DA.SetDataTree(7, axialForceNcD);
- DA.SetDataTree(8, axialForceNx);
- DA.SetDataTree(9, axialForceNxD);
- DA.SetDataTree(10, axialForceNxy);
- DA.SetDataTree(11, axialForceNy);
- DA.SetDataTree(12, axialForceNyD);
- DA.SetDataTree(13, axialForceVMaxM);
- DA.SetDataTree(14, momentAlphaB);
- DA.SetDataTree(15, momentM1);
- DA.SetDataTree(16, momentM2);
- DA.SetDataTree(17, momentMcDNegative);
- DA.SetDataTree(18, momentMcDPositive);
- DA.SetDataTree(19, momentMx);
- DA.SetDataTree(20, momentMxDNegative);
- DA.SetDataTree(21, momentMxDPositive);
- DA.SetDataTree(22, momentMxy);
- DA.SetDataTree(23, momentMy);
- DA.SetDataTree(24, momentMyDNegative);
- DA.SetDataTree(25, momentMyDPositive);
- DA.SetDataTree(26, momentTMaxB);
- DA.SetDataTree(27, shearForceBetaB);
- DA.SetDataTree(28, shearForceVMaxB);
- DA.SetDataTree(29, shearForceVx);
- DA.SetDataTree(30, shearForceVy);
+ DA.SetDataTree(3, axialForceAlphaM);
+ DA.SetDataTree(4, axialForceN1);
+ DA.SetDataTree(5, axialForceN2);
+ DA.SetDataTree(6, axialForceNcD);
+ DA.SetDataTree(7, axialForceNx);
+ DA.SetDataTree(8, axialForceNxD);
+ DA.SetDataTree(9, axialForceNxy);
+ DA.SetDataTree(10, axialForceNy);
+ DA.SetDataTree(11, axialForceNyD);
+ DA.SetDataTree(12, axialForceVMaxM);
+ DA.SetDataTree(13, momentAlphaB);
+ DA.SetDataTree(14, momentM1);
+ DA.SetDataTree(15, momentM2);
+ DA.SetDataTree(16, momentMcDNegative);
+ DA.SetDataTree(17, momentMcDPositive);
+ DA.SetDataTree(18, momentMx);
+ DA.SetDataTree(19, momentMxDNegative);
+ DA.SetDataTree(20, momentMxDPositive);
+ DA.SetDataTree(21, momentMxy);
+ DA.SetDataTree(22, momentMy);
+ DA.SetDataTree(23, momentMyDNegative);
+ DA.SetDataTree(24, momentMyDPositive);
+ DA.SetDataTree(25, momentTMaxB);
+ DA.SetDataTree(26, shearForceBetaB);
+ DA.SetDataTree(27, shearForceVMaxB);
+ DA.SetDataTree(28, shearForceVx);
+ DA.SetDataTree(29, shearForceVy);
}
///
@@ -261,7 +265,7 @@ protected override System.Drawing.Bitmap Icon
///
public override Guid ComponentGuid
{
- get { return new Guid("df9e7012-2731-47d4-987c-6e3ae4c6fb52"); }
+ get { return new Guid("f9304ed3-1dad-4671-a8eb-909a4b586856"); }
}
}
-}
+}
\ No newline at end of file
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/SubComponent_RFSurface_Assemble_GUI.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/SubComponent_RFSurface_Assemble_GUI.cs
index a9969ca..7807e76 100644
--- a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/SubComponent_RFSurface_Assemble_GUI.cs
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/SubComponent_RFSurface_Assemble_GUI.cs
@@ -64,39 +64,42 @@ protected void Setup(EvaluationUnit unit)
unit.RegisterInputParam(new Param_Integer(), "Stiffness Type", "Stiff", UtilLibrary.DescriptionRFTypes(typeof(SurfaceStiffnessType)), GH_ParamAccess.item);
unit.Inputs[8].EnumInput = UtilLibrary.ListRFTypes(typeof(SurfaceStiffnessType));
unit.Inputs[8].Parameter.Optional = true;
+ unit.RegisterInputParam(new Param_Number(), "Eccentricty [m]", "Ecc", "Surface eccentricity [m]", GH_ParamAccess.item);
+ unit.Inputs[9].Parameter.Optional = true;
gH_ExtendableMenu.RegisterInputPlug(unit.Inputs[5]);
gH_ExtendableMenu.RegisterInputPlug(unit.Inputs[6]);
gH_ExtendableMenu.RegisterInputPlug(unit.Inputs[7]);
gH_ExtendableMenu.RegisterInputPlug(unit.Inputs[8]);
+ gH_ExtendableMenu.RegisterInputPlug(unit.Inputs[9]);
unit.AddMenu(gH_ExtendableMenu);
GH_ExtendableMenu gH_ExtendableMenu1 = new GH_ExtendableMenu(1, "surface axes");
gH_ExtendableMenu1.Name = "Surface Axes";
gH_ExtendableMenu1.Collapse();
unit.RegisterInputParam(new Param_Integer(), "Direction", "Dir", UtilLibrary.DescriptionRFTypes(typeof(SurfaceAxesDirection)), GH_ParamAccess.item);
- unit.Inputs[9].EnumInput = UtilLibrary.ListRFTypes(typeof(SurfaceAxesDirection));
- unit.Inputs[9].Parameter.Optional = true;
- unit.RegisterInputParam(new Param_Integer(), "Line Index", "Line", "Line Index", GH_ParamAccess.item);
+ unit.Inputs[10].EnumInput = UtilLibrary.ListRFTypes(typeof(SurfaceAxesDirection));
unit.Inputs[10].Parameter.Optional = true;
- unit.RegisterInputParam(new Param_Number(), "Rotation [rad]", "Rot", "Angular rotation [rad]", GH_ParamAccess.item);
+ unit.RegisterInputParam(new Param_Integer(), "Line Index", "Line", "Line Index", GH_ParamAccess.item);
unit.Inputs[11].Parameter.Optional = true;
- gH_ExtendableMenu1.RegisterInputPlug(unit.Inputs[9]);
+ unit.RegisterInputParam(new Param_Number(), "Rotation [rad]", "Rot", "Angular rotation [rad]", GH_ParamAccess.item);
+ unit.Inputs[12].Parameter.Optional = true;
gH_ExtendableMenu1.RegisterInputPlug(unit.Inputs[10]);
gH_ExtendableMenu1.RegisterInputPlug(unit.Inputs[11]);
+ gH_ExtendableMenu1.RegisterInputPlug(unit.Inputs[12]);
unit.AddMenu(gH_ExtendableMenu1);
GH_ExtendableMenu gH_ExtendableMenu2 = new GH_ExtendableMenu(2, "modify");
gH_ExtendableMenu2.Name = "Modify";
gH_ExtendableMenu2.Collapse();
unit.RegisterInputParam(new Param_RFEM(), "RF Surface", "RF Surface", "Surface object from the RFEM model to modify", GH_ParamAccess.item);
- unit.Inputs[12].Parameter.Optional = true;
- unit.RegisterInputParam(new Param_Boolean(), "Modify", "Modify", "Modify object?", GH_ParamAccess.item);
unit.Inputs[13].Parameter.Optional = true;
- unit.RegisterInputParam(new Param_Boolean(), "Delete", "Delete", "Delete object?", GH_ParamAccess.item);
+ unit.RegisterInputParam(new Param_Boolean(), "Modify", "Modify", "Modify object?", GH_ParamAccess.item);
unit.Inputs[14].Parameter.Optional = true;
- gH_ExtendableMenu2.RegisterInputPlug(unit.Inputs[12]);
+ unit.RegisterInputParam(new Param_Boolean(), "Delete", "Delete", "Delete object?", GH_ParamAccess.item);
+ unit.Inputs[15].Parameter.Optional = true;
gH_ExtendableMenu2.RegisterInputPlug(unit.Inputs[13]);
gH_ExtendableMenu2.RegisterInputPlug(unit.Inputs[14]);
+ gH_ExtendableMenu2.RegisterInputPlug(unit.Inputs[15]);
unit.AddMenu(gH_ExtendableMenu2);
unit.RegisterOutputParam(new Param_RFEM(), "RF Surface", "RF Surface", "Output RFSurface.");
@@ -121,6 +124,7 @@ public override void SolveInstance(IGH_DataAccess DA, out string msg, out GH_Run
var thickType = 0;
var thick = 0.0;
var mat = 0;
+ var ecc = 0.0;
//int intPoints = 4;
//int newNo = 0;
RFEM.SurfaceAxes axes = new RFEM.SurfaceAxes();
@@ -131,7 +135,7 @@ public override void SolveInstance(IGH_DataAccess DA, out string msg, out GH_Run
int csNo = 0;
var rot = 0.0;
- if (DA.GetData(12, ref inRFEM))
+ if (DA.GetData(13, ref inRFEM))
{
rfSrfc = new RFSurface((RFSurface)inRFEM.Value);
if (DA.GetData(0, ref inSrfc))
@@ -175,7 +179,6 @@ public override void SolveInstance(IGH_DataAccess DA, out string msg, out GH_Run
rfSrfc.MaterialNo = mat;
rfSrfc.Thickness = thick;
}
- //DA.GetData(7, ref intPoints);
Component_RFSurface.SetGeometry(inSrfc, ref rfSrfc);
if (DA.GetData(6, ref geomType))
{
@@ -222,10 +225,6 @@ public override void SolveInstance(IGH_DataAccess DA, out string msg, out GH_Run
return;
}
}
- //}else
- //{
- // rfSrfc.GeometryType = SurfaceGeometryType.PlaneSurfaceType;
- //}
}
else
{
@@ -233,11 +232,11 @@ public override void SolveInstance(IGH_DataAccess DA, out string msg, out GH_Run
level = GH_RuntimeMessageLevel.Warning;
return;
}
- if (DA.GetData(13, ref mod))
+ if (DA.GetData(14, ref mod))
{
rfSrfc.ToModify = mod;
}
- if (DA.GetData(14, ref del))
+ if (DA.GetData(15, ref del))
{
rfSrfc.ToDelete = del;
}
@@ -273,7 +272,12 @@ public override void SolveInstance(IGH_DataAccess DA, out string msg, out GH_Run
return;
}
}
- if (DA.GetData(9, ref axesDirType))
+ if (DA.GetData(9, ref ecc))
+ {
+ rfSrfc.Eccentricity = ecc;
+
+ }
+ if (DA.GetData(10, ref axesDirType))
{
axes.SurfaceAxesDirection = (SurfaceAxesDirection)axesDirType;
@@ -298,7 +302,7 @@ public override void SolveInstance(IGH_DataAccess DA, out string msg, out GH_Run
level = GH_RuntimeMessageLevel.Warning;
return;
case SurfaceAxesDirection.SurfaceAngularRotation:
- if (!(DA.GetData(11, ref rot)))
+ if (!(DA.GetData(12, ref rot)))
{
msg = "Insufficient input parameters. Provide Angular rotation.";
level = GH_RuntimeMessageLevel.Warning;
@@ -315,7 +319,7 @@ public override void SolveInstance(IGH_DataAccess DA, out string msg, out GH_Run
level = GH_RuntimeMessageLevel.Warning;
return;
case SurfaceAxesDirection.SurfaceAxisXParallelToLine:
- if (!DA.GetData(10, ref axesLines))
+ if (!DA.GetData(11, ref axesLines))
{
msg = "Insufficient input parameters. Provide Line.";
level = GH_RuntimeMessageLevel.Warning;
@@ -324,7 +328,7 @@ public override void SolveInstance(IGH_DataAccess DA, out string msg, out GH_Run
axes.AxesLineList = axesLines.ToString();
break;
case SurfaceAxesDirection.SurfaceAxisYParallelToLine:
- if (!DA.GetData(10, ref axesLines))
+ if (!DA.GetData(11, ref axesLines))
{
msg = "Insufficient input parameters. Provide Line.";
level = GH_RuntimeMessageLevel.Warning;
@@ -334,7 +338,7 @@ public override void SolveInstance(IGH_DataAccess DA, out string msg, out GH_Run
break;
}
rfSrfc.SurfaceAxes = axes;
- }else if(DA.GetData(11, ref rot) || DA.GetData(10, ref axesLines))
+ }else if(DA.GetData(12, ref rot) || DA.GetData(11, ref axesLines))
{
msg = "Insufficient input parameters. Provide Axes Direction.";
level = GH_RuntimeMessageLevel.Warning;
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/SubComponent_RFSurface_Disassemble_GUI.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/SubComponent_RFSurface_Disassemble_GUI.cs
index d6070b2..31243f8 100644
--- a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/SubComponent_RFSurface_Disassemble_GUI.cs
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/GUI/SubComponent_RFSurface_Disassemble_GUI.cs
@@ -49,6 +49,7 @@ protected void Setup(EvaluationUnit unit)
unit.RegisterOutputParam(new Param_String(), "Geometry Type", "GType", "Geometry Type");
unit.RegisterOutputParam(new Param_String(), "Thickness Type", "ThType", "Thickness Type");
unit.RegisterOutputParam(new Param_String(), "Stiffness Type", "SType", "Stiffness Type");
+ unit.RegisterOutputParam(new Param_Number(), "Eccentricty [m]", "Ecc", "Surface eccentricity [m]");
unit.RegisterOutputParam(new Param_Number(), "Area [m²]", "A", "Surface area");
GH_ExtendableMenu gH_ExtendableMenu = new GH_ExtendableMenu(0, "advanced");
@@ -58,10 +59,10 @@ protected void Setup(EvaluationUnit unit)
unit.RegisterOutputParam(new Param_String(), "Direction", "Dir", "Axes Direction");
unit.RegisterOutputParam(new Param_String(), "Line Index", "Line", "Line Index");
unit.RegisterOutputParam(new Param_Number(), "Rotation [rad]", "Rot", "Angular rotation [rad]");
- gH_ExtendableMenu.RegisterOutputPlug(unit.Outputs[10]);
gH_ExtendableMenu.RegisterOutputPlug(unit.Outputs[11]);
gH_ExtendableMenu.RegisterOutputPlug(unit.Outputs[12]);
gH_ExtendableMenu.RegisterOutputPlug(unit.Outputs[13]);
+ gH_ExtendableMenu.RegisterOutputPlug(unit.Outputs[14]);
unit.AddMenu(gH_ExtendableMenu);
}
@@ -87,13 +88,14 @@ public override void SolveInstance(IGH_DataAccess DA, out string msg, out GH_Run
DA.SetData(6, rfSurface.GeometryType);
DA.SetData(7, rfSurface.ThicknessType);
DA.SetData(8, rfSurface.StiffnessType);
- DA.SetData(9, rfSurface.Area);
+ DA.SetData(9, rfSurface.Eccentricity);
+ DA.SetData(10, rfSurface.Area);
if (rfSurface.SurfaceAxes != null)
{
- DA.SetData(10, rfSurface.Axes);
- DA.SetData(11, rfSurface.SurfaceAxes.SurfaceAxesDirection.ToString());
- DA.SetData(12, rfSurface.SurfaceAxes.AxesLineList);
- DA.SetData(13, rfSurface.SurfaceAxes.Rotation);
+ DA.SetData(11, rfSurface.Axes);
+ DA.SetData(12, rfSurface.SurfaceAxes.SurfaceAxesDirection.ToString());
+ DA.SetData(13, rfSurface.SurfaceAxes.AxesLineList);
+ DA.SetData(14, rfSurface.SurfaceAxes.Rotation);
}
}
}
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/HelperLibraries/Component_SetData.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/HelperLibraries/Component_SetData.cs
index 49a53ad..69e0fd2 100644
--- a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/HelperLibraries/Component_SetData.cs
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/HelperLibraries/Component_SetData.cs
@@ -1703,7 +1703,6 @@ public static void SetRFNodalLoads(this IModelData data, ILoads loads, List existingNodes, ref int lastNo, ref int lastNLNo, double tol)
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/HelperLibraries/UtilLibrary.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/HelperLibraries/UtilLibrary.cs
index 875ddb5..1d62024 100644
--- a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/HelperLibraries/UtilLibrary.cs
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/HelperLibraries/UtilLibrary.cs
@@ -203,7 +203,10 @@ public static bool NullLineExists(IEnumerable alllines, IEnum
return false;
}
-
+ public static string EmptyIfNull(this string self)
+ {
+ return self ?? "";
+ }
#endregion
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox-RAZER-DAQ.csproj b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox-RAZER-DAQ.csproj
new file mode 100644
index 0000000..8efe937
--- /dev/null
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox-RAZER-DAQ.csproj
@@ -0,0 +1,640 @@
+
+
+
+ Debug
+ AnyCPU
+ 8.0.30703
+ 2.0
+ {8973F2E5-5115-4FB4-92D6-4690B62A09E0}
+ Library
+ Properties
+ Parametric_FEM_Toolbox
+ Parametric_FEM_Toolbox
+ v4.8
+ 512
+ false
+
+
+
+ true
+ full
+ false
+ bin\
+ DEBUG;TRACE
+ prompt
+ false
+
+
+ pdbonly
+ true
+ bin\
+ TRACE
+ prompt
+ 4
+ x64
+
+
+ true
+ bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+ false
+
+
+ bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+
+ False
+ True
+ ..\..\..\..\..\..\..\..\Program Files (x86)\Common Files\Dlubal\ImportExport\RX-Common.NET\Dlubal.RFEM3.dll
+
+
+ False
+ True
+ ..\..\..\..\..\Otros\cominterfaces\SDK\Reference Assemblies\x64\Dlubal.RFEM5.dll
+
+
+ False
+ True
+ D:\Diego\Documentos\Otros\SDK_en\Reference Assemblies\x86\Dlubal.STEEL_EC3.dll
+
+
+ C:\Users\diego\.nuget\packages\eto.forms\2.4.1\lib\netstandard1.0\Eto.dll
+
+
+ False
+ ..\..\..\..\..\..\..\..\Program Files\Rhino 7\Plug-ins\Grasshopper\GH_IO.dll
+
+
+ False
+ ..\..\..\..\..\..\..\..\Program Files\Rhino 7\Plug-ins\Grasshopper\Grasshopper.dll
+
+
+
+ False
+ ..\..\..\..\..\..\..\..\Program Files\Rhino 7\System\RhinoCommon.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Copy "$(TargetPath)" "D:\Diego\AppData\Roaming\Grasshopper\Libraries\$(TargetName).gha"
+Copy "$(TargetPath)" "C:\Users\diego\AppData\Roaming\Grasshopper\Libraries\$(TargetName).gha"
+Copy "$(TargetPath)" "C:\Users\dapellaniz\AppData\Roaming\Grasshopper\Libraries\$(TargetName).gha"
+Copy "$(TargetPath)" "D:\Users\dapellaniz\AppData\Roaming\Grasshopper\Libraries\$(ProjectName).gha"
+Copy "$(TargetPath)" "$(TargetDir)$(ProjectName).gha"
+Erase "$(TargetPath)"
+
+
+ en-US
+
+
+ C:\Program Files\Rhino 6\System\Rhino.exe
+
+
+ Program
+ AnyCPU
+
+
\ No newline at end of file
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox.cs
index 1035e05..6c0b7ed 100644
--- a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox.cs
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox.cs
@@ -59,7 +59,7 @@ public override string AssemblyVersion
{
get
{
- return "v1.2";
+ return "v1.3";
}
}
}
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox.csproj b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox.csproj
index 74fd848..7a49158 100644
--- a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox.csproj
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox.csproj
@@ -113,8 +113,12 @@
+
+
+
+
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/RFEM/RFLineSupportForces-RAZER-DAQ.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/RFEM/RFLineSupportForces-RAZER-DAQ.cs
new file mode 100644
index 0000000..f72544d
--- /dev/null
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/RFEM/RFLineSupportForces-RAZER-DAQ.cs
@@ -0,0 +1,106 @@
+using System;
+using Dlubal.RFEM5;
+using Grasshopper.Kernel.Types;
+using Rhino.Geometry;
+using Parametric_FEM_Toolbox.Utilities;
+using Parametric_FEM_Toolbox.HelperLibraries;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Parametric_FEM_Toolbox.RFEM
+{
+ [Serializable]
+ public class RFLineSupportForces : IGrassRFEM
+ {
+ //Standard constructors
+ public RFLineSupportForces()
+ {
+ }
+ public RFLineSupportForces(LineSupportForces[] support_forces) // rfem object as array because they are related to the same member
+ {
+ if (support_forces.Length == 0)
+ {
+ return;
+ }
+ LineNo = support_forces[0].LineNo;
+ NodeNo = support_forces[0].NodeNo;
+ Flag = support_forces[0].Flag;
+ Forces = new List();
+ Moments = new List();
+ Location = new List();
+ Type = new List();
+ for (int i = 0; i < support_forces.Length; i++)
+ {
+ Forces.Add(new Vector3d(support_forces[i].Forces.ToPoint3d()/1000));
+ Moments.Add(new Vector3d(support_forces[i].Moments.ToPoint3d()/1000));
+ Location.Add(support_forces[i].Location);
+ Type.Add(support_forces[i].Type.ToString());
+ }
+ ToModify = false;
+ ToDelete = false;
+ }
+
+ // Properties to Wrap Fields from RFEM Struct
+ public int LineNo { get; set; }
+ public int NodeNo { get; set; }
+ public List Type { get; set; }
+ //public int CrossSectionNo { get; set; } // makes no sense?
+ public ResultsFlag Flag { get; set; }
+ public List Forces { get; set; }
+ public List Moments { get; set; }
+ public List Location { get; set; }
+
+ // Additional Properties to the RFEM Struct
+ public bool ToModify { get; set; }
+ public bool ToDelete { get; set; }
+ //public int NewNo { get; set; }
+
+ // Display Info of the RFEM Objects on Panels
+ // Parameters are separated by ";". The component split text can be used to break the string down into a list.
+ public override string ToString()
+ {
+ return string.Format($"RFEM-LineSupportForces;LineNo:{LineNo};" +
+ $"Flag:{Flag};Locations:{Location.Count};");
+ }
+
+ ////Operator to retrieve a Line from an rfLine.
+ //public static implicit operator MemberForces(RFMemberForces member_forces)
+ //{
+ // Dlubal.RFEM5.MemberForces myForces = new Dlubal.RFEM5.MemberForces
+
+
+ // return myForces;
+ //}
+
+ // Convert RFEM Object into Rhino Geometry.
+ // These methods are later implemented by the class GH_RFEM.
+ public bool ToGH_Integer(ref T target)
+ {
+ return false;
+ }
+ public bool ToGH_Point(ref T target)
+ {
+ return false;
+ }
+ public bool ToGH_Line(ref T target)
+ {
+ return false;
+ }
+ public bool ToGH_Curve(ref T target)
+ {
+ return false;
+ }
+ public bool ToGH_Surface(ref T target)
+ {
+ return false;
+ }
+ public bool ToGH_Brep(ref T target)
+ {
+ return false;
+ }
+ public bool ToGH_Plane(ref T target)
+ {
+ return false;
+ }
+ }
+}
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/RFEM/RFResults.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/RFEM/RFResults.cs
index 554863f..0189776 100644
--- a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/RFEM/RFResults.cs
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/RFEM/RFResults.cs
@@ -35,24 +35,24 @@ public RFResults(IResults results, IModelData data, string loadcase, bool member
ToDelete = false;
}
- public RFResults(IResults results, IModelData data, string loadcase, bool member_forces, bool surface_forces, bool reaction_forces, bool line_reaction_forces) // rfem object as array because they are related to the same member
+ public RFResults(IResults results, IModelData data, ref HashSet result_types, string loadcase, bool member_forces, bool surface_forces, bool reaction_forces, bool line_reaction_forces) // rfem object as array because they are related to the same member
{
LoadCase = loadcase;
if (member_forces)
{
- MemberForces = GetRFMemberForces(results, data);
+ MemberForces = GetRFMemberForces(results, data, ref result_types);
}
if (surface_forces)
{
- SurfaceForces = GetRFSurfaceForces(results, data);
+ SurfaceForces = GetRFSurfaceForces(results, data, ref result_types);
}
if (reaction_forces)
{
- NodalSupportForces = GetRFNodalSupportForces(results, data);
+ NodalSupportForces = GetRFNodalSupportForces(results, data, ref result_types);
}
if (line_reaction_forces)
{
- LineSupportForces = GetRFLineSupportForces(results, data);
+ LineSupportForces = GetRFLineSupportForces(results, data, ref result_types);
}
ToModify = false;
ToDelete = false;
@@ -82,6 +82,25 @@ public List GetRFMemberForces(IResults results, IModelData data)
return myForces;
}
+ public List GetRFMemberForces(IResults results, IModelData data, ref HashSet types)
+ {
+ var myForces = new List();
+ foreach (var member in data.GetMembers())
+ {
+ if (member.Type == MemberType.NullMember)
+ {
+ continue;
+ }
+ var forces = results.GetMemberInternalForces(member.No, ItemAt.AtNo, true); // get results of the right type
+ myForces.Add(new RFMemberForces(forces));
+ foreach (var type in forces.Select(x => x.Type).Distinct())
+ {
+ types.Add(type);
+ }
+ }
+ return myForces;
+ }
+
public List GetRFSurfaceForces(IResults results, IModelData data)
{
var myForces = new List();
@@ -100,24 +119,25 @@ public List GetRFSurfaceForces(IResults results, IModelData dat
return myForces;
}
- //Test
- //public List GetRFSurfaceForces(IResults results, IResults results_raster, IModelData data)
- //{
- // var myForces = new List();
- // foreach (var surface in data.GetSurfaces())
- // {
- // if (surface.GeometryType == SurfaceGeometryType.UnknownGeometryType)
- // {
- // continue;
- // }
- // var forces = results.GetSurfaceInternalForces(surface.No, ItemAt.AtNo);
- // var globalDeformations = results_raster.GetSurfaceDeformations(surface.No, ItemAt.AtNo, false);
- // var localDeformations = results_raster.GetSurfaceDeformations(surface.No, ItemAt.AtNo, true);
- // var local_axis = Component_GetResults.GetSurfaceLocalAxis(globalDeformations, localDeformations);
- // myForces.Add(new RFSurfaceForces(forces, local_axis));
- // }
- // return myForces;
- //}
+ public List GetRFSurfaceForces(IResults results, IModelData data, ref HashSet types)
+ {
+ var myForces = new List();
+ foreach (var surface in data.GetSurfaces())
+ {
+ if (surface.GeometryType == SurfaceGeometryType.UnknownGeometryType)
+ {
+ continue;
+ }
+ var forces = results.GetSurfaceInternalForces(surface.No, ItemAt.AtNo);
+ myForces.Add(new RFSurfaceForces(forces));
+ foreach (var type in forces.Select(x => x.Type).Distinct())
+ {
+ types.Add(type);
+ }
+ }
+ return myForces;
+ }
+
public List GetRFNodalSupportForces(IResults results, IModelData data)
{
@@ -129,6 +149,17 @@ public List GetRFNodalSupportForces(IResults results, IMod
return myForces;
}
+ public List GetRFNodalSupportForces(IResults results, IModelData data, ref HashSet types)
+ {
+ var myForces = new List();
+ foreach (var nodalsupportforce in results.GetAllNodalSupportForces(false))
+ {
+ myForces.Add(new RFNodalSupportForces(nodalsupportforce, data));
+ types.Add(nodalsupportforce.Type);
+ }
+ return myForces;
+ }
+
public List GetRFLineSupportForces(IResults results, IModelData data)
{
var myForces = new List();
@@ -143,12 +174,31 @@ public List GetRFLineSupportForces(IResults results, IModel
return myForces;
}
+ public List GetRFLineSupportForces(IResults results, IModelData data, ref HashSet types)
+ {
+ var myForces = new List();
+ foreach (var linesupport in data.GetLineSupports())
+ {
+ foreach (var line in linesupport.LineList.ToInt())
+ {
+ var forces = results.GetLineSupportForces(line, ItemAt.AtNo, false);
+ myForces.Add(new RFLineSupportForces(forces));
+ foreach (var type in forces.Select(x => x.Type).Distinct())
+ {
+ types.Add(type);
+ }
+ }
+ }
+ return myForces;
+ }
+
// Properties to Wrap Fields from RFEM Struct
public string LoadCase { get; set; }
public List MemberForces { get; set; }
public List SurfaceForces { get; set; }
public List NodalSupportForces { get; set; }
public List LineSupportForces { get; set; }
+ public string ResultType { get; set; }
// Additional Properties to the RFEM Struct
public bool ToModify { get; set; }
@@ -159,7 +209,7 @@ public List GetRFLineSupportForces(IResults results, IModel
// Parameters are separated by ";". The component split text can be used to break the string down into a list.
public override string ToString()
{
- var outString = string.Format($"RFEM-Results: {LoadCase}; Available Results:" +
+ var outString = string.Format($"RFEM-Results: {LoadCase}; ResultType: {ResultType}, Available Results:" +
$"{((MemberForces == null) ? "" : " Member Forces,")}" +
$"{((SurfaceForces == null) ? "" : " Surface Forces,")}" +
$"{((NodalSupportForces == null) ? "" : " Nodal Support Forces,")}" +
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/RFEM/RFSurface.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/RFEM/RFSurface.cs
index 1fbaa07..edde9ad 100644
--- a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/RFEM/RFSurface.cs
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/RFEM/RFSurface.cs
@@ -115,6 +115,7 @@ public RFSurface(RFSurface other) : this(other, null, null, other.SurfaceAxes) /
public string IntegratedNodeList { get; set; }
public int MaterialNo { get; set; }
public bool SetIntegratedObjects { get; set; }
+
public SurfaceStiffnessType StiffnessType { get; set; }
public SurfaceThicknessType ThicknessType { get; set; }
public double Thickness { get; set; }
@@ -133,15 +134,15 @@ public RFSurface(RFSurface other) : this(other, null, null, other.SurfaceAxes) /
public override string ToString()
{
return string.Format($"RFEM-Surface;No:{No};Area:{Area}[m2];MaterialNo:{MaterialNo};" +
- $"Thickness:{Thickness}[m];Type:{GeometryType};ThicknessType:{ThicknessType};StiffnessType:{StiffnessType};BoundaryLineCount:{BoundaryLineCount};SurfaceAxesDirection:{SurfaceAxes.SurfaceAxesDirection};" +
- $"BoundaryLineList:{((BoundaryLineList == "") ? "-" : BoundaryLineList)};Eccentricity:{Eccentricity};" +
- $"IntegratedLineCount:{IntegratedLineCount};IntegratedLineList:{((IntegratedLineList == "") ? "-" : IntegratedLineList)};" +
- $"IntegratedNodeCount:{IntegratedNodeCount};IntegratedNodeList:{((IntegratedNodeList == "") ? "-" : IntegratedNodeList)};" +
- $"SetIntegratedObjects:{SetIntegratedObjects};ControlPoints:{ControlPoints.ToLabelString()};Tag:{((Tag == "") ? "-" : Tag)};" +
+ $"Thickness:{Thickness}[m];Type:{GeometryType};ThicknessType:{ThicknessType};StiffnessType:{StiffnessType};BoundaryLineCount:{BoundaryLineCount};" +
+ $"BoundaryLineList:{((String.IsNullOrEmpty(BoundaryLineList)) ? "-" : BoundaryLineList.EmptyIfNull())};Eccentricity:{Eccentricity};" +
+ $"IntegratedLineCount:{IntegratedLineCount};IntegratedLineList:{((String.IsNullOrEmpty(IntegratedLineList)) ? "-" : IntegratedLineList.EmptyIfNull())};" +
+ $"IntegratedNodeCount:{IntegratedNodeCount};IntegratedNodeList:{((String.IsNullOrEmpty(IntegratedNodeList)) ? "-" : IntegratedNodeList.EmptyIfNull())};" +
+ $"SetIntegratedObjects:{SetIntegratedObjects};ControlPoints:{((ControlPoints == null) ? "-" : ControlPoints.ToLabelString())};Tag:{((String.IsNullOrEmpty(Tag)) ? "-" : Tag)};" +
//$"Weights:{(Weights.ToString())};KnotsX:{(KnotsX.ToLabelString())};KnotsY:{(KnotsY.ToLabelString())};" +
//$"OrderU:{(OrderX.ToString())};OrderV:{(OrderY.ToString())};" +
- $"IsValid:{IsValid};IsGenerated:{IsGenerated};ID:{((ID == "") ? "-" : ID)};" +
- $"ToModify:{ToModify};ToDelete:{ToDelete};Comment:{((Comment == "") ? "-" : Comment)};");
+ $"IsValid:{IsValid};IsGenerated:{IsGenerated};ID:{((String.IsNullOrEmpty(ID)) ? "-" : ID)};" +
+ $"ToModify:{ToModify};ToDelete:{ToDelete};Comment:{((String.IsNullOrEmpty(Comment)) ? "-" : Comment.EmptyIfNull())};");
}
//Operator to retrieve a Line from an rfLine.
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/RFEM/RFSurfaceLoad.cs b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/RFEM/RFSurfaceLoad.cs
index b5a031c..587654c 100644
--- a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/RFEM/RFSurfaceLoad.cs
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/RFEM/RFSurfaceLoad.cs
@@ -83,7 +83,7 @@ public RFSurfaceLoad(RFSurfaceLoad other) : this(other, other.LoadCase)
public override string ToString()
{
return string.Format($"RFEM-SurfaceLoad;No:{No};LoadCase:{LoadCase};" +
- $"F1:{Magnitude1.ToString("0.00")}[kN/m²];F2:{Magnitude2.ToString("0.00")}[kN/m²];F3:{Magnitude3.ToString("0.00")}[kN/m²];" +
+ $"F1:{Magnitude1.ToString("0.00")}[kN/m²];F2:{Magnitude2.ToString("0.00")}[kN/m²];F3:{Magnitude3.ToString("0.00")}[kN/m²];" +
$"T4:{Magnitude4.ToString("0.00")};T5:{Magnitude5.ToString("0.00")};T6:{Magnitude6.ToString("0.00")};" +
$"Node1No:{Node1No.ToString()};Node2No:{Node2No.ToString()};Node3No:{Node3No.ToString()};" +
$"LoadType:{LoadType.ToString()};LoadDistType:{LoadDistType.ToString()};LoadDirType:{LoadDirType.ToString()};" +
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/bin/x64/Debug/Parametric_FEM_Toolbox-RAZER-DAQ.gha b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/bin/x64/Debug/Parametric_FEM_Toolbox-RAZER-DAQ.gha
new file mode 100644
index 0000000..a166b0f
Binary files /dev/null and b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/bin/x64/Debug/Parametric_FEM_Toolbox-RAZER-DAQ.gha differ
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/bin/x64/Debug/Parametric_FEM_Toolbox-RAZER-DAQ.pdb b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/bin/x64/Debug/Parametric_FEM_Toolbox-RAZER-DAQ.pdb
new file mode 100644
index 0000000..8dd4a85
Binary files /dev/null and b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/bin/x64/Debug/Parametric_FEM_Toolbox-RAZER-DAQ.pdb differ
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/bin/x64/Debug/Parametric_FEM_Toolbox.gha b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/bin/x64/Debug/Parametric_FEM_Toolbox.gha
index ecff134..20a3d1d 100644
Binary files a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/bin/x64/Debug/Parametric_FEM_Toolbox.gha and b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/bin/x64/Debug/Parametric_FEM_Toolbox.gha differ
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/bin/x64/Debug/Parametric_FEM_Toolbox.pdb b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/bin/x64/Debug/Parametric_FEM_Toolbox.pdb
index 388a08a..023190d 100644
Binary files a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/bin/x64/Debug/Parametric_FEM_Toolbox.pdb and b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/bin/x64/Debug/Parametric_FEM_Toolbox.pdb differ
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput-RAZER-DAQ.cache b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput-RAZER-DAQ.cache
new file mode 100644
index 0000000..f2d3fda
Binary files /dev/null and b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput-RAZER-DAQ.cache differ
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput.cache
index 928d4a3..f2d3fda 100644
Binary files a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput.cache and b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox-RAZER-DAQ.dll b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox-RAZER-DAQ.dll
new file mode 100644
index 0000000..a166b0f
Binary files /dev/null and b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox-RAZER-DAQ.dll differ
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox-RAZER-DAQ.pdb b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox-RAZER-DAQ.pdb
new file mode 100644
index 0000000..8dd4a85
Binary files /dev/null and b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox-RAZER-DAQ.pdb differ
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.AssemblyReference.cache b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.AssemblyReference.cache
new file mode 100644
index 0000000..02b7d5b
Binary files /dev/null and b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.AssemblyReference.cache differ
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.CoreCompileInputs-RAZER-DAQ.cache b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.CoreCompileInputs-RAZER-DAQ.cache
new file mode 100644
index 0000000..93c9054
--- /dev/null
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.CoreCompileInputs-RAZER-DAQ.cache
@@ -0,0 +1 @@
+994a27d10517065fd1f16a3635192c48bece0303
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.CoreCompileInputs.cache b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.CoreCompileInputs.cache
index e5ff907..40db58f 100644
--- a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.CoreCompileInputs.cache
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-9e63bed1e66c5df846e17a3b7770340965cef8bd
+07a76a22c099badca4b828d0acdb21874f6df1e4
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.FileListAbsolute-RAZER-DAQ.txt b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.FileListAbsolute-RAZER-DAQ.txt
new file mode 100644
index 0000000..2f35e83
--- /dev/null
+++ b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.FileListAbsolute-RAZER-DAQ.txt
@@ -0,0 +1,53 @@
+D:\Diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Parametric_FEM_Toolbox.dll
+D:\Diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Parametric_FEM_Toolbox.pdb
+D:\Diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Eto.dll
+D:\Diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Eto.xml
+D:\Diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.csprojAssemblyReference.cache
+D:\Diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.Properties.Resources.resources
+D:\Diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.csproj.GenerateResource.cache
+D:\Diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.csproj.CopyComplete
+D:\Diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.dll
+D:\Diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.pdb
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.csprojAssemblyReference.cache
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.Properties.Resources.resources
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.csproj.GenerateResource.cache
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.csproj.CoreCompileInputs.cache
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.dll
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.pdb
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Parametric_FEM_Toolbox.dll
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Parametric_FEM_Toolbox.pdb
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Eto.xml
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.csproj.CopyComplete
+C:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Parametric_FEM_Toolbox.dll
+C:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Parametric_FEM_Toolbox.pdb
+C:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Eto.xml
+C:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.csprojAssemblyReference.cache
+C:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.Properties.Resources.resources
+C:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.csproj.GenerateResource.cache
+C:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.csproj.CoreCompileInputs.cache
+C:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.csproj.CopyComplete
+C:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.dll
+C:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.pdb
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\GH_IO.dll
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Grasshopper.dll
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\RhinoCommon.dll
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Mono.Cecil.dll
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\GH_Util.dll
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\GH_IO.xml
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Grasshopper.xml
+C:\Users\diego\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\RhinoCommon.xml
+D:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Parametric_FEM_Toolbox.dll
+D:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Parametric_FEM_Toolbox.pdb
+D:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Mono.Cecil.dll
+D:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\GH_Util.dll
+D:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Eto.xml
+D:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\GH_IO.xml
+D:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\Grasshopper.xml
+D:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\bin\x64\Debug\RhinoCommon.xml
+D:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.csprojAssemblyReference.cache
+D:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.Properties.Resources.resources
+D:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.csproj.GenerateResource.cache
+D:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.csproj.CoreCompileInputs.cache
+D:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.csproj.CopyComplete
+D:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.dll
+D:\Users\dapellaniz\OneDrive\Projects\Repos\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\Parametric_FEM_Toolbox\obj\x64\Debug\Parametric_FEM_Toolbox.pdb
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.GenerateResource.cache b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.GenerateResource.cache
index 9439f60..53c3a70 100644
Binary files a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.GenerateResource.cache and b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csproj.GenerateResource.cache differ
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csprojAssemblyReference-RAZER-DAQ.cache b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csprojAssemblyReference-RAZER-DAQ.cache
new file mode 100644
index 0000000..7038046
Binary files /dev/null and b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csprojAssemblyReference-RAZER-DAQ.cache differ
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csprojAssemblyReference.cache b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csprojAssemblyReference.cache
index 0d1a48b..e0f85ef 100644
Binary files a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csprojAssemblyReference.cache and b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.csprojAssemblyReference.cache differ
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.dll b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.dll
index ecff134..20a3d1d 100644
Binary files a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.dll and b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.dll differ
diff --git a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.pdb b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.pdb
index 388a08a..023190d 100644
Binary files a/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.pdb and b/Parametric_FEM_Toolbox/Parametric_FEM_Toolbox/obj/x64/Debug/Parametric_FEM_Toolbox.pdb differ