Files
speckle-sharp-connectors/Converters/Revit/Speckle.Converters.RevitShared/Helpers/ParameterObjectBuilder.cs
T
2024-07-04 11:56:34 +01:00

51 lines
1.4 KiB
C#

using System.Collections.Generic;
using System.Linq;
using Autodesk.Revit.DB;
using Speckle.Converters.Common.Objects;
using Speckle.Core.Logging;
using Speckle.Core.Models;
namespace Speckle.Converters.RevitShared.Helpers;
public sealed class ParameterObjectAssigner
{
private readonly IRawConversion<DB.Parameter, SOBR.Parameter> _paramConverter;
private readonly ParameterValueExtractor _parameterValueExtractor;
public ParameterObjectAssigner(
IRawConversion<DB.Parameter, SOBR.Parameter> paramConverter,
ParameterValueExtractor parameterValueExtractor
)
{
_paramConverter = paramConverter;
_parameterValueExtractor = parameterValueExtractor;
}
public void AssignParametersToBase(Element target, Base @base)
{
Dictionary<string, DB.Parameter> allParams = _parameterValueExtractor.GetAllRemainingParams(target);
Base paramBase = new();
//sort by key
foreach (var kv in allParams.OrderBy(x => x.Key))
{
try
{
paramBase[kv.Key] = _paramConverter.RawConvert(kv.Value);
}
catch (InvalidPropNameException)
{
//ignore
}
catch (SpeckleException ex)
{
SpeckleLog.Logger.Warning(ex, "Error thrown when trying to set property named {propName}", kv.Key);
}
}
if (paramBase.GetMembers(DynamicBaseMemberType.Dynamic).Count > 0)
{
@base["parameters"] = paramBase;
}
}
}