Skip to content

Commit

Permalink
Add specific module for gravity loads
Browse files Browse the repository at this point in the history
  • Loading branch information
IsakNaslundBh authored and Fraser Greenroyd committed Jan 9, 2023
1 parent 5daa597 commit 00b997c
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 1 deletion.
74 changes: 74 additions & 0 deletions Structure_AdapterModules/GetGravityLoadElementsWithoutID.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/*
* 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 BH.oM.Adapter;
using System;
using System.Linq;
using System.Collections.Generic;
using System.Reflection;
using System.ComponentModel;
using BH.oM.Structure.Elements;
using System.Collections;
using BH.oM.Geometry;
using BH.oM.Structure.Constraints;
using BH.oM.Structure.Loads;


namespace BH.Adapter.Modules
{
[Description("Get all elements of type T that do not contain an adapter ID of the expected type from the provided GravityLoads. Avoids the need to again read and check against elements already in the model.")]
public class GetGravityLoadElementsWithoutID<T> : IGetDependencyModule<GravityLoad, T> where T : IBHoMObject
{
/***************************************************/
/**** Interface method ****/
/***************************************************/

public IEnumerable<T> GetDependencies(IEnumerable<GravityLoad> objects)
{
List<T> noIdLoadObjects = new List<T>();
foreach (GravityLoad load in objects)
{
if(load?.Objects?.Elements != null)
noIdLoadObjects.AddRange(load.Objects.Elements.OfType<T>().Where(x => x != null && !x.Fragments.Contains(m_adapterIdType)));
}
return noIdLoadObjects;
}

/***************************************************/
/**** Constructors ****/
/***************************************************/

public GetGravityLoadElementsWithoutID(IBHoMAdapter adapter)
{
m_adapterIdType = adapter.AdapterIdFragmentType;
}

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

private Type m_adapterIdType;

/***************************************************/
}
}


3 changes: 2 additions & 1 deletion Structure_AdapterModules/ModuleLoader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ public static void LoadModules(this BHoMAdapter adapter)
adapter.AdapterModules.Add(new GetLoadElementsWithoutID<Bar>(adapter));
adapter.AdapterModules.Add(new GetLoadElementsWithoutID<Node>(adapter));
adapter.AdapterModules.Add(new GetLoadElementsWithoutID<IAreaElement>(adapter));
adapter.AdapterModules.Add(new GetLoadElementsWithoutID<BHoMObject>(adapter)); //Here to handle GravityLoads that are IElementLoad<BHoMObject>
adapter.AdapterModules.Add(new GetGravityLoadElementsWithoutID<Bar>(adapter));
adapter.AdapterModules.Add(new GetGravityLoadElementsWithoutID<IAreaElement>(adapter));
}
}
}
Expand Down

0 comments on commit 00b997c

Please sign in to comment.