From 7fa57788b95d91d306b2a14d4186ecc8663f24c8 Mon Sep 17 00:00:00 2001 From: Kristjan Nielsen Date: Tue, 12 Dec 2023 19:51:16 +0100 Subject: [PATCH 01/14] Use GsaPropertyParam --- .../Components/2_Geometry/Create1dElement.cs | 22 ++++++++++++++----- GsaGH/Components/2_Geometry/Create1dMember.cs | 22 ++++++++++++++----- GsaGH/Components/2_Geometry/Edit1dElement.cs | 6 +---- GsaGH/Components/2_Geometry/EditNode.cs | 14 +++++------- 4 files changed, 41 insertions(+), 23 deletions(-) diff --git a/GsaGH/Components/2_Geometry/Create1dElement.cs b/GsaGH/Components/2_Geometry/Create1dElement.cs index aadf5ac57..a5b1d2f30 100644 --- a/GsaGH/Components/2_Geometry/Create1dElement.cs +++ b/GsaGH/Components/2_Geometry/Create1dElement.cs @@ -2,6 +2,7 @@ using System.Drawing; using Grasshopper.Kernel; using Grasshopper.Kernel.Types; +using GsaAPI; using GsaGH.Helpers.GH; using GsaGH.Parameters; using GsaGH.Properties; @@ -24,7 +25,7 @@ public Create1dElement() : base("Create 1D Element", "Elem1D", "Create GSA 1D El protected override void RegisterInputParams(GH_InputParamManager pManager) { pManager.AddLineParameter("Line", "L", "Line to create GSA Element", GH_ParamAccess.item); - pManager.AddParameter(new GsaSectionParameter()); + pManager.AddParameter(new GsaPropertyParameter()); pManager[1].Optional = true; pManager.HideParameter(0); } @@ -38,11 +39,22 @@ protected override void SolveInstance(IGH_DataAccess da) { da.GetData(0, ref ghln); var elem = new GsaElement1d(new LineCurve(ghln.Value)); - GsaSectionGoo sectionGoo = null; + GsaPropertyGoo sectionGoo = null; if (da.GetData(1, ref sectionGoo)) { - elem.Section = sectionGoo.Value; - if (Preview3dSection) { - elem.CreateSection3dPreview(); + switch (sectionGoo.Value) { + case GsaSection section: + elem.Section = section; + elem.SpringProperty = null; + if (Preview3dSection) { + elem.CreateSection3dPreview(); + } + break; + + case GsaSpringProperty springProperty: + elem.ApiElement.Type = ElementType.SPRING; + elem.Section = null; + elem.SpringProperty = springProperty; + break; } } diff --git a/GsaGH/Components/2_Geometry/Create1dMember.cs b/GsaGH/Components/2_Geometry/Create1dMember.cs index d19296acc..8957b7b1c 100644 --- a/GsaGH/Components/2_Geometry/Create1dMember.cs +++ b/GsaGH/Components/2_Geometry/Create1dMember.cs @@ -4,6 +4,7 @@ using GH_IO.Serialization; using Grasshopper.Kernel; using Grasshopper.Kernel.Types; +using GsaAPI; using GsaGH.Helpers.GH; using GsaGH.Parameters; using GsaGH.Properties; @@ -136,7 +137,7 @@ protected override void RegisterInputParams(GH_InputParamManager pManager) { pManager.AddCurveParameter("Curve", "C", "Curve (a NURBS curve will automatically be converted in to a Polyline of Arc and Line segments)", GH_ParamAccess.item); - pManager.AddParameter(new GsaSectionParameter()); + pManager.AddParameter(new GsaPropertyParameter()); pManager.AddNumberParameter("Mesh Size in model units", "Ms", "Target mesh size", GH_ParamAccess.item); pManager[1].Optional = true; @@ -188,11 +189,22 @@ protected override void SolveInternal(IGH_DataAccess da) { }; mem.ReleaseEnd = rel2; - GsaSectionGoo sectionGoo = null; + GsaPropertyGoo sectionGoo = null; if (da.GetData(1, ref sectionGoo)) { - mem.Section = sectionGoo.Value; - if (Preview3dSection) { - mem.CreateSection3dPreview(); + switch (sectionGoo.Value) { + case GsaSection section: + mem.Section = section; + mem.SpringProperty = null; + if (Preview3dSection) { + mem.CreateSection3dPreview(); + } + break; + + case GsaSpringProperty springProperty: + mem.ApiMember.Type1D = ElementType.SPRING; + mem.Section = null; + mem.SpringProperty = springProperty; + break; } } diff --git a/GsaGH/Components/2_Geometry/Edit1dElement.cs b/GsaGH/Components/2_Geometry/Edit1dElement.cs index 569043d50..507db7e77 100644 --- a/GsaGH/Components/2_Geometry/Edit1dElement.cs +++ b/GsaGH/Components/2_Geometry/Edit1dElement.cs @@ -92,8 +92,7 @@ protected override void RegisterOutputParams(GH_OutputParamManager pManager) { GH_ParamAccess.item); pManager.AddLineParameter("Line", "L", "Element Line", GH_ParamAccess.item); pManager.HideParameter(2); - pManager.AddGenericParameter("Section", "PB", "Get Section or Spring Property", - GH_ParamAccess.item); + pManager.AddParameter(new GsaPropertyParameter()); pManager.AddIntegerParameter("Group", "Gr", "Get Element Group", GH_ParamAccess.item); pManager.AddTextParameter("Type", "eT", "Get Element Type", GH_ParamAccess.item); @@ -159,9 +158,6 @@ protected override void SolveInstance(IGH_DataAccess da) { elem.SpringProperty = springProperty; break; } - } else if (elem.ApiElement.Type == ElementType.SPRING) { - this.AddRuntimeError("Input PB has to be a Spring Property"); - return; } int id = 0; diff --git a/GsaGH/Components/2_Geometry/EditNode.cs b/GsaGH/Components/2_Geometry/EditNode.cs index 19227754d..1d1e48965 100644 --- a/GsaGH/Components/2_Geometry/EditNode.cs +++ b/GsaGH/Components/2_Geometry/EditNode.cs @@ -95,8 +95,7 @@ protected override void RegisterInputParams(GH_InputParamManager pManager) { GH_ParamAccess.item); pManager.AddIntegerParameter("Mass Property", "MP", "Set Mass Property by reference", GH_ParamAccess.item); - pManager.AddIntegerParameter("Spring Property", "SP", "Set Spring Property by reference", - GH_ParamAccess.item); + pManager.AddParameter(new GsaSpringPropertyParameter()); pManager.AddTextParameter("Node Name", "Na", "Set Name of Node", GH_ParamAccess.item); pManager.AddColourParameter("Node Colour", "Co", "Set colour of node", GH_ParamAccess.item); @@ -127,8 +126,7 @@ protected override void RegisterOutputParams(GH_OutputParamManager pManager) { GH_ParamAccess.item); pManager.AddIntegerParameter("Mass Property", "MP", "Get Mass Property reference", GH_ParamAccess.item); - pManager.AddIntegerParameter("Spring Property", "SP", "Get Spring Property reference", - GH_ParamAccess.item); + pManager.AddParameter(new GsaSpringPropertyParameter()); pManager.AddTextParameter("Node Name", "Na", "Name of Node", GH_ParamAccess.item); pManager.AddColourParameter("Node Colour", "Co", "Get colour of node", GH_ParamAccess.item); if (_mode != FoldMode.GetConnected) { @@ -185,9 +183,9 @@ protected override void SolveInstance(IGH_DataAccess da) { node.ApiNode.MassProperty = massId; } - int springId = 0; - if (da.GetData(7, ref springId)) { - node.ApiNode.SpringProperty = springId; + GsaSpringPropertyGoo springGoo = null; + if (da.GetData(7, ref springGoo)) { + node.SpringProperty = springGoo.Value; } string name = string.Empty; @@ -207,7 +205,7 @@ protected override void SolveInstance(IGH_DataAccess da) { da.SetData(4, new GsaBool6Goo(node.Restraint)); da.SetData(5, node.ApiNode.DamperProperty); da.SetData(6, node.ApiNode.MassProperty); - da.SetData(7, node.ApiNode.SpringProperty); + da.SetData(7, new GsaSpringPropertyGoo(node.SpringProperty)); da.SetData(8, node.ApiNode?.Name); da.SetData(9, node.ApiNode.Colour); From 334de478bb95ac5bf94824351c0c59b34b737431 Mon Sep 17 00:00:00 2001 From: Kristjan Nielsen Date: Tue, 12 Dec 2023 19:51:50 +0100 Subject: [PATCH 02/14] update node import/assemble method with spring property --- GsaGH/Components/0_Model/GetModelGeometry.cs | 3 ++- GsaGH/Helpers/Assembly/Geometry/Nodes.cs | 8 +++++--- GsaGH/Helpers/Assembly/ModelAssembly.cs | 4 +--- GsaGH/Helpers/Import/Nodes.cs | 16 ++++++++++++---- GsaGH/Helpers/MergeModels.cs | 3 ++- GsaGH/Parameters/0_Model/GsaList.cs | 3 ++- GsaGH/Parameters/2_Geometry/GsaNode.cs | 2 ++ 7 files changed, 26 insertions(+), 13 deletions(-) diff --git a/GsaGH/Components/0_Model/GetModelGeometry.cs b/GsaGH/Components/0_Model/GetModelGeometry.cs index 6cac06ac5..166c6a86d 100644 --- a/GsaGH/Components/0_Model/GetModelGeometry.cs +++ b/GsaGH/Components/0_Model/GetModelGeometry.cs @@ -697,7 +697,8 @@ private SolveResults Compute(GsaModel model, string nodeList, string elemList, s _results.Nodes = Nodes.GetNodes( nodeList.ToLower() == "all" ? model.ApiNodes : model.Model.Nodes(nodeList), model.ModelUnit, - model.ApiAxis); + model.ApiAxis, + model.SpringProps); _results.DisplaySupports = new ConcurrentBag(_results.Nodes.Where(n => n.Value.IsSupport)); break; diff --git a/GsaGH/Helpers/Assembly/Geometry/Nodes.cs b/GsaGH/Helpers/Assembly/Geometry/Nodes.cs index a6844000b..7e24c2e4f 100644 --- a/GsaGH/Helpers/Assembly/Geometry/Nodes.cs +++ b/GsaGH/Helpers/Assembly/Geometry/Nodes.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using GsaAPI; +using GsaGH.Helpers.Import; using GsaGH.Parameters; using OasysUnits; using Rhino.Geometry; @@ -61,9 +62,10 @@ private void ConvertNode(GsaNode node) { apiNode.AxisProperty = TryGetExistingAxisId(ax); } - if ( - // if the ID is larger than 0 than means the ID has been set and we sent it to the known list - node.Id > 0) { + apiNode.SpringProperty = ConvertSpringProp(node.SpringProperty); + + // if the ID is larger than 0 than means the ID has been set and we sent it to the known list + if (node.Id > 0) { _nodes.SetValue(node.Id, apiNode); } else { AddNode(apiNode); diff --git a/GsaGH/Helpers/Assembly/ModelAssembly.cs b/GsaGH/Helpers/Assembly/ModelAssembly.cs index 7bb9bd04e..041ccc545 100644 --- a/GsaGH/Helpers/Assembly/ModelAssembly.cs +++ b/GsaGH/Helpers/Assembly/ModelAssembly.cs @@ -76,8 +76,8 @@ internal ModelAssembly( SetupModel(model, modelUnit); - ConvertNodes(nodes); ConvertProperties(mats, sections, prop2Ds, prop3Ds, springProps); + ConvertNodes(nodes); ConvertElements(elem1ds, elem2ds, elem3ds); ConvertMembers(mem1ds, mem2ds, mem3ds); ConvertNodeList(lists); @@ -512,10 +512,8 @@ private void SetupModel(GsaModel model, LengthUnit unit) { _model.UiUnits().LengthLarge = UnitMapping.GetApiUnit(_unit); UiUnits units = _model.UiUnits(); - _springProperties = new GsaGuidDictionary(_model.SpringProperties()); - _nodes = new GsaIntDictionary(model.ApiNodes); _axes = new GsaIntDictionary(model.ApiAxis); _elements = new GsaGuidIntListDictionary(_model.Elements()); diff --git a/GsaGH/Helpers/Import/Nodes.cs b/GsaGH/Helpers/Import/Nodes.cs index 7a1aadba1..529138a76 100644 --- a/GsaGH/Helpers/Import/Nodes.cs +++ b/GsaGH/Helpers/Import/Nodes.cs @@ -113,15 +113,23 @@ internal static ConcurrentDictionary GetNodeDictionary( /// /// Dictionary of GSA Nodes pre-filtered for nodes to import /// + /// /// /// internal static ConcurrentBag GetNodes( ReadOnlyDictionary nDict, LengthUnit unit, - ReadOnlyDictionary axDict = null) { + ReadOnlyDictionary axDict = null, + ReadOnlyDictionary springProps = null) { var outNodes = new ConcurrentBag(); - Parallel.ForEach(nDict, node => - outNodes.Add(new GsaNodeGoo(GetNode(node.Value, unit, node.Key, axDict))) - ); + Parallel.ForEach(nDict, node => { + GsaNode n = GetNode(node.Value, unit, node.Key, axDict); + if (springProps != null && node.Value.SpringProperty != 0 + && springProps.ContainsKey(node.Value.SpringProperty)) { + n.SpringProperty = springProps[node.Value.SpringProperty].Value; + } + + outNodes.Add(new GsaNodeGoo(n)); + }); return outNodes; } diff --git a/GsaGH/Helpers/MergeModels.cs b/GsaGH/Helpers/MergeModels.cs index 5dae8dc22..637c5b90d 100644 --- a/GsaGH/Helpers/MergeModels.cs +++ b/GsaGH/Helpers/MergeModels.cs @@ -36,7 +36,8 @@ public static GsaModel MergeModel( GsaModel mainModel, GsaModel appendModel, GH_Component owner, Length tolerance) { appendModel.ModelUnit = mainModel.ModelUnit; ConcurrentBag goonodes = - Import.Nodes.GetNodes(appendModel.ApiNodes, mainModel.ModelUnit); + Import.Nodes.GetNodes( + appendModel.ApiNodes, mainModel.ModelUnit, appendModel.ApiAxis, appendModel.SpringProps); var nodes = goonodes.Select(n => n.Value).OrderByDescending(x => x.Id).ToList(); nodes.Select(c => { c.Id = 0; // set node Id of incoming to 0 to append to end and use CollapseCoincidingNodes diff --git a/GsaGH/Parameters/0_Model/GsaList.cs b/GsaGH/Parameters/0_Model/GsaList.cs index 50d5d42a8..901b70be8 100644 --- a/GsaGH/Parameters/0_Model/GsaList.cs +++ b/GsaGH/Parameters/0_Model/GsaList.cs @@ -424,7 +424,8 @@ private void PopulateListObjectsFromModel(LengthUnit unit) { switch (EntityType) { case EntityType.Node: - _nodes = Nodes.GetNodes(_model.Model.Nodes(Definition), unit, _model.Model.Axes()); + _nodes = Nodes.GetNodes( + _model.Model.Nodes(Definition), unit, _model.Model.Axes(), _model.SpringProps); break; case EntityType.Element: diff --git a/GsaGH/Parameters/2_Geometry/GsaNode.cs b/GsaGH/Parameters/2_Geometry/GsaNode.cs index 1d9d058c5..234f8eb3e 100644 --- a/GsaGH/Parameters/2_Geometry/GsaNode.cs +++ b/GsaGH/Parameters/2_Geometry/GsaNode.cs @@ -17,6 +17,7 @@ public class GsaNode { public Node ApiNode { get; internal set; } public int Id { get; set; } = 0; public Plane LocalAxis { get; set; } = Plane.WorldXY; + public GsaSpringProperty SpringProperty { get; set; } public SupportPreview SupportPreview { get; private set; } public bool IsSupport => IsRestrained(); public bool IsGlobalAxis => CheckGlobalAxis(); @@ -54,6 +55,7 @@ public GsaNode(GsaNode other) { ApiNode = other.DuplicateApiObject(); LocalAxis = other.LocalAxis; SupportPreview = other.SupportPreview; + SpringProperty = other.SpringProperty; } /// From 6961ead5133905d0f88c03cb3e3e9a5f5ab89d12 Mon Sep 17 00:00:00 2001 From: Kristjan Nielsen Date: Tue, 12 Dec 2023 19:52:06 +0100 Subject: [PATCH 03/14] add GsaProperty to automated tests --- .../PersistentParameters/GH_OasysPersistentParamTest.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/GsaGHTests/2_GooWrappers/PersistentParameters/GH_OasysPersistentParamTest.cs b/GsaGHTests/2_GooWrappers/PersistentParameters/GH_OasysPersistentParamTest.cs index 9d122653d..93f37eee8 100644 --- a/GsaGHTests/2_GooWrappers/PersistentParameters/GH_OasysPersistentParamTest.cs +++ b/GsaGHTests/2_GooWrappers/PersistentParameters/GH_OasysPersistentParamTest.cs @@ -19,6 +19,7 @@ public class GH_OasysPersistentParamTest { [InlineData(typeof(GsaBool6Parameter))] [InlineData(typeof(GsaMaterialParameter))] [InlineData(typeof(GsaOffsetParameter))] + [InlineData(typeof(GsaPropertyParameter), true)] [InlineData(typeof(GsaProperty2dParameter))] [InlineData(typeof(GsaProperty3dParameter))] [InlineData(typeof(GsaSectionModifierParameter))] From e6f453c5ac59d6a42f69937a21c0af2edb5c526a Mon Sep 17 00:00:00 2001 From: Tilman Reinhardt Date: Wed, 13 Dec 2023 10:03:55 +0100 Subject: [PATCH 04/14] GSAGH-149 integration test --- .../Components/CreateSpringProperties.gh | Bin 36475 -> 42922 bytes GsaGH/Parameters/2_Geometry/GsaElement1d.cs | 2 +- GsaGH/Parameters/2_Geometry/GsaMember1d.cs | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ExampleFiles/Components/CreateSpringProperties.gh b/ExampleFiles/Components/CreateSpringProperties.gh index 710172305221832c995b09d5dd5f86b5d848bb3a..602954a3f6c9a472e89517457f20c8dae670a208 100644 GIT binary patch delta 40905 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

>pEUE6;0xD=ytI0Gp7j1$ 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 E0rw;M0RR91 delta 34508 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 X$`wbPv8)pVObD8)x+>*L))D^?(ZF_{ diff --git a/GsaGH/Parameters/2_Geometry/GsaElement1d.cs b/GsaGH/Parameters/2_Geometry/GsaElement1d.cs index 2fd5df8f4..c8e7f47cf 100644 --- a/GsaGH/Parameters/2_Geometry/GsaElement1d.cs +++ b/GsaGH/Parameters/2_Geometry/GsaElement1d.cs @@ -165,7 +165,7 @@ public override string ToString() { property = Section.Id > 0 ? $"PB{Section.Id}" : Section.ApiSection != null ? Section.ApiSection.Profile : string.Empty; } else if (SpringProperty != null) { - property = SpringProperty.Id > 0 ? $"SP{SpringProperty.Id}" + property = SpringProperty.Id > 0 ? $"PS{SpringProperty.Id}" : SpringProperty.ApiProperty != null ? SpringProperty.ApiProperty.Name : string.Empty; } return string.Join(" ", id, type, property).TrimSpaces(); diff --git a/GsaGH/Parameters/2_Geometry/GsaMember1d.cs b/GsaGH/Parameters/2_Geometry/GsaMember1d.cs index ec9085d56..3cacaa9ca 100644 --- a/GsaGH/Parameters/2_Geometry/GsaMember1d.cs +++ b/GsaGH/Parameters/2_Geometry/GsaMember1d.cs @@ -163,7 +163,7 @@ public override string ToString() { property = Section.Id > 0 ? $"PB{Section.Id}" : Section.ApiSection != null ? Section.ApiSection.Profile : string.Empty; } else if (SpringProperty != null) { - property = SpringProperty.Id > 0 ? $"SP{SpringProperty.Id}" + property = SpringProperty.Id > 0 ? $"PS{SpringProperty.Id}" : SpringProperty.ApiProperty != null ? SpringProperty.ApiProperty.Name : string.Empty; } return string.Join(" ", id, type, property).TrimSpaces(); From cbb98c8e19c5170bf5362bb286503917c1a00379 Mon Sep 17 00:00:00 2001 From: Kristjan Nielsen Date: Wed, 13 Dec 2023 14:30:18 +0100 Subject: [PATCH 05/14] Update spring parameter implementation --- .../1_Properties/CreateSpringProperty.cs | 2 +- .../1_Properties/GetSpringProperty.cs | 2 +- .../Components/2_Geometry/Create1dElement.cs | 17 ++++++++ GsaGH/Components/2_Geometry/Create1dMember.cs | 14 ++++++- GsaGH/Components/2_Geometry/Edit1dElement.cs | 38 +++++++++++++---- GsaGH/Components/2_Geometry/Edit1dMember.cs | 41 +++++++++++++------ GsaGH/Components/2_Geometry/EditNode.cs | 14 ++++++- .../Parameters/1_Properties/GsaPropertyGoo.cs | 9 ++++ .../1_Properties/GsaPropertyParameter.cs | 36 ++++++++-------- .../Parameters/1_Properties/GsaSectionGoo.cs | 2 +- .../1_Properties/GsaSectionParameter.cs | 8 ++++ .../1_Properties/GsaSpringProperty.cs | 8 +++- .../GsaSpringPropertyParameter.cs | 9 ++++ GsaGH/Parameters/2_Geometry/GsaElement1d.cs | 2 +- GsaGH/Parameters/2_Geometry/GsaMember1d.cs | 2 +- .../2_Geometry/EditElement1dTests.cs | 18 ++++---- .../2_Geometry/EditMember1dTests.cs | 4 +- .../3_Components/2_Geometry/EditNodeTests.cs | 9 ++-- .../Assemble/AssembleModelTestsHelper.cs | 4 +- .../Assemble/AssembleModelTestsNodes.cs | 2 +- 20 files changed, 175 insertions(+), 66 deletions(-) diff --git a/GsaGH/Components/1_Properties/CreateSpringProperty.cs b/GsaGH/Components/1_Properties/CreateSpringProperty.cs index 4e8e110a5..f1af4e7ba 100644 --- a/GsaGH/Components/1_Properties/CreateSpringProperty.cs +++ b/GsaGH/Components/1_Properties/CreateSpringProperty.cs @@ -55,7 +55,7 @@ public class CreateSpringProperty : GH_OasysDropDownComponent { }); public override Guid ComponentGuid => new Guid("f48965a0-00e7-4de8-9839-a4480075459f"); - public override GH_Exposure Exposure => GH_Exposure.secondary | GH_Exposure.obscure; + public override GH_Exposure Exposure => GH_Exposure.tertiary; public override OasysPluginInfo PluginInfo => GsaGH.PluginInfo.Instance; protected override Bitmap Icon => Resources.CreateSpringProperty; private readonly IReadOnlyDictionary _springPropertyTypes diff --git a/GsaGH/Components/1_Properties/GetSpringProperty.cs b/GsaGH/Components/1_Properties/GetSpringProperty.cs index 42a704ab8..7db0225f5 100644 --- a/GsaGH/Components/1_Properties/GetSpringProperty.cs +++ b/GsaGH/Components/1_Properties/GetSpringProperty.cs @@ -20,7 +20,7 @@ namespace GsaGH.Components { public class GetSpringProperty : GH_OasysComponent, IGH_VariableParameterComponent { public override Guid ComponentGuid => new Guid("e6e90fc4-157a-4fad-85ec-6957aed91fa9"); - public override GH_Exposure Exposure => GH_Exposure.secondary | GH_Exposure.obscure; + public override GH_Exposure Exposure => GH_Exposure.tertiary | GH_Exposure.obscure; public override OasysPluginInfo PluginInfo => GsaGH.PluginInfo.Instance; protected override Bitmap Icon => Resources.GetSpringProperty; private RotationalStiffnessUnit _rotationalStiffnessUnit = RotationalStiffnessUnit.NewtonMeterPerRadian; diff --git a/GsaGH/Components/2_Geometry/Create1dElement.cs b/GsaGH/Components/2_Geometry/Create1dElement.cs index a5b1d2f30..0f28edce5 100644 --- a/GsaGH/Components/2_Geometry/Create1dElement.cs +++ b/GsaGH/Components/2_Geometry/Create1dElement.cs @@ -1,5 +1,7 @@ using System; using System.Drawing; +using GH_IO.Serialization; +using System.Linq; using Grasshopper.Kernel; using Grasshopper.Kernel.Types; using GsaAPI; @@ -23,6 +25,21 @@ public class Create1dElement : Section3dPreviewComponent { public Create1dElement() : base("Create 1D Element", "Elem1D", "Create GSA 1D Element", CategoryName.Name(), SubCategoryName.Cat2()) { } + public override bool Read(GH_IReader reader) { + bool flag = base.Read(reader); + if (Params.Input[1].Name == new GsaSectionParameter().Name) { + var sources = Params.Input[1].Sources.ToList(); + Params.UnregisterInputParameter(Params.Input[1], false); + Params.RegisterInputParam(new GsaPropertyParameter(), 1); + Params.Input[1].Optional = true; + foreach (IGH_Param source in sources) { + Params.Input[1].AddSource(source); + } + } + + return flag; + } + protected override void RegisterInputParams(GH_InputParamManager pManager) { pManager.AddLineParameter("Line", "L", "Line to create GSA Element", GH_ParamAccess.item); pManager.AddParameter(new GsaPropertyParameter()); diff --git a/GsaGH/Components/2_Geometry/Create1dMember.cs b/GsaGH/Components/2_Geometry/Create1dMember.cs index 8957b7b1c..63934aefd 100644 --- a/GsaGH/Components/2_Geometry/Create1dMember.cs +++ b/GsaGH/Components/2_Geometry/Create1dMember.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Drawing; +using System.Linq; using GH_IO.Serialization; using Grasshopper.Kernel; using Grasshopper.Kernel.Types; @@ -93,7 +94,18 @@ public override bool Read(GH_IReader reader) { _xx2 = reader.GetBoolean("xx2"); _yy2 = reader.GetBoolean("yy2"); _zz2 = reader.GetBoolean("zz2"); - return base.Read(reader); + bool flag = base.Read(reader); + if (Params.Input[1].Name == new GsaSectionParameter().Name) { + var sources = Params.Input[1].Sources.ToList(); + Params.UnregisterInputParameter(Params.Input[1], false); + Params.RegisterInputParam(new GsaPropertyParameter(), 1); + Params.Input[1].Optional = true; + foreach (IGH_Param source in sources) { + Params.Input[1].AddSource(source); + } + } + + return flag; } public void SetReleases(List> restraints) { diff --git a/GsaGH/Components/2_Geometry/Edit1dElement.cs b/GsaGH/Components/2_Geometry/Edit1dElement.cs index 507db7e77..2b26fa596 100644 --- a/GsaGH/Components/2_Geometry/Edit1dElement.cs +++ b/GsaGH/Components/2_Geometry/Edit1dElement.cs @@ -1,6 +1,7 @@ using System; using System.Drawing; using System.Linq; +using GH_IO.Serialization; using Grasshopper; using Grasshopper.Kernel; using Grasshopper.Kernel.Data; @@ -37,6 +38,21 @@ protected override void BeforeSolveInstance() { } } + public override bool Read(GH_IReader reader) { + bool flag = base.Read(reader); + if (Params.Input[3].Name == new GsaSectionParameter().Name) { + var sources = Params.Input[3].Sources.ToList(); + Params.UnregisterInputParameter(Params.Input[3], false); + Params.RegisterInputParam(new GsaPropertyParameter(), 3); + Params.Input[3].Optional = true; + foreach (IGH_Param source in sources) { + Params.Input[3].AddSource(source); + } + } + + return flag; + } + protected override void RegisterInputParams(GH_InputParamManager pManager) { pManager.AddParameter(new GsaElement1dParameter(), GsaElement1dGoo.Name, GsaElement1dGoo.NickName, @@ -141,19 +157,23 @@ protected override void SolveInstance(IGH_DataAccess da) { if (da.GetData(3, ref sectionGoo)) { switch (sectionGoo.Value) { case GsaSection section: - if (elem.ApiElement.Type == ElementType.SPRING) { - this.AddRuntimeError("Input PB has to be a Spring Property"); - return; + if (section.IsReferencedById && elem.ApiElement.Type == ElementType.SPRING) { + elem.Section = null; + elem.SpringProperty = new GsaSpringProperty(section.Id); + } else { + if (elem.ApiElement.Type == ElementType.SPRING) { + this.AddRuntimeError("PB input must be a SpringProperty"); + return; + } + elem.Section = section; + elem.SpringProperty = null; } - elem.Section = section; - elem.SpringProperty = null; + break; case GsaSpringProperty springProperty: - if (elem.ApiElement.Type != ElementType.SPRING) { - this.AddRuntimeError("Element Type is not Spring"); - return; - } + elem.ApiElement.Type = ElementType.SPRING; + this.AddRuntimeRemark("ElementType changed to Spring"); elem.Section = null; elem.SpringProperty = springProperty; break; diff --git a/GsaGH/Components/2_Geometry/Edit1dMember.cs b/GsaGH/Components/2_Geometry/Edit1dMember.cs index e72183456..7824bbfe0 100644 --- a/GsaGH/Components/2_Geometry/Edit1dMember.cs +++ b/GsaGH/Components/2_Geometry/Edit1dMember.cs @@ -1,6 +1,7 @@ using System; using System.Drawing; using System.Linq; +using GH_IO.Serialization; using Grasshopper.Kernel; using Grasshopper.Kernel.Parameters; using Grasshopper.Kernel.Types; @@ -53,6 +54,21 @@ bool IGH_VariableParameterComponent.DestroyParameter(GH_ParameterSide side, int public void VariableParameterMaintenance() { } + public override bool Read(GH_IReader reader) { + bool flag = base.Read(reader); + if (Params.Input[3].Name == new GsaSectionParameter().Name) { + var sources = Params.Input[3].Sources.ToList(); + Params.UnregisterInputParameter(Params.Input[3], false); + Params.RegisterInputParam(new GsaPropertyParameter(), 3); + Params.Input[3].Optional = true; + foreach (IGH_Param source in sources) { + Params.Input[3].AddSource(source); + } + } + + return flag; + } + protected override void RegisterInputParams(GH_InputParamManager pManager) { pManager.AddParameter(new GsaMember1dParameter(), GsaMember1dGoo.Name, GsaMember1dGoo.NickName, @@ -188,26 +204,27 @@ protected override void SolveInstance(IGH_DataAccess da) { if (da.GetData(3, ref sectionGoo)) { switch (sectionGoo.Value) { case GsaSection section: - if (mem.ApiMember.Type1D == ElementType.SPRING) { - this.AddRuntimeError("Input PB has to be a Spring Property"); - return; + if (section.IsReferencedById && mem.ApiMember.Type1D == ElementType.SPRING) { + mem.Section = null; + mem.SpringProperty = new GsaSpringProperty(section.Id); + } else { + if (mem.ApiMember.Type1D == ElementType.SPRING) { + this.AddRuntimeError("PB input must be a SpringProperty"); + return; + } + mem.Section = section; + mem.SpringProperty = null; } - mem.Section = section; - mem.SpringProperty = null; + break; case GsaSpringProperty springProperty: - if (mem.ApiMember.Type1D != ElementType.SPRING) { - this.AddRuntimeError("1D Element Type is not Spring"); - return; - } + mem.ApiMember.Type1D = ElementType.SPRING; + this.AddRuntimeRemark("ElementType changed to Spring"); mem.Section = null; mem.SpringProperty = springProperty; break; } - } else if (mem.ApiMember.Type1D == ElementType.SPRING) { - this.AddRuntimeError("Input PB has to be a Spring Property"); - return; } int id = 0; diff --git a/GsaGH/Components/2_Geometry/EditNode.cs b/GsaGH/Components/2_Geometry/EditNode.cs index 1d1e48965..35375af6b 100644 --- a/GsaGH/Components/2_Geometry/EditNode.cs +++ b/GsaGH/Components/2_Geometry/EditNode.cs @@ -1,5 +1,6 @@ using System; using System.Drawing; +using System.Linq; using System.Windows.Forms; using GH_IO.Serialization; using Grasshopper.Kernel; @@ -49,7 +50,18 @@ public bool DestroyParameter(GH_ParameterSide side, int index) { public override bool Read(GH_IReader reader) { _mode = (FoldMode)reader.GetInt32("Mode"); - return base.Read(reader); + bool flag = base.Read(reader); + if (Params.Input[7].Description == "Set Spring Property by reference") { + var sources = Params.Input[7].Sources.ToList(); + Params.UnregisterInputParameter(Params.Input[7], false); + Params.RegisterInputParam(new GsaSpringPropertyParameter(), 7); + Params.Input[7].Optional = true; + foreach (IGH_Param source in sources) { + Params.Input[7].AddSource(source); + } + } + + return flag; } public void VariableParameterMaintenance() { diff --git a/GsaGH/Parameters/1_Properties/GsaPropertyGoo.cs b/GsaGH/Parameters/1_Properties/GsaPropertyGoo.cs index e15d6494f..8df8c267c 100644 --- a/GsaGH/Parameters/1_Properties/GsaPropertyGoo.cs +++ b/GsaGH/Parameters/1_Properties/GsaPropertyGoo.cs @@ -17,5 +17,14 @@ public GsaPropertyGoo(IGsaProperty item) : base(item) { } public override IGH_Goo Duplicate() { return new GsaPropertyGoo(Value); } + + public override string ToString() { + if (Value == null) { + return "Null"; + } + + string typeName = Value.GetType().Name.TrimStart('I').Replace("Gsa", string.Empty); + return PluginInfo.ProductName + " " + typeName + " (" + Value.ToString() + ")"; + } } } diff --git a/GsaGH/Parameters/1_Properties/GsaPropertyParameter.cs b/GsaGH/Parameters/1_Properties/GsaPropertyParameter.cs index e64d7c265..819b5ceed 100644 --- a/GsaGH/Parameters/1_Properties/GsaPropertyParameter.cs +++ b/GsaGH/Parameters/1_Properties/GsaPropertyParameter.cs @@ -26,29 +26,27 @@ protected override GsaPropertyGoo PreferredCast(object data) { string mes = string.Empty; string defaultText = $"{data.GetTypeName()} does not contain a Section"; switch (data) { - case GsaElement1dGoo elem1d: - if (elem1d.Value.Section == null) { - mes = defaultText; - break; - } + case GsaSectionGoo section: + return new GsaPropertyGoo(section.Value); - return new GsaPropertyGoo(elem1d.Value.Section); + case GsaSpringPropertyGoo springProperty: + return new GsaPropertyGoo(springProperty.Value); + + //case GsaElement1dGoo elem1d: + // if (elem1d.Value.Section == null) { + // mes = defaultText; + // break; + // } - case GsaMember1dGoo mem1d: - if (mem1d.Value.Section == null) { - mes = defaultText; - break; - } + // return new GsaPropertyGoo(elem1d.Value.Section); - return new GsaPropertyGoo(mem1d.Value.Section); + //case GsaMember1dGoo mem1d: + // if (mem1d.Value.Section == null) { + // mes = defaultText; + // break; + // } - case GsaSpringPropertyGoo springProperty: - if (springProperty.Value.ApiProperty == null) { - mes = defaultText; - break; - } - - return new GsaPropertyGoo(springProperty.Value); + // return new GsaPropertyGoo(mem1d.Value.Section); } if (!string.IsNullOrEmpty(mes)) { diff --git a/GsaGH/Parameters/1_Properties/GsaSectionGoo.cs b/GsaGH/Parameters/1_Properties/GsaSectionGoo.cs index aa82b07fe..1afc5ac04 100644 --- a/GsaGH/Parameters/1_Properties/GsaSectionGoo.cs +++ b/GsaGH/Parameters/1_Properties/GsaSectionGoo.cs @@ -21,7 +21,7 @@ public override bool CastTo(ref TQ target) { return true; } } - + target = default; return false; } diff --git a/GsaGH/Parameters/1_Properties/GsaSectionParameter.cs b/GsaGH/Parameters/1_Properties/GsaSectionParameter.cs index b9ebbeac5..f1683b2f8 100644 --- a/GsaGH/Parameters/1_Properties/GsaSectionParameter.cs +++ b/GsaGH/Parameters/1_Properties/GsaSectionParameter.cs @@ -41,6 +41,14 @@ protected override GsaSectionGoo PreferredCast(object data) { } return new GsaSectionGoo(mem1d.Value.Section); + + case GsaPropertyGoo prop: + if (prop.Value is GsaSection section) { + return new GsaSectionGoo(section); + } else { + this.AddRuntimeError($"Data conversion failed from Spring to Section" + mes); + return new GsaSectionGoo(null); + } } if (!string.IsNullOrEmpty(mes)) { diff --git a/GsaGH/Parameters/1_Properties/GsaSpringProperty.cs b/GsaGH/Parameters/1_Properties/GsaSpringProperty.cs index a06236e63..16e76544e 100644 --- a/GsaGH/Parameters/1_Properties/GsaSpringProperty.cs +++ b/GsaGH/Parameters/1_Properties/GsaSpringProperty.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Configuration; +using System.Drawing; using System.Linq; using GsaAPI; using GsaGH.Helpers; @@ -125,7 +127,11 @@ public SpringProperty DuplicateApiObject() { return null; } - property.Colour = ApiProperty.Colour; + // workaround to handle that Color is non-nullable type + if ((Color)ApiProperty.Colour != Color.FromArgb(0, 0, 0)) { + property.Colour = ApiProperty.Colour; + } + property.DampingRatio = ApiProperty.DampingRatio; property.Name = ApiProperty.Name; diff --git a/GsaGH/Parameters/1_Properties/GsaSpringPropertyParameter.cs b/GsaGH/Parameters/1_Properties/GsaSpringPropertyParameter.cs index ea3981a98..27da8c3e4 100644 --- a/GsaGH/Parameters/1_Properties/GsaSpringPropertyParameter.cs +++ b/GsaGH/Parameters/1_Properties/GsaSpringPropertyParameter.cs @@ -26,6 +26,15 @@ protected override GsaSpringPropertyGoo PreferredCast(object data) { string mes = string.Empty; string defaultText = $"{data.GetTypeName()} does not contain a Spring Property"; + if (data is GsaPropertyGoo prop) { + if (prop.Value is GsaSpringProperty spring) { + return new GsaSpringPropertyGoo(spring); + } else { + this.AddRuntimeError($"Data conversion failed from Section to Spring" + mes); + return new GsaSpringPropertyGoo(null); + } + } + if (GH_Convert.ToInt32(data, out int id, GH_Conversion.Both)) { GH_Convert.ToString(data, out string val, GH_Conversion.Both); if (!val.Contains(".")) { diff --git a/GsaGH/Parameters/2_Geometry/GsaElement1d.cs b/GsaGH/Parameters/2_Geometry/GsaElement1d.cs index c8e7f47cf..2fd5df8f4 100644 --- a/GsaGH/Parameters/2_Geometry/GsaElement1d.cs +++ b/GsaGH/Parameters/2_Geometry/GsaElement1d.cs @@ -165,7 +165,7 @@ public override string ToString() { property = Section.Id > 0 ? $"PB{Section.Id}" : Section.ApiSection != null ? Section.ApiSection.Profile : string.Empty; } else if (SpringProperty != null) { - property = SpringProperty.Id > 0 ? $"PS{SpringProperty.Id}" + property = SpringProperty.Id > 0 ? $"SP{SpringProperty.Id}" : SpringProperty.ApiProperty != null ? SpringProperty.ApiProperty.Name : string.Empty; } return string.Join(" ", id, type, property).TrimSpaces(); diff --git a/GsaGH/Parameters/2_Geometry/GsaMember1d.cs b/GsaGH/Parameters/2_Geometry/GsaMember1d.cs index 3cacaa9ca..ec9085d56 100644 --- a/GsaGH/Parameters/2_Geometry/GsaMember1d.cs +++ b/GsaGH/Parameters/2_Geometry/GsaMember1d.cs @@ -163,7 +163,7 @@ public override string ToString() { property = Section.Id > 0 ? $"PB{Section.Id}" : Section.ApiSection != null ? Section.ApiSection.Profile : string.Empty; } else if (SpringProperty != null) { - property = SpringProperty.Id > 0 ? $"PS{SpringProperty.Id}" + property = SpringProperty.Id > 0 ? $"SP{SpringProperty.Id}" : SpringProperty.ApiProperty != null ? SpringProperty.ApiProperty.Name : string.Empty; } return string.Join(" ", id, type, property).TrimSpaces(); diff --git a/GsaGHTests/3_Components/2_Geometry/EditElement1dTests.cs b/GsaGHTests/3_Components/2_Geometry/EditElement1dTests.cs index 7c598c43b..ebe7fbec3 100644 --- a/GsaGHTests/3_Components/2_Geometry/EditElement1dTests.cs +++ b/GsaGHTests/3_Components/2_Geometry/EditElement1dTests.cs @@ -31,7 +31,7 @@ public void GetOutputsFromInputElements() { var elem = (GsaElement1dGoo)ComponentTestHelper.GetOutput(comp, 0); var id = (GH_Integer)ComponentTestHelper.GetOutput(comp, 1); var line = (GH_Line)ComponentTestHelper.GetOutput(comp, 2); - var section = (GsaSectionGoo)ComponentTestHelper.GetOutput(comp, 3); + var section = (GsaPropertyGoo)ComponentTestHelper.GetOutput(comp, 3); var group = (GH_Integer)ComponentTestHelper.GetOutput(comp, 4); var type = (GH_String)ComponentTestHelper.GetOutput(comp, 5); var offset = (GsaOffsetGoo)ComponentTestHelper.GetOutput(comp, 6); @@ -58,7 +58,7 @@ public void GetOutputsFromInputElements() { Assert.Equal(7, line.Value.To.X, 6); Assert.Equal(3, line.Value.To.Y, 6); Assert.Equal(1, line.Value.To.Z, 6); - Assert.Equal("STD CH(ft) 1 2 3 4", section.Value.ApiSection.Profile); + Assert.Equal("STD CH(ft) 1 2 3 4", ((GsaSection)section.Value).ApiSection.Profile); Assert.Equal(0, group.Value); Assert.Equal("Beam", type.Value); Assert.Equal(0, offset.Value.X1.Value, 6); @@ -113,7 +113,7 @@ public void EditElementByInputs() { var elem = (GsaElement1dGoo)ComponentTestHelper.GetOutput(comp, 0); var id = (GH_Integer)ComponentTestHelper.GetOutput(comp, 1); var line = (GH_Line)ComponentTestHelper.GetOutput(comp, 2); - var section = (GsaSectionGoo)ComponentTestHelper.GetOutput(comp, 3); + var section = (GsaPropertyGoo)ComponentTestHelper.GetOutput(comp, 3); var group = (GH_Integer)ComponentTestHelper.GetOutput(comp, 4); var type = (GH_String)ComponentTestHelper.GetOutput(comp, 5); var offset = (GsaOffsetGoo)ComponentTestHelper.GetOutput(comp, 6); @@ -140,7 +140,7 @@ public void EditElementByInputs() { Assert.Equal(1, line.Value.To.X); Assert.Equal(2, line.Value.To.Y); Assert.Equal(3, line.Value.To.Z); - Assert.Equal("STD CH 10 20 30 40", section.Value.ApiSection.Profile); + Assert.Equal("STD CH 10 20 30 40", ((GsaSection)section.Value).ApiSection.Profile); Assert.Equal(7, group.Value); Assert.Equal("Beam", type.Value); Assert.Equal(1, offset.Value.X1.Value); @@ -192,7 +192,7 @@ public void ChangeToSpringElement() { var elem = (GsaElement1dGoo)ComponentTestHelper.GetOutput(comp, 0); var id = (GH_Integer)ComponentTestHelper.GetOutput(comp, 1); var line = (GH_Line)ComponentTestHelper.GetOutput(comp, 2); - var springProperty = (GsaSpringPropertyGoo)ComponentTestHelper.GetOutput(comp, 3); + var springProperty = (GsaPropertyGoo)ComponentTestHelper.GetOutput(comp, 3); var group = (GH_Integer)ComponentTestHelper.GetOutput(comp, 4); var type = (GH_String)ComponentTestHelper.GetOutput(comp, 5); var offset = (GsaOffsetGoo)ComponentTestHelper.GetOutput(comp, 6); @@ -219,7 +219,7 @@ public void ChangeToSpringElement() { Assert.Equal(7, line.Value.To.X, 6); Assert.Equal(3, line.Value.To.Y, 6); Assert.Equal(1, line.Value.To.Z, 6); - Assert.NotNull(springProperty.Value.ApiProperty); + Assert.NotNull(((GsaSpringProperty)springProperty.Value).ApiProperty); Assert.Equal(0, group.Value); Assert.Equal("Spring", type.Value); Assert.Equal(0, offset.Value.X1.Value, 6); @@ -254,12 +254,12 @@ public void InvalidPropertyElementTypeCombination1() { var property = new AxialSpringProperty { Stiffness = 3.0 }; - ComponentTestHelper.SetInput(comp, new GsaPropertyGoo(new GsaSpringProperty(property)), 3); + ComponentTestHelper.SetInput(comp, new GsaSpringPropertyGoo(new GsaSpringProperty(property)), 3); ComponentTestHelper.SetInput(comp, "Beam", 5); comp.Params.Output[0].ExpireSolution(true); comp.Params.Output[0].CollectData(); - Assert.Single(comp.RuntimeMessages(Grasshopper.Kernel.GH_RuntimeMessageLevel.Error)); + Assert.Empty(comp.RuntimeMessages(Grasshopper.Kernel.GH_RuntimeMessageLevel.Error)); } [Fact] @@ -281,7 +281,7 @@ public void InvalidPropertyElementTypeCombination3() { comp.Params.Output[0].ExpireSolution(true); comp.Params.Output[0].CollectData(); - Assert.Single(comp.RuntimeMessages(Grasshopper.Kernel.GH_RuntimeMessageLevel.Error)); + Assert.Empty(comp.RuntimeMessages(Grasshopper.Kernel.GH_RuntimeMessageLevel.Error)); } } } diff --git a/GsaGHTests/3_Components/2_Geometry/EditMember1dTests.cs b/GsaGHTests/3_Components/2_Geometry/EditMember1dTests.cs index 6a0d59210..ce7ea65fc 100644 --- a/GsaGHTests/3_Components/2_Geometry/EditMember1dTests.cs +++ b/GsaGHTests/3_Components/2_Geometry/EditMember1dTests.cs @@ -318,7 +318,7 @@ public void InvalidPropertyElement1DTypeCombination1() { comp.Params.Output[0].ExpireSolution(true); comp.Params.Output[0].CollectData(); - Assert.Single(comp.RuntimeMessages(Grasshopper.Kernel.GH_RuntimeMessageLevel.Error)); + Assert.Single(comp.RuntimeMessages(Grasshopper.Kernel.GH_RuntimeMessageLevel.Remark)); } [Fact] @@ -340,7 +340,7 @@ public void InvalidPropertyElement1DTypeCombination3() { comp.Params.Output[0].ExpireSolution(true); comp.Params.Output[0].CollectData(); - Assert.Single(comp.RuntimeMessages(Grasshopper.Kernel.GH_RuntimeMessageLevel.Error)); + Assert.Empty(comp.RuntimeMessages(Grasshopper.Kernel.GH_RuntimeMessageLevel.Error)); } } } diff --git a/GsaGHTests/3_Components/2_Geometry/EditNodeTests.cs b/GsaGHTests/3_Components/2_Geometry/EditNodeTests.cs index eb96589d8..15f862a7b 100644 --- a/GsaGHTests/3_Components/2_Geometry/EditNodeTests.cs +++ b/GsaGHTests/3_Components/2_Geometry/EditNodeTests.cs @@ -33,7 +33,7 @@ public void GetValuesTest() { var output4 = (GsaBool6Goo)ComponentTestHelper.GetOutput(comp, 4); var output5 = (GH_Integer)ComponentTestHelper.GetOutput(comp, 5); var output6 = (GH_Integer)ComponentTestHelper.GetOutput(comp, 6); - var output7 = (GH_Integer)ComponentTestHelper.GetOutput(comp, 7); + var output7 = (GsaSpringPropertyGoo)ComponentTestHelper.GetOutput(comp, 7); var output8 = (GH_String)ComponentTestHelper.GetOutput(comp, 8); var output9 = (GH_Colour)ComponentTestHelper.GetOutput(comp, 9); @@ -61,7 +61,7 @@ public void GetValuesTest() { Assert.Equal(0, output0.Value.ApiNode.MassProperty); Assert.Equal(0, output6.Value); Assert.Equal(0, output0.Value.ApiNode.SpringProperty); - Assert.Equal(0, output7.Value); + Assert.Null(output7.Value); Assert.Equal("", output8.Value); Assert.Equal(0, output9.Value.R); @@ -91,7 +91,7 @@ public void SetValuesTest() { var output4 = (GsaBool6Goo)ComponentTestHelper.GetOutput(comp, 4); var output5 = (GH_Integer)ComponentTestHelper.GetOutput(comp, 5); var output6 = (GH_Integer)ComponentTestHelper.GetOutput(comp, 6); - var output7 = (GH_Integer)ComponentTestHelper.GetOutput(comp, 7); + var output7 = (GsaSpringPropertyGoo)ComponentTestHelper.GetOutput(comp, 7); var output8 = (GH_String)ComponentTestHelper.GetOutput(comp, 8); var output9 = (GH_Colour)ComponentTestHelper.GetOutput(comp, 9); @@ -119,8 +119,7 @@ public void SetValuesTest() { Assert.Equal(3, output5.Value); Assert.Equal(6, output0.Value.ApiNode.MassProperty); Assert.Equal(6, output6.Value); - Assert.Equal(9, output0.Value.ApiNode.SpringProperty); - Assert.Equal(9, output7.Value); + Assert.Equal(9, output7.Value.Id); Assert.Equal("name", output8.Value); Assert.Equal(255, output9.Value.R); diff --git a/GsaGHTests/Helpers/Assemble/AssembleModelTestsHelper.cs b/GsaGHTests/Helpers/Assemble/AssembleModelTestsHelper.cs index 246eb29c5..2bb3ade87 100644 --- a/GsaGHTests/Helpers/Assemble/AssembleModelTestsHelper.cs +++ b/GsaGHTests/Helpers/Assemble/AssembleModelTestsHelper.cs @@ -276,7 +276,9 @@ internal void TestNode( Assert.Equal(apiNode.Colour, expected.ApiNode.Colour); Assert.Equal(apiNode.DamperProperty, expected.ApiNode.DamperProperty); Assert.Equal(apiNode.MassProperty, expected.ApiNode.MassProperty); - Assert.Equal(apiNode.SpringProperty, expected.ApiNode.SpringProperty); + if (expected.SpringProperty != null) { + Assert.Equal(apiNode.SpringProperty, expected.SpringProperty.Id); + } } internal void TestProp2d(GsaProperty2d expected, int expectedId, GsaModel actualModel) { diff --git a/GsaGHTests/Helpers/Assemble/AssembleModelTestsNodes.cs b/GsaGHTests/Helpers/Assemble/AssembleModelTestsNodes.cs index baa6db3fb..dfc0967f7 100644 --- a/GsaGHTests/Helpers/Assemble/AssembleModelTestsNodes.cs +++ b/GsaGHTests/Helpers/Assemble/AssembleModelTestsNodes.cs @@ -42,7 +42,7 @@ public void AssembleModelWithNodeTest() { node.Value.LocalAxis = new Plane(new Point3d(1, 2, 3), new Vector3d(4, 3, 1)); node.Value.ApiNode.DamperProperty = 4; node.Value.ApiNode.MassProperty = 3; - node.Value.ApiNode.SpringProperty = 2; + node.Value.SpringProperty = new GsaSpringProperty(2); node.Value.Id = 42; var modelGoo = (GsaModelGoo)ComponentTestHelper.GetOutput( From 11b5faf1417bf5b6150c9bbad3b82f131efa2feb Mon Sep 17 00:00:00 2001 From: Kristjan Nielsen Date: Wed, 13 Dec 2023 14:35:28 +0100 Subject: [PATCH 06/14] remove commented out lines --- .../1_Properties/GsaPropertyParameter.cs | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/GsaGH/Parameters/1_Properties/GsaPropertyParameter.cs b/GsaGH/Parameters/1_Properties/GsaPropertyParameter.cs index 819b5ceed..c0dae54a2 100644 --- a/GsaGH/Parameters/1_Properties/GsaPropertyParameter.cs +++ b/GsaGH/Parameters/1_Properties/GsaPropertyParameter.cs @@ -31,22 +31,6 @@ protected override GsaPropertyGoo PreferredCast(object data) { case GsaSpringPropertyGoo springProperty: return new GsaPropertyGoo(springProperty.Value); - - //case GsaElement1dGoo elem1d: - // if (elem1d.Value.Section == null) { - // mes = defaultText; - // break; - // } - - // return new GsaPropertyGoo(elem1d.Value.Section); - - //case GsaMember1dGoo mem1d: - // if (mem1d.Value.Section == null) { - // mes = defaultText; - // break; - // } - - // return new GsaPropertyGoo(mem1d.Value.Section); } if (!string.IsNullOrEmpty(mes)) { From 6837c2e3ce179185e0156d7120486ec6f789eb3e Mon Sep 17 00:00:00 2001 From: Kristjan Nielsen Date: Wed, 13 Dec 2023 15:37:34 +0100 Subject: [PATCH 07/14] replace parameter helper and updated test --- .../2_Geometry/GetGeometry_TrGen_10.gh | Bin 31443 -> 32749 bytes .../Components/2_Geometry/Create1dElement.cs | 8 +----- GsaGH/Components/2_Geometry/Create1dMember.cs | 8 +----- GsaGH/Components/2_Geometry/Edit1dElement.cs | 9 ++---- GsaGH/Components/2_Geometry/Edit1dMember.cs | 9 ++---- GsaGH/Components/2_Geometry/EditNode.cs | 9 ++---- GsaGH/Helpers/GH/ReplaceParam.cs | 26 ++++++++++++++++++ 7 files changed, 34 insertions(+), 35 deletions(-) create mode 100644 GsaGH/Helpers/GH/ReplaceParam.cs diff --git a/ExampleFiles/Parameters/2_Geometry/GetGeometry_TrGen_10.gh b/ExampleFiles/Parameters/2_Geometry/GetGeometry_TrGen_10.gh index 07a57a34f0f81cb0a6ed7484dc94ac6be47b0ef2..9f219b214060d01d353250799061926625790f8e 100644 GIT binary patch literal 32749 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 literal 31443 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 diff --git a/GsaGH/Components/2_Geometry/Create1dElement.cs b/GsaGH/Components/2_Geometry/Create1dElement.cs index 0f28edce5..13e59b2a1 100644 --- a/GsaGH/Components/2_Geometry/Create1dElement.cs +++ b/GsaGH/Components/2_Geometry/Create1dElement.cs @@ -28,13 +28,7 @@ public Create1dElement() : base("Create 1D Element", "Elem1D", "Create GSA 1D El public override bool Read(GH_IReader reader) { bool flag = base.Read(reader); if (Params.Input[1].Name == new GsaSectionParameter().Name) { - var sources = Params.Input[1].Sources.ToList(); - Params.UnregisterInputParameter(Params.Input[1], false); - Params.RegisterInputParam(new GsaPropertyParameter(), 1); - Params.Input[1].Optional = true; - foreach (IGH_Param source in sources) { - Params.Input[1].AddSource(source); - } + Params.ReplaceInputParameter(new GsaPropertyParameter(), 1, true); } return flag; diff --git a/GsaGH/Components/2_Geometry/Create1dMember.cs b/GsaGH/Components/2_Geometry/Create1dMember.cs index 63934aefd..c7b55c899 100644 --- a/GsaGH/Components/2_Geometry/Create1dMember.cs +++ b/GsaGH/Components/2_Geometry/Create1dMember.cs @@ -96,13 +96,7 @@ public override bool Read(GH_IReader reader) { _zz2 = reader.GetBoolean("zz2"); bool flag = base.Read(reader); if (Params.Input[1].Name == new GsaSectionParameter().Name) { - var sources = Params.Input[1].Sources.ToList(); - Params.UnregisterInputParameter(Params.Input[1], false); - Params.RegisterInputParam(new GsaPropertyParameter(), 1); - Params.Input[1].Optional = true; - foreach (IGH_Param source in sources) { - Params.Input[1].AddSource(source); - } + Params.ReplaceInputParameter(new GsaPropertyParameter(), 1, true); } return flag; diff --git a/GsaGH/Components/2_Geometry/Edit1dElement.cs b/GsaGH/Components/2_Geometry/Edit1dElement.cs index 2b26fa596..2636114e0 100644 --- a/GsaGH/Components/2_Geometry/Edit1dElement.cs +++ b/GsaGH/Components/2_Geometry/Edit1dElement.cs @@ -41,13 +41,8 @@ protected override void BeforeSolveInstance() { public override bool Read(GH_IReader reader) { bool flag = base.Read(reader); if (Params.Input[3].Name == new GsaSectionParameter().Name) { - var sources = Params.Input[3].Sources.ToList(); - Params.UnregisterInputParameter(Params.Input[3], false); - Params.RegisterInputParam(new GsaPropertyParameter(), 3); - Params.Input[3].Optional = true; - foreach (IGH_Param source in sources) { - Params.Input[3].AddSource(source); - } + Params.ReplaceInputParameter(new GsaPropertyParameter(), 3, true); + Params.ReplaceOutputParameter(new GsaPropertyParameter(), 3); } return flag; diff --git a/GsaGH/Components/2_Geometry/Edit1dMember.cs b/GsaGH/Components/2_Geometry/Edit1dMember.cs index 7824bbfe0..9eb720454 100644 --- a/GsaGH/Components/2_Geometry/Edit1dMember.cs +++ b/GsaGH/Components/2_Geometry/Edit1dMember.cs @@ -57,13 +57,8 @@ public void VariableParameterMaintenance() { } public override bool Read(GH_IReader reader) { bool flag = base.Read(reader); if (Params.Input[3].Name == new GsaSectionParameter().Name) { - var sources = Params.Input[3].Sources.ToList(); - Params.UnregisterInputParameter(Params.Input[3], false); - Params.RegisterInputParam(new GsaPropertyParameter(), 3); - Params.Input[3].Optional = true; - foreach (IGH_Param source in sources) { - Params.Input[3].AddSource(source); - } + Params.ReplaceInputParameter(new GsaPropertyParameter(), 3, true); + Params.ReplaceOutputParameter(new GsaPropertyParameter(), 3); } return flag; diff --git a/GsaGH/Components/2_Geometry/EditNode.cs b/GsaGH/Components/2_Geometry/EditNode.cs index 35375af6b..64eec788f 100644 --- a/GsaGH/Components/2_Geometry/EditNode.cs +++ b/GsaGH/Components/2_Geometry/EditNode.cs @@ -52,13 +52,8 @@ public override bool Read(GH_IReader reader) { _mode = (FoldMode)reader.GetInt32("Mode"); bool flag = base.Read(reader); if (Params.Input[7].Description == "Set Spring Property by reference") { - var sources = Params.Input[7].Sources.ToList(); - Params.UnregisterInputParameter(Params.Input[7], false); - Params.RegisterInputParam(new GsaSpringPropertyParameter(), 7); - Params.Input[7].Optional = true; - foreach (IGH_Param source in sources) { - Params.Input[7].AddSource(source); - } + Params.ReplaceInputParameter(new GsaSpringPropertyParameter(), 7, true); + Params.ReplaceOutputParameter(new GsaSpringPropertyParameter(), 7); } return flag; diff --git a/GsaGH/Helpers/GH/ReplaceParam.cs b/GsaGH/Helpers/GH/ReplaceParam.cs new file mode 100644 index 000000000..b09fe1e70 --- /dev/null +++ b/GsaGH/Helpers/GH/ReplaceParam.cs @@ -0,0 +1,26 @@ +using System; +using System.Linq; +using Grasshopper.Kernel; + +namespace GsaGH.Helpers.GH { + public static class ReplaceParam { + public static void ReplaceInputParameter( + this GH_ComponentParamServer parameters, IGH_Param newParam, int id, bool optional = false) { + var sources = parameters.Input[id].Sources.ToList(); + parameters.UnregisterInputParameter(parameters.Input[id], false); + parameters.RegisterInputParam(newParam, id); + parameters.Input[id].Optional = optional; + foreach (IGH_Param source in sources) { + parameters.Input[id].AddSource(source); + } + } + + public static void ReplaceOutputParameter( + this GH_ComponentParamServer parameters, IGH_Param newParam, int id) { + Guid guid = parameters.Output[id].InstanceGuid; + parameters.UnregisterOutputParameter(parameters.Output[id], false); + parameters.RegisterOutputParam(newParam, id); + parameters.Output[id].NewInstanceGuid(guid); + } + } +} From 112732116c67bdfbe36c3145812f0816ff129a57 Mon Sep 17 00:00:00 2001 From: Kristjan Nielsen Date: Wed, 13 Dec 2023 16:19:22 +0100 Subject: [PATCH 08/14] spring tostring --- .../1_Properties/GetSpringProperty.cs | 4 +- .../1_Properties/GsaSpringProperty.cs | 110 +++++++++++++++++- 2 files changed, 110 insertions(+), 4 deletions(-) diff --git a/GsaGH/Components/1_Properties/GetSpringProperty.cs b/GsaGH/Components/1_Properties/GetSpringProperty.cs index 7db0225f5..8c62a739c 100644 --- a/GsaGH/Components/1_Properties/GetSpringProperty.cs +++ b/GsaGH/Components/1_Properties/GetSpringProperty.cs @@ -25,7 +25,6 @@ public class GetSpringProperty : GH_OasysComponent, IGH_VariableParameterCompone protected override Bitmap Icon => Resources.GetSpringProperty; private RotationalStiffnessUnit _rotationalStiffnessUnit = RotationalStiffnessUnit.NewtonMeterPerRadian; private LengthUnit _lengthUnit = DefaultUnits.LengthUnitSection; - private List _rotationalStiffnessUnitAbbreviations = new List(); private ForcePerLengthUnit _stiffnessUnit = DefaultUnits.ForcePerLengthUnit; public GetSpringProperty() : base("Get Spring Property", "GetPS", @@ -249,7 +248,7 @@ protected override void SolveInstance(IGH_DataAccess da) { case LockupSpringProperty lockup: da.SetData(14, new GH_UnitNumber(new Length((double)lockup.NegativeLockup, LengthUnit.Meter).ToUnit(_lengthUnit))); da.SetData(15, new GH_UnitNumber(new Length((double)lockup.PositiveLockup, LengthUnit.Meter).ToUnit(_lengthUnit))); - return; + break; case FrictionSpringProperty friction: da.SetData(2, new GH_UnitNumber(new ForcePerLength((double)friction.StiffnessX, ForcePerLengthUnit.NewtonPerMeter).ToUnit(_stiffnessUnit))); @@ -262,6 +261,7 @@ protected override void SolveInstance(IGH_DataAccess da) { default: break; } + da.SetData(17, new GH_UnitNumber(new Ratio(springProperty.ApiProperty.DampingRatio, RatioUnit.DecimalFraction).ToUnit(RatioUnit.Percent))); } diff --git a/GsaGH/Parameters/1_Properties/GsaSpringProperty.cs b/GsaGH/Parameters/1_Properties/GsaSpringProperty.cs index 16e76544e..a0248690e 100644 --- a/GsaGH/Parameters/1_Properties/GsaSpringProperty.cs +++ b/GsaGH/Parameters/1_Properties/GsaSpringProperty.cs @@ -3,9 +3,18 @@ using System.Configuration; using System.Drawing; using System.Linq; +using System.Windows.Forms.VisualStyles; using GsaAPI; using GsaGH.Helpers; using GsaGH.Helpers.GsaApi; +using OasysGH.Parameters; +using OasysUnits.Units; +using OasysUnits; +using OasysGH.Units; +using LengthUnit = OasysUnits.Units.LengthUnit; +using Newtonsoft.Json.Linq; +using static Rhino.Render.TextureGraphInfo; +using Grasshopper.Kernel.Types.Transforms; namespace GsaGH.Parameters { ///

@@ -131,7 +140,7 @@ public SpringProperty DuplicateApiObject() { if ((Color)ApiProperty.Colour != Color.FromArgb(0, 0, 0)) { property.Colour = ApiProperty.Colour; } - + property.DampingRatio = ApiProperty.DampingRatio; property.Name = ApiProperty.Name; @@ -146,7 +155,104 @@ public override string ToString() { string name = ApiProperty.Name; string type = Mappings.SpringPropertyTypeMapping.FirstOrDefault(x => x.Value == ApiProperty.GetType()).Key; - return string.Join(" ", ps, type, name).TrimSpaces(); + string values = SpringValuesToString(); + return string.Join(" ", ps, type, name, values).TrimSpaces(); + } + + private string SpringValuesToString() { + string value = string.Empty; + RotationalStiffnessUnit _rotationalStiffnessUnit = RotationalStiffnessUnit.NewtonMeterPerRadian; + LengthUnit _lengthUnit = DefaultUnits.LengthUnitSection; + ForcePerLengthUnit _stiffnessUnit = DefaultUnits.ForcePerLengthUnit; + switch (ApiProperty) { + case AxialSpringProperty axial: + value = new ForcePerLength(axial.Stiffness, ForcePerLengthUnit.NewtonPerMeter) + .ToUnit(_stiffnessUnit).ToString(); + break; + + case TensionSpringProperty tension: + value = new ForcePerLength(tension.Stiffness, ForcePerLengthUnit.NewtonPerMeter) + .ToUnit(_stiffnessUnit).ToString(); + break; + + case CompressionSpringProperty compression: + value = new ForcePerLength(compression.Stiffness, ForcePerLengthUnit.NewtonPerMeter) + .ToUnit(_stiffnessUnit).ToString(); + break; + + case GapSpringProperty gap: + value = new ForcePerLength(gap.Stiffness, ForcePerLengthUnit.NewtonPerMeter) + .ToUnit(_stiffnessUnit).ToString(); + break; + + case TorsionalSpringProperty torsional: + value = new RotationalStiffness(torsional.Stiffness, RotationalStiffnessUnit.NewtonMeterPerRadian) + .ToUnit(_rotationalStiffnessUnit).ToString(); + break; + + case GeneralSpringProperty general: + string x = GeneralSpringToString("X:", general.SpringCurveX, general.StiffnessX); + string y = GeneralSpringToString("Y:", general.SpringCurveY, general.StiffnessY); + string z = GeneralSpringToString("Z:", general.SpringCurveZ, general.StiffnessZ); + string xx = GeneralRotationalSpringToString( + "XX:", general.SpringCurveXX, general.StiffnessXX); + string yy = GeneralRotationalSpringToString( + "YY:", general.SpringCurveYY, general.StiffnessYY); + string zz = GeneralRotationalSpringToString( + "ZZ:", general.SpringCurveZZ, general.StiffnessZZ); + value = string.Join(" ", x, y, z, xx, yy, zz); + break; + + case MatrixSpringProperty matrix: + value = $"MatrixID:{matrix.SpringMatrix}"; + break; + + case LockupSpringProperty lockup: + value = "+ve:" + new Length((double)lockup.PositiveLockup, LengthUnit.Meter) + .ToUnit(_lengthUnit).ToString() + + " -ve:" + new Length((double)lockup.NegativeLockup, LengthUnit.Meter) + .ToUnit(_lengthUnit).ToString(); + break; + + case FrictionSpringProperty friction: + string fx = GeneralSpringToString("X:", null, friction.StiffnessX); + string fy = GeneralSpringToString("Y:", null, friction.StiffnessY); + string fz = GeneralSpringToString("Z:", null, friction.StiffnessZ); + string coeff = friction.FrictionCoefficient == 0 ? string.Empty + : $"Coeff.:{friction.FrictionCoefficient}"; + value = string.Join(" ", fx, fy, fz, coeff); + break; + case ConnectorSpringProperty connector: + default: + break; + } + + string damping = ApiProperty.DampingRatio == 0 ? string.Empty + : new Ratio(ApiProperty.DampingRatio, RatioUnit.DecimalFraction).ToUnit(RatioUnit.Percent).ToString(); + + return string.Join(" ", value, damping).Replace(",", string.Empty).TrimSpaces(); + } + + private string GeneralSpringToString(string prefix, int? curve, double? stiffness) { + if (curve == null && stiffness == null) { + return string.Empty; + } + + string val = curve != null ? $"CurveID:{curve}" + : new ForcePerLength((double)stiffness, ForcePerLengthUnit.NewtonPerMeter) + .ToUnit(DefaultUnits.ForcePerLengthUnit).ToString(); + return $"{prefix}:{val}"; + } + + private string GeneralRotationalSpringToString(string prefix, int? curve, double? stiffness) { + if (curve == null && stiffness == null) { + return string.Empty; + } + + string val = curve != null ? $"CurveID:{curve}" + : new RotationalStiffness((double)stiffness, RotationalStiffnessUnit.NewtonMeterPerRadian) + .ToString(); + return $"{prefix}:{val}"; } } } From e973b74d6edc81238647784004e4c50c965329bb Mon Sep 17 00:00:00 2001 From: Kristjan Nielsen Date: Tue, 12 Dec 2023 14:05:50 +0100 Subject: [PATCH 09/14] organise Properties subcategory ribbon --- GsaGH/Components/1_Properties/CreateSpringProperty.cs | 2 +- GsaGH/Components/1_Properties/GetSpringProperty.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/GsaGH/Components/1_Properties/CreateSpringProperty.cs b/GsaGH/Components/1_Properties/CreateSpringProperty.cs index f1af4e7ba..4e8e110a5 100644 --- a/GsaGH/Components/1_Properties/CreateSpringProperty.cs +++ b/GsaGH/Components/1_Properties/CreateSpringProperty.cs @@ -55,7 +55,7 @@ public class CreateSpringProperty : GH_OasysDropDownComponent { }); public override Guid ComponentGuid => new Guid("f48965a0-00e7-4de8-9839-a4480075459f"); - public override GH_Exposure Exposure => GH_Exposure.tertiary; + public override GH_Exposure Exposure => GH_Exposure.secondary | GH_Exposure.obscure; public override OasysPluginInfo PluginInfo => GsaGH.PluginInfo.Instance; protected override Bitmap Icon => Resources.CreateSpringProperty; private readonly IReadOnlyDictionary _springPropertyTypes diff --git a/GsaGH/Components/1_Properties/GetSpringProperty.cs b/GsaGH/Components/1_Properties/GetSpringProperty.cs index 8c62a739c..d93f1882a 100644 --- a/GsaGH/Components/1_Properties/GetSpringProperty.cs +++ b/GsaGH/Components/1_Properties/GetSpringProperty.cs @@ -20,7 +20,7 @@ namespace GsaGH.Components { public class GetSpringProperty : GH_OasysComponent, IGH_VariableParameterComponent { public override Guid ComponentGuid => new Guid("e6e90fc4-157a-4fad-85ec-6957aed91fa9"); - public override GH_Exposure Exposure => GH_Exposure.tertiary | GH_Exposure.obscure; + public override GH_Exposure Exposure => GH_Exposure.secondary | GH_Exposure.obscure; public override OasysPluginInfo PluginInfo => GsaGH.PluginInfo.Instance; protected override Bitmap Icon => Resources.GetSpringProperty; private RotationalStiffnessUnit _rotationalStiffnessUnit = RotationalStiffnessUnit.NewtonMeterPerRadian; From 83fbebecd5a777aa73355265969c360798aac0de Mon Sep 17 00:00:00 2001 From: Kristjan Nielsen Date: Wed, 13 Dec 2023 16:23:36 +0100 Subject: [PATCH 10/14] organise ribbon --- GsaGH/Components/2_Geometry/ExpandBeamToShell.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/GsaGH/Components/2_Geometry/ExpandBeamToShell.cs b/GsaGH/Components/2_Geometry/ExpandBeamToShell.cs index 91864916e..e14c601fb 100644 --- a/GsaGH/Components/2_Geometry/ExpandBeamToShell.cs +++ b/GsaGH/Components/2_Geometry/ExpandBeamToShell.cs @@ -23,12 +23,9 @@ using LengthUnit = OasysUnits.Units.LengthUnit; namespace GsaGH.Components { - /// - /// Component to edit a Node - /// public class ExpandBeamToShell : GH_OasysComponent, IGH_VariableParameterComponent { public override Guid ComponentGuid => new Guid("42221f6b-b0f1-41ae-abcf-df5521565464"); - public override GH_Exposure Exposure => GH_Exposure.senary | GH_Exposure.obscure; + public override GH_Exposure Exposure => GH_Exposure.quarternary; public override OasysPluginInfo PluginInfo => GsaGH.PluginInfo.Instance; protected override Bitmap Icon => Resources.ExpandBeamToShell; private LengthUnit _lengthUnit = DefaultUnits.LengthUnitGeometry; From 4b432782660707eac198cfbc086fba4474c3bf92 Mon Sep 17 00:00:00 2001 From: Kristjan Nielsen Date: Wed, 13 Dec 2023 16:41:56 +0100 Subject: [PATCH 11/14] to string method with tests --- .../1_Properties/GsaSpringProperty.cs | 38 ++-- .../1_Properties/GsaSpringPropertyTest.cs | 171 ++++++++++++++++++ 2 files changed, 190 insertions(+), 19 deletions(-) diff --git a/GsaGH/Parameters/1_Properties/GsaSpringProperty.cs b/GsaGH/Parameters/1_Properties/GsaSpringProperty.cs index a0248690e..df707bbf0 100644 --- a/GsaGH/Parameters/1_Properties/GsaSpringProperty.cs +++ b/GsaGH/Parameters/1_Properties/GsaSpringProperty.cs @@ -167,39 +167,39 @@ private string SpringValuesToString() { switch (ApiProperty) { case AxialSpringProperty axial: value = new ForcePerLength(axial.Stiffness, ForcePerLengthUnit.NewtonPerMeter) - .ToUnit(_stiffnessUnit).ToString(); + .ToUnit(_stiffnessUnit).ToString().Replace(" ", string.Empty); break; case TensionSpringProperty tension: value = new ForcePerLength(tension.Stiffness, ForcePerLengthUnit.NewtonPerMeter) - .ToUnit(_stiffnessUnit).ToString(); + .ToUnit(_stiffnessUnit).ToString().Replace(" ", string.Empty); break; case CompressionSpringProperty compression: value = new ForcePerLength(compression.Stiffness, ForcePerLengthUnit.NewtonPerMeter) - .ToUnit(_stiffnessUnit).ToString(); + .ToUnit(_stiffnessUnit).ToString().Replace(" ", string.Empty); break; case GapSpringProperty gap: value = new ForcePerLength(gap.Stiffness, ForcePerLengthUnit.NewtonPerMeter) - .ToUnit(_stiffnessUnit).ToString(); + .ToUnit(_stiffnessUnit).ToString().Replace(" ", string.Empty); break; case TorsionalSpringProperty torsional: value = new RotationalStiffness(torsional.Stiffness, RotationalStiffnessUnit.NewtonMeterPerRadian) - .ToUnit(_rotationalStiffnessUnit).ToString(); + .ToUnit(_rotationalStiffnessUnit).ToString().Replace(" ", string.Empty); break; case GeneralSpringProperty general: - string x = GeneralSpringToString("X:", general.SpringCurveX, general.StiffnessX); - string y = GeneralSpringToString("Y:", general.SpringCurveY, general.StiffnessY); - string z = GeneralSpringToString("Z:", general.SpringCurveZ, general.StiffnessZ); + string x = GeneralSpringToString("X", general.SpringCurveX, general.StiffnessX); + string y = GeneralSpringToString("Y", general.SpringCurveY, general.StiffnessY); + string z = GeneralSpringToString("Z", general.SpringCurveZ, general.StiffnessZ); string xx = GeneralRotationalSpringToString( - "XX:", general.SpringCurveXX, general.StiffnessXX); + "XX", general.SpringCurveXX, general.StiffnessXX); string yy = GeneralRotationalSpringToString( - "YY:", general.SpringCurveYY, general.StiffnessYY); + "YY", general.SpringCurveYY, general.StiffnessYY); string zz = GeneralRotationalSpringToString( - "ZZ:", general.SpringCurveZZ, general.StiffnessZZ); + "ZZ", general.SpringCurveZZ, general.StiffnessZZ); value = string.Join(" ", x, y, z, xx, yy, zz); break; @@ -209,15 +209,15 @@ private string SpringValuesToString() { case LockupSpringProperty lockup: value = "+ve:" + new Length((double)lockup.PositiveLockup, LengthUnit.Meter) - .ToUnit(_lengthUnit).ToString() + .ToUnit(_lengthUnit).ToString().Replace(" ", string.Empty) + " -ve:" + new Length((double)lockup.NegativeLockup, LengthUnit.Meter) - .ToUnit(_lengthUnit).ToString(); + .ToUnit(_lengthUnit).ToString().Replace(" ", string.Empty); break; case FrictionSpringProperty friction: - string fx = GeneralSpringToString("X:", null, friction.StiffnessX); - string fy = GeneralSpringToString("Y:", null, friction.StiffnessY); - string fz = GeneralSpringToString("Z:", null, friction.StiffnessZ); + string fx = GeneralSpringToString("X", null, friction.StiffnessX); + string fy = GeneralSpringToString("Y", null, friction.StiffnessY); + string fz = GeneralSpringToString("Z", null, friction.StiffnessZ); string coeff = friction.FrictionCoefficient == 0 ? string.Empty : $"Coeff.:{friction.FrictionCoefficient}"; value = string.Join(" ", fx, fy, fz, coeff); @@ -228,7 +228,7 @@ private string SpringValuesToString() { } string damping = ApiProperty.DampingRatio == 0 ? string.Empty - : new Ratio(ApiProperty.DampingRatio, RatioUnit.DecimalFraction).ToUnit(RatioUnit.Percent).ToString(); + : new Ratio(ApiProperty.DampingRatio, RatioUnit.DecimalFraction).ToUnit(RatioUnit.Percent).ToString().Replace(" ", string.Empty); return string.Join(" ", value, damping).Replace(",", string.Empty).TrimSpaces(); } @@ -240,7 +240,7 @@ private string GeneralSpringToString(string prefix, int? curve, double? stiffnes string val = curve != null ? $"CurveID:{curve}" : new ForcePerLength((double)stiffness, ForcePerLengthUnit.NewtonPerMeter) - .ToUnit(DefaultUnits.ForcePerLengthUnit).ToString(); + .ToUnit(DefaultUnits.ForcePerLengthUnit).ToString().Replace(" ", string.Empty); return $"{prefix}:{val}"; } @@ -251,7 +251,7 @@ private string GeneralRotationalSpringToString(string prefix, int? curve, double string val = curve != null ? $"CurveID:{curve}" : new RotationalStiffness((double)stiffness, RotationalStiffnessUnit.NewtonMeterPerRadian) - .ToString(); + .ToString().Replace(" ", string.Empty); return $"{prefix}:{val}"; } } diff --git a/GsaGHTests/1_BaseParameters/1_Properties/GsaSpringPropertyTest.cs b/GsaGHTests/1_BaseParameters/1_Properties/GsaSpringPropertyTest.cs index 178c695c9..af8a0cc0d 100644 --- a/GsaGHTests/1_BaseParameters/1_Properties/GsaSpringPropertyTest.cs +++ b/GsaGHTests/1_BaseParameters/1_Properties/GsaSpringPropertyTest.cs @@ -397,5 +397,176 @@ public void DuplicateReferenceTest2() { var duplicate = new GsaSpringProperty(original); Duplicates.AreEqual(original, duplicate, new List() { "Guid" }); } + + [Fact] + public void ToStringAxialTest() { + var spring = new GsaSpringProperty { + ApiProperty = new AxialSpringProperty() { + Colour = Color.Yellow, + DampingRatio = 0.1, + Name = "Name", + Stiffness = 1.2 + } + }; + + Assert.Equal("Axial Name 0.0012kN/m 10%", spring.ToString()); + } + + [Fact] + public void ToStringTorsionalTest() { + var spring = new GsaSpringProperty { + ApiProperty = new TorsionalSpringProperty() { + Colour = Color.Yellow, + DampingRatio = 0.1, + Name = "Name", + Stiffness = 1.2 + } + }; + + Assert.Equal("Torsional Name 1.2N·m/rad 10%", spring.ToString()); + } + + [Fact] + public void ToStringGeneralTest1() { + var spring = new GsaSpringProperty { + ApiProperty = new GeneralSpringProperty() { + Colour = Color.Yellow, + DampingRatio = 0.1, + Name = "Name", + StiffnessX = 1.2, + StiffnessY = 2.2, + StiffnessZ = 3.2, + StiffnessXX = 4.2, + StiffnessYY = 4.2, + StiffnessZZ = 4.2, + } + }; + + Assert.Equal("General Name X:0.0012kN/m Y:0.0022kN/m Z:0.0032kN/m XX:4.2N·m/rad " + + "YY:4.2N·m/rad ZZ:4.2N·m/rad 10%", spring.ToString()); + } + + [Fact] + public void ToStringGeneralTest2() { + var spring = new GsaSpringProperty { + ApiProperty = new GeneralSpringProperty() { + Colour = Color.Yellow, + DampingRatio = 0.1, + Name = "Name", + SpringCurveX = 1, + SpringCurveY = 2, + SpringCurveZ = 3, + SpringCurveXX = 4, + SpringCurveYY = 5, + SpringCurveZZ = 6 + } + }; + + Assert.Equal("General Name X:CurveID:1 Y:CurveID:2 Z:CurveID:3 XX:CurveID:4 YY:CurveID:5" + + " ZZ:CurveID:6 10%", spring.ToString()); + } + + [Fact] + public void ToStringMatrixTest() { + var spring = new GsaSpringProperty { + ApiProperty = new MatrixSpringProperty() { + Colour = Color.Yellow, + DampingRatio = 0.1, + Name = "Name", + SpringMatrix = 2 + } + }; + + Assert.Equal("Matrix Name MatrixID:2 10%", spring.ToString()); + } + + [Fact] + public void ToStringTensionOnlyTest() { + var spring = new GsaSpringProperty { + ApiProperty = new TensionSpringProperty() { + Colour = Color.Yellow, + DampingRatio = 0.1, + Name = "Name", + Stiffness = 1.2 + } + }; + + Assert.Equal("Tension-only Name 0.0012kN/m 10%", spring.ToString()); + } + + [Fact] + public void ToStringCompressionOnlyTest() { + var spring = new GsaSpringProperty { + ApiProperty = new CompressionSpringProperty() { + Colour = Color.Yellow, + DampingRatio = 0.1, + Name = "Name", + Stiffness = 1.2 + } + }; + + Assert.Equal("Compression-only Name 0.0012kN/m 10%", spring.ToString()); + } + + [Fact] + public void ToStringConnectorTest() { + var spring = new GsaSpringProperty { + ApiProperty = new ConnectorSpringProperty() { + Colour = Color.Yellow, + DampingRatio = 0.1, + Name = "Name" + } + }; + + Assert.Equal("Connector Name 10%", spring.ToString()); + } + + [Fact] + public void ToStringLockupTest() { + var spring = new GsaSpringProperty { + ApiProperty = new LockupSpringProperty() { + Colour = Color.Yellow, + DampingRatio = 0.1, + Name = "Name", + Stiffness = 1.2, + NegativeLockup = 2.1, + PositiveLockup = 3.1, + } + }; + + Assert.Equal("Lockup Name +ve:310cm -ve:210cm 10%", spring.ToString()); + } + + [Fact] + public void ToStringGapTest() { + var spring = new GsaSpringProperty { + ApiProperty = new GapSpringProperty() { + Colour = Color.Yellow, + DampingRatio = 0.1, + Name = "Name", + Stiffness = 1.2 + } + }; + + Assert.Equal("Gap Name 0.0012kN/m 10%", spring.ToString()); + } + + [Fact] + public void ToStringFrictionTest() { + var spring = new GsaSpringProperty { + ApiProperty = new FrictionSpringProperty() { + Colour = Color.Yellow, + DampingRatio = 0.1, + Name = "Name", + StiffnessX = 1.2, + StiffnessY = 2.2, + StiffnessZ = 3.2, + FrictionCoefficient = 0.1 + } + }; + + Assert.Equal("Friction Name X:0.0012kN/m Y:0.0022kN/m Z:0.0032kN/m Coeff.:0.1 10%", + spring.ToString()); + } } } From 84f3af0b0cf9346542fbdff39f71ab9d656664ab Mon Sep 17 00:00:00 2001 From: Tilman Reinhardt Date: Wed, 13 Dec 2023 16:57:18 +0100 Subject: [PATCH 12/14] GSAGH-149 typo --- GsaGH/Components/1_Properties/GetSpringProperty.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/GsaGH/Components/1_Properties/GetSpringProperty.cs b/GsaGH/Components/1_Properties/GetSpringProperty.cs index d93f1882a..ec6de2eae 100644 --- a/GsaGH/Components/1_Properties/GetSpringProperty.cs +++ b/GsaGH/Components/1_Properties/GetSpringProperty.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using GH_IO.Serialization; @@ -185,7 +184,7 @@ protected override void RegisterOutputParams(GH_OutputParamManager pManager) { protected override void SolveInstance(IGH_DataAccess da) { GsaSpringPropertyGoo springPropertyGoo = null; if (!da.GetData(0, ref springPropertyGoo)) { - this.AddRuntimeWarning("Input PB failed to collect data"); + this.AddRuntimeWarning("Input PS failed to collect data"); return; } GsaSpringProperty springProperty = springPropertyGoo.Value; @@ -251,9 +250,9 @@ protected override void SolveInstance(IGH_DataAccess da) { break; case FrictionSpringProperty friction: - da.SetData(2, new GH_UnitNumber(new ForcePerLength((double)friction.StiffnessX, ForcePerLengthUnit.NewtonPerMeter).ToUnit(_stiffnessUnit))); - da.SetData(4, new GH_UnitNumber(new ForcePerLength((double)friction.StiffnessY, ForcePerLengthUnit.NewtonPerMeter).ToUnit(_stiffnessUnit))); - da.SetData(6, new GH_UnitNumber(new ForcePerLength((double)friction.StiffnessZ, ForcePerLengthUnit.NewtonPerMeter).ToUnit(_stiffnessUnit))); + da.SetData(2, new GH_UnitNumber(new ForcePerLength((double)friction.StiffnessX, ForcePerLengthUnit.NewtonPerMeter).ToUnit(_stiffnessUnit))); + da.SetData(4, new GH_UnitNumber(new ForcePerLength((double)friction.StiffnessY, ForcePerLengthUnit.NewtonPerMeter).ToUnit(_stiffnessUnit))); + da.SetData(6, new GH_UnitNumber(new ForcePerLength((double)friction.StiffnessZ, ForcePerLengthUnit.NewtonPerMeter).ToUnit(_stiffnessUnit))); da.SetData(16, friction.FrictionCoefficient); break; From 3804ab6eb263a07a5b3a92e4ad155e2c3565cc31 Mon Sep 17 00:00:00 2001 From: Kristjan Nielsen Date: Wed, 13 Dec 2023 17:38:27 +0100 Subject: [PATCH 13/14] change curve id output to int --- GsaGH/Components/1_Properties/GetSpringProperty.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/GsaGH/Components/1_Properties/GetSpringProperty.cs b/GsaGH/Components/1_Properties/GetSpringProperty.cs index d93f1882a..85ec3822c 100644 --- a/GsaGH/Components/1_Properties/GetSpringProperty.cs +++ b/GsaGH/Components/1_Properties/GetSpringProperty.cs @@ -147,27 +147,27 @@ protected override void RegisterOutputParams(GH_OutputParamManager pManager) { pManager.AddTextParameter("Name", "Na", "Spring Property Name", GH_ParamAccess.item); - pManager.AddTextParameter("Spring Curve x", "SCx", "Spring Curve x", GH_ParamAccess.item); + pManager.AddIntegerParameter("Spring Curve x", "SCx", "Spring Curve x", GH_ParamAccess.item); pManager.AddGenericParameter("Stiffness x [" + stiffnessAbr + "]", "Sx", "Stiffness x", GH_ParamAccess.item); - pManager.AddTextParameter("Spring Curve y", "SCy", "Spring Curve y", GH_ParamAccess.item); + pManager.AddIntegerParameter("Spring Curve y", "SCy", "Spring Curve y", GH_ParamAccess.item); pManager.AddGenericParameter("Stiffness y [" + stiffnessAbr + "]", "Sy", "Stiffness y", GH_ParamAccess.item); - pManager.AddTextParameter("Spring Curve z", "SCz", "Spring Curve z", GH_ParamAccess.item); + pManager.AddIntegerParameter("Spring Curve z", "SCz", "Spring Curve z", GH_ParamAccess.item); pManager.AddGenericParameter("Stiffness z [" + stiffnessAbr + "]", "Sz", "Stiffness z", GH_ParamAccess.item); - pManager.AddTextParameter("Spring Curve xx", "SCxx", "Spring Curve xx", GH_ParamAccess.item); + pManager.AddIntegerParameter("Spring Curve xx", "SCxx", "Spring Curve xx", GH_ParamAccess.item); pManager.AddGenericParameter("Stiffness xx [" + rotationalStiffnessAbr + "]", "Sxx", "Stiffness xx", GH_ParamAccess.item); - pManager.AddTextParameter("Spring Curve yy", "SCyy", "Spring Curve yy", GH_ParamAccess.item); + pManager.AddIntegerParameter("Spring Curve yy", "SCyy", "Spring Curve yy", GH_ParamAccess.item); pManager.AddGenericParameter("Stiffness yy [" + rotationalStiffnessAbr + "]", "Syy", "Stiffness yy", GH_ParamAccess.item); - pManager.AddTextParameter("Spring Curve zz", "SCzz", "Spring Curve zz", GH_ParamAccess.item); + pManager.AddIntegerParameter("Spring Curve zz", "SCzz", "Spring Curve zz", GH_ParamAccess.item); pManager.AddGenericParameter("Stiffness zz [" + rotationalStiffnessAbr + "]", "Szz", "Stiffness zz", GH_ParamAccess.item); From d03d4d3123bbec5037c3369457ac957924bb8b83 Mon Sep 17 00:00:00 2001 From: Tilman Reinhardt Date: Wed, 13 Dec 2023 17:46:39 +0100 Subject: [PATCH 14/14] GSAGH-149 description --- .../1_Properties/CreateSpringProperty.cs | 32 +++++++++---------- .../1_Properties/GetSpringProperty.cs | 14 ++++---- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/GsaGH/Components/1_Properties/CreateSpringProperty.cs b/GsaGH/Components/1_Properties/CreateSpringProperty.cs index 4e8e110a5..479005d82 100644 --- a/GsaGH/Components/1_Properties/CreateSpringProperty.cs +++ b/GsaGH/Components/1_Properties/CreateSpringProperty.cs @@ -114,23 +114,23 @@ public override void VariableParameterMaintenance() { return; case SpringPropertyType.Torsional: - SetInputProperties(1, "Stiffness xx [" + rotationalStiffnessAbr + "]", "Sxx", "Stiffness xx", false); + SetInputProperties(1, "Stiffness xx [" + rotationalStiffnessAbr + "]", "Sxx", "Stiffness in xx direction", false); SetDampingRatioInputAt(2); return; case SpringPropertyType.General: - SetInputProperties(1, "Spring Curve x", "SCx", "[Optional] Spring Curve x"); - SetInputProperties(2, "Stiffness x [" + stiffnessAbr + "]", "Sx", "[Optional] Stiffness x"); - SetInputProperties(3, "Spring Curve y", "SCy", "[Optional] Spring Curve y"); - SetInputProperties(4, "Stiffness y [" + stiffnessAbr + "]", "Sy", "[Optional] Stiffness y"); - SetInputProperties(5, "Spring Curve z", "SCz", "[Optional] Spring Curve z"); - SetInputProperties(6, "Stiffness z [" + stiffnessAbr + "]", "Sz", "[Optional] Stiffness z"); - SetInputProperties(7, "Spring Curve xx", "SCxx", "[Optional] Spring Curve xx"); - SetInputProperties(8, "Stiffness xx [" + rotationalStiffnessAbr + "]", "Sxx", "[Optional] Stiffness xx"); - SetInputProperties(9, "Spring Curve yy", "SCyy", "[Optional] Spring Curve yy"); - SetInputProperties(10, "Stiffness yy [" + rotationalStiffnessAbr + "]", "Syy", "[Optional] Stiffness yy"); - SetInputProperties(11, "Spring Curve zz", "SCzz", "[Optional] Spring Curve zz"); - SetInputProperties(12, "Stiffness zz [" + rotationalStiffnessAbr + "]", "Szz", "[Optional] Stiffness zz"); + SetInputProperties(1, "Spring Curve x", "SCx", "[Optional] Spring Curve in x direction"); + SetInputProperties(2, "Stiffness x [" + stiffnessAbr + "]", "Sx", "[Optional] Stiffness in x direction"); + SetInputProperties(3, "Spring Curve y", "SCy", "[Optional] Spring Curve in y direction"); + SetInputProperties(4, "Stiffness y [" + stiffnessAbr + "]", "Sy", "[Optional] Stiffness in y direction"); + SetInputProperties(5, "Spring Curve z", "SCz", "[Optional] Spring Curve in z direction"); + SetInputProperties(6, "Stiffness z [" + stiffnessAbr + "]", "Sz", "[Optional] Stiffness in z direction"); + SetInputProperties(7, "Spring Curve xx", "SCxx", "[Optional] Spring Curve in xx direction"); + SetInputProperties(8, "Stiffness xx [" + rotationalStiffnessAbr + "]", "Sxx", "[Optional] Stiffness in xx direction"); + SetInputProperties(9, "Spring Curve yy", "SCyy", "[Optional] Spring Curve in yy direction"); + SetInputProperties(10, "Stiffness yy [" + rotationalStiffnessAbr + "]", "Syy", "[Optional] Stiffness in yy direction"); + SetInputProperties(11, "Spring Curve zz", "SCzz", "[Optional] Spring Curve in zz direction"); + SetInputProperties(12, "Stiffness zz [" + rotationalStiffnessAbr + "]", "Szz", "[Optional] Stiffness in zz direction"); SetDampingRatioInputAt(13); return; @@ -151,9 +151,9 @@ public override void VariableParameterMaintenance() { return; case SpringPropertyType.Friction: - SetInputProperties(1, "Stiffness x [" + stiffnessAbr + "]", "Sx", "Stiffness x", false); - SetInputProperties(2, "Stiffness y [" + stiffnessAbr + "]", "Sy", "Stiffness y", false); - SetInputProperties(3, "Stiffness z [" + stiffnessAbr + "]", "Sz", "Stiffness z", false); + SetInputProperties(1, "Stiffness x [" + stiffnessAbr + "]", "Sx", "Stiffness in x direction", false); + SetInputProperties(2, "Stiffness y [" + stiffnessAbr + "]", "Sy", "Stiffness in y direction", false); + SetInputProperties(3, "Stiffness z [" + stiffnessAbr + "]", "Sz", "Stiffness in z direction", false); SetInputProperties(4, "Coeff. of Friction [" + stiffnessAbr + "]", "CF", "Coefficient of Friction", false); SetDampingRatioInputAt(5); return; diff --git a/GsaGH/Components/1_Properties/GetSpringProperty.cs b/GsaGH/Components/1_Properties/GetSpringProperty.cs index ec6de2eae..16eb4bcdc 100644 --- a/GsaGH/Components/1_Properties/GetSpringProperty.cs +++ b/GsaGH/Components/1_Properties/GetSpringProperty.cs @@ -146,29 +146,29 @@ protected override void RegisterOutputParams(GH_OutputParamManager pManager) { pManager.AddTextParameter("Name", "Na", "Spring Property Name", GH_ParamAccess.item); - pManager.AddTextParameter("Spring Curve x", "SCx", "Spring Curve x", GH_ParamAccess.item); + pManager.AddTextParameter("Spring Curve x", "SCx", "Spring Curve in x direction", GH_ParamAccess.item); - pManager.AddGenericParameter("Stiffness x [" + stiffnessAbr + "]", "Sx", "Stiffness x", GH_ParamAccess.item); + pManager.AddGenericParameter("Stiffness x [" + stiffnessAbr + "]", "Sx", "Stiffness in x direction", GH_ParamAccess.item); pManager.AddTextParameter("Spring Curve y", "SCy", "Spring Curve y", GH_ParamAccess.item); - pManager.AddGenericParameter("Stiffness y [" + stiffnessAbr + "]", "Sy", "Stiffness y", GH_ParamAccess.item); + pManager.AddGenericParameter("Stiffness y [" + stiffnessAbr + "]", "Sy", "Stiffness in y direction", GH_ParamAccess.item); pManager.AddTextParameter("Spring Curve z", "SCz", "Spring Curve z", GH_ParamAccess.item); - pManager.AddGenericParameter("Stiffness z [" + stiffnessAbr + "]", "Sz", "Stiffness z", GH_ParamAccess.item); + pManager.AddGenericParameter("Stiffness z [" + stiffnessAbr + "]", "Sz", "Stiffness in z direction", GH_ParamAccess.item); pManager.AddTextParameter("Spring Curve xx", "SCxx", "Spring Curve xx", GH_ParamAccess.item); - pManager.AddGenericParameter("Stiffness xx [" + rotationalStiffnessAbr + "]", "Sxx", "Stiffness xx", GH_ParamAccess.item); + pManager.AddGenericParameter("Stiffness xx [" + rotationalStiffnessAbr + "]", "Sxx", "Stiffness in xx direction", GH_ParamAccess.item); pManager.AddTextParameter("Spring Curve yy", "SCyy", "Spring Curve yy", GH_ParamAccess.item); - pManager.AddGenericParameter("Stiffness yy [" + rotationalStiffnessAbr + "]", "Syy", "Stiffness yy", GH_ParamAccess.item); + pManager.AddGenericParameter("Stiffness yy [" + rotationalStiffnessAbr + "]", "Syy", "Stiffness in yy direction", GH_ParamAccess.item); pManager.AddTextParameter("Spring Curve zz", "SCzz", "Spring Curve zz", GH_ParamAccess.item); - pManager.AddGenericParameter("Stiffness zz [" + rotationalStiffnessAbr + "]", "Szz", "Stiffness zz", GH_ParamAccess.item); + pManager.AddGenericParameter("Stiffness zz [" + rotationalStiffnessAbr + "]", "Szz", "Stiffness in zz direction", GH_ParamAccess.item); pManager.AddGenericParameter("Spring Matrix", "SM", "Spring Matrix", GH_ParamAccess.item);