Files
speckle-sharp-connectors/Converters/Revit/Speckle.Converters.RevitShared/RevitRootToHostConverter.cs
T
2025-04-18 11:50:57 +03:00

54 lines
2.0 KiB
C#

using Autodesk.Revit.DB;
using Speckle.Converters.Common;
using Speckle.Converters.Common.Objects;
using Speckle.Converters.RevitShared.Settings;
using Speckle.Sdk.Common;
using Speckle.Sdk.Common.Exceptions;
using Speckle.Sdk.Models;
namespace Speckle.Converters.RevitShared;
public record DirectShapeDefinitionWrapper(string DefinitionId, List<GeometryObject> Geometries);
public class RevitRootToHostConverter : IRootToHostConverter
{
private readonly IConverterSettingsStore<RevitConversionSettings> _converterSettings;
private readonly ITypedConverter<Base, List<DB.GeometryObject>> _baseToGeometryConverter;
public RevitRootToHostConverter(
ITypedConverter<Base, List<DB.GeometryObject>> baseToGeometryConverter,
IConverterSettingsStore<RevitConversionSettings> converterSettings
)
{
_baseToGeometryConverter = baseToGeometryConverter;
_converterSettings = converterSettings;
}
public object Convert(Base target)
{
// TODO: We should scope 2d elements properly in revit. It is outside of reference geometry workflows right now.
// // If ActiveView is a 2d view, use PlanView converter (will ignore DirectShapes)
// // Unsupported views already filtered out in HostObjectBuilder
// View activeView = _converterSettings.Current.Document.ActiveView;
// if (activeView.ViewType != ViewType.ThreeD)
// {
// return _planViewToGeometryConverter.Convert(target);
// }
// Use default behavior and covert everything to DirectShapes
List<DB.GeometryObject> geometryObjects = _baseToGeometryConverter.Convert(target);
if (geometryObjects.Count == 0)
{
throw new ConversionException($"No supported conversion for {target.speckle_type} found.");
}
var definitionId = target.applicationId ?? target.id.NotNull();
DirectShapeLibrary
.GetDirectShapeLibrary(_converterSettings.Current.Document)
.AddDefinition(definitionId, geometryObjects);
return new DirectShapeDefinitionWrapper(definitionId, geometryObjects);
}
}