From 046f37a91b1790f6059ef47184b726309d1f9be7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Cort=C3=A9s?= <36660222+pedrocortesark@users.noreply.github.com> Date: Tue, 3 Dec 2024 09:45:46 +0100 Subject: [PATCH 1/2] Create SetStructuralRole --- .../Components/Structure/SetStructuralRole.cs | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 src/RhinoInside.Revit.GH/Components/Structure/SetStructuralRole.cs diff --git a/src/RhinoInside.Revit.GH/Components/Structure/SetStructuralRole.cs b/src/RhinoInside.Revit.GH/Components/Structure/SetStructuralRole.cs new file mode 100644 index 000000000..1c574aba2 --- /dev/null +++ b/src/RhinoInside.Revit.GH/Components/Structure/SetStructuralRole.cs @@ -0,0 +1,117 @@ +using System; +using Grasshopper.Kernel; +using Grasshopper.Kernel.Parameters; +using RhinoInside.Revit.Convert.Geometry; +using RhinoInside.Revit.External.DB.Extensions; +using Rhino.Geometry; +using ARDB = Autodesk.Revit.DB; +using RhinoInside.Revit.GH.Parameters; + +namespace RhinoInside.Revit.GH.Components.Structure +{ +#if REVIT_2023 + using ARDB_AnalyticalElement = ARDB.Structure.AnalyticalElement; +#else + using ARDB_AnalyticalMember = ARDB.Structure.AnalyticalModelStick; +#endif + + [ComponentVersion(introduced: "1.27"), ComponentRevitAPIVersion(min: "2023.0")] + public class SetStructuralRole : ElementTrackerComponent + { + public override Guid ComponentGuid => new Guid("6844CF5E-8015-457E-AC7E-0E58C6B80A82"); +#if REVIT_2023 + public override GH_Exposure Exposure => GH_Exposure.tertiary; +#else + public override GH_Exposure Exposure => GH_Exposure.hidden; +#endif + public SetStructuralRole() : base + ( + name: "Set Structural Role", + nickname: "S-Role", + description: "Given an analytical element from the Revit document, this component sets its structural role", + category: "Revit", + subCategory: "Structure" + ) + { } + + protected override ParamDefinition[] Inputs => inputs; + static readonly ParamDefinition[] inputs = + { + new ParamDefinition + ( + new Parameters.Document() + { + Name = "Document", + NickName = "DOC", + Description = "Document", + Optional = true + }, ParamRelevance.Occasional + ), + new ParamDefinition + ( + new Parameters.AnalyticalElement() + { + Name = "Analytical Element", + NickName = "AE", + Description = "Analytical element to set the structural role", + Access = GH_ParamAccess.item + } + ), + + new ParamDefinition + ( + new Param_Enum<Types.AnalyticalStructuralRole> + { + Name = "Structural Role", + NickName = "SR", + Description = "Structural Role to apply to the analytical member", + Access = GH_ParamAccess.item + } + ), + }; + + protected override ParamDefinition[] Outputs => outputs; + static readonly ParamDefinition[] outputs = + { + new ParamDefinition + ( + new Parameters.AnalyticalElement() + { + Name = _AnalyticalElement_, + NickName = _AnalyticalElement_.Substring(0, 1), + Description = $"Output {_AnalyticalElement_}", + } + ) + }; + + const string _AnalyticalElement_ = "Analytical Element"; + + protected override void TrySolveInstance(IGH_DataAccess DA) + { +#if REVIT_2023 + if (!Parameters.Document.TryGetDocumentOrCurrent(this, DA, "Document", out var doc) || !doc.IsValid) return; + + ReconstructElement<ARDB_AnalyticalElement> + ( + doc.Value, _AnalyticalElement_, analyticalElement => + { + // Input + if (!Params.GetData(DA, "Analytical Element", out Types.AnalyticalElement element)) return null; + if (!Params.GetData(DA, "Structural Role", out Types.AnalyticalStructuralRole structuralRole)) return null; + + // Compute + if (element.Value.StructuralRole != structuralRole.Value) + { + element.Value.StructuralRole = structuralRole.Value; + analyticalElement = element.Value; + } + + DA.SetData(_AnalyticalElement_, analyticalElement); + return analyticalElement; + } + ); +#endif + } + } +} + From bfbe8692fd3b2ec2fa40deff5aff25f52c8bb0ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Cort=C3=A9s?= <36660222+pedrocortesark@users.noreply.github.com> Date: Thu, 5 Dec 2024 12:51:01 +0100 Subject: [PATCH 2/2] Updating minimum version for StructuralRole type --- .../Components/Structure/SetStructuralRole.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/RhinoInside.Revit.GH/Components/Structure/SetStructuralRole.cs b/src/RhinoInside.Revit.GH/Components/Structure/SetStructuralRole.cs index 1c574aba2..fb207d6f6 100644 --- a/src/RhinoInside.Revit.GH/Components/Structure/SetStructuralRole.cs +++ b/src/RhinoInside.Revit.GH/Components/Structure/SetStructuralRole.cs @@ -57,7 +57,7 @@ public SetStructuralRole() : base Access = GH_ParamAccess.item } ), - +#if REVIT_2023 new ParamDefinition ( new Param_Enum<Types.AnalyticalStructuralRole> @@ -68,6 +68,7 @@ public SetStructuralRole() : base Access = GH_ParamAccess.item } ), +#endif }; protected override ParamDefinition[] Outputs => outputs;