54 lines
2.0 KiB
C#
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);
|
|
}
|
|
}
|