Skip to content

Commit

Permalink
Added all functionality for reading, pushing and pulling rigid constr…
Browse files Browse the repository at this point in the history
…aints
  • Loading branch information
TosteSkDa authored and Fraser Greenroyd committed Jul 7, 2023
1 parent 2f15b2c commit f351070
Show file tree
Hide file tree
Showing 9 changed files with 300 additions and 0 deletions.
8 changes: 8 additions & 0 deletions GSA_Adapter/CRUD/Create.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
using BH.oM.Adapters.GSA.SurfaceProperties;
using BH.oM.Structure.MaterialFragments;
using BH.oM.Structure.Fragments;
using BH.oM.Adapters.GSA.Elements;

namespace BH.Adapter.GSA
{
Expand Down Expand Up @@ -277,6 +278,13 @@ private bool CreateObject(FabricPanelProperty fabricProperty)
}


/***************************************************/

private bool CreateObject(RigidConstraint rigidConstraint)
{
return ComCall(rigidConstraint.ToGsaString());
}

/***************************************************/
}
}
Expand Down
14 changes: 14 additions & 0 deletions GSA_Adapter/CRUD/Read.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ protected override IEnumerable<IBHoMObject> IRead(Type type, IList indices, Acti
return ReadRigidLink(indices as dynamic);
if (type == typeof(LinkConstraint))
return ReadLinkConstraint(indices as dynamic);
if (type == typeof(RigidConstraint))
return ReadRigidConstraint(indices as dynamic);
if (type == typeof(FEMesh))
return ReadFEMesh(indices as dynamic);
if (type == typeof(ISurfaceProperty))
Expand Down Expand Up @@ -418,6 +420,18 @@ public List<RigidLink> ReadRigidLink(List<string> ids = null)

/***************************************/

public List<RigidConstraint> ReadRigidConstraint(List<string> ids = null)
{
string allProps = m_gsaCom.GwaCommand("GET_ALL, RIGID").ToString();
string[] proArr = string.IsNullOrWhiteSpace(allProps) ? new string[0] : allProps.Split('\n');

Dictionary<int, Node> nodes = GetCachedOrReadAsDictionary<int, Node>();

return Convert.FromGsaRigidConstraint(proArr, nodes);
}

/***************************************/

public List<Spacer> ReadSpacers(List<string> ids = null)
{
Dictionary<int, Node> nodes = GetCachedOrReadAsDictionary<int, Node>();
Expand Down
101 changes: 101 additions & 0 deletions GSA_Adapter/Convert/FromGsa/Elements/RigidConstraint.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
/*
* This file is part of the Buildings and Habitats object Model (BHoM)
* Copyright (c) 2015 - 2023, the respective contributors. All rights reserved.
*
* Each contributor holds copyright over their respective contributions.
* The project versioning (Git) records all such contribution source information.
*
*
* The BHoM is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3.0 of the License, or
* (at your option) any later version.
*
* The BHoM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this code. If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
*/

#if GSA_10_1
using Interop.Gsa_10_1;
#else
using Interop.gsa_8_7;
#endif
using BH.Engine.Serialiser;
using BH.Engine.Adapter;
using BH.oM.Adapters.GSA;
using BH.oM.Structure.Elements;
using BH.oM.Structure.Constraints;
using System.Collections.Generic;
using BH.oM.Adapters.GSA.Elements;
using System;
using System.Linq;

namespace BH.Adapter.GSA
{
public static partial class Convert
{
/***************************************************/
/**** Public Methods ****/
/***************************************************/

public static List<RigidConstraint> FromGsaRigidConstraint(IEnumerable<string> gsaStrings, Dictionary<int, Node> nodes)
{
List<RigidConstraint> constraintList = new List<RigidConstraint>();

foreach (string gsaString in gsaStrings)
{
string[] tokens = gsaString.Split(',');

int primaryNodeName = int.Parse(tokens[2]);
string linkTypeString = tokens[3];
string[] constrainedNodeNames = tokens[4].Split(',');

Node primaryNode;
nodes.TryGetValue(primaryNodeName, out primaryNode);

List<Node> constrainedNodes = new List<Node>();

foreach (string constrainedNodeName in constrainedNodeNames)
{
if (int.TryParse(constrainedNodeName, out int constrainedNodeId))
{
if (nodes.TryGetValue(constrainedNodeId, out Node constrainedNode))
constrainedNodes.Add(constrainedNode);
}
}

RigidConstraintLinkType linkType = RigidConstraintLinkType.ALL;

if (Enum.TryParse(linkTypeString, out RigidConstraintLinkType parsedLinkType))
linkType = parsedLinkType;

RigidConstraint constraint = new RigidConstraint()
{
PrimaryNode = primaryNode,
ConstrainedNodes = constrainedNodes,
Type = linkType
};

constraintList.Add(constraint);
}

return constraintList;
}





/***************************************************/

}
}




71 changes: 71 additions & 0 deletions GSA_Adapter/Convert/ToGsa/Elements/RigidConstraint.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
* This file is part of the Buildings and Habitats object Model (BHoM)
* Copyright (c) 2015 - 2023, the respective contributors. All rights reserved.
*
* Each contributor holds copyright over their respective contributions.
* The project versioning (Git) records all such contribution source information.
*
*
* The BHoM is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3.0 of the License, or
* (at your option) any later version.
*
* The BHoM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this code. If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
*/

using BH.Engine.Serialiser;
using BH.Engine.Adapter;
using System.Collections.Generic;
using BH.oM.Adapters.GSA;
using BH.oM.Structure.Elements;
using BH.Engine.Adapters.GSA;
using BH.oM.Adapters.GSA.Elements;

namespace BH.Adapter.GSA
{
public static partial class Convert
{
/***************************************************/
/**** Public Methods ****/
/***************************************************/

public static string ToGsaString(this RigidConstraint rigidConstraint)
{
string command = "RIGID.2";
string name = rigidConstraint.TaggedName().ToGSACleanName();

string primaryNode = rigidConstraint.PrimaryNode.GSAId().ToString();

List<Node> constrainedNodes = rigidConstraint.ConstrainedNodes;
string constrainedNodesIds = "";

foreach (Node constrainedNode in constrainedNodes)
{
string id = constrainedNode.GSAId().ToString();
constrainedNodesIds = constrainedNodesIds + " " + id;
}

string type = rigidConstraint.Type.ToString();


//RIGID.2 | name | primary_node | type | constrained_nodes | stage
string str = command + ", " + name + ", " + primaryNode + " , " + type + ", " + constrainedNodesIds;
return str;
}


/***************************************************/

}
}




1 change: 1 addition & 0 deletions GSA_Adapter/GSAAdapter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ public GSA87Adapter(string filePath = "", GSAConfig gsaConfig = null, bool activ
{typeof(ISurfaceProperty), new List<Type> { typeof(IMaterialFragment) } },
{typeof(Spacer), new List<Type> { typeof(SpacerProperty), typeof(Node) } },
{typeof(Panel), new List<Type> { typeof(ISurfaceProperty), typeof(Node) } },
{typeof(RigidConstraint), new List<Type> { typeof(Node) } },
#if GSA_10_1
{typeof(Node), new List<Type>{typeof(Constraint6DOF) } }
#endif
Expand Down
2 changes: 2 additions & 0 deletions GSA_Adapter/GSA_Adapter.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@
<Compile Include="AdapterActions\Execute.cs" />
<Compile Include="Convert\FromGsa\Elements\Bar.cs" />
<Compile Include="Convert\FromGsa\Elements\FEMesh.cs" />
<Compile Include="Convert\FromGsa\Elements\RigidConstraint.cs" />
<Compile Include="Convert\FromGsa\Elements\Spacer.cs" />
<Compile Include="Convert\FromGsa\Loads\NodeLoad.cs" />
<Compile Include="Convert\FromGsa\Loads\BarPrestressLoad.cs" />
Expand All @@ -199,6 +200,7 @@
<Compile Include="Convert\FromGsa\Properties\SectionProperty.cs" />
<Compile Include="Convert\ToGsa\Analysis\AnalysisStage.cs" />
<Compile Include="Convert\ToGsa\Elements\Panel.cs" />
<Compile Include="Convert\ToGsa\Elements\RigidConstraint.cs" />
<Compile Include="Convert\ToGsa\Elements\Spacer.cs" />
<Compile Include="Convert\ToGsa\Properties\FormFindingProperties.cs" />
<Compile Include="Convert\ToGsa\Properties\Constraint6DOF.cs" />
Expand Down
54 changes: 54 additions & 0 deletions GSA_oM/Elements/RigidConstraint.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/*
* This file is part of the Buildings and Habitats object Model (BHoM)
* Copyright (c) 2015 - 2023, the respective contributors. All rights reserved.
*
* Each contributor holds copyright over their respective contributions.
* The project versioning (Git) records all such contribution source information.
*
*
* The BHoM is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3.0 of the License, or
* (at your option) any later version.
*
* The BHoM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this code. If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
*/

using BH.oM.Base;
using System;
using System.ComponentModel;
using System.Collections.Generic;
using BH.oM.Quantities.Attributes;
using BH.oM.Structure.Elements;
using BH.oM.Adapters.GSA.SpacerProperties;
using BH.oM.Analytical.Elements;

namespace BH.oM.Adapters.GSA.Elements
{
[Description("A rigid constraint defining linkage between nodes.")]
public class RigidConstraint : BHoMObject
{
/***************************************************/
/**** Properties ****/
/***************************************************/

[Description("Defines the primary node of the rigid constraint.")]
public virtual Node PrimaryNode { get; set; }

[Description("Defines the constrained nodes of the rigid constraint. Can be a list of nodes.")]
public virtual List<Node> ConstrainedNodes { get; set; }

[Description("Type of rigid constraint.")]
public virtual RigidConstraintLinkType Type { get; set; } = RigidConstraintLinkType.ALL;


}
}


47 changes: 47 additions & 0 deletions GSA_oM/Enum/RigidConstraintLinkType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* This file is part of the Buildings and Habitats object Model (BHoM)
* Copyright (c) 2015 - 2023, the respective contributors. All rights reserved.
*
* Each contributor holds copyright over their respective contributions.
* The project versioning (Git) records all such contribution source information.
*
*
* The BHoM is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3.0 of the License, or
* (at your option) any later version.
*
* The BHoM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this code. If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
*/

using System.ComponentModel;

namespace BH.oM.Adapters.GSA
{
[Description("Defines type rigid constraint link.")]
public enum RigidConstraintLinkType
{
ALL,
XY_PLANE,
YZ_PLANE,
ZX_PLANE,
XY_PLATE,
YZ_PLATE,
ZX_PLATE,
PIN,
XY_PLANE_PIN,
YZ_PLANE_PIN,
ZX_PLANE_PIN,
XY_PLATE_PIN,
YZ_PLATE_PIN,
ZX_PLATE_PIN
}
}


2 changes: 2 additions & 0 deletions GSA_oM/GSA_oM.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,11 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Elements\RigidConstraint.cs" />
<Compile Include="Elements\Spacer.cs" />
<Compile Include="Enum\ConcreteDesignSpecification.cs" />
<Compile Include="Enum\Country.cs" />
<Compile Include="Enum\RigidConstraintLinkType.cs" />
<Compile Include="Enum\SpacerLengthType.cs" />
<Compile Include="Enum\SpacerType.cs" />
<Compile Include="Enum\SteelDesignSpecification.cs" />
Expand Down

0 comments on commit f351070

Please sign in to comment.