Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 16 additions & 5 deletions Revit_Core_Engine/Compute/GeneratePileFoundationType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ private static FamilySymbol GenerateFreeformType(PileFoundation pileFoundation,
{
List<int> takenIndices = freeformFamilies.Select(x => Regex.Match(x.Name, $"{Regex.Escape(prefix)}(\\d+)$")).Select(x => int.Parse(x.Groups[1].Value)).ToList();
int newIndex = takenIndices.Count > 0 ? takenIndices.Max() + 1 : 1;
family = GenerateFreeFormPileFoundationFamilyFromTemplate(document, orientedOutline, layout, diameter, thickness, newIndex);
family = GenerateFreeFormPileFoundationFamilyFromTemplate(document, orientedOutline, layout, diameter, thickness, newIndex, pileFoundation);
}

if (family == null)
Expand All @@ -146,7 +146,7 @@ private static FamilySymbol GenerateFreeformType(PileFoundation pileFoundation,

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

private static Family GenerateFreeFormPileFoundationFamilyFromTemplate(this Document document, Polyline orientedOutline, ExplicitLayout layout, double diameter, double thickness, int index)
private static Family GenerateFreeFormPileFoundationFamilyFromTemplate(this Document document, Polyline orientedOutline, ExplicitLayout layout, double diameter, double thickness, int index, PileFoundation pileFoundation)
{
string templateFamilyName = "StructuralFoundations_PileFoundation-Freeform";
string templatePath = Directory.GetFiles(m_FamilyDirectory, $"*{templateFamilyName}.rfa").FirstOrDefault();
Expand All @@ -168,6 +168,13 @@ private static Family GenerateFreeFormPileFoundationFamilyFromTemplate(this Docu
if (!PlaceNestedPiles(familyDocument, layout, diameter))
return null;

using (Transaction t = new Transaction(familyDocument, "Update Subcategory"))
{
t.Start();
SetMaterialSubcategory(familyDocument, (pileFoundation.PileCap?.Construction as oM.Physical.Constructions.Construction)?.Layers?.FirstOrDefault()?.Material);
t.Commit();
}

return SaveAndLoadFamily(document, familyDocument, $"{Path.GetFileNameWithoutExtension(templatePath)}_{index}");
}
catch (Exception ex)
Expand Down Expand Up @@ -312,7 +319,7 @@ private static bool PlaceNestedPiles(Document familyDocument, ExplicitLayout lay
}

FamilyManager fm = familyDocument.FamilyManager;
FamilyParameter radiusParam = fm.get_Parameter("Radius");
FamilyParameter radiusParam = fm.Parameters.Cast<FamilyParameter>().FirstOrDefault(p => p.Definition.Name.EndsWith("Radius"));
if (radiusParam != null)
fm.Set(radiusParam, (diameter / 2.0).FromSI(SpecTypeId.Length));

Expand Down Expand Up @@ -357,7 +364,9 @@ private static FamilySymbol NestedPileSymbol(FamilySymbol pileSymbol, double dia
if (nestSymbol == null)
return null;

nestSymbol.SetParameter("Radius", diameter / 2.0);
Parameter radiusParam = nestSymbol.Parameters.Cast<Parameter>().FirstOrDefault(x => x.Definition.Name.EndsWith("Radius"));
if (radiusParam != null)
radiusParam.Set((diameter / 2.0).FromSI(radiusParam.Definition.GetDataType()));

if (!nestSymbol.IsActive)
nestSymbol.Activate();
Expand All @@ -383,7 +392,9 @@ private static FamilySymbol FindOrCreateTypeWithDimensions(this Family family, d
else
result = symbols[0].Duplicate(typeName) as FamilySymbol;

result.SetParameter("Depth", thickness);
Parameter depthParam = result.Parameters.Cast<Parameter>().FirstOrDefault(x => x.Definition.Name.EndsWith("Depth"));
if (depthParam != null)
depthParam.Set(thickness.FromSI(depthParam.Definition.GetDataType()));
}

result?.Activate();
Expand Down
7 changes: 6 additions & 1 deletion Revit_Core_Engine/Convert/Physical/ToRevit/FamilyInstance.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;

namespace BH.Revit.Engine.Core
{
Expand Down Expand Up @@ -312,7 +313,11 @@ public static FamilyInstance ToRevitFamilyInstance(this PileFoundation pileFound

double pileDepth = pileFoundation.PileFoundationDepth(settings);
if (!double.IsNaN(pileDepth))
familyInstance.SetParameter("Pile Depth", pileDepth);
{
Parameter depthParam = familyInstance.Parameters.Cast<Parameter>().FirstOrDefault(x => x.Definition.Name.EndsWith("Depth"));
if (depthParam != null)
depthParam.Set(pileDepth.FromSI(depthParam.Definition.GetDataType()));
}

familyInstance.SetLocation(pileFoundation, settings);
refObjects.AddOrReplace(pileFoundation, familyInstance);
Expand Down
6 changes: 5 additions & 1 deletion Revit_Core_Engine/Modify/Update.cs
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,11 @@ public static bool Update(this FamilyInstance element, PileFoundation bHoMObject

double pileDepth = bHoMObject.PileFoundationDepth(settings);
if (!double.IsNaN(pileDepth))
element.SetParameter("Pile Depth", pileDepth);
{
Parameter depthParam = element.Parameters.Cast<Parameter>().FirstOrDefault(x => x.Definition.Name.EndsWith("Depth"));
if (depthParam != null)
depthParam.Set(pileDepth.FromSI(depthParam.Definition.GetDataType()));
}

return result;
}
Expand Down
15 changes: 11 additions & 4 deletions Revit_Core_Engine/Query/IsMatchingOutlineAndLayout.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,12 +99,19 @@ private static bool IsMatchingPileDiameter(this Family family, double diameter,
FamilySymbol nestSymbol = nest?.Symbol;
if (nestSymbol == null)
return false;
double radius = nestSymbol.LookupParameterDouble("Radius");
if (!double.IsNaN(radius))
Parameter radiusParam = nestSymbol.Parameters.Cast<Parameter>().FirstOrDefault(p => p.Definition.Name.EndsWith("Radius"));
if (radiusParam != null && radiusParam.HasValue)
{
double radius = radiusParam.AsDouble().ToSI(radiusParam.Definition.GetDataType());
return Math.Abs(radius * 2.0 - diameter) <= tol;
double nestDiameter = nestSymbol.LookupParameterDouble("Diameter");
if (!double.IsNaN(nestDiameter))
}

Parameter diameterParam = nestSymbol.Parameters.Cast<Parameter>().FirstOrDefault(p => p.Definition.Name.EndsWith("Diameter"));
if (diameterParam != null && diameterParam.HasValue)
{
double nestDiameter = diameterParam.AsDouble().ToSI(diameterParam.Definition.GetDataType());
return Math.Abs(nestDiameter - diameter) <= tol;
}
return false;
}

Expand Down
Loading