diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISReceiveBinding.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISReceiveBinding.cs index 5456bbd05..3c2587e63 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISReceiveBinding.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISReceiveBinding.cs @@ -1,3 +1,5 @@ +using ArcGIS.Desktop.Core; +using ArcGIS.Desktop.Mapping; using Microsoft.Extensions.Logging; using Speckle.Autofac.DependencyInjection; using Speckle.Connectors.DUI.Bindings; @@ -7,6 +9,9 @@ using Speckle.Connectors.DUI.Models; using Speckle.Connectors.DUI.Models.Card; using Speckle.Connectors.Utils.Cancellation; using Speckle.Connectors.Utils.Operations; +using Speckle.Converters.ArcGIS3; +using Speckle.Converters.ArcGIS3.Utils; +using Speckle.Converters.Common; using Speckle.Sdk; namespace Speckle.Connectors.ArcGIS.Bindings; @@ -19,6 +24,7 @@ public sealed class ArcGISReceiveBinding : IReceiveBinding private readonly IUnitOfWorkFactory _unitOfWorkFactory; private readonly IOperationProgressManager _operationProgressManager; private readonly ILogger _logger; + private readonly IArcGISConversionSettingsFactory _arcGISConversionSettingsFactory; private ReceiveBindingUICommands Commands { get; } public IBridge Parent { get; } @@ -29,7 +35,8 @@ public sealed class ArcGISReceiveBinding : IReceiveBinding CancellationManager cancellationManager, IUnitOfWorkFactory unitOfWorkFactory, IOperationProgressManager operationProgressManager, - ILogger logger + ILogger logger, + IArcGISConversionSettingsFactory arcGisConversionSettingsFactory ) { _store = store; @@ -39,6 +46,7 @@ public sealed class ArcGISReceiveBinding : IReceiveBinding _unitOfWorkFactory = unitOfWorkFactory; _operationProgressManager = operationProgressManager; _logger = logger; + _arcGISConversionSettingsFactory = arcGisConversionSettingsFactory; } public async Task Receive(string modelCardId) @@ -53,12 +61,20 @@ public sealed class ArcGISReceiveBinding : IReceiveBinding } CancellationToken cancellationToken = _cancellationManager.InitCancellationTokenSource(modelCardId); - - using IUnitOfWork unitOfWork = _unitOfWorkFactory.Resolve(); - + using var unitOfWork = _unitOfWorkFactory.Create(); + unitOfWork + .Resolve>() + .Initialize( + _arcGISConversionSettingsFactory.Create( + Project.Current, + MapView.Active.Map, + new CRSoffsetRotation(MapView.Active.Map) + ) + ); // Receive host objects var receiveOperationResults = await unitOfWork - .Service.Execute( + .Resolve() + .Execute( modelCard.GetReceiveInfo("ArcGIS"), // POC: get host app name from settings? same for GetSendInfo cancellationToken, (status, progress) => diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISSendBinding.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISSendBinding.cs index 444f65715..e809ec5b7 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISSendBinding.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISSendBinding.cs @@ -1,6 +1,7 @@ using System.Collections.Concurrent; using System.Diagnostics.CodeAnalysis; using ArcGIS.Core.Data; +using ArcGIS.Desktop.Core; using ArcGIS.Desktop.Editing.Events; using ArcGIS.Desktop.Framework.Threading.Tasks; using ArcGIS.Desktop.Mapping; @@ -20,6 +21,9 @@ using Speckle.Connectors.DUI.Settings; using Speckle.Connectors.Utils.Caching; using Speckle.Connectors.Utils.Cancellation; using Speckle.Connectors.Utils.Operations; +using Speckle.Converters.ArcGIS3; +using Speckle.Converters.ArcGIS3.Utils; +using Speckle.Converters.Common; using Speckle.Sdk; using Speckle.Sdk.Common; @@ -40,6 +44,7 @@ public sealed class ArcGISSendBinding : ISendBinding private readonly ILogger _logger; private readonly ITopLevelExceptionHandler _topLevelExceptionHandler; private readonly MapMembersUtils _mapMemberUtils; + private readonly IArcGISConversionSettingsFactory _arcGISConversionSettingsFactory; /// /// Used internally to aggregate the changed objects' id. Note we're using a concurrent dictionary here as the expiry check method is not thread safe, and this was causing problems. See: @@ -61,7 +66,8 @@ public sealed class ArcGISSendBinding : ISendBinding ISendConversionCache sendConversionCache, IOperationProgressManager operationProgressManager, ILogger logger, - MapMembersUtils mapMemberUtils + MapMembersUtils mapMemberUtils, + IArcGISConversionSettingsFactory arcGisConversionSettingsFactory ) { _store = store; @@ -73,6 +79,7 @@ public sealed class ArcGISSendBinding : ISendBinding _logger = logger; _topLevelExceptionHandler = parent.TopLevelExceptionHandler; _mapMemberUtils = mapMemberUtils; + _arcGISConversionSettingsFactory = arcGisConversionSettingsFactory; Parent = parent; Commands = new SendBindingUICommands(parent); @@ -357,7 +364,7 @@ public sealed class ArcGISSendBinding : ISendBinding public async Task Send(string modelCardId) { //poc: dupe code between connectors - using var unitOfWork = _unitOfWorkFactory.Resolve>(); + try { if (_store.GetModelById(modelCardId) is not SenderModelCard modelCard) @@ -371,6 +378,16 @@ public sealed class ArcGISSendBinding : ISendBinding var sendResult = await QueuedTask .Run(async () => { + using var unitOfWork = _unitOfWorkFactory.Create(); + unitOfWork + .Resolve>() + .Initialize( + _arcGISConversionSettingsFactory.Create( + Project.Current, + MapView.Active.Map, + new CRSoffsetRotation(MapView.Active.Map) + ) + ); List mapMembers = modelCard .SendFilter.NotNull() .GetObjectIds() @@ -400,7 +417,8 @@ public sealed class ArcGISSendBinding : ISendBinding } var result = await unitOfWork - .Service.Execute( + .Resolve>() + .Execute( mapMembers, modelCard.GetSendInfo("ArcGIS"), // POC: get host app name from settings? same for GetReceiveInfo (status, progress) => diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/ArcGISHostObjectBuilder.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/ArcGISHostObjectBuilder.cs index f93edf405..f3d79a4d0 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/ArcGISHostObjectBuilder.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/ArcGISHostObjectBuilder.cs @@ -33,13 +33,13 @@ public class ArcGISHostObjectBuilder : IHostObjectBuilder private readonly ICrsUtils _crsUtils; // POC: figure out the correct scope to only initialize on Receive - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; private readonly GraphTraversal _traverseFunction; private readonly ArcGISColorManager _colorManager; public ArcGISHostObjectBuilder( IRootToHostConverter converter, - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, IFeatureClassUtils featureClassUtils, ILocalToGlobalUnpacker localToGlobalUnpacker, ILocalToGlobalConverterUtils localToGlobalConverterUtils, @@ -49,7 +49,7 @@ public class ArcGISHostObjectBuilder : IHostObjectBuilder ) { _converter = converter; - _contextStack = contextStack; + _settingsStore = settingsStore; _featureClassUtils = featureClassUtils; _localToGlobalUnpacker = localToGlobalUnpacker; _localToGlobalConverterUtils = localToGlobalConverterUtils; @@ -240,7 +240,7 @@ public class ArcGISHostObjectBuilder : IHostObjectBuilder // get CRS from any present VectorLayer Base? vLayer = objectsToConvertTc.FirstOrDefault(x => x.Current is VectorLayer)?.Current; - _crsUtils.FindSetCrsDataOnReceive(vLayer); + using var crs = _crsUtils.FindSetCrsDataOnReceive(vLayer); // TODO help // now filter the objects objectsToConvertTc = objectsToConvertTc.Where(ctx => ctx.Current is not Collection).ToList(); @@ -306,8 +306,7 @@ public class ArcGISHostObjectBuilder : IHostObjectBuilder { // get layer details string? datasetId = trackerItem.DatasetId; // should not be null here - Uri uri = - new($"{_contextStack.Current.Document.SpeckleDatabasePath.AbsolutePath.Replace('/', '\\')}\\{datasetId}"); + Uri uri = new($"{_settingsStore.Current.SpeckleDatabasePath.AbsolutePath.Replace('/', '\\')}\\{datasetId}"); string nestedLayerName = trackerItem.NestedLayerName; // add group for the current layer @@ -317,7 +316,7 @@ public class ArcGISHostObjectBuilder : IHostObjectBuilder // if no general group layer found if (createdLayerGroups.Count == 0) { - Map map = _contextStack.Current.Document.Map; + Map map = _settingsStore.Current.Map; GroupLayer mainGroupLayer = LayerFactory.Instance.CreateGroupLayer(map, 0, $"{projectName}: {modelName}"); mainGroupLayer.SetExpanded(true); createdLayerGroups["Basic Speckle Group"] = mainGroupLayer; // key doesn't really matter here @@ -340,9 +339,9 @@ public class ArcGISHostObjectBuilder : IHostObjectBuilder // if Scene // https://community.esri.com/t5/arcgis-pro-sdk-questions/sdk-equivalent-to-changing-layer-s-elevation/td-p/1346139 - if (_contextStack.Current.Document.Map.IsScene) + if (_settingsStore.Current.Map.IsScene) { - var groundSurfaceLayer = _contextStack.Current.Document.Map.GetGroundElevationSurfaceLayer(); + var groundSurfaceLayer = _settingsStore.Current.Map.GetGroundElevationSurfaceLayer(); var layerElevationSurface = new CIMLayerElevationSurface { ElevationSurfaceLayerURI = groundSurfaceLayer.URI, diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Send/ArcGISRootObjectBuilder.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Send/ArcGISRootObjectBuilder.cs index 0217bfaa9..a8d505ff8 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Send/ArcGISRootObjectBuilder.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Send/ArcGISRootObjectBuilder.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using ArcGIS.Core.Geometry; using ArcGIS.Desktop.Framework.Threading.Tasks; using ArcGIS.Desktop.Mapping; using Microsoft.Extensions.Logging; @@ -28,14 +27,14 @@ public class ArcGISRootObjectBuilder : IRootObjectBuilder private readonly IRootToSpeckleConverter _rootToSpeckleConverter; private readonly ISendConversionCache _sendConversionCache; private readonly ArcGISColorManager _colorManager; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; private readonly MapMembersUtils _mapMemberUtils; private readonly ILogger _logger; public ArcGISRootObjectBuilder( ISendConversionCache sendConversionCache, ArcGISColorManager colorManager, - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, IRootToSpeckleConverter rootToSpeckleConverter, MapMembersUtils mapMemberUtils, ILogger logger @@ -43,7 +42,7 @@ public class ArcGISRootObjectBuilder : IRootObjectBuilder { _sendConversionCache = sendConversionCache; _colorManager = colorManager; - _contextStack = contextStack; + _settingsStore = settingsStore; _rootToSpeckleConverter = rootToSpeckleConverter; _mapMemberUtils = mapMemberUtils; _logger = logger; @@ -125,17 +124,17 @@ public class ArcGISRootObjectBuilder : IRootObjectBuilder .ConfigureAwait(false); // get units & Active CRS (for writing geometry coords) - converted["units"] = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString; + converted["units"] = _settingsStore.Current.SpeckleUnits; - var spatialRef = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference; + var spatialRef = _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference; converted["crs"] = new CRS { wkt = spatialRef.Wkt, name = spatialRef.Name, - offset_y = Convert.ToSingle(_contextStack.Current.Document.ActiveCRSoffsetRotation.LatOffset), - offset_x = Convert.ToSingle(_contextStack.Current.Document.ActiveCRSoffsetRotation.LonOffset), - rotation = Convert.ToSingle(_contextStack.Current.Document.ActiveCRSoffsetRotation.TrueNorthRadians), - units_native = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString, + offset_y = Convert.ToSingle(_settingsStore.Current.ActiveCRSoffsetRotation.LatOffset), + offset_x = Convert.ToSingle(_settingsStore.Current.ActiveCRSoffsetRotation.LonOffset), + rotation = Convert.ToSingle(_settingsStore.Current.ActiveCRSoffsetRotation.TrueNorthRadians), + units_native = _settingsStore.Current.SpeckleUnits, }; } diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadReceiveBinding.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadReceiveBinding.cs index e2449d792..7fa510e30 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadReceiveBinding.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadReceiveBinding.cs @@ -7,6 +7,8 @@ using Speckle.Connectors.DUI.Models; using Speckle.Connectors.DUI.Models.Card; using Speckle.Connectors.Utils.Cancellation; using Speckle.Connectors.Utils.Operations; +using Speckle.Converters.Autocad; +using Speckle.Converters.Common; using Speckle.Sdk; namespace Speckle.Connectors.Autocad.Bindings; @@ -21,6 +23,7 @@ public sealed class AutocadReceiveBinding : IReceiveBinding private readonly IUnitOfWorkFactory _unitOfWorkFactory; private readonly IOperationProgressManager _operationProgressManager; private readonly ILogger _logger; + private readonly IAutocadConversionSettingsFactory _autocadConversionSettingsFactory; private ReceiveBindingUICommands Commands { get; } @@ -30,7 +33,8 @@ public sealed class AutocadReceiveBinding : IReceiveBinding CancellationManager cancellationManager, IUnitOfWorkFactory unitOfWorkFactory, IOperationProgressManager operationProgressManager, - ILogger logger + ILogger logger, + IAutocadConversionSettingsFactory autocadConversionSettingsFactory ) { _store = store; @@ -38,6 +42,7 @@ public sealed class AutocadReceiveBinding : IReceiveBinding _unitOfWorkFactory = unitOfWorkFactory; _operationProgressManager = operationProgressManager; _logger = logger; + _autocadConversionSettingsFactory = autocadConversionSettingsFactory; Parent = parent; Commands = new ReceiveBindingUICommands(parent); } @@ -46,7 +51,10 @@ public sealed class AutocadReceiveBinding : IReceiveBinding public async Task Receive(string modelCardId) { - using var unitOfWork = _unitOfWorkFactory.Resolve(); + using var unitOfWork = _unitOfWorkFactory.Create(); + unitOfWork + .Resolve>() + .Initialize(_autocadConversionSettingsFactory.Create(Application.DocumentManager.CurrentDocument)); try { // Get receiver card @@ -65,7 +73,8 @@ public sealed class AutocadReceiveBinding : IReceiveBinding // Receive host objects var operationResults = await unitOfWork - .Service.Execute( + .Resolve() + .Execute( modelCard.GetReceiveInfo(Speckle.Connectors.Utils.Connector.Slug), cancellationToken, (status, progress) => diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSendBinding.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSendBinding.cs index 895d83252..c9a2dfdf6 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSendBinding.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSendBinding.cs @@ -16,6 +16,8 @@ using Speckle.Connectors.DUI.Settings; using Speckle.Connectors.Utils.Caching; using Speckle.Connectors.Utils.Cancellation; using Speckle.Connectors.Utils.Operations; +using Speckle.Converters.Autocad; +using Speckle.Converters.Common; using Speckle.Sdk; using Speckle.Sdk.Common; @@ -37,6 +39,7 @@ public sealed class AutocadSendBinding : ISendBinding private readonly IOperationProgressManager _operationProgressManager; private readonly ILogger _logger; private readonly ITopLevelExceptionHandler _topLevelExceptionHandler; + private readonly IAutocadConversionSettingsFactory _autocadConversionSettingsFactory; /// /// Used internally to aggregate the changed objects' id. Note we're using a concurrent dictionary here as the expiry check method is not thread safe, and this was causing problems. See: @@ -55,7 +58,8 @@ public sealed class AutocadSendBinding : ISendBinding IUnitOfWorkFactory unitOfWorkFactory, ISendConversionCache sendConversionCache, IOperationProgressManager operationProgressManager, - ILogger logger + ILogger logger, + IAutocadConversionSettingsFactory autocadConversionSettingsFactory ) { _store = store; @@ -66,6 +70,7 @@ public sealed class AutocadSendBinding : ISendBinding _sendConversionCache = sendConversionCache; _operationProgressManager = operationProgressManager; _logger = logger; + _autocadConversionSettingsFactory = autocadConversionSettingsFactory; _topLevelExceptionHandler = parent.TopLevelExceptionHandler; Parent = parent; Commands = new SendBindingUICommands(parent); @@ -153,7 +158,10 @@ public sealed class AutocadSendBinding : ISendBinding throw new InvalidOperationException("No publish model card was found."); } - using var uow = _unitOfWorkFactory.Resolve>(); + using var unitOfWork = _unitOfWorkFactory.Create(); + unitOfWork + .Resolve>() + .Initialize(_autocadConversionSettingsFactory.Create(Application.DocumentManager.CurrentDocument)); CancellationToken cancellationToken = _cancellationManager.InitCancellationTokenSource(modelCardId); @@ -173,8 +181,9 @@ public sealed class AutocadSendBinding : ISendBinding throw new SpeckleSendFilterException("No objects were found to convert. Please update your publish filter!"); } - var sendResult = await uow - .Service.Execute( + var sendResult = await unitOfWork + .Resolve>() + .Execute( autocadObjects, modelCard.GetSendInfo(Speckle.Connectors.Utils.Connector.Slug), (status, progress) => diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/SharedRegistration.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/SharedRegistration.cs index 50ce6d3fd..259ee430c 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/SharedRegistration.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/SharedRegistration.cs @@ -18,7 +18,6 @@ using Speckle.Connectors.Utils.Builders; using Speckle.Connectors.Utils.Caching; using Speckle.Connectors.Utils.Instances; using Speckle.Connectors.Utils.Operations; -using Speckle.Converters.Common; using Speckle.Sdk.Models.GraphTraversal; namespace Speckle.Connectors.Autocad.DependencyInjection; @@ -55,7 +54,6 @@ public static class SharedRegistration builder.AddScoped(); builder.AddSingleton(); - builder.AddSingleton>(); // operation progress manager builder.AddSingleton(); diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadInstanceBaker.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadInstanceBaker.cs index 94488ac6c..f83f426ed 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadInstanceBaker.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadInstanceBaker.cs @@ -4,6 +4,7 @@ using Microsoft.Extensions.Logging; using Speckle.Connectors.Autocad.HostApp.Extensions; using Speckle.Connectors.Utils.Conversion; using Speckle.Connectors.Utils.Instances; +using Speckle.Converters.Autocad; using Speckle.Converters.Common; using Speckle.DoubleNumerics; using Speckle.Sdk; @@ -23,25 +24,25 @@ public class AutocadInstanceBaker : IInstanceBaker> private readonly AutocadLayerBaker _layerBaker; private readonly AutocadColorBaker _colorBaker; private readonly AutocadMaterialBaker _materialBaker; - private readonly IHostToSpeckleUnitConverter _unitsConverter; private readonly AutocadContext _autocadContext; private readonly ILogger _logger; + private readonly IConverterSettingsStore _converterSettings; public AutocadInstanceBaker( AutocadLayerBaker layerBaker, AutocadColorBaker colorBaker, AutocadMaterialBaker materialBaker, - IHostToSpeckleUnitConverter unitsConverter, AutocadContext autocadContext, - ILogger logger + ILogger logger, + IConverterSettingsStore converterSettings ) { _layerBaker = layerBaker; _colorBaker = colorBaker; _materialBaker = materialBaker; - _unitsConverter = unitsConverter; _autocadContext = autocadContext; _logger = logger; + _converterSettings = converterSettings; } public BakeResult BakeInstances( @@ -224,10 +225,7 @@ public class AutocadInstanceBaker : IInstanceBaker> private Matrix3d GetMatrix3d(Matrix4x4 matrix, string units) { - var sf = Units.GetConversionFactor( - units, - _unitsConverter.ConvertOrThrow(Application.DocumentManager.CurrentDocument.Database.Insunits) - ); + var sf = Units.GetConversionFactor(units, _converterSettings.Current.SpeckleUnits); var scaledTransform = new[] { diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitReceiveBinding.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitReceiveBinding.cs index 8646a385b..910a2958a 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitReceiveBinding.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitReceiveBinding.cs @@ -8,6 +8,8 @@ using Speckle.Connectors.DUI.Models.Card; using Speckle.Connectors.Utils.Builders; using Speckle.Connectors.Utils.Cancellation; using Speckle.Connectors.Utils.Operations; +using Speckle.Converters.Common; +using Speckle.Converters.RevitShared.Settings; using Speckle.Sdk; namespace Speckle.Connectors.Revit.Bindings; @@ -22,6 +24,7 @@ internal sealed class RevitReceiveBinding : IReceiveBinding private readonly CancellationManager _cancellationManager; private readonly DocumentModelStore _store; private readonly IUnitOfWorkFactory _unitOfWorkFactory; + private readonly IRevitConversionSettingsFactory _revitConversionSettingsFactory; private ReceiveBindingUICommands Commands { get; } public RevitReceiveBinding( @@ -30,7 +33,8 @@ internal sealed class RevitReceiveBinding : IReceiveBinding IBridge parent, IUnitOfWorkFactory unitOfWorkFactory, IOperationProgressManager operationProgressManager, - ILogger logger + ILogger logger, + IRevitConversionSettingsFactory revitConversionSettingsFactory ) { Parent = parent; @@ -38,6 +42,7 @@ internal sealed class RevitReceiveBinding : IReceiveBinding _unitOfWorkFactory = unitOfWorkFactory; _operationProgressManager = operationProgressManager; _logger = logger; + _revitConversionSettingsFactory = revitConversionSettingsFactory; _cancellationManager = cancellationManager; Commands = new ReceiveBindingUICommands(parent); @@ -47,7 +52,6 @@ internal sealed class RevitReceiveBinding : IReceiveBinding public async Task Receive(string modelCardId) { - using var unitOfWork = _unitOfWorkFactory.Resolve(); try { // Get receiver card @@ -59,9 +63,19 @@ internal sealed class RevitReceiveBinding : IReceiveBinding CancellationToken cancellationToken = _cancellationManager.InitCancellationTokenSource(modelCardId); + using var unitOfWork = _unitOfWorkFactory.Create(); + unitOfWork + .Resolve>() + .Initialize( + _revitConversionSettingsFactory.Create( + DetailLevelType.Coarse, //TODO figure out + null + ) + ); // Receive host objects HostObjectBuilderResult conversionResults = await unitOfWork - .Service.Execute( + .Resolve() + .Execute( modelCard.GetReceiveInfo(Speckle.Connectors.Utils.Connector.Slug), cancellationToken, (status, progress) => diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitSendBinding.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitSendBinding.cs index 56778760d..fbbf02c5a 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitSendBinding.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitSendBinding.cs @@ -1,6 +1,5 @@ using System.Collections.Concurrent; using Autodesk.Revit.DB; -using Autofac; using Microsoft.Extensions.Logging; using Speckle.Autofac.DependencyInjection; using Speckle.Connectors.DUI.Bindings; @@ -17,6 +16,7 @@ using Speckle.Connectors.Revit.Plugin; using Speckle.Connectors.Utils.Caching; using Speckle.Connectors.Utils.Cancellation; using Speckle.Connectors.Utils.Operations; +using Speckle.Converters.Common; using Speckle.Converters.RevitShared.Helpers; using Speckle.Converters.RevitShared.Settings; using Speckle.Sdk; @@ -34,6 +34,7 @@ internal sealed class RevitSendBinding : RevitBaseBinding, ISendBinding private readonly ToSpeckleSettingsManager _toSpeckleSettingsManager; private readonly ILogger _logger; private readonly ElementUnpacker _elementUnpacker; + private readonly IRevitConversionSettingsFactory _revitConversionSettingsFactory; /// /// Used internally to aggregate the changed objects' id. Note we're using a concurrent dictionary here as the expiry check method is not thread safe, and this was causing problems. See: @@ -54,7 +55,8 @@ internal sealed class RevitSendBinding : RevitBaseBinding, ISendBinding IOperationProgressManager operationProgressManager, ToSpeckleSettingsManager toSpeckleSettingsManager, ILogger logger, - ElementUnpacker elementUnpacker + ElementUnpacker elementUnpacker, + IRevitConversionSettingsFactory revitConversionSettingsFactory ) : base("sendBinding", store, bridge, revitContext) { @@ -66,6 +68,7 @@ internal sealed class RevitSendBinding : RevitBaseBinding, ISendBinding _toSpeckleSettingsManager = toSpeckleSettingsManager; _logger = logger; _elementUnpacker = elementUnpacker; + _revitConversionSettingsFactory = revitConversionSettingsFactory; var topLevelExceptionHandler = Parent.TopLevelExceptionHandler; Commands = new SendBindingUICommands(bridge); @@ -107,18 +110,19 @@ internal sealed class RevitSendBinding : RevitBaseBinding, ISendBinding CancellationToken cancellationToken = _cancellationManager.InitCancellationTokenSource(modelCardId); - using IUnitOfWork> sendOperation = _unitOfWorkFactory.Resolve>( - b => - { - b.RegisterType().SingleInstance(); - b.Register(c => _toSpeckleSettingsManager.GetToSpeckleSettings(modelCard)); - } - ); + using var unitOfWork = _unitOfWorkFactory.Create(); + unitOfWork + .Resolve>() + .Initialize( + _revitConversionSettingsFactory.Create( + _toSpeckleSettingsManager.GetDetailLevelSetting(modelCard), + _toSpeckleSettingsManager.GetReferencePointSetting(modelCard) + ) + ); var activeUIDoc = RevitContext.UIApplication?.ActiveUIDocument ?? throw new SpeckleException("Unable to retrieve active UI document"); - List revitObjects = modelCard .SendFilter.NotNull() .GetObjectIds() @@ -131,8 +135,9 @@ internal sealed class RevitSendBinding : RevitBaseBinding, ISendBinding throw new SpeckleSendFilterException("No objects were found to convert. Please update your publish filter!"); } - var sendResult = await sendOperation - .Service.Execute( + var sendResult = await unitOfWork + .Resolve>() + .Execute( revitObjects, modelCard.GetSendInfo(Speckle.Connectors.Utils.Connector.Slug), (status, progress) => diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/SendCollectionManager.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/SendCollectionManager.cs index a73a65b9a..cd34cd8d3 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/SendCollectionManager.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/SendCollectionManager.cs @@ -1,5 +1,6 @@ using Autodesk.Revit.DB; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.Common; +using Speckle.Converters.RevitShared.Settings; using Speckle.Sdk.Models.Collections; namespace Speckle.Connectors.Revit.HostApp; @@ -9,12 +10,12 @@ namespace Speckle.Connectors.Revit.HostApp; /// public class SendCollectionManager { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly Dictionary _collectionCache = new(); - public SendCollectionManager(IRevitConversionContextStack contextStack) + public SendCollectionManager(IConverterSettingsStore converterSettings) { - _contextStack = contextStack; + _converterSettings = converterSettings; } /// @@ -26,7 +27,7 @@ public class SendCollectionManager /// public Collection GetAndCreateObjectHostCollection(Element element, Collection rootObject) { - var doc = _contextStack.Current.Document; + var doc = _converterSettings.Current.Document; var path = new List(); // Step 1: create path components. Currently, this is diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Receive/RevitHostObjectBuilder.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Receive/RevitHostObjectBuilder.cs index 34abe5f20..1c17ec3f9 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Receive/RevitHostObjectBuilder.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Receive/RevitHostObjectBuilder.cs @@ -3,7 +3,7 @@ using Speckle.Connectors.Utils.Builders; using Speckle.Connectors.Utils.Conversion; using Speckle.Connectors.Utils.Operations; using Speckle.Converters.Common; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Sdk; using Speckle.Sdk.Logging; using Speckle.Sdk.Models; @@ -19,21 +19,21 @@ namespace Speckle.Connectors.Revit.Operations.Receive; internal sealed class RevitHostObjectBuilder : IHostObjectBuilder, IDisposable { private readonly IRootToHostConverter _converter; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly GraphTraversal _traverseFunction; private readonly ITransactionManager _transactionManager; private readonly ISyncToThread _syncToThread; public RevitHostObjectBuilder( IRootToHostConverter converter, - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, GraphTraversal traverseFunction, ITransactionManager transactionManager, ISyncToThread syncToThread ) { _converter = converter; - _contextStack = contextStack; + _converterSettings = converterSettings; _traverseFunction = traverseFunction; _transactionManager = transactionManager; _syncToThread = syncToThread; @@ -56,7 +56,7 @@ internal sealed class RevitHostObjectBuilder : IHostObjectBuilder, IDisposable } using TransactionGroup transactionGroup = - new(_contextStack.Current.Document, $"Received data from {projectName}"); + new(_converterSettings.Current.Document, $"Received data from {projectName}"); transactionGroup.Start(); _transactionManager.StartTransaction(); diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Receive/TransactionManager.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Receive/TransactionManager.cs index aa2ec3153..b41dead64 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Receive/TransactionManager.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Receive/TransactionManager.cs @@ -1,5 +1,6 @@ using Autodesk.Revit.DB; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.Common; +using Speckle.Converters.RevitShared.Settings; namespace Speckle.Connectors.Revit.Operations.Receive; @@ -9,12 +10,12 @@ namespace Speckle.Connectors.Revit.Operations.Receive; /// public sealed class TransactionManager : ITransactionManager { - private readonly IRevitConversionContextStack _contextStack; - private Document Document => _contextStack.Current.Document; + private readonly IConverterSettingsStore _converterSettings; + private Document Document => _converterSettings.Current.Document; - public TransactionManager(IRevitConversionContextStack contextStack) + public TransactionManager(IConverterSettingsStore converterSettings) { - _contextStack = contextStack; + _converterSettings = converterSettings; } // poc : these are being disposed. I'm not sure why I need to supress this warning diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs index 097e4121c..8a96d5c42 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs @@ -11,6 +11,7 @@ using Speckle.Connectors.Utils.Extensions; using Speckle.Connectors.Utils.Operations; using Speckle.Converters.Common; using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Sdk; using Speckle.Sdk.Models; using Speckle.Sdk.Models.Collections; @@ -21,32 +22,35 @@ public class RevitRootObjectBuilder : IRootObjectBuilder { // POC: SendSelection and RevitConversionContextStack should be interfaces, former needs interfaces private readonly IRootToSpeckleConverter _converter; - private readonly IRevitConversionContextStack _conversionContextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly Collection _rootObject; private readonly ISendConversionCache _sendConversionCache; private readonly ElementUnpacker _elementUnpacker; private readonly SendCollectionManager _sendCollectionManager; + private readonly RevitMaterialCacheSingleton _revitMaterialCacheSingleton; private readonly ILogger _logger; public RevitRootObjectBuilder( IRootToSpeckleConverter converter, - IRevitConversionContextStack conversionContextStack, + IConverterSettingsStore converterSettings, ISendConversionCache sendConversionCache, ElementUnpacker elementUnpacker, SendCollectionManager sendCollectionManager, + RevitMaterialCacheSingleton revitMaterialCacheSingleton, ILogger logger ) { _converter = converter; - _conversionContextStack = conversionContextStack; + _converterSettings = converterSettings; _sendConversionCache = sendConversionCache; _elementUnpacker = elementUnpacker; _sendCollectionManager = sendCollectionManager; + _revitMaterialCacheSingleton = revitMaterialCacheSingleton; _logger = logger; _rootObject = new Collection() { - name = _conversionContextStack.Current.Document.PathName.Split('\\').Last().Split('.').First() + name = _converterSettings.Current.Document.PathName.Split('\\').Last().Split('.').First() }; } @@ -57,7 +61,7 @@ public class RevitRootObjectBuilder : IRootObjectBuilder CancellationToken ct = default ) { - var doc = _conversionContextStack.Current.Document; + var doc = _converterSettings.Current.Document; if (doc.IsFamilyDocument) { @@ -69,7 +73,7 @@ public class RevitRootObjectBuilder : IRootObjectBuilder // Convert ids to actual revit elements foreach (var id in objects) { - var el = _conversionContextStack.Current.Document.GetElement(id); + var el = _converterSettings.Current.Document.GetElement(id); if (el != null) { revitElements.Add(el); @@ -127,9 +131,7 @@ public class RevitRootObjectBuilder : IRootObjectBuilder } var idsAndSubElementIds = _elementUnpacker.GetElementsAndSubelementIdsFromAtomicObjects(atomicObjects); - var materialProxies = _conversionContextStack.RenderMaterialProxyCache.GetRenderMaterialProxyListForObjects( - idsAndSubElementIds - ); + var materialProxies = _revitMaterialCacheSingleton.GetRenderMaterialProxyListForObjects(idsAndSubElementIds); _rootObject[ProxyKeys.RENDER_MATERIAL] = materialProxies; Debug.WriteLine( diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Settings/ToSpeckleSettingsManager.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Settings/ToSpeckleSettingsManager.cs index 15f20855d..7008a27e7 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Settings/ToSpeckleSettingsManager.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Settings/ToSpeckleSettingsManager.cs @@ -5,11 +5,13 @@ using Speckle.Connectors.Revit.HostApp; using Speckle.Connectors.Utils.Caching; using Speckle.Converters.RevitShared.Helpers; using Speckle.Converters.RevitShared.Settings; +using Speckle.InterfaceGenerator; using Speckle.Sdk.Common; namespace Speckle.Connectors.Revit.Operations.Send.Settings; -public class ToSpeckleSettingsManager +[GenerateAutoInterface] +public class ToSpeckleSettingsManager : IToSpeckleSettingsManager { private readonly RevitContext _revitContext; private readonly ISendConversionCache _sendConversionCache; @@ -30,15 +32,7 @@ public class ToSpeckleSettingsManager _sendConversionCache = sendConversionCache; } - public ToSpeckleSettings GetToSpeckleSettings(SenderModelCard modelCard) - { - DetailLevelType detailLevel = GetDetailLevelSetting(modelCard); - Transform? referencePointTransform = GetReferencePointSetting(modelCard); - - return new ToSpeckleSettings(detailLevel, referencePointTransform); - } - - private DetailLevelType GetDetailLevelSetting(SenderModelCard modelCard) + public DetailLevelType GetDetailLevelSetting(SenderModelCard modelCard) { var fidelityString = modelCard.Settings?.First(s => s.Id == "detailLevel").Value as string; if ( @@ -62,7 +56,7 @@ public class ToSpeckleSettingsManager throw new ArgumentException($"Invalid geometry fidelity value: {fidelityString}"); } - private Transform? GetReferencePointSetting(SenderModelCard modelCard) + public Transform? GetReferencePointSetting(SenderModelCard modelCard) { var referencePointString = modelCard.Settings?.First(s => s.Id == "referencePoint").Value as string; if ( diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoReceiveBinding.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoReceiveBinding.cs index 79a560e31..7d524b4e2 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoReceiveBinding.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoReceiveBinding.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using Rhino; using Speckle.Autofac.DependencyInjection; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; @@ -8,6 +9,8 @@ using Speckle.Connectors.DUI.Models.Card; using Speckle.Connectors.Utils.Builders; using Speckle.Connectors.Utils.Cancellation; using Speckle.Connectors.Utils.Operations; +using Speckle.Converters.Common; +using Speckle.Converters.Rhino; using Speckle.Sdk; namespace Speckle.Connectors.Rhino.Bindings; @@ -22,6 +25,7 @@ public class RhinoReceiveBinding : IReceiveBinding private readonly IUnitOfWorkFactory _unitOfWorkFactory; private readonly IOperationProgressManager _operationProgressManager; private readonly ILogger _logger; + private readonly IRhinoConversionSettingsFactory _rhinoConversionSettingsFactory; private ReceiveBindingUICommands Commands { get; } public RhinoReceiveBinding( @@ -30,7 +34,8 @@ public class RhinoReceiveBinding : IReceiveBinding IBridge parent, IUnitOfWorkFactory unitOfWorkFactory, IOperationProgressManager operationProgressManager, - ILogger logger + ILogger logger, + IRhinoConversionSettingsFactory rhinoConversionSettingsFactory ) { Parent = parent; @@ -38,6 +43,7 @@ public class RhinoReceiveBinding : IReceiveBinding _unitOfWorkFactory = unitOfWorkFactory; _operationProgressManager = operationProgressManager; _logger = logger; + _rhinoConversionSettingsFactory = rhinoConversionSettingsFactory; _cancellationManager = cancellationManager; Commands = new ReceiveBindingUICommands(parent); } @@ -46,7 +52,10 @@ public class RhinoReceiveBinding : IReceiveBinding public async Task Receive(string modelCardId) { - using var unitOfWork = _unitOfWorkFactory.Resolve(); + using var unitOfWork = _unitOfWorkFactory.Create(); + unitOfWork + .Resolve>() + .Initialize(_rhinoConversionSettingsFactory.Create(RhinoDoc.ActiveDoc)); try { // Get receiver card @@ -60,7 +69,8 @@ public class RhinoReceiveBinding : IReceiveBinding // Receive host objects HostObjectBuilderResult conversionResults = await unitOfWork - .Service.Execute( + .Resolve() + .Execute( modelCard.GetReceiveInfo(Speckle.Connectors.Utils.Connector.Slug), cancellationToken, (status, progress) => diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs index b33869068..3001f69a9 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs @@ -16,6 +16,8 @@ using Speckle.Connectors.Rhino.HostApp; using Speckle.Connectors.Utils.Caching; using Speckle.Connectors.Utils.Cancellation; using Speckle.Connectors.Utils.Operations; +using Speckle.Converters.Common; +using Speckle.Converters.Rhino; using Speckle.Sdk; using Speckle.Sdk.Common; @@ -36,6 +38,7 @@ public sealed class RhinoSendBinding : ISendBinding private readonly IOperationProgressManager _operationProgressManager; private readonly ILogger _logger; private readonly ITopLevelExceptionHandler _topLevelExceptionHandler; + private readonly IRhinoConversionSettingsFactory _rhinoConversionSettingsFactory; /// /// Used internally to aggregate the changed objects' id. Note we're using a concurrent dictionary here as the expiry check method is not thread safe, and this was causing problems. See: @@ -54,7 +57,8 @@ public sealed class RhinoSendBinding : ISendBinding CancellationManager cancellationManager, ISendConversionCache sendConversionCache, IOperationProgressManager operationProgressManager, - ILogger logger + ILogger logger, + IRhinoConversionSettingsFactory rhinoConversionSettingsFactory ) { _store = store; @@ -65,6 +69,7 @@ public sealed class RhinoSendBinding : ISendBinding _sendConversionCache = sendConversionCache; _operationProgressManager = operationProgressManager; _logger = logger; + _rhinoConversionSettingsFactory = rhinoConversionSettingsFactory; _topLevelExceptionHandler = parent.TopLevelExceptionHandler.Parent.TopLevelExceptionHandler; Parent = parent; Commands = new SendBindingUICommands(parent); // POC: Commands are tightly coupled with their bindings, at least for now, saves us injecting a factory. @@ -146,7 +151,10 @@ public sealed class RhinoSendBinding : ISendBinding public async Task Send(string modelCardId) { - using var unitOfWork = _unitOfWorkFactory.Resolve>(); + using var unitOfWork = _unitOfWorkFactory.Create(); + unitOfWork + .Resolve>() + .Initialize(_rhinoConversionSettingsFactory.Create(RhinoDoc.ActiveDoc)); try { if (_store.GetModelById(modelCardId) is not SenderModelCard modelCard) @@ -171,7 +179,8 @@ public sealed class RhinoSendBinding : ISendBinding } var sendResult = await unitOfWork - .Service.Execute( + .Resolve>() + .Execute( rhinoObjects, modelCard.GetSendInfo(Speckle.Connectors.Utils.Connector.Slug), (status, progress) => diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoGroupBaker.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoGroupBaker.cs index 5fe9caae5..7bbfd59bb 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoGroupBaker.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoGroupBaker.cs @@ -1,6 +1,6 @@ using Microsoft.Extensions.Logging; -using Rhino; using Speckle.Converters.Common; +using Speckle.Converters.Rhino; using Speckle.Sdk; using Speckle.Sdk.Logging; using Speckle.Sdk.Models.Proxies; @@ -9,12 +9,15 @@ namespace Speckle.Connectors.Rhino.HostApp; public class RhinoGroupBaker { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ILogger _logger; - public RhinoGroupBaker(IConversionContextStack contextStack, ILogger logger) + public RhinoGroupBaker( + IConverterSettingsStore converterSettings, + ILogger logger + ) { - _contextStack = contextStack; + _converterSettings = converterSettings; _logger = logger; } @@ -31,7 +34,7 @@ public class RhinoGroupBaker { var appIds = groupProxy.objects.SelectMany(oldObjId => applicationIdMap[oldObjId]).Select(id => new Guid(id)); var groupName = (groupProxy.name ?? "No Name Group") + $" ({baseLayerName})"; - _contextStack.Current.Document.Groups.Add(groupName, appIds); + _converterSettings.Current.Document.Groups.Add(groupName, appIds); } catch (Exception ex) when (!ex.IsFatal()) { @@ -42,14 +45,14 @@ public class RhinoGroupBaker public void PurgeGroups(string baseLayerName) { - for (int i = _contextStack.Current.Document.Groups.Count; i >= 0; i--) + for (int i = _converterSettings.Current.Document.Groups.Count; i >= 0; i--) { try { - var group = _contextStack.Current.Document.Groups.FindIndex(i); + var group = _converterSettings.Current.Document.Groups.FindIndex(i); if (group is { Name: not null } && group.Name.Contains(baseLayerName)) { - _contextStack.Current.Document.Groups.Delete(i); + _converterSettings.Current.Document.Groups.Delete(i); } } catch (Exception ex) when (!ex.IsFatal()) diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoMaterialBaker.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoMaterialBaker.cs index 97649c176..e89ca6ee8 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoMaterialBaker.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoMaterialBaker.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.Logging; using Rhino; using Speckle.Converters.Common; +using Speckle.Converters.Rhino; using Speckle.Objects.Other; using Speckle.Sdk; using Speckle.Sdk.Common; @@ -10,15 +11,15 @@ namespace Speckle.Connectors.Rhino.HostApp; public class RhinoMaterialBaker { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ILogger _logger; public RhinoMaterialBaker( - IConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ILogger logger ) { - _contextStack = contextStack; + _converterSettings = converterSettings; _logger = logger; } @@ -29,7 +30,7 @@ public class RhinoMaterialBaker public void BakeMaterials(List speckleRenderMaterialProxies, string baseLayerName) { - var doc = _contextStack.Current.Document; // POC: too much right now to interface around + var doc = _converterSettings.Current.Document; // POC: too much right now to interface around // List conversionResults = new(); // TODO: return this guy foreach (var proxy in speckleRenderMaterialProxies) diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Receive/RhinoHostObjectBuilder.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Receive/RhinoHostObjectBuilder.cs index 0e2ac6dfc..e0e1eb070 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Receive/RhinoHostObjectBuilder.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Receive/RhinoHostObjectBuilder.cs @@ -6,6 +6,7 @@ using Speckle.Connectors.Utils.Builders; using Speckle.Connectors.Utils.Conversion; using Speckle.Connectors.Utils.Operations.Receive; using Speckle.Converters.Common; +using Speckle.Converters.Rhino; using Speckle.Sdk; using Speckle.Sdk.Logging; using Speckle.Sdk.Models; @@ -20,7 +21,7 @@ namespace Speckle.Connectors.Rhino.Operations.Receive; public class RhinoHostObjectBuilder : IHostObjectBuilder { private readonly IRootToHostConverter _converter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly RhinoInstanceBaker _instanceBaker; private readonly RhinoLayerBaker _layerBaker; private readonly RhinoMaterialBaker _materialBaker; @@ -30,7 +31,7 @@ public class RhinoHostObjectBuilder : IHostObjectBuilder public RhinoHostObjectBuilder( IRootToHostConverter converter, - IConversionContextStack contextStack, + IConverterSettingsStore converterSettings, RhinoLayerBaker layerBaker, RootObjectUnpacker rootObjectUnpacker, RhinoInstanceBaker instanceBaker, @@ -40,7 +41,7 @@ public class RhinoHostObjectBuilder : IHostObjectBuilder ) { _converter = converter; - _contextStack = contextStack; + _converterSettings = converterSettings; _rootObjectUnpacker = rootObjectUnpacker; _instanceBaker = instanceBaker; _materialBaker = materialBaker; @@ -102,7 +103,7 @@ public class RhinoHostObjectBuilder : IHostObjectBuilder onOperationProgressed?.Invoke("Baking layers (redraw disabled)", null); using (var _ = SpeckleActivityFactory.Start("Pre baking layers")) { - using var layerNoDraw = new DisableRedrawScope(_contextStack.Current.Document.Views); + using var layerNoDraw = new DisableRedrawScope(_converterSettings.Current.Document.Views); foreach (var (path, _) in atomicObjectsWithPath) { _layerBaker.GetAndCreateLayerFromPath(path, baseLayerName); @@ -192,7 +193,7 @@ public class RhinoHostObjectBuilder : IHostObjectBuilder _groupBaker.BakeGroups(unpackedRoot.GroupProxies, applicationIdMap, baseLayerName); } - _contextStack.Current.Document.Views.Redraw(); + _converterSettings.Current.Document.Views.Redraw(); return Task.FromResult(new HostObjectBuilderResult(bakedObjectIds, conversionResults)); } @@ -200,12 +201,16 @@ public class RhinoHostObjectBuilder : IHostObjectBuilder private void PreReceiveDeepClean(string baseLayerName) { // Remove all previously received layers and render materials from the document - int rootLayerIndex = _contextStack.Current.Document.Layers.Find(Guid.Empty, baseLayerName, RhinoMath.UnsetIntIndex); + int rootLayerIndex = _converterSettings.Current.Document.Layers.Find( + Guid.Empty, + baseLayerName, + RhinoMath.UnsetIntIndex + ); _instanceBaker.PurgeInstances(baseLayerName); _materialBaker.PurgeMaterials(baseLayerName); - var doc = _contextStack.Current.Document; + var doc = _converterSettings.Current.Document; // Cleans up any previously received objects if (rootLayerIndex != RhinoMath.UnsetIntIndex) { @@ -246,7 +251,7 @@ public class RhinoHostObjectBuilder : IHostObjectBuilder atts.ColorSource = color.Item2; } - return _contextStack.Current.Document.Objects.Add(obj, atts); + return _converterSettings.Current.Document.Objects.Add(obj, atts); } private List BakeObjectsAsGroup( @@ -269,11 +274,11 @@ public class RhinoHostObjectBuilder : IHostObjectBuilder objectIds.Add(id); } - var groupIndex = _contextStack.Current.Document.Groups.Add( + var groupIndex = _converterSettings.Current.Document.Groups.Add( $@"{originatingObject.speckle_type.Split('.').Last()} - {originatingObject.applicationId ?? originatingObject.id} ({baseLayerName})", objectIds ); - var group = _contextStack.Current.Document.Groups.FindIndex(groupIndex); + var group = _converterSettings.Current.Document.Groups.FindIndex(groupIndex); objectIds.Insert(0, group.Id); return objectIds; } diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/RhinoRootObjectBuilder.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/RhinoRootObjectBuilder.cs index fbff78bcb..93309a746 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/RhinoRootObjectBuilder.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/RhinoRootObjectBuilder.cs @@ -1,5 +1,4 @@ using Microsoft.Extensions.Logging; -using Rhino; using Rhino.DocObjects; using Speckle.Connectors.DUI.Models.Card.SendFilter; using Speckle.Connectors.Rhino.HostApp; @@ -10,6 +9,7 @@ using Speckle.Connectors.Utils.Extensions; using Speckle.Connectors.Utils.Instances; using Speckle.Connectors.Utils.Operations; using Speckle.Converters.Common; +using Speckle.Converters.Rhino; using Speckle.Sdk; using Speckle.Sdk.Logging; using Speckle.Sdk.Models; @@ -26,7 +26,7 @@ public class RhinoRootObjectBuilder : IRootObjectBuilder { private readonly IRootToSpeckleConverter _rootToSpeckleConverter; private readonly ISendConversionCache _sendConversionCache; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly RhinoLayerUnpacker _layerUnpacker; private readonly RhinoInstanceUnpacker _instanceUnpacker; private readonly RhinoGroupUnpacker _groupUnpacker; @@ -37,7 +37,7 @@ public class RhinoRootObjectBuilder : IRootObjectBuilder public RhinoRootObjectBuilder( IRootToSpeckleConverter rootToSpeckleConverter, ISendConversionCache sendConversionCache, - IConversionContextStack contextStack, + IConverterSettingsStore converterSettings, RhinoLayerUnpacker layerUnpacker, RhinoInstanceUnpacker instanceUnpacker, RhinoGroupUnpacker groupUnpacker, @@ -47,7 +47,7 @@ public class RhinoRootObjectBuilder : IRootObjectBuilder ) { _sendConversionCache = sendConversionCache; - _contextStack = contextStack; + _converterSettings = converterSettings; _layerUnpacker = layerUnpacker; _instanceUnpacker = instanceUnpacker; _groupUnpacker = groupUnpacker; @@ -73,7 +73,7 @@ public class RhinoRootObjectBuilder : IRootObjectBuilder { using var activity = SpeckleActivityFactory.Start("Build"); // 0 - Init the root - Collection rootObjectCollection = new() { name = _contextStack.Current.Document.Name ?? "Unnamed document" }; + Collection rootObjectCollection = new() { name = _converterSettings.Current.Document.Name ?? "Unnamed document" }; // 1 - Unpack the instances UnpackResult unpackResults; @@ -102,7 +102,7 @@ public class RhinoRootObjectBuilder : IRootObjectBuilder cancellationToken.ThrowIfCancellationRequested(); // handle layer - Layer layer = _contextStack.Current.Document.Layers[rhinoObject.Attributes.LayerIndex]; + Layer layer = _converterSettings.Current.Document.Layers[rhinoObject.Attributes.LayerIndex]; versionLayers.Add(layer); Collection collectionHost = _layerUnpacker.GetHostObjectCollection(layer, rootObjectCollection); diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3.DependencyInjection/ArcGISConverterModule.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3.DependencyInjection/ArcGISConverterModule.cs index 35eb5082c..d0ad6befb 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3.DependencyInjection/ArcGISConverterModule.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3.DependencyInjection/ArcGISConverterModule.cs @@ -10,6 +10,8 @@ public class ArcGISConverterModule : ISpeckleModule { public void Load(SpeckleContainerBuilder builder) { + //register types by default + builder.ScanAssemblyOfType(); // add single root converter //don't need a host specific RootToSpeckleConverter builder.AddRootCommon(); @@ -23,11 +25,11 @@ public class ArcGISConverterModule : ISpeckleModule builder.AddScoped(); builder.AddScoped(); builder.AddScoped(); - builder.AddScoped(); - - builder.AddScoped, ArcGISToSpeckleUnitConverter>(); // single stack per conversion - builder.AddScoped, ArcGISConversionContextStack>(); + builder.AddScoped< + IConverterSettingsStore, + ConverterSettingsStore + >(); } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionSettings.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionSettings.cs new file mode 100644 index 000000000..24af9bf1d --- /dev/null +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionSettings.cs @@ -0,0 +1,13 @@ +using ArcGIS.Desktop.Core; +using ArcGIS.Desktop.Mapping; +using Speckle.Converters.ArcGIS3.Utils; + +namespace Speckle.Converters.ArcGIS3; + +public record ArcGISConversionSettings( + Project Project, + Map Map, + Uri SpeckleDatabasePath, + CRSoffsetRotation ActiveCRSoffsetRotation, + string SpeckleUnits +); diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionContextStack.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionSettingsFactory.cs similarity index 68% rename from Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionContextStack.cs rename to Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionSettingsFactory.cs index 2808fa549..a26000363 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionContextStack.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionSettingsFactory.cs @@ -1,38 +1,34 @@ -using System.Diagnostics.CodeAnalysis; -using ArcGIS.Core.Data; +using ArcGIS.Core.Data; using ArcGIS.Core.Data.DDL; using ArcGIS.Desktop.Core; using ArcGIS.Desktop.Framework.Threading.Tasks; using ArcGIS.Desktop.Mapping; using Speckle.Converters.ArcGIS3.Utils; using Speckle.Converters.Common; +using Speckle.InterfaceGenerator; namespace Speckle.Converters.ArcGIS3; -public class ArcGISDocument +[GenerateAutoInterface] +public class ArcGISConversionSettingsFactory(IHostToSpeckleUnitConverter unitConverter) + : IArcGISConversionSettingsFactory { - public Project Project { get; } - public Map Map { get; } - public Uri SpeckleDatabasePath { get; } - public CRSoffsetRotation ActiveCRSoffsetRotation { get; set; } - - public ArcGISDocument() - { - Project = Project.Current; - Map = MapView.Active.Map; - SpeckleDatabasePath = EnsureOrAddSpeckleDatabase(); - // CRS of either: incoming commit to be applied to all received objects, or CRS to convert all objects to, before sending - // created per Send/Receive operation, will be the same for all objects in the operation - ActiveCRSoffsetRotation = new CRSoffsetRotation(MapView.Active.Map); - } - - private const string FGDB_NAME = "Speckle.gdb"; + public ArcGISConversionSettings Create(Project project, Map map, CRSoffsetRotation activeCRSoffsetRotation) => + new( + project, + map, + EnsureOrAddSpeckleDatabase(), + activeCRSoffsetRotation, + unitConverter.ConvertOrThrow(activeCRSoffsetRotation.SpatialReference.Unit) + ); public Uri EnsureOrAddSpeckleDatabase() { return AddDatabaseToProject(GetDatabasePath()); } + private const string FGDB_NAME = "Speckle.gdb"; + public Uri GetDatabasePath() { try @@ -109,18 +105,3 @@ public class ArcGISDocument return databasePath; } } - -// POC: Suppressed naming warning for now, but we should evaluate if we should follow this or disable it. -[SuppressMessage( - "Naming", - "CA1711:Identifiers should not have incorrect suffix", - Justification = "Name ends in Stack but it is in fact a Stack, just not inheriting from `System.Collections.Stack`" -)] -public class ArcGISConversionContextStack : ConversionContextStack -{ - public ArcGISConversionContextStack( - IHostToSpeckleUnitConverter unitConverter, - ArcGISDocument arcGisDocument - ) - : base(arcGisDocument, MapView.Active.Map.SpatialReference.Unit, unitConverter) { } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/MeshListToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/MeshListToHostConverter.cs index c0aa6b097..f49c986d8 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/MeshListToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/MeshListToHostConverter.cs @@ -7,15 +7,15 @@ namespace Speckle.Converters.ArcGIS3.ToHost.Raw; public class MeshListToHostConverter : ITypedConverter, ACG.Multipatch> { private readonly ITypedConverter _pointConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public MeshListToHostConverter( ITypedConverter pointConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public ACG.Multipatch Convert(List target) @@ -24,8 +24,7 @@ public class MeshListToHostConverter : ITypedConverter, ACG.Multi { throw new SpeckleConversionException("Feature contains no geometries"); } - ACG.MultipatchBuilderEx multipatchPart = - new(_contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference); + ACG.MultipatchBuilderEx multipatchPart = new(_settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference); foreach (SOG.Mesh part in target) { diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/PointSingleToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/PointSingleToHostConverter.cs index 401681ee0..e042575bb 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/PointSingleToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/PointSingleToHostConverter.cs @@ -6,25 +6,26 @@ namespace Speckle.Converters.ArcGIS3.ToHost.Raw; public class PointToHostConverter : ITypedConverter { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; - public PointToHostConverter(IConversionContextStack contextStack) + public PointToHostConverter(IConverterSettingsStore settingsStore) { - _contextStack = contextStack; + _settingsStore = settingsStore; } public object Convert(Base target) => Convert((SOG.Point)target); public ACG.MapPoint Convert(SOG.Point target) { - SOG.Point scaledMovedRotatedPoint = _contextStack.Current.Document.ActiveCRSoffsetRotation.OffsetRotateOnReceive( - target + SOG.Point scaledMovedRotatedPoint = _settingsStore.Current.ActiveCRSoffsetRotation.OffsetRotateOnReceive( + target, + _settingsStore.Current.SpeckleUnits ); return new ACG.MapPointBuilderEx( scaledMovedRotatedPoint.x, scaledMovedRotatedPoint.y, scaledMovedRotatedPoint.z, - _contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference + _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference ).ToGeometry(); } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/ArcToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/ArcToHostConverter.cs index 684f9c5e9..83db8e40d 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/ArcToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/ArcToHostConverter.cs @@ -8,15 +8,15 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; public class ArcToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public ArcToHostConverter( ITypedConverter pointConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public object Convert(Base target) => Convert((SOG.Arc)target); @@ -35,13 +35,13 @@ public class ArcToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public CircleToHostConverter( ITypedConverter pointConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public object Convert(Base target) => Convert((SOG.Circle)target); @@ -37,18 +37,18 @@ public class CircleToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public EllipseToHostConverter( ITypedConverter pointConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public object Convert(Base target) => Convert((SOG.Ellipse)target); @@ -35,12 +35,12 @@ public class EllipseToHostConverter : IToHostTopLevelConverter, ITypedConverter< } ACG.MapPoint centerPt = _pointConverter.Convert(target.plane.origin); - double scaleFactor = Units.GetConversionFactor(target.units, _contextStack.Current.SpeckleUnits); + double scaleFactor = Units.GetConversionFactor(target.units, _settingsStore.Current.SpeckleUnits); // set default values double angle = Math.Atan2(target.plane.xdir.y, target.plane.xdir.x) - + _contextStack.Current.Document.ActiveCRSoffsetRotation.TrueNorthRadians; + + _settingsStore.Current.ActiveCRSoffsetRotation.TrueNorthRadians; double majorAxisRadius = (double)target.firstRadius; double minorAxisRatio = (double)target.secondRadius / majorAxisRadius; @@ -58,13 +58,13 @@ public class EllipseToHostConverter : IToHostTopLevelConverter, ITypedConverter< majorAxisRadius * scaleFactor, minorAxisRatio, ACG.ArcOrientation.ArcCounterClockwise, - _contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference + _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference ); return new ACG.PolylineBuilderEx( segment, ACG.AttributeFlags.HasZ, - _contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference + _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference ).ToGeometry(); } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/LineToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/LineToHostConverter.cs index 6a8bd1ec5..47e6b5c9d 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/LineToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/LineToHostConverter.cs @@ -8,15 +8,15 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; public class LineSingleToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public LineSingleToHostConverter( ITypedConverter pointConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public object Convert(Base target) => Convert((SOG.Line)target); @@ -28,7 +28,7 @@ public class LineSingleToHostConverter : IToHostTopLevelConverter, ITypedConvert return new ACG.PolylineBuilderEx( points, ACG.AttributeFlags.HasZ, - _contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference + _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference ).ToGeometry(); } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PolycurveToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PolycurveToHostConverter.cs index 9220e640e..39bb8ab7e 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PolycurveToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PolycurveToHostConverter.cs @@ -7,19 +7,16 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; [NameAndRankValue(nameof(SOG.Polycurve), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class PolycurveToHostConverter : IToHostTopLevelConverter, ITypedConverter { - private readonly ITypedConverter _pointConverter; private readonly IRootToHostConverter _converter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public PolycurveToHostConverter( - ITypedConverter pointConverter, IRootToHostConverter converter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { - _pointConverter = pointConverter; _converter = converter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public object Convert(Base target) => Convert((SOG.Polycurve)target); @@ -54,7 +51,7 @@ public class PolycurveToHostConverter : IToHostTopLevelConverter, ITypedConverte return new ACG.PolylineBuilderEx( segments, ACG.AttributeFlags.HasZ, - _contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference + _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference ).ToGeometry(); } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PolylineToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PolylineToHostConverter.cs index dcc537370..b6842cdc9 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PolylineToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PolylineToHostConverter.cs @@ -8,15 +8,15 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; public class PolylineToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public PolylineToHostConverter( ITypedConverter pointConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public object Convert(Base target) => Convert((SOG.Polyline)target); @@ -32,7 +32,7 @@ public class PolylineToHostConverter : IToHostTopLevelConverter, ITypedConverter return new ACG.PolylineBuilderEx( points, ACG.AttributeFlags.HasZ, - _contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference + _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference ).ToGeometry(); } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/EnvelopBoxToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/EnvelopBoxToSpeckleConverter.cs index ec05fbd66..09ea3e94e 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/EnvelopBoxToSpeckleConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/EnvelopBoxToSpeckleConverter.cs @@ -7,15 +7,15 @@ namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw; public class EnvelopToSpeckleConverter : ITypedConverter { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; private readonly ITypedConverter _pointConverter; public EnvelopToSpeckleConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter pointConverter ) { - _contextStack = contextStack; + _settingsStore = settingsStore; _pointConverter = pointConverter; } @@ -25,18 +25,18 @@ public class EnvelopToSpeckleConverter : ITypedConverter target.XMin, target.YMin, target.ZMin, - _contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference + _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference ).ToGeometry(); MapPoint pointMax = new MapPointBuilderEx( target.XMax, target.YMax, target.ZMax, - _contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference + _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference ).ToGeometry(); SOG.Point minPtSpeckle = _pointConverter.Convert(pointMin); SOG.Point maxPtSpeckle = _pointConverter.Convert(pointMax); - var units = _contextStack.Current.SpeckleUnits; + var units = _settingsStore.Current.SpeckleUnits; SOG.Plane plane = new() @@ -54,7 +54,7 @@ public class EnvelopToSpeckleConverter : ITypedConverter xSize = new Interval { start = minPtSpeckle.x, end = maxPtSpeckle.x }, ySize = new Interval { start = minPtSpeckle.y, end = maxPtSpeckle.y }, zSize = new Interval { start = minPtSpeckle.z, end = maxPtSpeckle.z }, - units = _contextStack.Current.SpeckleUnits + units = _settingsStore.Current.SpeckleUnits }; } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/GisFeatureToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/GisFeatureToSpeckleConverter.cs index 953b99ead..21087a9bb 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/GisFeatureToSpeckleConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/GisFeatureToSpeckleConverter.cs @@ -15,7 +15,7 @@ public class GisFeatureToSpeckleConverter : ITypedConverter<(Row, string), IGisF private readonly ITypedConverter> _polygonConverter; private readonly ITypedConverter> _multipatchConverter; private readonly ITypedConverter _attributeConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public GisFeatureToSpeckleConverter( ITypedConverter pointConverter, @@ -24,7 +24,7 @@ public class GisFeatureToSpeckleConverter : ITypedConverter<(Row, string), IGisF ITypedConverter> polygonConverter, ITypedConverter> multipatchConverter, ITypedConverter attributeConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; @@ -33,7 +33,7 @@ public class GisFeatureToSpeckleConverter : ITypedConverter<(Row, string), IGisF _polygonConverter = polygonConverter; _multipatchConverter = multipatchConverter; _attributeConverter = attributeConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } private List GetPolygonDisplayMeshes(List polygons) @@ -64,7 +64,7 @@ public class GisFeatureToSpeckleConverter : ITypedConverter<(Row, string), IGisF { vertices = boundaryPts.SelectMany(x => new List { x.x, x.y, x.z }).ToList(), faces = faces, - units = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString + units = _settingsStore.Current.SpeckleUnits }; displayVal.Add(mesh); } @@ -82,7 +82,7 @@ public class GisFeatureToSpeckleConverter : ITypedConverter<(Row, string), IGisF { vertices = geo.vertices, faces = geo.faces, - units = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString + units = _settingsStore.Current.SpeckleUnits }; displayVal.Add(displayMesh); } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/GisRasterToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/GisRasterToSpeckleConverter.cs index 89e768e04..2c4938dc8 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/GisRasterToSpeckleConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/GisRasterToSpeckleConverter.cs @@ -8,11 +8,11 @@ namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw; public class GisRasterToSpeckleConverter : ITypedConverter { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; - public GisRasterToSpeckleConverter(IConversionContextStack contextStack) + public GisRasterToSpeckleConverter(IConverterSettingsStore settingsStore) { - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) => Convert((Raster)target); @@ -178,7 +178,7 @@ public class GisRasterToSpeckleConverter : ITypedConverter() { mesh }; diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/MultipatchFeatureToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/MultipatchFeatureToSpeckleConverter.cs index e814f2c75..4214d68d9 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/MultipatchFeatureToSpeckleConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/MultipatchFeatureToSpeckleConverter.cs @@ -10,15 +10,15 @@ namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw; /// public class MultipatchFeatureToSpeckleConverter : ITypedConverter> { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; private readonly ITypedConverter _pointConverter; public MultipatchFeatureToSpeckleConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter pointConverter ) { - _contextStack = contextStack; + _settingsStore = settingsStore; _pointConverter = pointConverter; } @@ -26,8 +26,7 @@ public class MultipatchFeatureToSpeckleConverter : ITypedConverter converted = new(); // placeholder, needs to be declared in order to be used in the Ring patch type - SGIS.PolygonGeometry3d polygonGeom = - new() { units = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString }; + SGIS.PolygonGeometry3d polygonGeom = new() { units = _settingsStore.Current.SpeckleUnits }; // convert and store all multipatch points per Part List> allPoints = new(); @@ -53,19 +52,19 @@ public class MultipatchFeatureToSpeckleConverter : ITypedConverter(), - units = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString - }; + polygonGeom = new() { voids = new List(), units = _settingsStore.Current.SpeckleUnits }; List pointCoords = allPoints[idx].SelectMany(x => new List() { x.x, x.y, x.z }).ToList(); - SOG.Polyline polyline = - new() - { - value = pointCoords, - units = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString - }; + SOG.Polyline polyline = new() { value = pointCoords, units = _settingsStore.Current.SpeckleUnits }; polygonGeom.boundary = polyline; // if it's already the last part, add to list @@ -103,12 +93,7 @@ public class MultipatchFeatureToSpeckleConverter : ITypedConverter pointCoords = allPoints[idx].SelectMany(x => new List() { x.x, x.y, x.z }).ToList(); - SOG.Polyline polyline = - new() - { - value = pointCoords, - units = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString - }; + SOG.Polyline polyline = new() { value = pointCoords, units = _settingsStore.Current.SpeckleUnits }; // every outer ring is oriented clockwise bool isClockwise = polyline.IsClockwisePolygon(); @@ -125,7 +110,7 @@ public class MultipatchFeatureToSpeckleConverter : ITypedConverter(), boundary = polyline, - units = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString + units = _settingsStore.Current.SpeckleUnits }; } // if it's already the last part, add to list diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PointToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PointToSpeckleConverter.cs index a450a81cb..4e04bdd27 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PointToSpeckleConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PointToSpeckleConverter.cs @@ -6,11 +6,11 @@ namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw; public class PointToSpeckleConverter : ITypedConverter { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; - public PointToSpeckleConverter(IConversionContextStack contextStack) + public PointToSpeckleConverter(IConverterSettingsStore settingsStore) { - _contextStack = contextStack; + _settingsStore = settingsStore; } public SOG.Point Convert(MapPoint target) @@ -19,12 +19,12 @@ public class PointToSpeckleConverter : ITypedConverter { // reproject to Active CRS if ( - GeometryEngine.Instance.Project(target, _contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference) + GeometryEngine.Instance.Project(target, _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference) is not MapPoint reprojectedPt ) { throw new SpeckleConversionException( - $"Conversion to Spatial Reference {_contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference.Name} failed" + $"Conversion to Spatial Reference {_settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference.Name} failed" ); } @@ -36,27 +36,23 @@ public class PointToSpeckleConverter : ITypedConverter ) { throw new SpeckleConversionException( - $"Conversion to Spatial Reference {_contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference.Name} failed: coordinates undefined" + $"Conversion to Spatial Reference {_settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference.Name} failed: coordinates undefined" ); } // convert to Speckle Pt SOG.Point reprojectedSpecklePt = - new( - reprojectedPt.X, - reprojectedPt.Y, - reprojectedPt.Z, - _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString - ); - SOG.Point scaledMovedRotatedPoint = _contextStack.Current.Document.ActiveCRSoffsetRotation.OffsetRotateOnSend( - reprojectedSpecklePt + new(reprojectedPt.X, reprojectedPt.Y, reprojectedPt.Z, _settingsStore.Current.SpeckleUnits); + SOG.Point scaledMovedRotatedPoint = _settingsStore.Current.ActiveCRSoffsetRotation.OffsetRotateOnSend( + reprojectedSpecklePt, + _settingsStore.Current.SpeckleUnits ); return scaledMovedRotatedPoint; } catch (ArgumentException ex) { throw new SpeckleConversionException( - $"Conversion to Spatial Reference {_contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference.Name} failed", + $"Conversion to Spatial Reference {_settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference.Name} failed", ex ); } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PolygonFeatureToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PolygonFeatureToSpeckleConverter.cs index 51b810c2a..8d242f41f 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PolygonFeatureToSpeckleConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PolygonFeatureToSpeckleConverter.cs @@ -7,15 +7,15 @@ namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw; public class PolygonFeatureToSpeckleConverter : ITypedConverter> { private readonly ITypedConverter _segmentConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public PolygonFeatureToSpeckleConverter( ITypedConverter segmentConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _segmentConverter = segmentConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public IReadOnlyList Convert(ACG.Polygon target) @@ -44,7 +44,7 @@ public class PolygonFeatureToSpeckleConverter : ITypedConverter(), - units = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString + units = _settingsStore.Current.SpeckleUnits }; polygonList.Add(polygon); } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PolylineFeatureToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PolylineFeatureToSpeckleConverter.cs index 7906fe6f7..9d014424d 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PolylineFeatureToSpeckleConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PolylineFeatureToSpeckleConverter.cs @@ -6,15 +6,15 @@ namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw; public class PolyineFeatureToSpeckleConverter : ITypedConverter> { private readonly ITypedConverter _segmentConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public PolyineFeatureToSpeckleConverter( ITypedConverter segmentConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _segmentConverter = segmentConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public IReadOnlyList Convert(ACG.Polyline target) @@ -26,10 +26,9 @@ public class PolyineFeatureToSpeckleConverter : ITypedConverter { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; private readonly ITypedConverter _pointConverter; public SegmentCollectionToSpeckleConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter pointConverter ) { - _contextStack = contextStack; + _settingsStore = settingsStore; _pointConverter = pointConverter; } @@ -33,13 +33,12 @@ public class SegmentCollectionToSpeckleConverter : ITypedConverter new[] { pt.x, pt.y, pt.z, }).ToList(), closed = closed, - units = _contextStack.Current.SpeckleUnits + units = _settingsStore.Current.SpeckleUnits }; return polyline; diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/PointcloudLayerToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/PointcloudLayerToSpeckleConverter.cs index 825228519..978d036b4 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/PointcloudLayerToSpeckleConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/PointcloudLayerToSpeckleConverter.cs @@ -15,17 +15,17 @@ public class PointCloudToSpeckleConverter { private readonly ITypedConverter _pointConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public PointCloudToSpeckleConverter( ITypedConverter pointConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } private int GetPointColor(LasPoint pt, object renderer) @@ -103,7 +103,7 @@ public class PointCloudToSpeckleConverter colors = speckleColors, sizes = values, bbox = _boxConverter.Convert(target.QueryExtent()), - units = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString + units = _settingsStore.Current.SpeckleUnits }; speckleLayer.elements.Add(cloud); diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/RasterLayerToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/RasterLayerToSpeckleConverter.cs index bcc2fbb01..c806ba9a3 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/RasterLayerToSpeckleConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/RasterLayerToSpeckleConverter.cs @@ -1,5 +1,4 @@ using ArcGIS.Core.Data.Raster; -using ArcGIS.Core.Geometry; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Objects.GIS; @@ -12,15 +11,15 @@ namespace Speckle.Converters.ArcGIS3.ToSpeckle.TopLevel; public class RasterLayerToSpeckleConverter : IToSpeckleTopLevelConverter, ITypedConverter { private readonly ITypedConverter _gisRasterConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public RasterLayerToSpeckleConverter( ITypedConverter gisRasterConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _gisRasterConverter = gisRasterConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) @@ -37,7 +36,7 @@ public class RasterLayerToSpeckleConverter : IToSpeckleTopLevelConverter, ITyped // get active map CRS if layer CRS is empty if (spatialRefRaster.Unit is null) { - spatialRefRaster = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference; + spatialRefRaster = _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference; } speckleLayer.rasterCrs = new CRS { diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/VectorLayerToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/VectorLayerToSpeckleConverter.cs index 39ebe7868..eff7ea7d8 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/VectorLayerToSpeckleConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/VectorLayerToSpeckleConverter.cs @@ -1,5 +1,4 @@ using ArcGIS.Core.Data; -using ArcGIS.Core.Geometry; using ArcGIS.Desktop.Mapping; using Speckle.Converters.ArcGIS3.Utils; using Speckle.Converters.Common; @@ -14,15 +13,10 @@ namespace Speckle.Converters.ArcGIS3.ToSpeckle.TopLevel; public class VectorLayerToSpeckleConverter : IToSpeckleTopLevelConverter, ITypedConverter { private readonly ITypedConverter<(Row, string), IGisFeature> _gisFeatureConverter; - private readonly IConversionContextStack _contextStack; - public VectorLayerToSpeckleConverter( - ITypedConverter<(Row, string), IGisFeature> gisFeatureConverter, - IConversionContextStack contextStack - ) + public VectorLayerToSpeckleConverter(ITypedConverter<(Row, string), IGisFeature> gisFeatureConverter) { _gisFeatureConverter = gisFeatureConverter; - _contextStack = contextStack; } public Base Convert(object target) diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/CRSoffsetRotation.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/CRSoffsetRotation.cs index cd9e4b99c..bebb9097b 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/CRSoffsetRotation.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/CRSoffsetRotation.cs @@ -16,16 +16,15 @@ namespace Speckle.Converters.ArcGIS3.Utils; public struct CRSoffsetRotation { public ACG.SpatialReference SpatialReference { get; } - public string SpeckleUnitString { get; set; } public double LatOffset { get; set; } public double LonOffset { get; set; } public double TrueNorthRadians { get; set; } - public SOG.Point OffsetRotateOnReceive(SOG.Point pointOriginal) + public SOG.Point OffsetRotateOnReceive(SOG.Point pointOriginal, string speckleUnitString) { // scale point to match units of the SpatialReference string originalUnits = pointOriginal.units; - SOG.Point point = ScalePoint(pointOriginal, originalUnits, SpeckleUnitString); + SOG.Point point = ScalePoint(pointOriginal, originalUnits, speckleUnitString); // 1. rotate coordinates NormalizeAngle(); @@ -34,16 +33,16 @@ public struct CRSoffsetRotation // 2. offset coordinates x2 += LonOffset; y2 += LatOffset; - SOG.Point movedPoint = new(x2, y2, point.z, SpeckleUnitString); + SOG.Point movedPoint = new(x2, y2, point.z, speckleUnitString); return movedPoint; } - public SOG.Point OffsetRotateOnSend(SOG.Point point) + public SOG.Point OffsetRotateOnSend(SOG.Point point, string speckleUnitString) { // scale point to match units of the SpatialReference string originalUnits = point.units; - point = ScalePoint(point, originalUnits, SpeckleUnitString); + point = ScalePoint(point, originalUnits, speckleUnitString); // 1. offset coordinates NormalizeAngle(); @@ -52,7 +51,7 @@ public struct CRSoffsetRotation // 2. rotate coordinates double x2 = x * Math.Cos(TrueNorthRadians) + y * Math.Sin(TrueNorthRadians); double y2 = -x * Math.Sin(TrueNorthRadians) + y * Math.Cos(TrueNorthRadians); - SOG.Point movedPoint = new(x2, y2, point.z, SpeckleUnitString); + SOG.Point movedPoint = new(x2, y2, point.z, speckleUnitString); return movedPoint; } @@ -63,11 +62,6 @@ public struct CRSoffsetRotation return new SOG.Point(point.x * scaleFactor, point.y * scaleFactor, point.z * scaleFactor, toUnit); } - private readonly string GetSpeckleUnit(ACG.SpatialReference spatialReference) - { - return new ArcGISToSpeckleUnitConverter().ConvertOrThrow(spatialReference.Unit); - } - private void NormalizeAngle() { if (TrueNorthRadians < -2 * Math.PI || TrueNorthRadians > 2 * Math.PI) @@ -112,7 +106,6 @@ public struct CRSoffsetRotation public CRSoffsetRotation(ACG.SpatialReference spatialReference) { SpatialReference = spatialReference; - SpeckleUnitString = GetSpeckleUnit(spatialReference); LatOffset = 0; LonOffset = 0; TrueNorthRadians = 0; @@ -127,7 +120,6 @@ public struct CRSoffsetRotation ACG.SpatialReference spatialReference = map.SpatialReference; SpatialReference = spatialReference; - SpeckleUnitString = GetSpeckleUnit(spatialReference); // read from metadata string metadata = map.GetMetadata(); @@ -185,7 +177,6 @@ public struct CRSoffsetRotation ) { SpatialReference = spatialReference; - SpeckleUnitString = GetSpeckleUnit(spatialReference); LatOffset = latOffset; LonOffset = lonOffset; TrueNorthRadians = trueNorthRadians; diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/CrsUtils.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/CrsUtils.cs index 735388a18..8177e3096 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/CrsUtils.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/CrsUtils.cs @@ -5,16 +5,9 @@ using Speckle.Sdk.Models; namespace Speckle.Converters.ArcGIS3.Utils; [GenerateAutoInterface] -public class CrsUtils : ICrsUtils +public class CrsUtils(IConverterSettingsStore settingsStore) : ICrsUtils { - private readonly IConversionContextStack _contextStack; - - public CrsUtils(IConversionContextStack contextStack) - { - _contextStack = contextStack; - } - - public void FindSetCrsDataOnReceive(Base? rootObj) + public IDisposable? FindSetCrsDataOnReceive(Base? rootObj) { if (rootObj is SGIS.VectorLayer vLayer) { @@ -31,12 +24,14 @@ public class CrsUtils : ICrsUtils double trueNorthRadians = System.Convert.ToDouble((vLayer.crs?.rotation == null) ? 0 : vLayer.crs.rotation); double latOffset = System.Convert.ToDouble((vLayer.crs?.offset_y == null) ? 0 : vLayer.crs.offset_y); double lonOffset = System.Convert.ToDouble((vLayer.crs?.offset_x == null) ? 0 : vLayer.crs.offset_x); - _contextStack.Current.Document.ActiveCRSoffsetRotation = new CRSoffsetRotation( - spatialRef, - latOffset, - lonOffset, - trueNorthRadians + return settingsStore.Push(x => + x with + { + ActiveCRSoffsetRotation = new CRSoffsetRotation(spatialRef, latOffset, lonOffset, trueNorthRadians) + } ); } + + return null; } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/FeatureClassUtils.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/FeatureClassUtils.cs index acaea4e63..7f851c03c 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/FeatureClassUtils.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/FeatureClassUtils.cs @@ -15,15 +15,15 @@ namespace Speckle.Converters.ArcGIS3.Utils; public class FeatureClassUtils : IFeatureClassUtils { private readonly IArcGISFieldUtils _fieldsUtils; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public FeatureClassUtils( IArcGISFieldUtils fieldsUtils, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _fieldsUtils = fieldsUtils; - _contextStack = contextStack; + _settingsStore = settingsStore; } public void ClearExistingDataset(string featureClassName) @@ -66,8 +66,7 @@ public class FeatureClassUtils : IFeatureClassUtils private Geodatabase GetDatabase() { // get database - FileGeodatabaseConnectionPath fileGeodatabaseConnectionPath = - new(_contextStack.Current.Document.SpeckleDatabasePath); + FileGeodatabaseConnectionPath fileGeodatabaseConnectionPath = new(_settingsStore.Current.SpeckleDatabasePath); Geodatabase geodatabase = new(fileGeodatabaseConnectionPath); return geodatabase; @@ -98,7 +97,7 @@ public class FeatureClassUtils : IFeatureClassUtils speckleType = speckleType.Length > 10 ? speckleType[..9] : speckleType; string? parentId = context.Parent?.Current.id; - CRSoffsetRotation activeSR = _contextStack.Current.Document.ActiveCRSoffsetRotation; + CRSoffsetRotation activeSR = _settingsStore.Current.ActiveCRSoffsetRotation; string xOffset = Convert.ToString(activeSR.LonOffset).Replace(".", "_"); xOffset = xOffset.Length > 15 ? xOffset[..14] : xOffset; @@ -217,7 +216,7 @@ public class FeatureClassUtils : IFeatureClassUtils try { ShapeDescription shpDescription = - new(geomType, _contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference) { HasZ = true }; + new(geomType, _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference) { HasZ = true }; FeatureClassDescription featureClassDescription = new(featureClassName, fields, shpDescription); FeatureClassToken featureClassToken = schemaBuilder.Create(featureClassDescription); } diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared.DependencyInjection/AutocadConverterModule.cs b/Converters/Autocad/Speckle.Converters.AutocadShared.DependencyInjection/AutocadConverterModule.cs index dfee8179f..0c240a973 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared.DependencyInjection/AutocadConverterModule.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared.DependencyInjection/AutocadConverterModule.cs @@ -1,4 +1,3 @@ -using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Speckle.Autofac.DependencyInjection; using Speckle.Converters.Autocad; @@ -11,11 +10,16 @@ public class AutocadConverterModule : ISpeckleModule { public void Load(SpeckleContainerBuilder builder) { + //register types by default + builder.ScanAssemblyOfType(); // add single root converter builder.AddRootCommon(); // add application converters and context stack builder.AddApplicationConverters(); - builder.AddScoped, AutocadConversionContextStack>(); + builder.AddScoped< + IConverterSettingsStore, + ConverterSettingsStore + >(); } } diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/AutocadConversionContextStack.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/AutocadConversionContextStack.cs index 1e08b6596..e69de29bb 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/AutocadConversionContextStack.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/AutocadConversionContextStack.cs @@ -1,21 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using Autodesk.AutoCAD.DatabaseServices; -using Speckle.Converters.Common; - -namespace Speckle.Converters.Autocad; - -// POC: Suppressed naming warning for now, but we should evaluate if we should follow this or disable it. -[SuppressMessage( - "Naming", - "CA1711:Identifiers should not have incorrect suffix", - Justification = "Name ends in Stack but it is in fact a Stack, just not inheriting from `System.Collections.Stack`" -)] -public class AutocadConversionContextStack : ConversionContextStack -{ - public AutocadConversionContextStack(IHostToSpeckleUnitConverter unitConverter) - : base( - Application.DocumentManager.CurrentDocument, - Application.DocumentManager.CurrentDocument.Database.Insunits, - unitConverter - ) { } -} diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/AutocadConversionSettings.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/AutocadConversionSettings.cs new file mode 100644 index 000000000..093f92e9b --- /dev/null +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/AutocadConversionSettings.cs @@ -0,0 +1,3 @@ +namespace Speckle.Converters.Autocad; + +public record AutocadConversionSettings(Document Document, string SpeckleUnits); diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/AutocadConversionSettingsFactory.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/AutocadConversionSettingsFactory.cs new file mode 100644 index 000000000..08b4d4a68 --- /dev/null +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/AutocadConversionSettingsFactory.cs @@ -0,0 +1,12 @@ +using Speckle.Converters.Common; +using Speckle.InterfaceGenerator; + +namespace Speckle.Converters.Autocad; + +[GenerateAutoInterface] +public class AutocadConversionSettingsFactory(IHostToSpeckleUnitConverter unitsConverter) + : IAutocadConversionSettingsFactory +{ + public AutocadConversionSettings Create(Document document) => + new(document, unitsConverter.ConvertOrThrow(document.Database.Insunits)); +} diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/AutocadRootToHostConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/AutocadRootToHostConverter.cs index 9247b1d32..e98f14e2f 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/AutocadRootToHostConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/AutocadRootToHostConverter.cs @@ -9,15 +9,15 @@ namespace Speckle.Converters.Autocad; public class AutocadRootToHostConverter : IRootToSpeckleConverter { private readonly IFactory _toSpeckle; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public AutocadRootToHostConverter( IFactory toSpeckle, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _toSpeckle = toSpeckle; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) @@ -33,9 +33,9 @@ public class AutocadRootToHostConverter : IRootToSpeckleConverter try { - using (var l = _contextStack.Current.Document.LockDocument()) + using (var l = _settingsStore.Current.Document.LockDocument()) { - using (var tr = _contextStack.Current.Document.Database.TransactionManager.StartTransaction()) + using (var tr = _settingsStore.Current.Document.Database.TransactionManager.StartTransaction()) { var objectConverter = _toSpeckle.ResolveInstance(type.Name); diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/GlobalUsings.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/GlobalUsings.cs index 5be307894..6f30de24d 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/GlobalUsings.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/GlobalUsings.cs @@ -1,7 +1,6 @@ global using ABR = Autodesk.AutoCAD.BoundaryRepresentation; global using ADB = Autodesk.AutoCAD.DatabaseServices; global using AG = Autodesk.AutoCAD.Geometry; -global using Application = Autodesk.AutoCAD.ApplicationServices.Core.Application; global using Document = Autodesk.AutoCAD.ApplicationServices.Document; global using SOG = Speckle.Objects.Geometry; global using SOP = Speckle.Objects.Primitive; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/Speckle.Converters.AutocadShared.projitems b/Converters/Autocad/Speckle.Converters.AutocadShared/Speckle.Converters.AutocadShared.projitems index 8fb784a3a..0306a5276 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/Speckle.Converters.AutocadShared.projitems +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/Speckle.Converters.AutocadShared.projitems @@ -9,6 +9,8 @@ Speckle.Converters.AutocadShared + + diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/ArcToHostConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/ArcToHostConverter.cs index 37f9268bc..c86714f4e 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/ArcToHostConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/ArcToHostConverter.cs @@ -9,17 +9,17 @@ public class ArcToHostConverter : IToHostTopLevelConverter, ITypedConverter _arcConverter; private readonly ITypedConverter _planeConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public ArcToHostConverter( ITypedConverter arcConverter, ITypedConverter planeConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _arcConverter = arcConverter; _planeConverter = planeConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public object Convert(Base target) => Convert((SOG.Arc)target); diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/CircleToHostConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/CircleToHostConverter.cs index 8c3c53464..67faf5769 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/CircleToHostConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/CircleToHostConverter.cs @@ -10,17 +10,17 @@ public class CircleToHostConverter : IToHostTopLevelConverter, ITypedConverter _pointConverter; private readonly ITypedConverter _vectorConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public CircleToHostConverter( ITypedConverter pointConverter, ITypedConverter vectorConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; _vectorConverter = vectorConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public object Convert(Base target) => Convert((SOG.Circle)target); @@ -29,7 +29,7 @@ public class CircleToHostConverter : IToHostTopLevelConverter, ITypedConverter _pointConverter; private readonly ITypedConverter _vectorConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public EllipseToHostConverter( ITypedConverter pointConverter, ITypedConverter vectorConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; _vectorConverter = vectorConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public object Convert(Base target) => Convert((SOG.Ellipse)target); @@ -28,7 +28,7 @@ public class EllipseToHostConverter : IToHostTopLevelConverter, ITypedConverter< /// Throws if any ellipse radius value is null. public ADB.Ellipse Convert(SOG.Ellipse target) { - double f = Units.GetConversionFactor(target.units, _contextStack.Current.SpeckleUnits); + double f = Units.GetConversionFactor(target.units, _settingsStore.Current.SpeckleUnits); AG.Point3d origin = _pointConverter.Convert(target.plane.origin); AG.Vector3d normal = _vectorConverter.Convert(target.plane.normal); AG.Vector3d xAxis = _vectorConverter.Convert(target.plane.xdir); diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/MeshToHostConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/MeshToHostConverter.cs index 5a1312f80..340a601c4 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/MeshToHostConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/MeshToHostConverter.cs @@ -10,15 +10,15 @@ namespace Speckle.Converters.Autocad.Geometry; public class MeshToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public MeshToHostConverter( ITypedConverter pointConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public object Convert(Base target) => Convert((SOG.Mesh)target); @@ -40,13 +40,14 @@ public class MeshToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _vectorConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public AutocadPolycurveToHostPolyline2dRawConverter( ITypedConverter vectorConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _vectorConverter = vectorConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public ADB.Polyline2d Convert(SOG.Autocad.AutocadPolycurve target) @@ -35,7 +36,7 @@ public class AutocadPolycurveToHostPolyline2dRawConverter } // get vertices - double f = Units.GetConversionFactor(target.units, _contextStack.Current.SpeckleUnits); + double f = Units.GetConversionFactor(target.units, _settingsStore.Current.SpeckleUnits); List points = target.value.ConvertToPoint3d(f); // check for invalid bulges @@ -62,9 +63,9 @@ public class AutocadPolycurveToHostPolyline2dRawConverter }; // add polyline2d to document - ADB.Transaction tr = _contextStack.Current.Document.TransactionManager.TopTransaction; + ADB.Transaction tr = _settingsStore.Current.Document.TransactionManager.TopTransaction; var btr = (ADB.BlockTableRecord) - tr.GetObject(_contextStack.Current.Document.Database.CurrentSpaceId, ADB.OpenMode.ForWrite); + tr.GetObject(_settingsStore.Current.Document.Database.CurrentSpaceId, ADB.OpenMode.ForWrite); btr.AppendEntity(polyline); tr.AddNewlyCreatedDBObject(polyline, true); diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/AutocadPolycurveToHostPolyline3dRawConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/AutocadPolycurveToHostPolyline3dRawConverter.cs index d58073f0d..20c47f7dc 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/AutocadPolycurveToHostPolyline3dRawConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/AutocadPolycurveToHostPolyline3dRawConverter.cs @@ -1,3 +1,4 @@ +using Speckle.Converters.Autocad; using Speckle.Converters.Autocad.Extensions; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; @@ -8,26 +9,26 @@ namespace Speckle.Converters.Autocad2023.ToHost.Raw; public class AutocadPolycurveToHostPolyline3dRawConverter : ITypedConverter { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; - public AutocadPolycurveToHostPolyline3dRawConverter(IConversionContextStack contextStack) + public AutocadPolycurveToHostPolyline3dRawConverter(IConverterSettingsStore settingsStore) { - _contextStack = contextStack; + _settingsStore = settingsStore; } public ADB.Polyline3d Convert(SOG.Autocad.AutocadPolycurve target) { // get vertices - double f = Units.GetConversionFactor(target.units, _contextStack.Current.SpeckleUnits); + double f = Units.GetConversionFactor(target.units, _settingsStore.Current.SpeckleUnits); List points = target.value.ConvertToPoint3d(f); // create the polyline3d using the empty constructor ADB.Polyline3d polyline = new() { Closed = target.closed }; // add polyline3d to document - ADB.Transaction tr = _contextStack.Current.Document.TransactionManager.TopTransaction; + ADB.Transaction tr = _settingsStore.Current.Document.TransactionManager.TopTransaction; var btr = (ADB.BlockTableRecord) - tr.GetObject(_contextStack.Current.Document.Database.CurrentSpaceId, ADB.OpenMode.ForWrite); + tr.GetObject(_settingsStore.Current.Document.Database.CurrentSpaceId, ADB.OpenMode.ForWrite); btr.AppendEntity(polyline); tr.AddNewlyCreatedDBObject(polyline, true); diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/AutocadPolycurveToHostPolylineRawConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/AutocadPolycurveToHostPolylineRawConverter.cs index 57e2e5126..dff137087 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/AutocadPolycurveToHostPolylineRawConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/AutocadPolycurveToHostPolylineRawConverter.cs @@ -1,3 +1,4 @@ +using Speckle.Converters.Autocad; using Speckle.Converters.Autocad.Extensions; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; @@ -8,15 +9,15 @@ namespace Speckle.Converters.Autocad2023.ToHost.Raw; public class AutocadPolycurveToHostPolylineRawConverter : ITypedConverter { private readonly ITypedConverter _vectorConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public AutocadPolycurveToHostPolylineRawConverter( ITypedConverter vectorConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _vectorConverter = vectorConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public ADB.Polyline Convert(SOG.Autocad.AutocadPolycurve target) @@ -28,7 +29,7 @@ public class AutocadPolycurveToHostPolylineRawConverter : ITypedConverter points2d = target.value.ConvertToPoint2d(f); ADB.Polyline polyline = diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/PointToHostRawConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/PointToHostRawConverter.cs index 7673ac2e7..b70327eb6 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/PointToHostRawConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/PointToHostRawConverter.cs @@ -6,16 +6,16 @@ namespace Speckle.Converters.Autocad.ToHost.Raw; public class PointToHostRawConverter : ITypedConverter { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; - public PointToHostRawConverter(IConversionContextStack contextStack) + public PointToHostRawConverter(IConverterSettingsStore settingsStore) { - _contextStack = contextStack; + _settingsStore = settingsStore; } public AG.Point3d Convert(SOG.Point target) { - double f = Units.GetConversionFactor(target.units, _contextStack.Current.SpeckleUnits); + double f = Units.GetConversionFactor(target.units, _settingsStore.Current.SpeckleUnits); AG.Point3d point = new(target.x * f, target.y * f, target.z * f); return point; } diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/PolycurveToHostPolylineRawConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/PolycurveToHostPolylineRawConverter.cs index 1a3425ebe..d7ab9ea8b 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/PolycurveToHostPolylineRawConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/PolycurveToHostPolylineRawConverter.cs @@ -1,3 +1,4 @@ +using Speckle.Converters.Autocad; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; @@ -8,15 +9,15 @@ namespace Speckle.Converters.AutocadShared.ToHost.Raw; /// public class PolycurveToHostPolylineRawConverter : ITypedConverter { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; private readonly ITypedConverter _pointConverter; public PolycurveToHostPolylineRawConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter pointConverter ) { - _contextStack = contextStack; + _settingsStore = settingsStore; _pointConverter = pointConverter; } @@ -26,7 +27,7 @@ public class PolycurveToHostPolylineRawConverter : ITypedConverter { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; - public VectorToHostRawConverter(IConversionContextStack contextStack) + public VectorToHostRawConverter(IConverterSettingsStore settingsStore) { - _contextStack = contextStack; + _settingsStore = settingsStore; } public object Convert(Base target) => Convert((SOG.Vector)target); public AG.Vector3d Convert(SOG.Vector target) { - double f = Units.GetConversionFactor(target.units, _contextStack.Current.SpeckleUnits); + double f = Units.GetConversionFactor(target.units, _settingsStore.Current.SpeckleUnits); return new(target.x * f, target.y * f, target.z * f); } } diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PolyfaceMeshToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PolyfaceMeshToSpeckleConverter.cs index e1f7c5c31..5e5cffd92 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PolyfaceMeshToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PolyfaceMeshToSpeckleConverter.cs @@ -16,17 +16,17 @@ public class DBPolyfaceMeshToSpeckleConverter : IToSpeckleTopLevelConverter { private readonly ITypedConverter _pointConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public DBPolyfaceMeshToSpeckleConverter( ITypedConverter pointConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) => RawConvert((ADB.PolyFaceMesh)target); @@ -37,7 +37,7 @@ public class DBPolyfaceMeshToSpeckleConverter : IToSpeckleTopLevelConverter List faces = new(); List faceVisibility = new(); List colors = new(); - using (ADB.Transaction tr = _contextStack.Current.Document.Database.TransactionManager.StartTransaction()) + using (ADB.Transaction tr = _settingsStore.Current.Document.Database.TransactionManager.StartTransaction()) { foreach (ADB.ObjectId id in target) { @@ -98,7 +98,7 @@ public class DBPolyfaceMeshToSpeckleConverter : IToSpeckleTopLevelConverter vertices = vertices, faces = faces, colors = colors, - units = _contextStack.Current.SpeckleUnits, + units = _settingsStore.Current.SpeckleUnits, bbox = bbox, ["faceVisibility"] = faceVisibility }; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline2dToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline2dToSpeckleConverter.cs index e9e27cd84..519e7615f 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline2dToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline2dToSpeckleConverter.cs @@ -25,7 +25,7 @@ public class Polyline2dToSpeckleConverter private readonly ITypedConverter _splineConverter; private readonly ITypedConverter _vectorConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public Polyline2dToSpeckleConverter( ITypedConverter arcConverter, @@ -34,7 +34,7 @@ public class Polyline2dToSpeckleConverter ITypedConverter splineConverter, ITypedConverter vectorConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _arcConverter = arcConverter; @@ -43,7 +43,7 @@ public class Polyline2dToSpeckleConverter _splineConverter = splineConverter; _vectorConverter = vectorConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) => Convert((ADB.Polyline2d)target); @@ -78,7 +78,7 @@ public class Polyline2dToSpeckleConverter List vertices = target .GetSubEntities( ADB.OpenMode.ForRead, - _contextStack.Current.Document.TransactionManager.TopTransaction + _settingsStore.Current.Document.TransactionManager.TopTransaction ) .Where(e => e.VertexType != ADB.Vertex2dType.CurveFitVertex && e.VertexType != ADB.Vertex2dType.SplineFitVertex) // Do not collect fit vertex points, they are not used for creation .ToList(); @@ -160,7 +160,7 @@ public class Polyline2dToSpeckleConverter if (isSpline) { SOG.Curve spline = _splineConverter.Convert(target.Spline); - SOG.Polyline displayValue = segmentValues.ConvertToSpecklePolyline(_contextStack.Current.SpeckleUnits); + SOG.Polyline displayValue = segmentValues.ConvertToSpecklePolyline(_settingsStore.Current.SpeckleUnits); if (displayValue != null) { spline.displayValue = displayValue; @@ -185,7 +185,7 @@ public class Polyline2dToSpeckleConverter length = target.Length, area = target.Area, bbox = bbox, - units = _contextStack.Current.SpeckleUnits + units = _settingsStore.Current.SpeckleUnits }; return polycurve; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline3dToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline3dToSpeckleConverter.cs index 53c3a5608..42b8b4c13 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline3dToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline3dToSpeckleConverter.cs @@ -21,19 +21,19 @@ public class Polyline3dToSpeckleConverter private readonly ITypedConverter _pointConverter; private readonly ITypedConverter _splineConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public Polyline3dToSpeckleConverter( ITypedConverter pointConverter, ITypedConverter splineConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; _splineConverter = splineConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) => Convert((ADB.Polyline3d)target); @@ -60,7 +60,7 @@ public class Polyline3dToSpeckleConverter List vertices = target .GetSubEntities( ADB.OpenMode.ForRead, - _contextStack.Current.Document.TransactionManager.TopTransaction + _settingsStore.Current.Document.TransactionManager.TopTransaction ) .Where(e => e.VertexType != ADB.Vertex3dType.FitVertex) // Do not collect fit vertex points, they are not used for creation .ToList(); @@ -94,7 +94,7 @@ public class Polyline3dToSpeckleConverter } } - SOG.Polyline displayValue = segmentValues.ConvertToSpecklePolyline(_contextStack.Current.SpeckleUnits); + SOG.Polyline displayValue = segmentValues.ConvertToSpecklePolyline(_settingsStore.Current.SpeckleUnits); if (displayValue != null) { spline.displayValue = displayValue; @@ -105,7 +105,7 @@ public class Polyline3dToSpeckleConverter // for simple polyline3ds just get the polyline segment from the value else { - SOG.Polyline polyline = value.ConvertToSpecklePolyline(_contextStack.Current.SpeckleUnits); + SOG.Polyline polyline = value.ConvertToSpecklePolyline(_settingsStore.Current.SpeckleUnits); if (target.Closed) { polyline.closed = true; @@ -125,7 +125,7 @@ public class Polyline3dToSpeckleConverter closed = target.Closed, length = target.Length, bbox = bbox, - units = _contextStack.Current.SpeckleUnits + units = _settingsStore.Current.SpeckleUnits }; return polycurve; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PolylineToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PolylineToSpeckleConverter.cs index ac8a1f925..c8e8895de 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PolylineToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PolylineToSpeckleConverter.cs @@ -19,21 +19,21 @@ public class PolylineToSpeckleConverter private readonly ITypedConverter _arcConverter; private readonly ITypedConverter _vectorConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public PolylineToSpeckleConverter( ITypedConverter lineConverter, ITypedConverter arcConverter, ITypedConverter vectorConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _lineConverter = lineConverter; _arcConverter = arcConverter; _vectorConverter = vectorConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) => Convert((ADB.Polyline)target); @@ -86,7 +86,7 @@ public class PolylineToSpeckleConverter length = target.Length, area = target.Area, bbox = bbox, - units = _contextStack.Current.SpeckleUnits + units = _settingsStore.Current.SpeckleUnits }; return polycurve; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SubDMeshToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SubDMeshToSpeckleConverter.cs index 1a56bb9b8..212a9d93b 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SubDMeshToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SubDMeshToSpeckleConverter.cs @@ -9,17 +9,17 @@ public class DBSubDMeshToSpeckleConverter : IToSpeckleTopLevelConverter { private readonly ITypedConverter _pointConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public DBSubDMeshToSpeckleConverter( ITypedConverter pointConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) => RawConvert((ADB.SubDMesh)target); @@ -78,7 +78,7 @@ public class DBSubDMeshToSpeckleConverter : IToSpeckleTopLevelConverter vertices = vertices, faces = faces, colors = colors, - units = _contextStack.Current.SpeckleUnits, + units = _settingsStore.Current.SpeckleUnits, bbox = bbox }; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/BoxToSpeckleRawConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/BoxToSpeckleRawConverter.cs index 79fe86b63..60a675f23 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/BoxToSpeckleRawConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/BoxToSpeckleRawConverter.cs @@ -7,15 +7,15 @@ namespace Speckle.Converters.Autocad.ToSpeckle.Raw; public class BoxToSpeckleRawConverter : ITypedConverter { private readonly ITypedConverter _planeConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public BoxToSpeckleRawConverter( ITypedConverter planeConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _planeConverter = planeConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) => Convert((ADB.Extents3d)target); @@ -29,7 +29,7 @@ public class BoxToSpeckleRawConverter : ITypedConverter double volume = xSize.Length * ySize.Length * zSize.Length; // get the base plane of the bounding box from extents and current UCS - var ucs = _contextStack.Current.Document.Editor.CurrentUserCoordinateSystem.CoordinateSystem3d; + var ucs = _settingsStore.Current.Document.Editor.CurrentUserCoordinateSystem.CoordinateSystem3d; AG.Plane acadPlane = new(target.MinPoint, ucs.Xaxis, ucs.Yaxis); SOG.Plane plane = _planeConverter.Convert(acadPlane); @@ -40,7 +40,7 @@ public class BoxToSpeckleRawConverter : ITypedConverter xSize = xSize, ySize = ySize, zSize = zSize, - units = _contextStack.Current.SpeckleUnits, + units = _settingsStore.Current.SpeckleUnits, volume = volume, }; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/CircularArc3dToSpeckleRawConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/CircularArc3dToSpeckleRawConverter.cs index 379980deb..912868884 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/CircularArc3dToSpeckleRawConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/CircularArc3dToSpeckleRawConverter.cs @@ -7,17 +7,17 @@ public class CircularArc3dToSpeckleConverter : ITypedConverter _pointConverter; private readonly ITypedConverter _planeConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public CircularArc3dToSpeckleConverter( ITypedConverter pointConverter, ITypedConverter planeConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; _planeConverter = planeConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public SOG.Arc Convert(AG.CircularArc3d target) @@ -37,7 +37,7 @@ public class CircularArc3dToSpeckleConverter : ITypedConverter private readonly ITypedConverter _pointConverter; private readonly ITypedConverter _planeConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public DBArcToSpeckleRawConverter( ITypedConverter pointConverter, ITypedConverter planeConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; _planeConverter = planeConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) => Convert((ADB.Arc)target); @@ -42,7 +42,7 @@ public class DBArcToSpeckleRawConverter : ITypedConverter target.StartAngle, target.EndAngle, target.TotalAngle, - _contextStack.Current.SpeckleUnits + _settingsStore.Current.SpeckleUnits ) { startPoint = start, diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBCircleToSpeckleRawConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBCircleToSpeckleRawConverter.cs index 3029cb006..2014997ff 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBCircleToSpeckleRawConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBCircleToSpeckleRawConverter.cs @@ -8,17 +8,17 @@ public class DBCircleToSpeckleRawConverter : ITypedConverter _planeConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public DBCircleToSpeckleRawConverter( ITypedConverter planeConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _planeConverter = planeConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) => Convert((ADB.Circle)target); @@ -32,7 +32,7 @@ public class DBCircleToSpeckleRawConverter : ITypedConverter _circleConverter; private readonly ITypedConverter _ellipseConverter; private readonly ITypedConverter _splineConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public DBCurveToSpeckleRawConverter( ITypedConverter lineConverter, @@ -26,7 +26,7 @@ public class DBCurveToSpeckleRawConverter : ITypedConverter circleConverter, ITypedConverter ellipseConverter, ITypedConverter splineConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _lineConverter = lineConverter; @@ -37,7 +37,7 @@ public class DBCurveToSpeckleRawConverter : ITypedConverter diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBEllipseToSpeckleRawConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBEllipseToSpeckleRawConverter.cs index 54b1cf947..39acc0a66 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBEllipseToSpeckleRawConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBEllipseToSpeckleRawConverter.cs @@ -8,17 +8,17 @@ public class DBEllipseToSpeckleRawConverter : ITypedConverter _planeConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public DBEllipseToSpeckleRawConverter( ITypedConverter planeConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _planeConverter = planeConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) => Convert((ADB.Ellipse)target); @@ -37,7 +37,7 @@ public class DBEllipseToSpeckleRawConverter : ITypedConverter { private readonly ITypedConverter _pointConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public DBLineToSpeckleRawConverter( ITypedConverter pointConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) => Convert((ADB.Line)target); @@ -28,7 +28,7 @@ public class DBLineToSpeckleRawConverter : ITypedConverter { start = _pointConverter.Convert(target.StartPoint), end = _pointConverter.Convert(target.EndPoint), - units = _contextStack.Current.SpeckleUnits, + units = _settingsStore.Current.SpeckleUnits, domain = new SOP.Interval { start = 0, end = target.Length }, bbox = _boxConverter.Convert(target.GeometricExtents) }; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBSolid3dToSpeckleRawConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBSolid3dToSpeckleRawConverter.cs index e647f66aa..93dcc700d 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBSolid3dToSpeckleRawConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/DBSolid3dToSpeckleRawConverter.cs @@ -8,17 +8,17 @@ public class Solid3dToSpeckleRawConverter : ITypedConverter _pointConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public Solid3dToSpeckleRawConverter( ITypedConverter pointConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) => Convert((ADB.Solid3d)target); @@ -75,7 +75,7 @@ public class Solid3dToSpeckleRawConverter : ITypedConverter _intervalConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public DBSplineToSpeckleRawConverter( ITypedConverter intervalConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _intervalConverter = intervalConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) => Convert((ADB.Spline)target); @@ -109,8 +109,8 @@ public class DBSplineToSpeckleRawConverter : ITypedConverter( ADB.OpenMode.ForRead, - _contextStack.Current.Document.TransactionManager.TopTransaction + _settingsStore.Current.Document.TransactionManager.TopTransaction ) .Where(e => e.VertexType != ADB.Vertex2dType.SplineControlVertex) // POC: not validated yet! .SelectMany(o => o.Position.ToArray()) @@ -139,7 +139,7 @@ public class DBSplineToSpeckleRawConverter : ITypedConverter( ADB.OpenMode.ForRead, - _contextStack.Current.Document.TransactionManager.TopTransaction + _settingsStore.Current.Document.TransactionManager.TopTransaction ) .Where(e => e.VertexType != ADB.Vertex3dType.ControlVertex) .SelectMany(o => o.Position.ToArray()) @@ -147,6 +147,6 @@ public class DBSplineToSpeckleRawConverter : ITypedConverter { private readonly ITypedConverter _pointConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public LineSegment3dToSpeckleRawConverter( ITypedConverter pointConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public SOG.Line Convert(AG.LineSegment3d target) => @@ -22,7 +22,7 @@ public class LineSegment3dToSpeckleRawConverter : ITypedConverter { private readonly ITypedConverter _vectorConverter; private readonly ITypedConverter _pointConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public PlaneToSpeckleRawConverter( ITypedConverter vectorConverter, ITypedConverter pointConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _vectorConverter = vectorConverter; _pointConverter = pointConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) => Convert((AG.Plane)target); @@ -30,6 +30,6 @@ public class PlaneToSpeckleRawConverter : ITypedConverter normal = _vectorConverter.Convert(target.Normal), xdir = _vectorConverter.Convert(target.GetCoordinateSystem().Xaxis), ydir = _vectorConverter.Convert(target.GetCoordinateSystem().Yaxis), - units = _contextStack.Current.SpeckleUnits, + units = _settingsStore.Current.SpeckleUnits, }; } diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/PointToSpeckleRawConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/PointToSpeckleRawConverter.cs index fde8a9dd1..a1e71fc87 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/PointToSpeckleRawConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/PointToSpeckleRawConverter.cs @@ -5,12 +5,12 @@ namespace Speckle.Converters.Autocad.ToSpeckle.Raw; public class PointToSpeckleRawConverter : ITypedConverter { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; - public PointToSpeckleRawConverter(IConversionContextStack contextStack) + public PointToSpeckleRawConverter(IConverterSettingsStore settingsStore) { - _contextStack = contextStack; + _settingsStore = settingsStore; } - public SOG.Point Convert(AG.Point3d target) => new(target.X, target.Y, target.Z, _contextStack.Current.SpeckleUnits); + public SOG.Point Convert(AG.Point3d target) => new(target.X, target.Y, target.Z, _settingsStore.Current.SpeckleUnits); } diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/VectorToSpeckleRawConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/VectorToSpeckleRawConverter.cs index 2eca1149e..6c9dddf68 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/VectorToSpeckleRawConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Raw/VectorToSpeckleRawConverter.cs @@ -5,13 +5,13 @@ namespace Speckle.Converters.Autocad.ToSpeckle.Raw; public class VectorToSpeckleRawConverter : ITypedConverter { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; - public VectorToSpeckleRawConverter(IConversionContextStack contextStack) + public VectorToSpeckleRawConverter(IConverterSettingsStore settingsStore) { - _contextStack = contextStack; + _settingsStore = settingsStore; } public SOG.Vector Convert(AG.Vector3d target) => - new(target.X, target.Y, target.Z, _contextStack.Current.SpeckleUnits); + new(target.X, target.Y, target.Z, _settingsStore.Current.SpeckleUnits); } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2024.DependencyInjection/Civil3dConverterModule.cs b/Converters/Civil3d/Speckle.Converters.Civil3d2024.DependencyInjection/Civil3dConverterModule.cs index 7e3e7e992..085040858 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2024.DependencyInjection/Civil3dConverterModule.cs +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2024.DependencyInjection/Civil3dConverterModule.cs @@ -1,4 +1,3 @@ -using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Speckle.Autofac.DependencyInjection; using Speckle.Converters.Autocad; @@ -12,13 +11,22 @@ public class Civil3dConverterModule : ISpeckleModule { public void Load(SpeckleContainerBuilder builder) { + //register types by default + builder.ScanAssemblyOfType(); + builder.ScanAssemblyOfType(); // Register single root builder.AddRootCommon(); // register all application converters builder.AddApplicationConverters(); builder.AddApplicationConverters(); - builder.AddScoped, Civil3dConversionContextStack>(); - builder.AddScoped, AutocadConversionContextStack>(); + builder.AddScoped< + IConverterSettingsStore, + ConverterSettingsStore + >(); + builder.AddScoped< + IConverterSettingsStore, + ConverterSettingsStore + >(); } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dConversionContextStack.cs b/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dConversionContextStack.cs deleted file mode 100644 index 0d803db25..000000000 --- a/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dConversionContextStack.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using Speckle.Converters.Common; - -namespace Speckle.Converters.Civil3d; - -// POC: Suppressed naming warning for now, but we should evaluate if we should follow this or disable it. -[SuppressMessage( - "Naming", - "CA1711:Identifiers should not have incorrect suffix", - Justification = "Name ends in Stack but it is in fact a Stack, just not inheriting from `System.Collections.Stack`" -)] -public class Civil3dConversionContextStack : ConversionContextStack -{ - public Civil3dConversionContextStack(IHostToSpeckleUnitConverter unitConverter) - : base( - Application.DocumentManager.CurrentDocument, - GetDocBuiltInUnit(Application.DocumentManager.CurrentDocument), - unitConverter - ) { } - - private static AAEC.BuiltInUnit GetDocBuiltInUnit(Document doc) - { - AAEC.BuiltInUnit unit = AAEC.BuiltInUnit.Dimensionless; - - using (ADB.Transaction tr = doc.Database.TransactionManager.StartTransaction()) - { - ADB.ObjectId id = AAEC.ApplicationServices.DrawingSetupVariables.GetInstance(doc.Database, false); - if (tr.GetObject(id, ADB.OpenMode.ForRead) is AAEC.ApplicationServices.DrawingSetupVariables setupVariables) - { - unit = setupVariables.LinearUnit; - } - - tr.Commit(); - } - - return unit; - } -} diff --git a/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dConversionSettings.cs b/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dConversionSettings.cs new file mode 100644 index 000000000..96d14528c --- /dev/null +++ b/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dConversionSettings.cs @@ -0,0 +1,7 @@ +namespace Speckle.Converters.Civil3d; + +public record Civil3dConversionSettings +{ + public Document Document { get; init; } + public string SpeckleUnits { get; init; } +} diff --git a/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dRootToHostConverter.cs b/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dRootToHostConverter.cs index 71c696687..f43428fd2 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dRootToHostConverter.cs +++ b/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dRootToHostConverter.cs @@ -9,15 +9,15 @@ namespace Speckle.Converters.Civil3d; public class Civil3dRootToHostConverter : IRootToSpeckleConverter { private readonly IFactory _toSpeckle; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public Civil3dRootToHostConverter( IFactory toSpeckle, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _toSpeckle = toSpeckle; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) @@ -33,9 +33,9 @@ public class Civil3dRootToHostConverter : IRootToSpeckleConverter try { - using (var l = _contextStack.Current.Document.LockDocument()) + using (var l = _settingsStore.Current.Document.LockDocument()) { - using (var tr = _contextStack.Current.Document.Database.TransactionManager.StartTransaction()) + using (var tr = _settingsStore.Current.Document.Database.TransactionManager.StartTransaction()) { var objectConverter = _toSpeckle.ResolveInstance(type.Name); diff --git a/Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.projitems b/Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.projitems index 1dc6ebd3b..98f7d2498 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.projitems +++ b/Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.projitems @@ -9,7 +9,7 @@ Speckle.Converters.Civil3dShared - + diff --git a/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/BuiltElements/PipeToSpeckleConverter.cs b/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/BuiltElements/PipeToSpeckleConverter.cs index dc8149972..d79ea563f 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/BuiltElements/PipeToSpeckleConverter.cs +++ b/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/BuiltElements/PipeToSpeckleConverter.cs @@ -15,7 +15,7 @@ public class PipeToSpeckleConverter : IToSpeckleTopLevelConverter private readonly ITypedConverter _boxConverter; private readonly ITypedConverter _solidConverter; private readonly ITypedConverter> _propertySetConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public PipeToSpeckleConverter( ITypedConverter pointConverter, @@ -23,7 +23,7 @@ public class PipeToSpeckleConverter : IToSpeckleTopLevelConverter ITypedConverter boxConverter, ITypedConverter solidConverter, ITypedConverter> propertySetConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; @@ -31,7 +31,7 @@ public class PipeToSpeckleConverter : IToSpeckleTopLevelConverter _boxConverter = boxConverter; _solidConverter = solidConverter; _propertySetConverter = propertySetConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) => Convert((CDB.Pipe)target); @@ -48,7 +48,7 @@ public class PipeToSpeckleConverter : IToSpeckleTopLevelConverter diameter = target.InnerDiameterOrWidth, length = target.Length3DToInsideEdge, displayValue = new List { pipeMesh }, - units = _contextStack.Current.SpeckleUnits + units = _settingsStore.Current.SpeckleUnits }; // POC: not setting property sets yet, need to determine connector parameter interoperability diff --git a/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/Raw/PropertySetToSpeckleRawConverter.cs b/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/Raw/PropertySetToSpeckleRawConverter.cs index d80c8c205..c2517f70b 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/Raw/PropertySetToSpeckleRawConverter.cs +++ b/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/Raw/PropertySetToSpeckleRawConverter.cs @@ -9,17 +9,17 @@ public class PropertySetToSpeckleRawConverter : ITypedConverter _vectorConverter; private readonly ITypedConverter _pointConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public PropertySetToSpeckleRawConverter( ITypedConverter vectorConverter, ITypedConverter pointConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _vectorConverter = vectorConverter; _pointConverter = pointConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public List Convert(object target) => Convert((AECPropDB.PropertySet)target); @@ -28,7 +28,8 @@ public class PropertySetToSpeckleRawConverter : ITypedConverter properties = new(); - ADB.Transaction tr = _contextStack.Current.Document.TransactionManager.TopTransaction; + //TODO using? + ADB.Transaction tr = _settingsStore.Current.Document.TransactionManager.TopTransaction; AECPropDB.PropertySetDefinition setDef = (AECPropDB.PropertySetDefinition) tr.GetObject(target.PropertySetDefinition, ADB.OpenMode.ForRead); diff --git a/Converters/Revit/Speckle.Converters.Revit2024.Tests/Speckle.Converters.Revit2024.Tests.csproj b/Converters/Revit/Speckle.Converters.Revit2024.Tests/Speckle.Converters.Revit2024.Tests.csproj index 43d7c78d9..58a09acda 100644 --- a/Converters/Revit/Speckle.Converters.Revit2024.Tests/Speckle.Converters.Revit2024.Tests.csproj +++ b/Converters/Revit/Speckle.Converters.Revit2024.Tests/Speckle.Converters.Revit2024.Tests.csproj @@ -25,6 +25,6 @@ - + diff --git a/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json index cb8165841..99a4afda0 100644 --- a/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json @@ -78,7 +78,7 @@ }, "Speckle.Revit2024.Fakes": { "type": "Direct", - "requested": "[0.3.0, )", + "requested": "[0.3.0, 1.0.0)", "resolved": "0.3.0", "contentHash": "gBwoXQDphcbfexbNojI+9Isht8M3citP9j3cMMsnDJPlj7l1rXHzFmzZ7sn0OzuKzmcG92sGvyR1RvsGUtfqYw==", "dependencies": { diff --git a/Converters/Revit/Speckle.Converters.RevitShared.DependencyInjection/RevitConverterModule.cs b/Converters/Revit/Speckle.Converters.RevitShared.DependencyInjection/RevitConverterModule.cs index 5335c03ad..657eea2e1 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared.DependencyInjection/RevitConverterModule.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared.DependencyInjection/RevitConverterModule.cs @@ -4,6 +4,7 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.DependencyInjection; using Speckle.Converters.RevitShared.Helpers; using Speckle.Converters.RevitShared.Services; +using Speckle.Converters.RevitShared.Settings; namespace Speckle.Converters.RevitShared.DependencyInjection; @@ -12,7 +13,7 @@ public class RevitConverterModule : ISpeckleModule public void Load(SpeckleContainerBuilder builder) { //register types by default - builder.ScanAssemblyOfType(); + builder.ScanAssemblyOfType(); // Register single root builder.AddRootCommon(); @@ -29,7 +30,10 @@ public class RevitConverterModule : ISpeckleModule builder.AddScoped(); // POC: the concrete type can come out if we remove all the reference to it - builder.AddScoped(); + builder.AddScoped< + IConverterSettingsStore, + ConverterSettingsStore + >(); builder.AddScoped(); diff --git a/Converters/Revit/Speckle.Converters.RevitShared.Tests/ModelCurveArrayToSpeckleConverterTests.cs b/Converters/Revit/Speckle.Converters.RevitShared.Tests/ModelCurveArrayToSpeckleConverterTests.cs index e7da376ba..7ee5b9408 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared.Tests/ModelCurveArrayToSpeckleConverterTests.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared.Tests/ModelCurveArrayToSpeckleConverterTests.cs @@ -2,9 +2,9 @@ using NUnit.Framework; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; using Speckle.Converters.RevitShared.Raw; using Speckle.Converters.RevitShared.Services; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects; using Speckle.Testing; @@ -15,7 +15,7 @@ public class ModelCurveArrayToSpeckleConverterTests : MoqTest [Test] public void Convert_Empty() { - var revitConversionContextStack = Create(); + var revitConversionContextStack = Create>(); var scalingServiceToSpeckle = Create(); var curveConverter = Create>(); @@ -32,7 +32,7 @@ public class ModelCurveArrayToSpeckleConverterTests : MoqTest [Test] public void Convert() { - var revitConversionContextStack = Create(); + var revitConversionContextStack = Create>(); var scalingServiceToSpeckle = Create(); var curveConverter = Create>(); @@ -50,11 +50,10 @@ public class ModelCurveArrayToSpeckleConverterTests : MoqTest geometry2.Setup(x => x.Length).Returns(3); geometry2.Setup(x => x.GetEndPoint(1)).Returns(endpoint2.Object); - var context = Create>(); - revitConversionContextStack.Setup(x => x.Current).Returns(context.Object); - var units = "units"; - context.Setup(x => x.SpeckleUnits).Returns(units); + revitConversionContextStack + .Setup(x => x.Current) + .Returns(new RevitConversionSettings(null!, DetailLevelType.Coarse, null, units)); var scaleLength = 2.2; scalingServiceToSpeckle.Setup(x => x.ScaleLength(2 + 3)).Returns(scaleLength); diff --git a/Converters/Revit/Speckle.Converters.RevitShared/Helpers/DisplayValueExtractor.cs b/Converters/Revit/Speckle.Converters.RevitShared/Helpers/DisplayValueExtractor.cs index df4f89988..648ba2e5a 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/Helpers/DisplayValueExtractor.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/Helpers/DisplayValueExtractor.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Converters.RevitShared.Settings; using Speckle.Sdk.Common; @@ -13,7 +14,7 @@ public sealed class DisplayValueExtractor List > _meshByMaterialConverter; private readonly ILogger _logger; - private readonly IRevitConversionContextStack _revitConversionContextStack; + private readonly IConverterSettingsStore _converterSettings; public DisplayValueExtractor( ITypedConverter< @@ -21,12 +22,12 @@ public sealed class DisplayValueExtractor List > meshByMaterialConverter, ILogger logger, - IRevitConversionContextStack revitConversionContextStack + IConverterSettingsStore converterSettings ) { _meshByMaterialConverter = meshByMaterialConverter; _logger = logger; - _revitConversionContextStack = revitConversionContextStack; + _converterSettings = converterSettings; } public List GetDisplayValue(DB.Element element, DB.Options? options = null) @@ -86,10 +87,7 @@ public sealed class DisplayValueExtractor private (List, List) GetSolidsAndMeshesFromElement(DB.Element element, DB.Options? options) { //options = ViewSpecificOptions ?? options ?? new Options() { DetailLevel = DetailLevelSetting }; - options ??= new DB.Options - { - DetailLevel = _detailLevelMap[_revitConversionContextStack.ToSpeckleSettings.DetailLevel] - }; + options ??= new DB.Options { DetailLevel = _detailLevelMap[_converterSettings.Current.DetailLevel] }; DB.GeometryElement geom; try diff --git a/Converters/Revit/Speckle.Converters.RevitShared/Helpers/IRevitConversionContextStack.cs b/Converters/Revit/Speckle.Converters.RevitShared/Helpers/IRevitConversionContextStack.cs deleted file mode 100644 index 1c9431a28..000000000 --- a/Converters/Revit/Speckle.Converters.RevitShared/Helpers/IRevitConversionContextStack.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Autodesk.Revit.DB; -using Speckle.Converters.Common; -using Speckle.Converters.RevitShared.Settings; - -namespace Speckle.Converters.RevitShared.Helpers; - -[System.Diagnostics.CodeAnalysis.SuppressMessage( - "Naming", - "CA1711:Identifiers should not have incorrect suffix", - Justification = "See base class justification" -)] -// POC: so this should *probably* be Document and NOT UI.UIDocument, the former is Conversion centric -// and the latter is more for connector -public interface IRevitConversionContextStack : IConversionContextStack -{ - public RevitMaterialCacheSingleton RenderMaterialProxyCache { get; } - public ToSpeckleSettings ToSpeckleSettings { get; } -} diff --git a/Converters/Revit/Speckle.Converters.RevitShared/Helpers/RevitConversionContextStack.cs b/Converters/Revit/Speckle.Converters.RevitShared/Helpers/RevitConversionContextStack.cs deleted file mode 100644 index 7c6d1590d..000000000 --- a/Converters/Revit/Speckle.Converters.RevitShared/Helpers/RevitConversionContextStack.cs +++ /dev/null @@ -1,45 +0,0 @@ -using Autodesk.Revit.DB; -using Speckle.Converters.Common; -using Speckle.Converters.RevitShared.Settings; - -namespace Speckle.Converters.RevitShared.Helpers; - -[System.Diagnostics.CodeAnalysis.SuppressMessage( - "Naming", - "CA1711:Identifiers should not have incorrect suffix", - Justification = "See base class justification" -)] -// POC: so this should *probably* be Document and NOT UI.UIDocument, the former is Conversion centric -// and the latter is more for connector -public class RevitConversionContextStack : ConversionContextStack, IRevitConversionContextStack -{ - public ToSpeckleSettings ToSpeckleSettings { get; } - - /// - /// Persistent cache (across conversions) for all generated render material proxies. Note this cache stores a list of render material proxies per element id. - /// - public RevitMaterialCacheSingleton RenderMaterialProxyCache { get; } - - public const double TOLERANCE = 0.0164042; // 5mm in ft - - public RevitConversionContextStack( - RevitContext context, - IHostToSpeckleUnitConverter unitConverter, - RevitMaterialCacheSingleton renderMaterialProxyCache, - ToSpeckleSettings toSpeckleSettings - ) - : base( - // POC: we probably should not get here without a valid document - // so should this perpetuate or do we assume this is valid? - // relting on the context.UIApplication?.ActiveUIDocument is not right - // this should be some IActiveDocument I suspect? - context.UIApplication?.ActiveUIDocument?.Document - ?? throw new SpeckleConversionException("Active UI document could not be determined"), - context.UIApplication.ActiveUIDocument.Document.GetUnits().GetFormatOptions(SpecTypeId.Length).GetUnitTypeId(), - unitConverter - ) - { - ToSpeckleSettings = toSpeckleSettings; - RenderMaterialProxyCache = renderMaterialProxyCache; - } -} diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ReferencePointConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/ReferencePointConverter.cs index 0872d3494..b24c986ba 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ReferencePointConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ReferencePointConverter.cs @@ -1,21 +1,18 @@ +using Speckle.Converters.Common; +using Speckle.Converters.RevitShared.Settings; + namespace Speckle.Converters.RevitShared.Helpers; /// /// POC: reference point functionality needs to be revisited (we are currently baking in these transforms into all geometry using the point and vector converters, and losing the transform). /// This converter uses the transform in the reference point setting and provides methods to transform points /// -public class ReferencePointConverter : IReferencePointConverter +public class ReferencePointConverter(IConverterSettingsStore converterSettings) + : IReferencePointConverter { - private readonly IRevitConversionContextStack _contextStack; - - public ReferencePointConverter(IRevitConversionContextStack contextStack) - { - _contextStack = contextStack; - } - public DB.XYZ ConvertToExternalCoordinates(DB.XYZ p, bool isPoint) { - if (_contextStack.ToSpeckleSettings.ReferencePointTransform is DB.Transform transform) + if (converterSettings.Current.ReferencePointTransform is DB.Transform transform) { return isPoint ? transform.Inverse.OfPoint(p) : transform.Inverse.OfVector(p); } @@ -25,7 +22,7 @@ public class ReferencePointConverter : IReferencePointConverter public DB.XYZ ConvertToInternalCoordinates(DB.XYZ p, bool isPoint) { - if (_contextStack.ToSpeckleSettings.ReferencePointTransform is DB.Transform transform) + if (converterSettings.Current.ReferencePointTransform is DB.Transform transform) { return isPoint ? transform.OfPoint(p) : transform.OfVector(p); } diff --git a/Converters/Revit/Speckle.Converters.RevitShared/RevitRootToSpeckleConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/RevitRootToSpeckleConverter.cs index db0dac628..288d91822 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/RevitRootToSpeckleConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/RevitRootToSpeckleConverter.cs @@ -1,6 +1,5 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; using Speckle.Sdk; using Speckle.Sdk.Models; @@ -10,21 +9,15 @@ namespace Speckle.Converters.RevitShared; public class RevitRootToSpeckleConverter : IRootToSpeckleConverter { private readonly IConverterResolver _toSpeckle; - private readonly ParameterValueExtractor _parameterValueExtractor; private readonly ITypedConverter>> _materialQuantityConverter; - private readonly IRevitConversionContextStack _contextStack; public RevitRootToSpeckleConverter( IConverterResolver toSpeckle, - ParameterValueExtractor parameterValueExtractor, - ITypedConverter>> materialQuantityConverter, - IRevitConversionContextStack contextStack + ITypedConverter>> materialQuantityConverter ) { _toSpeckle = toSpeckle; - _parameterValueExtractor = parameterValueExtractor; _materialQuantityConverter = materialQuantityConverter; - _contextStack = contextStack; } // POC: our assumption here is target is valid for conversion diff --git a/Converters/Revit/Speckle.Converters.RevitShared/Services/ScalingServiceToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/Services/ScalingServiceToSpeckle.cs index d254974af..c081a4629 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/Services/ScalingServiceToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/Services/ScalingServiceToSpeckle.cs @@ -1,5 +1,6 @@ using Autodesk.Revit.DB; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.Common; +using Speckle.Converters.RevitShared.Settings; using Speckle.InterfaceGenerator; namespace Speckle.Converters.RevitShared.Services; @@ -12,10 +13,10 @@ public sealed class ScalingServiceToSpeckle : IScalingServiceToSpeckle private readonly double _defaultLengthConversionFactor; // POC: this seems like the reverse relationship - public ScalingServiceToSpeckle(IRevitConversionContextStack contextStack) + public ScalingServiceToSpeckle(IConverterSettingsStore converterSettings) { // POC: this is accurate for the current context stack - Units documentUnits = contextStack.Current.Document.GetUnits(); + Units documentUnits = converterSettings.Current.Document.GetUnits(); FormatOptions formatOptions = documentUnits.GetFormatOptions(SpecTypeId.Length); var lengthUnitsTypeId = formatOptions.GetUnitTypeId(); _defaultLengthConversionFactor = ScaleStatic(1, lengthUnitsTypeId); diff --git a/Converters/Revit/Speckle.Converters.RevitShared/Settings/DetailLevelType.cs b/Converters/Revit/Speckle.Converters.RevitShared/Settings/DetailLevelType.cs new file mode 100644 index 000000000..21dc0a31b --- /dev/null +++ b/Converters/Revit/Speckle.Converters.RevitShared/Settings/DetailLevelType.cs @@ -0,0 +1,8 @@ +namespace Speckle.Converters.RevitShared.Settings; + +public enum DetailLevelType +{ + Coarse, + Medium, + Fine +} diff --git a/Converters/Revit/Speckle.Converters.RevitShared/Settings/ReferencePointType.cs b/Converters/Revit/Speckle.Converters.RevitShared/Settings/ReferencePointType.cs new file mode 100644 index 000000000..0a21caa9f --- /dev/null +++ b/Converters/Revit/Speckle.Converters.RevitShared/Settings/ReferencePointType.cs @@ -0,0 +1,8 @@ +namespace Speckle.Converters.RevitShared.Settings; + +public enum ReferencePointType +{ + InternalOrigin, + ProjectBase, + Survey +} diff --git a/Converters/Revit/Speckle.Converters.RevitShared/Settings/RevitConversionSettings.cs b/Converters/Revit/Speckle.Converters.RevitShared/Settings/RevitConversionSettings.cs new file mode 100644 index 000000000..5bd0142b2 --- /dev/null +++ b/Converters/Revit/Speckle.Converters.RevitShared/Settings/RevitConversionSettings.cs @@ -0,0 +1,9 @@ +namespace Speckle.Converters.RevitShared.Settings; + +public record RevitConversionSettings( + DB.Document Document, + DetailLevelType DetailLevel, + DB.Transform? ReferencePointTransform, + string SpeckleUnits, + double Tolerance = 0.0164042 // 5mm in ft +); diff --git a/Converters/Revit/Speckle.Converters.RevitShared/Settings/RevitConversionSettingsFactory.cs b/Converters/Revit/Speckle.Converters.RevitShared/Settings/RevitConversionSettingsFactory.cs new file mode 100644 index 000000000..3389ab1fa --- /dev/null +++ b/Converters/Revit/Speckle.Converters.RevitShared/Settings/RevitConversionSettingsFactory.cs @@ -0,0 +1,29 @@ +using Speckle.Converters.Common; +using Speckle.Converters.RevitShared.Helpers; +using Speckle.InterfaceGenerator; +using Speckle.Sdk.Common; + +namespace Speckle.Converters.RevitShared.Settings; + +[GenerateAutoInterface] +public class RevitConversionSettingsFactory( + RevitContext revitContext, + IHostToSpeckleUnitConverter unitConverter +) : IRevitConversionSettingsFactory +{ + public RevitConversionSettings Create( + DetailLevelType detailLevelType, + DB.Transform? referencePointTransform, + double tolerance = 0.0164042 // 5mm in ft + ) + { + var document = revitContext.UIApplication.NotNull().ActiveUIDocument.Document; + return new( + document, + detailLevelType, + referencePointTransform, + unitConverter.ConvertOrThrow(document.GetUnits().GetFormatOptions(DB.SpecTypeId.Length).GetUnitTypeId()), + tolerance + ); + } +} diff --git a/Converters/Revit/Speckle.Converters.RevitShared/Settings/ToSpeckleSettings.cs b/Converters/Revit/Speckle.Converters.RevitShared/Settings/ToSpeckleSettings.cs deleted file mode 100644 index 379dc6b1a..000000000 --- a/Converters/Revit/Speckle.Converters.RevitShared/Settings/ToSpeckleSettings.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Autodesk.Revit.DB; - -namespace Speckle.Converters.RevitShared.Settings; - -public enum DetailLevelType -{ - Coarse, - Medium, - Fine -} - -public enum ReferencePointType -{ - InternalOrigin, - ProjectBase, - Survey -} - -public record ToSpeckleSettings(DetailLevelType DetailLevel, Transform? ReferencePointTransform); diff --git a/Converters/Revit/Speckle.Converters.RevitShared/Speckle.Converters.RevitShared.projitems b/Converters/Revit/Speckle.Converters.RevitShared/Speckle.Converters.RevitShared.projitems index f45779154..5d688c13a 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/Speckle.Converters.RevitShared.projitems +++ b/Converters/Revit/Speckle.Converters.RevitShared/Speckle.Converters.RevitShared.projitems @@ -22,13 +22,15 @@ - - + + + + @@ -106,7 +108,6 @@ - diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/Raw/Geometry/PolylineConverterToHost.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/Raw/Geometry/PolylineConverterToHost.cs index 7ee23c845..9011cce00 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/Raw/Geometry/PolylineConverterToHost.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/Raw/Geometry/PolylineConverterToHost.cs @@ -1,7 +1,8 @@ using Autodesk.Revit.DB; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; using Speckle.Converters.RevitShared.Services; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects.Geometry; namespace Speckle.Converters.RevitShared.ToSpeckle; @@ -10,17 +11,17 @@ public class PolylineConverterToHost : ITypedConverter _lineConverter; private readonly ScalingServiceToHost _scalingService; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; public PolylineConverterToHost( ITypedConverter lineConverter, ScalingServiceToHost scalingService, - IRevitConversionContextStack contextStack + IConverterSettingsStore converterSettings ) { _lineConverter = lineConverter; _scalingService = scalingService; - _contextStack = contextStack; + _converterSettings = converterSettings; } public CurveArray Convert(Polyline target) @@ -79,7 +80,7 @@ public class PolylineConverterToHost : ITypedConverter diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/Raw/RenderMaterialToHostConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/Raw/RenderMaterialToHostConverter.cs index a9946b2d8..f4e87ca02 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/Raw/RenderMaterialToHostConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/Raw/RenderMaterialToHostConverter.cs @@ -1,25 +1,26 @@ using System.Text.RegularExpressions; using Autodesk.Revit.DB; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects.Other; namespace Speckle.Converters.RevitShared.ToHost.Raw; public class RenderMaterialToHostConverter : ITypedConverter { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; - public RenderMaterialToHostConverter(IRevitConversionContextStack contextStack) + public RenderMaterialToHostConverter(IConverterSettingsStore converterSettings) { - _contextStack = contextStack; + _converterSettings = converterSettings; } public DB.Material Convert(RenderMaterial target) { string matName = RemoveProhibitedCharacters(target.name); - using FilteredElementCollector collector = new(_contextStack.Current.Document); + using FilteredElementCollector collector = new(_converterSettings.Current.Document); // Try and find an existing material var existing = collector @@ -33,8 +34,11 @@ public class RenderMaterialToHostConverter : ITypedConverter, ITypedConverter { - private readonly IRevitConversionContextStack _contextStack; - private readonly ScalingServiceToHost _scalingService; private readonly ITypedConverter _materialConverter; private readonly ITypedConverter _surfaceConverter; private readonly ITypedConverter _curveConverter; public BrepTopLevelConverterToHost( - IRevitConversionContextStack contextStack, - ScalingServiceToHost scalingService, ITypedConverter materialConverter, ITypedConverter surfaceConverter, ITypedConverter curveConverter ) { - _contextStack = contextStack; - _scalingService = scalingService; _materialConverter = materialConverter; _surfaceConverter = surfaceConverter; _curveConverter = curveConverter; diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/DirectShapeTopLevelConverterToHost.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/DirectShapeTopLevelConverterToHost.cs index e7e58731f..1d7c5aa4d 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/DirectShapeTopLevelConverterToHost.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/DirectShapeTopLevelConverterToHost.cs @@ -1,6 +1,7 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Converters.RevitShared.ToSpeckle; using Speckle.Objects; using Speckle.Objects.Geometry; @@ -9,7 +10,7 @@ namespace Speckle.Converters.RevitShared.ToHost.TopLevel; [NameAndRankValue(nameof(SOBR.DirectShape), 0)] public sealed class DirectShapeTopLevelConverterToHost( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter brepConverter, ITypedConverter curveConverter, ITypedConverter meshConverter, @@ -56,9 +57,9 @@ public sealed class DirectShapeTopLevelConverterToHost( } } - var cat = contextStack.Current.Document.Settings.Categories.get_Item(bic); + var cat = converterSettings.Current.Document.Settings.Categories.get_Item(bic); - using var revitDs = DB.DirectShape.CreateElement(contextStack.Current.Document, cat.Id); + using var revitDs = DB.DirectShape.CreateElement(converterSettings.Current.Document, cat.Id); if (target.applicationId != null) { revitDs.ApplicationId = target.applicationId; diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/GridlineToHostTopLevelConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/GridlineToHostTopLevelConverter.cs index 288aaafc5..26d84918e 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/GridlineToHostTopLevelConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/GridlineToHostTopLevelConverter.cs @@ -1,6 +1,6 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Converters.RevitShared.ToSpeckle; using Speckle.Objects; @@ -10,15 +10,15 @@ namespace Speckle.Converters.RevitShared.ToHost.TopLevel; internal sealed class GridlineToHostTopLevelConverter : BaseTopLevelConverterToHost { private readonly ITypedConverter _curveConverter; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; public GridlineToHostTopLevelConverter( ITypedConverter curveConverter, - IRevitConversionContextStack contextStack + IConverterSettingsStore converterSettings ) { _curveConverter = curveConverter; - _contextStack = contextStack; + _converterSettings = converterSettings; } public override DB.Grid Convert(SOBE.GridLine target) @@ -27,8 +27,8 @@ internal sealed class GridlineToHostTopLevelConverter : BaseTopLevelConverterToH using DB.Grid revitGrid = curve switch { - DB.Arc arc => DB.Grid.Create(_contextStack.Current.Document, arc), - DB.Line line => DB.Grid.Create(_contextStack.Current.Document, line), + DB.Arc arc => DB.Grid.Create(_converterSettings.Current.Document, arc), + DB.Line line => DB.Grid.Create(_converterSettings.Current.Document, line), _ => throw new SpeckleConversionException($"Grid line curve is of type {curve.GetType()} which is not supported") }; @@ -42,7 +42,7 @@ internal sealed class GridlineToHostTopLevelConverter : BaseTopLevelConverterToH private bool GridNameIsTaken(string gridName) { - using var collector = new DB.FilteredElementCollector(_contextStack.Current.Document); + using var collector = new DB.FilteredElementCollector(_converterSettings.Current.Document); IEnumerable gridNames = collector .WhereElementIsNotElementType() diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/LevelToHostTopLevelConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/LevelToHostTopLevelConverter.cs index b68592bdd..e0f351bad 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/LevelToHostTopLevelConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/LevelToHostTopLevelConverter.cs @@ -1,6 +1,6 @@ using Speckle.Converters.Common; -using Speckle.Converters.RevitShared.Helpers; using Speckle.Converters.RevitShared.Services; +using Speckle.Converters.RevitShared.Settings; using Speckle.Converters.RevitShared.ToSpeckle; namespace Speckle.Converters.RevitShared.ToHost.ToLevel; @@ -8,18 +8,21 @@ namespace Speckle.Converters.RevitShared.ToHost.ToLevel; [NameAndRankValue(nameof(SOBE.Level), 0)] public class LevelToHostTopLevelConverter : BaseTopLevelConverterToHost { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ScalingServiceToHost _scalingService; - public LevelToHostTopLevelConverter(IRevitConversionContextStack contextStack, ScalingServiceToHost scalingService) + public LevelToHostTopLevelConverter( + IConverterSettingsStore converterSettings, + ScalingServiceToHost scalingService + ) { - _contextStack = contextStack; + _converterSettings = converterSettings; _scalingService = scalingService; } public override DB.Level Convert(SOBE.Level target) { - using var documentLevelCollector = new DB.FilteredElementCollector(_contextStack.Current.Document); + using var documentLevelCollector = new DB.FilteredElementCollector(_converterSettings.Current.Document); var docLevels = documentLevelCollector.OfClass(typeof(DB.Level)).ToElements().Cast(); // POC : I'm not really understanding the linked use case for this. Do we want to bring this over? @@ -45,7 +48,7 @@ public class LevelToHostTopLevelConverter : BaseTopLevelConverterToHost docLevels, double elevation) - { - return docLevels.First(l => Math.Abs(l.Elevation - elevation) < RevitConversionContextStack.TOLERANCE); - } + private DB.Level GetExistingLevelByElevation(IEnumerable docLevels, double elevation) => + docLevels.First(l => Math.Abs(l.Elevation - elevation) < _converterSettings.Current.Tolerance); private DB.ViewPlan CreateViewPlan(string name, DB.ElementId levelId) { - using var collector = new DB.FilteredElementCollector(_contextStack.Current.Document); + using var collector = new DB.FilteredElementCollector(_converterSettings.Current.Document); var vt = collector .OfClass(typeof(DB.ViewFamilyType)) .First(el => ((DB.ViewFamilyType)el).ViewFamily == DB.ViewFamily.FloorPlan); - var view = DB.ViewPlan.Create(_contextStack.Current.Document, vt.Id, levelId); + var view = DB.ViewPlan.Create(_converterSettings.Current.Document, vt.Id, levelId); view.Name = name; return view; diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ModelCurveToSpeckleTopLevelConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ModelCurveToSpeckleTopLevelConverter.cs index 5ba4c40cb..d78ff2c93 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ModelCurveToSpeckleTopLevelConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ModelCurveToSpeckleTopLevelConverter.cs @@ -1,7 +1,7 @@ using System.Collections; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects; using Speckle.Sdk.Common; @@ -11,15 +11,15 @@ namespace Speckle.Converters.RevitShared.ToSpeckle; public class ModelCurveToHostTopLevelConverter : BaseTopLevelConverterToHost { private readonly ITypedConverter _curveConverter; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; public ModelCurveToHostTopLevelConverter( ITypedConverter curveConverter, - IRevitConversionContextStack conversionContext + IConverterSettingsStore converterSettings ) { _curveConverter = curveConverter; - _contextStack = conversionContext; + _converterSettings = converterSettings; } public override DB.ModelCurve[] Convert(SOBR.Curve.ModelCurve target) => @@ -41,18 +41,18 @@ public class ModelCurveToHostTopLevelConverter : BaseTopLevelConverterToHost, ITypedConverter { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ITypedConverter _pointConverter; public PointToHostTopLevelConverter( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter pointConverter ) { - _contextStack = contextStack; + _converterSettings = converterSettings; _pointConverter = pointConverter; } @@ -52,7 +52,7 @@ public sealed class PointToHostTopLevelConverter Solid sphere = GeometryCreationUtilities.CreateRevolvedGeometry(frame, [curveLoop], 0, 2 * Math.PI, options); using DirectShape ds = DirectShape.CreateElement( - _contextStack.Current.Document, + _converterSettings.Current.Document, new ElementId(BuiltInCategory.OST_GenericModel) ); diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/ArcToDirectShapeConverterToHost.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/ArcToDirectShapeConverterToHost.cs index 4c06ea105..c1d70d029 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/ArcToDirectShapeConverterToHost.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/ArcToDirectShapeConverterToHost.cs @@ -1,6 +1,6 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Converters.RevitShared.ToHost.TopLevel; using Speckle.Objects; @@ -10,8 +10,8 @@ namespace Speckle.Converters.RevitShared.ToHost.Raw.Geometry; public class ArcToDirectShapeConverterToHost : CurveToDirectShapeConverterToHostBase { public ArcToDirectShapeConverterToHost( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter curveConverter ) - : base(contextStack, curveConverter) { } + : base(converterSettings, curveConverter) { } } diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/CircleToDirectShapeConverterToHost.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/CircleToDirectShapeConverterToHost.cs index 53585b0f4..9ac601856 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/CircleToDirectShapeConverterToHost.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/CircleToDirectShapeConverterToHost.cs @@ -1,6 +1,6 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Converters.RevitShared.ToHost.TopLevel; using Speckle.Objects; @@ -10,8 +10,8 @@ namespace Speckle.Converters.RevitShared.ToHost.Raw.Geometry; public class CircleToDirectShapeConverterToHost : CurveToDirectShapeConverterToHostBase { public CircleToDirectShapeConverterToHost( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter curveConverter ) - : base(contextStack, curveConverter) { } + : base(converterSettings, curveConverter) { } } diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/CurveToDirectShapeConverterToHost.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/CurveToDirectShapeConverterToHost.cs index 83bfc4226..2ef825d4e 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/CurveToDirectShapeConverterToHost.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/CurveToDirectShapeConverterToHost.cs @@ -1,6 +1,6 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Converters.RevitShared.ToHost.TopLevel; using Speckle.Objects; @@ -10,8 +10,8 @@ namespace Speckle.Converters.RevitShared.ToHost.Raw.Geometry; public class CurveToDirectShapeConverterToHost : CurveToDirectShapeConverterToHostBase { public CurveToDirectShapeConverterToHost( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter curveConverter ) - : base(contextStack, curveConverter) { } + : base(converterSettings, curveConverter) { } } diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/CurveToDirectShapeConverterToHostBase.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/CurveToDirectShapeConverterToHostBase.cs index 0c9bfd83f..2e743b1f3 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/CurveToDirectShapeConverterToHostBase.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/CurveToDirectShapeConverterToHostBase.cs @@ -1,5 +1,6 @@ +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects; using Speckle.Sdk.Models; @@ -10,15 +11,15 @@ public abstract class CurveToDirectShapeConverterToHostBase IToHostTopLevelConverter where TCurve : Base, ICurve { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ITypedConverter _curveConverter; protected CurveToDirectShapeConverterToHostBase( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter curveConverter ) { - _contextStack = contextStack; + _converterSettings = converterSettings; _curveConverter = curveConverter; } @@ -29,11 +30,11 @@ public abstract class CurveToDirectShapeConverterToHostBase DB.CurveArray curveArray = _curveConverter.Convert(target); converted.AddRange(curveArray.Cast()); - var genericModelCategory = _contextStack.Current.Document.Settings.Categories.get_Item( + var genericModelCategory = _converterSettings.Current.Document.Settings.Categories.get_Item( DB.BuiltInCategory.OST_GenericModel ); - using var revitDs = DB.DirectShape.CreateElement(_contextStack.Current.Document, genericModelCategory.Id); + using var revitDs = DB.DirectShape.CreateElement(_converterSettings.Current.Document, genericModelCategory.Id); if (target is Base speckleObject && speckleObject.applicationId != null) { revitDs.ApplicationId = speckleObject.applicationId; diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/EllipseToDirectShapeConverterToHost.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/EllipseToDirectShapeConverterToHost.cs index 505a2d5ac..801f34643 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/EllipseToDirectShapeConverterToHost.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/EllipseToDirectShapeConverterToHost.cs @@ -1,6 +1,6 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Converters.RevitShared.ToHost.TopLevel; using Speckle.Objects; @@ -10,8 +10,8 @@ namespace Speckle.Converters.RevitShared.ToHost.Raw.Geometry; public class EllipseToDirectShapeConverterToHost : CurveToDirectShapeConverterToHostBase { public EllipseToDirectShapeConverterToHost( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter curveConverter ) - : base(contextStack, curveConverter) { } + : base(converterSettings, curveConverter) { } } diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/LineToDirectShapeConverterToHost.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/LineToDirectShapeConverterToHost.cs index 1cd3924f6..48a58a0b7 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/LineToDirectShapeConverterToHost.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/LineToDirectShapeConverterToHost.cs @@ -1,6 +1,6 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Converters.RevitShared.ToHost.TopLevel; using Speckle.Objects; @@ -10,8 +10,8 @@ namespace Speckle.Converters.RevitShared.ToHost.Raw.Geometry; public class LineToDirectShapeConverterToHost : CurveToDirectShapeConverterToHostBase { public LineToDirectShapeConverterToHost( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter curveConverter ) - : base(contextStack, curveConverter) { } + : base(converterSettings, curveConverter) { } } diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/PolycurveConverterToHost.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/PolycurveConverterToHost.cs index 3bfa552ed..8314dad0f 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/PolycurveConverterToHost.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/PolycurveConverterToHost.cs @@ -1,6 +1,6 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Converters.RevitShared.ToHost.TopLevel; using Speckle.Objects; @@ -10,8 +10,8 @@ namespace Speckle.Converters.RevitShared.ToHost.Raw.Geometry; public class PolycurveToDirectShapeConverterToHost : CurveToDirectShapeConverterToHostBase { public PolycurveToDirectShapeConverterToHost( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter curveConverter ) - : base(contextStack, curveConverter) { } + : base(converterSettings, curveConverter) { } } diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/PolylineConverterToHost.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/PolylineConverterToHost.cs index a8fcbc6df..3648572be 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/PolylineConverterToHost.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToHost/TopLevel/ToDirectShape/PolylineConverterToHost.cs @@ -1,6 +1,6 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Converters.RevitShared.ToHost.TopLevel; using Speckle.Objects; @@ -10,8 +10,8 @@ namespace Speckle.Converters.RevitShared.ToHost.Raw.Geometry; public class PolylineToDirectShapeConverterToHost : CurveToDirectShapeConverterToHostBase { public PolylineToDirectShapeConverterToHost( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter curveConverter ) - : base(contextStack, curveConverter) { } + : base(converterSettings, curveConverter) { } } diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/BeamConversionToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/BeamConversionToSpeckle.cs index d1956c0a6..821af0640 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/BeamConversionToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/BeamConversionToSpeckle.cs @@ -1,6 +1,7 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects; using Speckle.Sdk.Models; @@ -17,7 +18,7 @@ public class BeamConversionToSpeckle : ITypedConverter _converterSettings; public BeamConversionToSpeckle( ITypedConverter locationConverter, @@ -25,7 +26,7 @@ public class BeamConversionToSpeckle : ITypedConverter converterSettings ) { _locationConverter = locationConverter; @@ -33,7 +34,7 @@ public class BeamConversionToSpeckle : ITypedConverter, SOG.Polycurve> { private readonly ITypedConverter _curveConverter; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; public BoundarySegmentConversionToSpeckle( ITypedConverter curveConverter, - IRevitConversionContextStack contextStack + IConverterSettingsStore converterSettings ) { _curveConverter = curveConverter; - _contextStack = contextStack; + _converterSettings = converterSettings; } public SOG.Polycurve Convert(IList target) @@ -37,7 +38,7 @@ public class BoundarySegmentConversionToSpeckle : ITypedConverter { private readonly ITypedConverter _beamConverter; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; public BraceToSpeckleConverter( ITypedConverter beamConverter, - IRevitConversionContextStack contextStack + IConverterSettingsStore converterSettings ) { _beamConverter = beamConverter; - _contextStack = contextStack; + _converterSettings = converterSettings; } public SOBR.RevitBrace Convert(DB.FamilyInstance target) @@ -39,7 +40,7 @@ public class BraceToSpeckleConverter : ITypedConverter _levelConverter; private readonly ParameterValueExtractor _parameterValueExtractor; private readonly DisplayValueExtractor _displayValueExtractor; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ParameterObjectAssigner _parameterObjectAssigner; public ColumnConversionToSpeckle( @@ -25,7 +26,7 @@ public class ColumnConversionToSpeckle : ITypedConverter levelConverter, ParameterValueExtractor parameterValueExtractor, DisplayValueExtractor displayValueExtractor, - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ParameterObjectAssigner parameterObjectAssigner ) { @@ -33,7 +34,7 @@ public class ColumnConversionToSpeckle : ITypedConverter { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ITypedConverter _xyzToPointConverter; private readonly ITypedConverter _planeConverter; private readonly ScalingServiceToSpeckle _scalingService; public ArcToSpeckleConverter( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter xyzToPointConverter, ITypedConverter planeConverter, ScalingServiceToSpeckle scalingService ) { - _contextStack = contextStack; + _converterSettings = converterSettings; _xyzToPointConverter = xyzToPointConverter; _planeConverter = planeConverter; _scalingService = scalingService; @@ -48,7 +49,7 @@ public class ArcToSpeckleConverter : ITypedConverter startAngle = startAngle, endAngle = endAngle, angleRadians = endAngle - startAngle, - units = _contextStack.Current.SpeckleUnits, + units = _converterSettings.Current.SpeckleUnits, endPoint = _xyzToPointConverter.Convert(end), startPoint = _xyzToPointConverter.Convert(start), midPoint = _xyzToPointConverter.Convert(mid), diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/BoundingBoxXYZToSpeckleConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/BoundingBoxXYZToSpeckleConverter.cs index 28705b631..f9baa10c7 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/BoundingBoxXYZToSpeckleConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/BoundingBoxXYZToSpeckleConverter.cs @@ -1,22 +1,23 @@ +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects.Primitive; namespace Speckle.Converters.RevitShared.ToSpeckle; public class BoundingBoxXYZToSpeckleConverter : ITypedConverter { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ITypedConverter _xyzToPointConverter; private readonly ITypedConverter _planeConverter; public BoundingBoxXYZToSpeckleConverter( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter xyzToPointConverter, ITypedConverter planeConverter ) { - _contextStack = contextStack; + _converterSettings = converterSettings; _xyzToPointConverter = xyzToPointConverter; _planeConverter = planeConverter; } @@ -41,7 +42,7 @@ public class BoundingBoxXYZToSpeckleConverter : ITypedConverter { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ITypedConverter _planeConverter; private readonly ScalingServiceToSpeckle _scalingService; public CircleToSpeckleConverter( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter planeConverter, ScalingServiceToSpeckle scalingService ) { - _contextStack = contextStack; + _converterSettings = converterSettings; _planeConverter = planeConverter; _scalingService = scalingService; } @@ -31,7 +32,7 @@ public class CircleToSpeckleConverter : ITypedConverter { plane = _planeConverter.Convert(arcPlane), radius = _scalingService.ScaleLength(target.Radius), - units = _contextStack.Current.SpeckleUnits, + units = _converterSettings.Current.SpeckleUnits, length = _scalingService.ScaleLength(target.Length) }; diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/CurveArrayConversionToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/CurveArrayConversionToSpeckle.cs index 872d47aa3..de781d89a 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/CurveArrayConversionToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/CurveArrayConversionToSpeckle.cs @@ -1,7 +1,8 @@ using Autodesk.Revit.DB; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; using Speckle.Converters.RevitShared.Services; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects; using Speckle.Objects.Geometry; @@ -9,17 +10,17 @@ namespace Speckle.Converters.RevitShared.ToSpeckle; public sealed class CurveArrayConversionToSpeckle : ITypedConverter { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ScalingServiceToSpeckle _scalingService; private readonly ITypedConverter _curveConverter; public CurveArrayConversionToSpeckle( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ScalingServiceToSpeckle scalingService, ITypedConverter curveConverter ) { - _contextStack = contextStack; + _converterSettings = converterSettings; _scalingService = scalingService; _curveConverter = curveConverter; } @@ -30,9 +31,9 @@ public sealed class CurveArrayConversionToSpeckle : ITypedConverter x.Length)), segments = curves.Select(x => _curveConverter.Convert(x)).ToList() }; diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/EllipseToSpeckleConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/EllipseToSpeckleConverter.cs index 491f4bd3a..51c4aa7b5 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/EllipseToSpeckleConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/EllipseToSpeckleConverter.cs @@ -1,23 +1,24 @@ +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; using Speckle.Converters.RevitShared.Services; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects.Primitive; namespace Speckle.Converters.RevitShared.ToSpeckle; public class EllipseToSpeckleConverter : ITypedConverter { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ITypedConverter _planeConverter; private readonly ScalingServiceToSpeckle _scalingService; public EllipseToSpeckleConverter( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter planeConverter, ScalingServiceToSpeckle scalingService ) { - _contextStack = contextStack; + _converterSettings = converterSettings; _planeConverter = planeConverter; _scalingService = scalingService; } @@ -40,7 +41,7 @@ public class EllipseToSpeckleConverter : ITypedConverter { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ITypedConverter _xyzToPointConverter; private readonly ScalingServiceToSpeckle _scalingService; public LineConversionToSpeckle( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter xyzToPointConverter, ScalingServiceToSpeckle scalingService ) { - _contextStack = contextStack; + _converterSettings = converterSettings; _xyzToPointConverter = xyzToPointConverter; _scalingService = scalingService; } @@ -25,7 +26,7 @@ public class LineConversionToSpeckle : ITypedConverter public SOG.Line Convert(DB.Line target) => new() { - units = _contextStack.Current.SpeckleUnits, + units = _converterSettings.Current.SpeckleUnits, start = _xyzToPointConverter.Convert(target.GetEndPoint(0)), end = _xyzToPointConverter.Convert(target.GetEndPoint(1)), domain = new Interval { start = target.GetEndParameter(0), end = target.GetEndParameter(1) }, diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/MeshByMaterialDictionaryToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/MeshByMaterialDictionaryToSpeckle.cs index af7118dfd..40c60762d 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/MeshByMaterialDictionaryToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/MeshByMaterialDictionaryToSpeckle.cs @@ -1,29 +1,32 @@ +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects.Other; using Speckle.Objects.Other.Revit; +using Speckle.Sdk.Common; namespace Speckle.Converters.RevitShared.ToSpeckle; public class MeshByMaterialDictionaryToSpeckle : ITypedConverter<(Dictionary> target, DB.ElementId parentElementId), List> { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ITypedConverter _materialConverter; private readonly ITypedConverter, SOG.Mesh> _meshListConverter; - private readonly RevitMaterialCacheSingleton _materialCacheSingleton; + private readonly RevitMaterialCacheSingleton _revitMaterialCacheSingleton; public MeshByMaterialDictionaryToSpeckle( ITypedConverter materialConverter, ITypedConverter, SOG.Mesh> meshListConverter, - IRevitConversionContextStack contextStack, - RevitMaterialCacheSingleton materialCacheSingleton + IConverterSettingsStore converterSettings, + RevitMaterialCacheSingleton revitMaterialCacheSingleton ) { _materialConverter = materialConverter; _meshListConverter = meshListConverter; - _contextStack = contextStack; - _materialCacheSingleton = materialCacheSingleton; + _converterSettings = converterSettings; + _revitMaterialCacheSingleton = revitMaterialCacheSingleton; } /// @@ -43,10 +46,10 @@ public class MeshByMaterialDictionaryToSpeckle public List Convert((Dictionary> target, DB.ElementId parentElementId) args) { var result = new List(args.target.Keys.Count); - var objectRenderMaterialProxiesMap = _contextStack.RenderMaterialProxyCache.ObjectRenderMaterialProxiesMap; + var objectRenderMaterialProxiesMap = _revitMaterialCacheSingleton.ObjectRenderMaterialProxiesMap; var materialProxyMap = new Dictionary(); - objectRenderMaterialProxiesMap[args.parentElementId.ToString()!] = materialProxyMap; + objectRenderMaterialProxiesMap[args.parentElementId.ToString().NotNull()] = materialProxyMap; if (args.target.Count == 0) { @@ -56,6 +59,7 @@ public class MeshByMaterialDictionaryToSpeckle foreach (var keyValuePair in args.target) { DB.ElementId materialId = keyValuePair.Key; + string materialIdString = materialId.ToString().NotNull(); List meshes = keyValuePair.Value; // use the meshlist converter to convert the mesh values into a single speckle mesh @@ -63,22 +67,22 @@ public class MeshByMaterialDictionaryToSpeckle speckleMesh.applicationId = Guid.NewGuid().ToString(); // NOTE: as we are composing meshes out of multiple ones for the same material, we need to generate our own application id. c'est la vie. // get the render material if any - if (_contextStack.Current.Document.GetElement(materialId) is DB.Material material) + if (_converterSettings.Current.Document.GetElement(materialId) is DB.Material material) { (RevitMaterial _, RenderMaterial convertedRenderMaterial) = _materialConverter.Convert(material); - if (!materialProxyMap.TryGetValue(materialId.ToString()!, out RenderMaterialProxy? renderMaterialProxy)) + if (!materialProxyMap.TryGetValue(materialIdString, out RenderMaterialProxy? renderMaterialProxy)) { renderMaterialProxy = new RenderMaterialProxy() { value = convertedRenderMaterial, - applicationId = materialId.ToString()!, + applicationId = materialId.ToString(), objects = [] }; - materialProxyMap[materialId.ToString()!] = renderMaterialProxy; + materialProxyMap[materialIdString] = renderMaterialProxy; } - renderMaterialProxy.objects.Add(speckleMesh.applicationId!); + renderMaterialProxy.objects.Add(speckleMesh.applicationId); } result.Add(speckleMesh); diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/MeshListConversionToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/MeshListConversionToSpeckle.cs index 6fa9133bb..dd886e084 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/MeshListConversionToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/MeshListConversionToSpeckle.cs @@ -1,6 +1,7 @@ +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; using Speckle.Converters.RevitShared.Services; +using Speckle.Converters.RevitShared.Settings; namespace Speckle.Converters.RevitShared.ToSpeckle; @@ -8,15 +9,15 @@ public class MeshListConversionToSpeckle : ITypedConverter, SOG.Me { private readonly IScalingServiceToSpeckle _toSpeckleScalingService; private readonly IReferencePointConverter _referencePointConverter; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; public MeshListConversionToSpeckle( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, IReferencePointConverter referencePointConverter, IScalingServiceToSpeckle toSpeckleScalingService ) { - _contextStack = contextStack; + _converterSettings = converterSettings; _toSpeckleScalingService = toSpeckleScalingService; _referencePointConverter = referencePointConverter; } @@ -59,7 +60,7 @@ public class MeshListConversionToSpeckle : ITypedConverter, SOG.Me { vertices = vertices, faces = faces, - units = _contextStack.Current.SpeckleUnits + units = _converterSettings.Current.SpeckleUnits }; return speckleMesh; diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/NurbsSplineToSpeckleConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/NurbsSplineToSpeckleConverter.cs index 1e4cd41d1..0e381f67a 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/NurbsSplineToSpeckleConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/NurbsSplineToSpeckleConverter.cs @@ -1,6 +1,7 @@ +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; using Speckle.Converters.RevitShared.Services; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects.Primitive; namespace Speckle.Converters.RevitShared.ToSpeckle; @@ -8,26 +9,26 @@ namespace Speckle.Converters.RevitShared.ToSpeckle; public class NurbsSplineToSpeckleConverter : ITypedConverter { private readonly IRevitVersionConversionHelper _conversionHelper; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ITypedConverter _xyzToPointConverter; private readonly ScalingServiceToSpeckle _scalingService; public NurbsSplineToSpeckleConverter( IRevitVersionConversionHelper conversionHelper, - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter xyzToPointConverter, ScalingServiceToSpeckle scalingService ) { _conversionHelper = conversionHelper; - _contextStack = contextStack; + _converterSettings = converterSettings; _xyzToPointConverter = xyzToPointConverter; _scalingService = scalingService; } public SOG.Curve Convert(DB.NurbSpline target) { - var units = _contextStack.Current.SpeckleUnits; + var units = _converterSettings.Current.SpeckleUnits; var points = new List(); foreach (var p in target.CtrlPoints) diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/PlaneToSpeckleConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/PlaneToSpeckleConverter.cs index 466e57da1..6b405029d 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/PlaneToSpeckleConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/PlaneToSpeckleConverter.cs @@ -1,21 +1,22 @@ +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; namespace Speckle.Converters.RevitShared.ToSpeckle; public class PlaneToSpeckleConverter : ITypedConverter { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ITypedConverter _xyzToPointConverter; private readonly ITypedConverter _xyzToVectorConverter; public PlaneToSpeckleConverter( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter xyzToPointConverter, ITypedConverter xyzToVectorConverter ) { - _contextStack = contextStack; + _converterSettings = converterSettings; _xyzToPointConverter = xyzToPointConverter; _xyzToVectorConverter = xyzToVectorConverter; } @@ -33,7 +34,7 @@ public class PlaneToSpeckleConverter : ITypedConverter normal = normal, xdir = xdir, ydir = ydir, - units = _contextStack.Current.SpeckleUnits + units = _converterSettings.Current.SpeckleUnits }; } } diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/PointCloudToSpeckleConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/PointCloudToSpeckleConverter.cs index c07fe462f..a193f6b4a 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/PointCloudToSpeckleConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/PointCloudToSpeckleConverter.cs @@ -1,21 +1,22 @@ +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; namespace Speckle.Converters.RevitShared.ToSpeckle; public class PointCloudToSpeckleConverter : ITypedConverter { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ITypedConverter _xyzToPointConverter; private readonly ITypedConverter _boundingBoxConverter; public PointCloudToSpeckleConverter( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter xyzToPointConverter, ITypedConverter boundingBoxConverter ) { - _contextStack = contextStack; + _converterSettings = converterSettings; _xyzToPointConverter = xyzToPointConverter; _boundingBoxConverter = boundingBoxConverter; } @@ -37,7 +38,7 @@ public class PointCloudToSpeckleConverter : ITypedConverter new List() { o.x, o.y, o.z }) .ToList(), colors = points.Select(o => o.Color).ToList(), - units = _contextStack.Current.SpeckleUnits, + units = _converterSettings.Current.SpeckleUnits, bbox = _boundingBoxConverter.Convert(boundingBox) }; diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/PolylineToSpeckleConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/PolylineToSpeckleConverter.cs index db4d5372c..3e136db62 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/PolylineToSpeckleConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/PolylineToSpeckleConverter.cs @@ -1,25 +1,26 @@ +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; namespace Speckle.Converters.RevitShared.ToSpeckle; public class PolylineToSpeckleConverter : ITypedConverter { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ITypedConverter _xyzToPointConverter; public PolylineToSpeckleConverter( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ITypedConverter xyzToPointConverter ) { - _contextStack = contextStack; + _converterSettings = converterSettings; _xyzToPointConverter = xyzToPointConverter; } public SOG.Polyline Convert(DB.PolyLine target) { var coords = target.GetCoordinates().SelectMany(coord => _xyzToPointConverter.Convert(coord).ToList()).ToList(); - return new SOG.Polyline { value = coords, units = _contextStack.Current.SpeckleUnits }; + return new SOG.Polyline { value = coords, units = _converterSettings.Current.SpeckleUnits }; } } diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/VectorToSpeckleConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/VectorToSpeckleConverter.cs index 52a42e8ae..c8c0c544c 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/VectorToSpeckleConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/VectorToSpeckleConverter.cs @@ -1,6 +1,7 @@ +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; using Speckle.Converters.RevitShared.Services; +using Speckle.Converters.RevitShared.Settings; namespace Speckle.Converters.RevitShared.ToSpeckle; @@ -8,17 +9,17 @@ public class VectorToSpeckleConverter : ITypedConverter { private readonly IReferencePointConverter _referencePointConverter; private readonly ScalingServiceToSpeckle _scalingService; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public VectorToSpeckleConverter( IReferencePointConverter referencePointConverter, ScalingServiceToSpeckle scalingService, - IRevitConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _referencePointConverter = referencePointConverter; _scalingService = scalingService; - _contextStack = contextStack; + _settingsStore = settingsStore; } public SOG.Vector Convert(DB.XYZ target) @@ -30,7 +31,7 @@ public class VectorToSpeckleConverter : ITypedConverter _scalingService.ScaleLength(extPt.X), _scalingService.ScaleLength(extPt.Y), _scalingService.ScaleLength(extPt.Z), - _contextStack.Current.SpeckleUnits + _settingsStore.Current.SpeckleUnits ); return pointToSpeckle; diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/XyzConversionToPoint.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/XyzConversionToPoint.cs index e46105092..a98d9e5e9 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/XyzConversionToPoint.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/Geometry/XyzConversionToPoint.cs @@ -1,6 +1,7 @@ +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; using Speckle.Converters.RevitShared.Services; +using Speckle.Converters.RevitShared.Settings; namespace Speckle.Converters.RevitShared.ToSpeckle; @@ -8,17 +9,17 @@ public class XyzConversionToPoint : ITypedConverter { private readonly IScalingServiceToSpeckle _toSpeckleScalingService; private readonly IReferencePointConverter _referencePointConverter; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; public XyzConversionToPoint( IScalingServiceToSpeckle toSpeckleScalingService, IReferencePointConverter referencePointConverter, - IRevitConversionContextStack contextStack + IConverterSettingsStore converterSettings ) { _toSpeckleScalingService = toSpeckleScalingService; _referencePointConverter = referencePointConverter; - _contextStack = contextStack; + _converterSettings = converterSettings; } public SOG.Point Convert(DB.XYZ target) @@ -29,7 +30,7 @@ public class XyzConversionToPoint : ITypedConverter _toSpeckleScalingService.ScaleLength(extPt.X), _toSpeckleScalingService.ScaleLength(extPt.Y), _toSpeckleScalingService.ScaleLength(extPt.Z), - _contextStack.Current.SpeckleUnits + _converterSettings.Current.SpeckleUnits ); return pointToSpeckle; diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/MaterialQuantitiesToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/MaterialQuantitiesToSpeckle.cs index a8cfe18fd..37c32a36b 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/MaterialQuantitiesToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Raw/MaterialQuantitiesToSpeckle.cs @@ -1,6 +1,7 @@ +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; using Speckle.Converters.RevitShared.Services; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects.Other; using Speckle.Objects.Other.Revit; @@ -13,15 +14,15 @@ namespace Speckle.Converters.RevitShared.ToSpeckle; public class MaterialQuantitiesToSpeckleLite : ITypedConverter>> { private readonly ScalingServiceToSpeckle _scalingService; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; public MaterialQuantitiesToSpeckleLite( ScalingServiceToSpeckle scalingService, - IRevitConversionContextStack contextStack + IConverterSettingsStore converterSettings ) { _scalingService = scalingService; - _contextStack = contextStack; + _converterSettings = converterSettings; } /// @@ -47,9 +48,9 @@ public class MaterialQuantitiesToSpeckleLite : ITypedConverter _materialConverter; private readonly ScalingServiceToSpeckle _scalingService; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; public MaterialQuantitiesToSpeckle( ITypedConverter materialConverter, ScalingServiceToSpeckle scalingService, - IRevitConversionContextStack contextStack + IConverterSettingsStore converterSettings ) { _materialConverter = materialConverter; _scalingService = scalingService; - _contextStack = contextStack; + _converterSettings = converterSettings; } /// @@ -114,11 +115,11 @@ public class MaterialQuantitiesToSpeckle : ITypedConverter { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly IScalingServiceToSpeckle _scalingService; private readonly ITypedConverter _curveConverter; public ModelCurveArrayToSpeckleConverter( - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, IScalingServiceToSpeckle scalingService, ITypedConverter curveConverter ) { - _contextStack = contextStack; + _converterSettings = converterSettings; _scalingService = scalingService; _curveConverter = curveConverter; } @@ -37,8 +37,8 @@ internal sealed class ModelCurveArrayToSpeckleConverter : ITypedConverter x.Length)), segments = curves.Select(x => _curveConverter.Convert(x)).ToList() }; diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/CeilingTopLevelConverterToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/CeilingTopLevelConverterToSpeckle.cs index c63fcf853..7390bb098 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/CeilingTopLevelConverterToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/CeilingTopLevelConverterToSpeckle.cs @@ -2,6 +2,7 @@ using Autodesk.Revit.DB; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects; using Speckle.Objects.BuiltElements.Revit; using Speckle.Objects.Geometry; @@ -16,7 +17,7 @@ internal sealed class CeilingTopLevelConverterToSpeckle : BaseTopLevelConverterT private readonly ParameterValueExtractor _parameterValueExtractor; private readonly ParameterObjectAssigner _parameterObjectAssigner; private readonly DisplayValueExtractor _displayValueExtractor; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; public CeilingTopLevelConverterToSpeckle( ITypedConverter> curveArrArrayConverter, @@ -24,7 +25,7 @@ internal sealed class CeilingTopLevelConverterToSpeckle : BaseTopLevelConverterT ParameterValueExtractor parameterValueExtractor, ParameterObjectAssigner parameterObjectAssigner, DisplayValueExtractor displayValueExtractor, - IRevitConversionContextStack contextStack + IConverterSettingsStore converterSettings ) { _curveArrArrayConverter = curveArrArrayConverter; @@ -32,7 +33,7 @@ internal sealed class CeilingTopLevelConverterToSpeckle : BaseTopLevelConverterT _parameterValueExtractor = parameterValueExtractor; _parameterObjectAssigner = parameterObjectAssigner; _displayValueExtractor = displayValueExtractor; - _contextStack = contextStack; + _converterSettings = converterSettings; } public override RevitCeiling Convert(Ceiling target) @@ -51,7 +52,7 @@ internal sealed class CeilingTopLevelConverterToSpeckle : BaseTopLevelConverterT family = elementType.FamilyName, level = speckleLevel, displayValue = displayValue, - units = _contextStack.Current.SpeckleUnits + units = _converterSettings.Current.SpeckleUnits }; var sketch = (Sketch)target.Document.GetElement(target.SketchId); diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/DirectShapeTopLevelConverterToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/DirectShapeTopLevelConverterToSpeckle.cs index c812333d3..a3be7c2be 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/DirectShapeTopLevelConverterToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/DirectShapeTopLevelConverterToSpeckle.cs @@ -1,6 +1,7 @@ using Speckle.Converters.Common; using Speckle.Converters.RevitShared.Extensions; using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Converters.RevitShared.ToSpeckle; using Speckle.Sdk.Common; using Speckle.Sdk.Models; @@ -10,18 +11,18 @@ namespace Speckle.Converters.Revit2023.ToSpeckle; [NameAndRankValue(nameof(DB.DirectShape), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class DirectShapeTopLevelConverterToSpeckle : BaseTopLevelConverterToSpeckle { - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly ParameterObjectAssigner _parameterObjectAssigner; private readonly DisplayValueExtractor _displayValueExtractor; public DirectShapeTopLevelConverterToSpeckle( ParameterObjectAssigner parameterObjectAssigner, - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, DisplayValueExtractor displayValueExtractor ) { _parameterObjectAssigner = parameterObjectAssigner; - _contextStack = contextStack; + _converterSettings = converterSettings; _displayValueExtractor = displayValueExtractor; } @@ -36,7 +37,7 @@ public class DirectShapeTopLevelConverterToSpeckle : BaseTopLevelConverterToSpec new(target.Name, category, geometries) { displayValue = geometries, - units = _contextStack.Current.SpeckleUnits, + units = _converterSettings.Current.SpeckleUnits, elementId = target.Id.ToString().NotNull() }; diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/ElementTopLevelConverterToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/ElementTopLevelConverterToSpeckle.cs index 65213d8a6..1dfd6164a 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/ElementTopLevelConverterToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/ElementTopLevelConverterToSpeckle.cs @@ -1,5 +1,6 @@ using Speckle.Converters.Common; using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects.BuiltElements.Revit; namespace Speckle.Converters.RevitShared.ToSpeckle; @@ -10,17 +11,17 @@ public class ElementTopLevelConverterToSpeckle : BaseTopLevelConverterToSpeckle< { private readonly DisplayValueExtractor _displayValueExtractor; private readonly ParameterObjectAssigner _parameterObjectAssigner; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; public ElementTopLevelConverterToSpeckle( DisplayValueExtractor displayValueExtractor, ParameterObjectAssigner parameterObjectAssigner, - IRevitConversionContextStack contextStack + IConverterSettingsStore converterSettings ) { _displayValueExtractor = displayValueExtractor; _parameterObjectAssigner = parameterObjectAssigner; - _contextStack = contextStack; + _converterSettings = converterSettings; } public override RevitElement Convert(DB.Element target) @@ -40,7 +41,7 @@ public class ElementTopLevelConverterToSpeckle : BaseTopLevelConverterToSpeckle< displayValue = displayValue }; - speckleElement["units"] = _contextStack.Current.SpeckleUnits; + speckleElement["units"] = _converterSettings.Current.SpeckleUnits; _parameterObjectAssigner.AssignParametersToBase(target, speckleElement); diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/ExtrusionRoofToSpeckleTopLevelConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/ExtrusionRoofToSpeckleTopLevelConverter.cs index b52b30a73..8d63e9de6 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/ExtrusionRoofToSpeckleTopLevelConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/ExtrusionRoofToSpeckleTopLevelConverter.cs @@ -1,6 +1,7 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects.BuiltElements.Revit; using Speckle.Objects.BuiltElements.Revit.RevitRoof; @@ -16,7 +17,7 @@ public class ExtrusionRoofToSpeckleTopLevelConverter private readonly ParameterValueExtractor _parameterValueExtractor; private readonly DisplayValueExtractor _displayValueExtractor; private readonly ParameterObjectAssigner _parameterObjectAssigner; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; public ExtrusionRoofToSpeckleTopLevelConverter( ITypedConverter levelConverter, @@ -25,7 +26,7 @@ public class ExtrusionRoofToSpeckleTopLevelConverter ParameterValueExtractor parameterValueExtractor, DisplayValueExtractor displayValueExtractor, ParameterObjectAssigner parameterObjectAssigner, - IRevitConversionContextStack contextStack + IConverterSettingsStore converterSettings ) { _levelConverter = levelConverter; @@ -34,7 +35,7 @@ public class ExtrusionRoofToSpeckleTopLevelConverter _parameterValueExtractor = parameterValueExtractor; _displayValueExtractor = displayValueExtractor; _parameterObjectAssigner = parameterObjectAssigner; - _contextStack = contextStack; + _converterSettings = converterSettings; } public override RevitExtrusionRoof Convert(DB.ExtrusionRoof target) @@ -60,7 +61,7 @@ public class ExtrusionRoofToSpeckleTopLevelConverter referenceLine = referenceLine, level = speckleLevel, displayValue = displayValue, - units = _contextStack.Current.SpeckleUnits + units = _converterSettings.Current.SpeckleUnits }; _parameterObjectAssigner.AssignParametersToBase(target, speckleExtrusionRoof); @@ -76,7 +77,7 @@ public class ExtrusionRoofToSpeckleTopLevelConverter { start = _pointConverter.Convert(plane.Origin.Add(plane.XVec.Normalize().Negate())), end = _pointConverter.Convert(plane.Origin), - units = _contextStack.Current.SpeckleUnits, + units = _converterSettings.Current.SpeckleUnits, }; return referenceLine; } diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/FloorTopLevelConverterToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/FloorTopLevelConverterToSpeckle.cs index d3cdd8319..8a4b723b1 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/FloorTopLevelConverterToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/FloorTopLevelConverterToSpeckle.cs @@ -1,5 +1,6 @@ using Speckle.Converters.Common.Objects; using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Converters.RevitShared.ToSpeckle; using Speckle.Objects; using Speckle.Objects.BuiltElements.Revit; @@ -21,7 +22,7 @@ public class FloorTopLevelConverterToSpeckle : BaseTopLevelConverterToSpeckle _converterSettings; public FloorTopLevelConverterToSpeckle( ITypedConverter> curveArrArrayConverter, @@ -30,7 +31,7 @@ public class FloorTopLevelConverterToSpeckle : BaseTopLevelConverterToSpeckle converterSettings ) { _curveArrArrayConverter = curveArrArrayConverter; @@ -39,7 +40,7 @@ public class FloorTopLevelConverterToSpeckle : BaseTopLevelConverterToSpeckle _converterSettings; public FootPrintRoofToSpeckleTopLevelConverter( ITypedConverter levelConverter, @@ -27,7 +28,7 @@ public class FootPrintRoofToSpeckleTopLevelConverter ParameterValueExtractor parameterValueExtractor, DisplayValueExtractor displayValueExtractor, ParameterObjectAssigner parameterObjectAssigner, - IRevitConversionContextStack contextStack + IConverterSettingsStore converterSettings ) { _levelConverter = levelConverter; @@ -35,7 +36,7 @@ public class FootPrintRoofToSpeckleTopLevelConverter _parameterValueExtractor = parameterValueExtractor; _displayValueExtractor = displayValueExtractor; _parameterObjectAssigner = parameterObjectAssigner; - _contextStack = contextStack; + _converterSettings = converterSettings; } public override RevitFootprintRoof Convert(FootPrintRoof target) @@ -68,7 +69,7 @@ public class FootPrintRoofToSpeckleTopLevelConverter cutOffLevel = topLevel is not null ? _levelConverter.Convert(topLevel) : null, slope = slope, displayValue = displayValue, - units = _contextStack.Current.SpeckleUnits + units = _converterSettings.Current.SpeckleUnits }; // POC: CNX-9396 again with the incorrect assumption that the first profile is the floor and subsequent profiles diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/GridTopLevelConverterToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/GridTopLevelConverterToSpeckle.cs index 7cf6dec50..09c5fb3fa 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/GridTopLevelConverterToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/GridTopLevelConverterToSpeckle.cs @@ -1,6 +1,6 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects; namespace Speckle.Converters.RevitShared.ToSpeckle; @@ -9,15 +9,15 @@ namespace Speckle.Converters.RevitShared.ToSpeckle; public sealed class GridTopLevelConverterToSpeckle : BaseTopLevelConverterToSpeckle { private readonly ITypedConverter _curveConverter; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; public GridTopLevelConverterToSpeckle( ITypedConverter curveConverter, - IRevitConversionContextStack contextStack + IConverterSettingsStore converterSettings ) { _curveConverter = curveConverter; - _contextStack = contextStack; + _converterSettings = converterSettings; } public override SOBE.GridLine Convert(DB.Grid target) => @@ -26,6 +26,6 @@ public sealed class GridTopLevelConverterToSpeckle : BaseTopLevelConverterToSpec baseLine = _curveConverter.Convert(target.Curve), label = target.Name, applicationId = target.UniqueId, - units = _contextStack.Current.SpeckleUnits + units = _converterSettings.Current.SpeckleUnits }; } diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/HostedElementConversionToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/HostedElementConversionToSpeckle.cs index c99e8da36..2cead587a 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/HostedElementConversionToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/HostedElementConversionToSpeckle.cs @@ -1,6 +1,6 @@ using Autodesk.Revit.DB; using Speckle.Converters.Common; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Sdk.Models; namespace Speckle.Converters.RevitShared.ToSpeckle; @@ -12,19 +12,22 @@ namespace Speckle.Converters.RevitShared.ToSpeckle; public class HostedElementConversionToSpeckle { private readonly IRootToSpeckleConverter _converter; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; - public HostedElementConversionToSpeckle(IRootToSpeckleConverter converter, IRevitConversionContextStack contextStack) + public HostedElementConversionToSpeckle( + IRootToSpeckleConverter converter, + IConverterSettingsStore converterSettings + ) { _converter = converter; - _contextStack = contextStack; + _converterSettings = converterSettings; } public IEnumerable ConvertHostedElements(IEnumerable hostedElementIds) { foreach (var elemId in hostedElementIds) { - Element element = _contextStack.Current.Document.GetElement(elemId); + Element element = _converterSettings.Current.Document.GetElement(elemId); Base @base; try diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/LevelTopLevelConverterToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/LevelTopLevelConverterToSpeckle.cs index c79e31540..26934fb1f 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/LevelTopLevelConverterToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/LevelTopLevelConverterToSpeckle.cs @@ -1,6 +1,7 @@ using Speckle.Converters.Common; using Speckle.Converters.RevitShared.Helpers; using Speckle.Converters.RevitShared.Services; +using Speckle.Converters.RevitShared.Settings; namespace Speckle.Converters.RevitShared.ToSpeckle; @@ -9,17 +10,17 @@ public class LevelConversionToSpeckle : BaseTopLevelConverterToSpeckle _converterSettings; public LevelConversionToSpeckle( ScalingServiceToSpeckle scalingService, ParameterObjectAssigner parameterObjectAssigner, - IRevitConversionContextStack contextStack + IConverterSettingsStore converterSettings ) { _scalingService = scalingService; _parameterObjectAssigner = parameterObjectAssigner; - _contextStack = contextStack; + _converterSettings = converterSettings; } public override SOBR.RevitLevel Convert(DB.Level target) @@ -30,7 +31,7 @@ public class LevelConversionToSpeckle : BaseTopLevelConverterToSpeckle { private readonly ITypedConverter _curveConverter; - private readonly IRevitConversionContextStack _conversionContext; + private readonly IConverterSettingsStore _converterSettings; public ModelCurveToSpeckleTopLevelConverter( ITypedConverter curveConverter, - IRevitConversionContextStack conversionContext + IConverterSettingsStore converterSettings ) { _curveConverter = curveConverter; - _conversionContext = conversionContext; + _converterSettings = converterSettings; } public override SOBR.Curve.ModelCurve Convert(DB.ModelCurve target) @@ -30,7 +30,7 @@ public class ModelCurveToSpeckleTopLevelConverter : BaseTopLevelConverterToSpeck baseCurve = _curveConverter.Convert(target.GeometryCurve), lineStyle = target.LineStyle.Name, elementId = target.Id.ToString().NotNull(), - units = _conversionContext.Current.SpeckleUnits + units = _converterSettings.Current.SpeckleUnits }; // POC: check this is not going to set the display value to anything we cannot actually display - i.e. polycurve diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RoofBaseToSpeckleTopLevelTopLevelConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RoofBaseToSpeckleTopLevelTopLevelConverter.cs index b36d69f8d..98bdf6bcc 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RoofBaseToSpeckleTopLevelTopLevelConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RoofBaseToSpeckleTopLevelTopLevelConverter.cs @@ -1,6 +1,7 @@ using Autodesk.Revit.DB; using Speckle.Converters.Common; using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects.BuiltElements.Revit.RevitRoof; namespace Speckle.Converters.RevitShared.ToSpeckle; @@ -11,17 +12,17 @@ internal sealed class RoofBaseToSpeckleTopLevelTopLevelConverter { private readonly DisplayValueExtractor _displayValueExtractor; private readonly ParameterObjectAssigner _parameterObjectAssigner; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; public RoofBaseToSpeckleTopLevelTopLevelConverter( DisplayValueExtractor displayValueExtractor, ParameterObjectAssigner parameterObjectAssigner, - IRevitConversionContextStack contextStack + IConverterSettingsStore converterSettings ) { _displayValueExtractor = displayValueExtractor; _parameterObjectAssigner = parameterObjectAssigner; - _contextStack = contextStack; + _converterSettings = converterSettings; } public override RevitRoof Convert(RoofBase target) @@ -35,7 +36,7 @@ internal sealed class RoofBaseToSpeckleTopLevelTopLevelConverter type = elementType.Name, family = elementType.FamilyName, displayValue = displayValue, - units = _contextStack.Current.SpeckleUnits + units = _converterSettings.Current.SpeckleUnits }; _parameterObjectAssigner.AssignParametersToBase(target, revitRoof); diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RoomTopLevelConverterToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RoomTopLevelConverterToSpeckle.cs index bbd51b48c..ba43db594 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RoomTopLevelConverterToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RoomTopLevelConverterToSpeckle.cs @@ -1,6 +1,7 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects; using Speckle.Sdk.Models; @@ -15,7 +16,7 @@ public class RoomTopLevelConverterToSpeckle : BaseTopLevelConverterToSpeckle _locationConverter; private readonly ITypedConverter, SOG.Polycurve> _boundarySegmentConverter; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; public RoomTopLevelConverterToSpeckle( DisplayValueExtractor displayValueExtractor, @@ -24,7 +25,7 @@ public class RoomTopLevelConverterToSpeckle : BaseTopLevelConverterToSpeckle locationConverter, ITypedConverter, SOG.Polycurve> boundarySegmentConverter, - IRevitConversionContextStack contextStack + IConverterSettingsStore converterSettings ) { _displayValueExtractor = displayValueExtractor; @@ -33,7 +34,7 @@ public class RoomTopLevelConverterToSpeckle : BaseTopLevelConverterToSpeckle _converterSettings; public TopographyTopLevelConverterToSpeckle( DisplayValueExtractor displayValueExtractor, ParameterObjectAssigner parameterObjectAssigner, - IRevitConversionContextStack contextStack + IConverterSettingsStore converterSettings ) { _displayValueExtractor = displayValueExtractor; _parameterObjectAssigner = parameterObjectAssigner; - _contextStack = contextStack; + _converterSettings = converterSettings; } public override SOBR.RevitTopography Convert(DBA.TopographySurface target) { var speckleTopo = new SOBR.RevitTopography { - units = _contextStack.Current.SpeckleUnits, + units = _converterSettings.Current.SpeckleUnits, displayValue = _displayValueExtractor.GetDisplayValue(target), elementId = target.Id.ToString().NotNull(), baseGeometry = null! //TODO: this can't be correct, see https://linear.app/speckle/issue/CNX-461/revit-check-why-topographytospeckle-sets-no-basegeometry diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/WallTopLevelConverterToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/WallTopLevelConverterToSpeckle.cs index 4ad4048ab..318322a13 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/WallTopLevelConverterToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/WallTopLevelConverterToSpeckle.cs @@ -1,6 +1,7 @@ using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Settings; using Speckle.Objects; using Speckle.Objects.BuiltElements.Revit; using Speckle.Sdk.Models; @@ -17,7 +18,7 @@ public class WallTopLevelConverterToSpeckle : BaseTopLevelConverterToSpeckle _levelConverter; private readonly ITypedConverter> _curveArrArrayConverter; private readonly ParameterValueExtractor _parameterValueExtractor; - private readonly IRevitConversionContextStack _contextStack; + private readonly IConverterSettingsStore _converterSettings; private readonly DisplayValueExtractor _displayValueExtractor; private readonly ParameterObjectAssigner _parameterObjectAssigner; private readonly IRootToSpeckleConverter _converter; @@ -26,7 +27,7 @@ public class WallTopLevelConverterToSpeckle : BaseTopLevelConverterToSpeckle curveConverter, ITypedConverter levelConverter, ITypedConverter> curveArrArrayConverter, - IRevitConversionContextStack contextStack, + IConverterSettingsStore converterSettings, ParameterValueExtractor parameterValueExtractor, DisplayValueExtractor displayValueExtractor, ParameterObjectAssigner parameterObjectAssigner, @@ -36,7 +37,7 @@ public class WallTopLevelConverterToSpeckle : BaseTopLevelConverterToSpeckle(); + builder.ScanAssemblyOfType(); // Register single root builder.AddRootCommon(); // register all application converters and context stacks builder.AddApplicationConverters(); - builder.AddScoped, RhinoConversionContextStack>(); + builder.AddScoped< + IConverterSettingsStore, + ConverterSettingsStore + >(); } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/ArcToSpeckleConverterTests.cs b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/ArcToSpeckleConverterTests.cs index 86f983a2b..57806f31c 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/ArcToSpeckleConverterTests.cs +++ b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/ArcToSpeckleConverterTests.cs @@ -1,9 +1,9 @@ using FluentAssertions; using Moq; using NUnit.Framework; -using Rhino; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; +using Speckle.Converters.Rhino; using Speckle.Converters.Rhino.ToSpeckle.Raw; using Speckle.Testing; @@ -19,12 +19,12 @@ public class ArcToSpeckleConverterTests : MoqTest var mockPointConverter = Create>(); var mockPlaneConverter = Create>(); var mockBoxConverter = Create>(); - var mockContextStack = Create>(); + var mockContextStack = Create>(); var factory = Create(); - var context = Create>(); - context.Setup(x => x.SpeckleUnits).Returns("units"); - mockContextStack.Setup(cs => cs.Current).Returns(context.Object); + var doc = Create(); + + mockContextStack.Setup(cs => cs.Current).Returns(new RhinoConversionSettings(doc.Object, "units")); var targetArc = Create(); var targetPlane = Create(); diff --git a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/EllipseToSpeckleConverterTests.cs b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/EllipseToSpeckleConverterTests.cs index d81f381d4..771a38a9c 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/EllipseToSpeckleConverterTests.cs +++ b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/EllipseToSpeckleConverterTests.cs @@ -1,7 +1,7 @@ using NUnit.Framework; -using Rhino; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; +using Speckle.Converters.Rhino; using Speckle.Converters.Rhino.ToSpeckle.Raw; using Speckle.Testing; @@ -12,10 +12,10 @@ public class EllipseToSpeckleConverterTests : MoqTest [Test] public void Convert_Test() { - var conversionContextStack = Create>(); + var mockContextStack = Create>(); var planeConverter = Create>(); var boxConverter = Create>(); - _ = new EllipseToSpeckleConverter(planeConverter.Object, boxConverter.Object, conversionContextStack.Object); + _ = new EllipseToSpeckleConverter(planeConverter.Object, boxConverter.Object, mockContextStack.Object); } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/Speckle.Converters.Rhino7.Tests.csproj b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/Speckle.Converters.Rhino7.Tests.csproj index 18f7bd447..b2b3653be 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/Speckle.Converters.Rhino7.Tests.csproj +++ b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/Speckle.Converters.Rhino7.Tests.csproj @@ -23,6 +23,6 @@ - + diff --git a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json index df6bfc70e..0d0ec6c1f 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json @@ -78,9 +78,9 @@ }, "Speckle.Rhino7.Fakes": { "type": "Direct", - "requested": "[0.2.2-preview.2, )", - "resolved": "0.2.2-preview.2", - "contentHash": "l4sP+NW1RPfI7/agOGHkXtcvpq24CLRsnUsK3QJwgDydHnsS4TWAM/OslkyLiytTzA6i4Hdsu7UQXRlizKv48g==", + "requested": "[0.3.0, 1.0.0)", + "resolved": "0.3.0", + "contentHash": "6nDQudPvrsaVgrGWicQ50fb3LzyEp8QMCltJZs6itzyYlHYC8xjmCHK1Z305f3y9QfK9QQa93sBrEtS7xIhcEQ==", "dependencies": { "System.Drawing.Common": "8.0.6" } diff --git a/Converters/Rhino/Speckle.Converters.Rhino8.DependencyInjection/RhinoConverterModule.cs b/Converters/Rhino/Speckle.Converters.Rhino8.DependencyInjection/RhinoConverterModule.cs index e3e3a34e9..23ce158b6 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino8.DependencyInjection/RhinoConverterModule.cs +++ b/Converters/Rhino/Speckle.Converters.Rhino8.DependencyInjection/RhinoConverterModule.cs @@ -3,7 +3,6 @@ using Speckle.Autofac.DependencyInjection; using Speckle.Converters.Common; using Speckle.Converters.Common.DependencyInjection; using Speckle.Converters.Rhino; -using Speckle.Converters.Rhino.ToSpeckle.Raw; namespace Speckle.Converters.Rhino8.DependencyInjection; @@ -12,12 +11,15 @@ public class RhinoConverterModule : ISpeckleModule public void Load(SpeckleContainerBuilder builder) { //register types by default - builder.ScanAssemblyOfType(); + builder.ScanAssemblyOfType(); // Register single root builder.AddRootCommon(); // register all application converters and context stacks builder.AddApplicationConverters(); - builder.AddScoped, RhinoConversionContextStack>(); + builder.AddScoped< + IConverterSettingsStore, + ConverterSettingsStore + >(); } } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionContextStack.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionContextStack.cs deleted file mode 100644 index 8bc3c2a7f..000000000 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionContextStack.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using Rhino; -using Speckle.Converters.Common; - -namespace Speckle.Converters.Rhino; - -// POC: CNX-9268 Suppressed naming warning for now, but we should evaluate if we should follow this or disable it. -[SuppressMessage( - "Naming", - "CA1711:Identifiers should not have incorrect suffix", - Justification = "Name ends in Stack but it is in fact a Stack, just not inheriting from `System.Collections.Stack`" -)] -public class RhinoConversionContextStack : ConversionContextStack -{ - public RhinoConversionContextStack(IHostToSpeckleUnitConverter unitConverter) - : base(RhinoDoc.ActiveDoc, RhinoDoc.ActiveDoc.ModelUnitSystem, unitConverter) { } -} diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionSettings.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionSettings.cs new file mode 100644 index 000000000..2b7fd8f10 --- /dev/null +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionSettings.cs @@ -0,0 +1,5 @@ +using Rhino; + +namespace Speckle.Converters.Rhino; + +public record RhinoConversionSettings(RhinoDoc Document, string SpeckleUnits); diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionSettingsFactory.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionSettingsFactory.cs new file mode 100644 index 000000000..ae372fdd1 --- /dev/null +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/RhinoConversionSettingsFactory.cs @@ -0,0 +1,17 @@ +using Rhino; +using Speckle.Converters.Common; +using Speckle.InterfaceGenerator; + +namespace Speckle.Converters.Rhino; + +[GenerateAutoInterface] +public class RhinoConversionSettingsFactory( + IHostToSpeckleUnitConverter unitsConverter, + IConverterSettingsStore settingsStore +) : IRhinoConversionSettingsFactory +{ + public RhinoConversionSettings Current => settingsStore.Current; + + public RhinoConversionSettings Create(RhinoDoc document) => + new(document, unitsConverter.ConvertOrThrow(RhinoDoc.ActiveDoc.ModelUnitSystem)); +} diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/SpeckleToHostGeometryBaseTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/SpeckleToHostGeometryBaseTopLevelConverter.cs index 45d57f467..a7f4914e7 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/SpeckleToHostGeometryBaseTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/SpeckleToHostGeometryBaseTopLevelConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Sdk.Common; using Speckle.Sdk.Models; @@ -10,15 +9,15 @@ public abstract class SpeckleToHostGeometryBaseTopLevelConverter : IT where TIn : Base where TOut : RG.GeometryBase { - protected IConversionContextStack ContextStack { get; private set; } + protected IConverterSettingsStore SettingsStore { get; private set; } private readonly ITypedConverter _geometryBaseConverter; protected SpeckleToHostGeometryBaseTopLevelConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter geometryBaseConverter ) { - ContextStack = contextStack; + SettingsStore = settingsStore; _geometryBaseConverter = geometryBaseConverter; } @@ -34,7 +33,7 @@ public abstract class SpeckleToHostGeometryBaseTopLevelConverter : IT */ if (castedBase["units"] is string units) { - var scaleFactor = Units.GetConversionFactor(units, ContextStack.Current.SpeckleUnits); + var scaleFactor = Units.GetConversionFactor(units, SettingsStore.Current.SpeckleUnits); var scale = RG.Transform.Scale(RG.Point3d.Origin, scaleFactor); result.Transform(scale); } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/Raw/BrepToHostConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/Raw/BrepToHostConverter.cs index 4f8010a8b..2c626977a 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/Raw/BrepToHostConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/Raw/BrepToHostConverter.cs @@ -1,4 +1,3 @@ -using Rhino; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Objects; @@ -7,21 +6,21 @@ namespace Speckle.Converters.Rhino.ToHost.Raw; public class BrepToHostConverter : ITypedConverter { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; private readonly ITypedConverter _curveConverter; private readonly ITypedConverter _surfaceConverter; private readonly ITypedConverter _pointConverter; private readonly ITypedConverter _intervalConverter; public BrepToHostConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter curveConverter, ITypedConverter surfaceConverter, ITypedConverter pointConverter, ITypedConverter intervalConverter ) { - _contextStack = contextStack; + _settingsStore = settingsStore; _curveConverter = curveConverter; _surfaceConverter = surfaceConverter; _pointConverter = pointConverter; @@ -42,7 +41,7 @@ public class BrepToHostConverter : ITypedConverter /// ⚠️ This conversion does NOT perform scaling. public RG.Brep Convert(SOG.Brep target) { - var tolerance = _contextStack.Current.Document.ModelAbsoluteTolerance; + var tolerance = _settingsStore.Current.Document.ModelAbsoluteTolerance; var rhinoBrep = new RG.Brep(); diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/ArcToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/ArcToHostTopLevelConverter.cs index 092c4f02a..3ebd21b35 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/ArcToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/ArcToHostTopLevelConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; namespace Speckle.Converters.Rhino.ToHost.TopLevel; @@ -8,8 +7,8 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; public class ArcToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public ArcToHostTopLevelConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter geometryBaseConverter ) - : base(contextStack, geometryBaseConverter) { } + : base(settingsStore, geometryBaseConverter) { } } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/BrepToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/BrepToHostTopLevelConverter.cs index 041250478..a20d9f1c3 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/BrepToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/BrepToHostTopLevelConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; namespace Speckle.Converters.Rhino.ToHost.TopLevel; @@ -8,8 +7,8 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; public class BrepToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public BrepToHostTopLevelConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter geometryBaseConverter ) - : base(contextStack, geometryBaseConverter) { } + : base(settingsStore, geometryBaseConverter) { } } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/CircleToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/CircleToHostTopLevelConverter.cs index 8c478e421..17e60e248 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/CircleToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/CircleToHostTopLevelConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; namespace Speckle.Converters.Rhino.ToHost.TopLevel; @@ -8,8 +7,8 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; public class CircleToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public CircleToHostTopLevelConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter geometryBaseConverter ) - : base(contextStack, geometryBaseConverter) { } + : base(settingsStore, geometryBaseConverter) { } } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/EllipseToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/EllipseToHostTopLevelConverter.cs index f52007a71..24851e534 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/EllipseToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/EllipseToHostTopLevelConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; namespace Speckle.Converters.Rhino.ToHost.TopLevel; @@ -8,8 +7,8 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; public class EllipseToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public EllipseToHostTopLevelConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter geometryBaseConverter ) - : base(contextStack, geometryBaseConverter) { } + : base(settingsStore, geometryBaseConverter) { } } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/FallbackToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/FallbackToHostTopLevelConverter.cs index a4fca504b..d83f2e1c3 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/FallbackToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/FallbackToHostTopLevelConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Sdk.Common; using Speckle.Sdk.Models; @@ -15,21 +14,21 @@ public class FallbackToHostTopLevelConverter private readonly ITypedConverter _lineConverter; private readonly ITypedConverter _polylineConverter; private readonly ITypedConverter _meshConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public FallbackToHostTopLevelConverter( ITypedConverter pointConverter, ITypedConverter lineConverter, ITypedConverter polylineConverter, ITypedConverter meshConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; _lineConverter = lineConverter; _polylineConverter = polylineConverter; _meshConverter = meshConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public object Convert(Base target) => Convert((DisplayableObject)target); @@ -63,7 +62,7 @@ public class FallbackToHostTopLevelConverter */ if (speckleObject["units"] is string units) { - var scaleFactor = Units.GetConversionFactor(units, _contextStack.Current.SpeckleUnits); + var scaleFactor = Units.GetConversionFactor(units, _settingsStore.Current.SpeckleUnits); var scale = RG.Transform.Scale(RG.Point3d.Origin, scaleFactor); return scale; } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/LineToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/LineToHostTopLevelConverter.cs index b0cbdfdf9..315fcd611 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/LineToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/LineToHostTopLevelConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; namespace Speckle.Converters.Rhino.ToHost.TopLevel; @@ -8,8 +7,8 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; public class LineToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public LineToHostTopLevelConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter geometryBaseConverter ) - : base(contextStack, geometryBaseConverter) { } + : base(settingsStore, geometryBaseConverter) { } } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/MeshToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/MeshToHostTopLevelConverter.cs index 6678a0b49..db768ad0d 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/MeshToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/MeshToHostTopLevelConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; namespace Speckle.Converters.Rhino.ToHost.TopLevel; @@ -8,8 +7,8 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; public class MeshToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public MeshToHostTopLevelConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter geometryBaseConverter ) - : base(contextStack, geometryBaseConverter) { } + : base(settingsStore, geometryBaseConverter) { } } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/NurbsCurveToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/NurbsCurveToHostTopLevelConverter.cs index 9b407c30d..2c507f6ac 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/NurbsCurveToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/NurbsCurveToHostTopLevelConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; namespace Speckle.Converters.Rhino.ToHost.TopLevel; @@ -8,8 +7,8 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; public class NurbsCurveToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public NurbsCurveToHostTopLevelConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter geometryBaseConverter ) - : base(contextStack, geometryBaseConverter) { } + : base(settingsStore, geometryBaseConverter) { } } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PointCloudToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PointCloudToHostTopLevelConverter.cs index a9407d50d..99439d9c2 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PointCloudToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PointCloudToHostTopLevelConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; namespace Speckle.Converters.Rhino.ToHost.TopLevel; @@ -9,8 +8,8 @@ public class PointCloudToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public PointCloudToHostTopLevelConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter geometryBaseConverter ) - : base(contextStack, geometryBaseConverter) { } + : base(settingsStore, geometryBaseConverter) { } } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PointToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PointToHostTopLevelConverter.cs index 5d6dea970..2211f8227 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PointToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PointToHostTopLevelConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; namespace Speckle.Converters.Rhino.ToHost.TopLevel; @@ -8,8 +7,8 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; public class PointToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public PointToHostTopLevelConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter geometryBaseConverter ) - : base(contextStack, geometryBaseConverter) { } + : base(settingsStore, geometryBaseConverter) { } } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PolycurveToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PolycurveToHostTopLevelConverter.cs index 60472a1a4..7a523999d 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PolycurveToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PolycurveToHostTopLevelConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; namespace Speckle.Converters.Rhino.ToHost.TopLevel; @@ -8,8 +7,8 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; public class PolycurveToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public PolycurveToHostTopLevelConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter geometryBaseConverter ) - : base(contextStack, geometryBaseConverter) { } + : base(settingsStore, geometryBaseConverter) { } } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PolylineToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PolylineToHostTopLevelConverter.cs index 3ce37d22b..6323f955a 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PolylineToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PolylineToHostTopLevelConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; namespace Speckle.Converters.Rhino.ToHost.TopLevel; @@ -9,8 +8,8 @@ public class PolylineToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public PolylineToHostTopLevelConverter( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter geometryBaseConverter ) - : base(contextStack, geometryBaseConverter) { } + : base(settingsStore, geometryBaseConverter) { } } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/ArcCurveToSpeckleConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/ArcCurveToSpeckleConverter.cs index 9a9b46300..41e023457 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/ArcCurveToSpeckleConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/ArcCurveToSpeckleConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Objects; using Speckle.Sdk.Models; @@ -11,19 +10,19 @@ public class ArcCurveToSpeckleConverter : ITypedConverter, private readonly ITypedConverter _circleConverter; private readonly ITypedConverter _arcConverter; private readonly ITypedConverter _intervalConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public ArcCurveToSpeckleConverter( ITypedConverter circleConverter, ITypedConverter arcConverter, ITypedConverter intervalConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _circleConverter = circleConverter; _arcConverter = arcConverter; _intervalConverter = intervalConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } /// @@ -38,7 +37,7 @@ public class ArcCurveToSpeckleConverter : ITypedConverter, /// public ICurve Convert(RG.ArcCurve target) { - var tolerance = _contextStack.Current.Document.ModelAbsoluteTolerance; + var tolerance = _settingsStore.Current.Document.ModelAbsoluteTolerance; if (target.IsCompleteCircle) { diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/ArcToSpeckleConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/ArcToSpeckleConverter.cs index 96f7b614a..707c67b88 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/ArcToSpeckleConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/ArcToSpeckleConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; namespace Speckle.Converters.Rhino.ToSpeckle.Raw; @@ -9,7 +8,7 @@ public class ArcToSpeckleConverter : ITypedConverter private readonly ITypedConverter _pointConverter; private readonly ITypedConverter _planeConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; private readonly IBoxFactory _boxFactory; @@ -17,14 +16,14 @@ public class ArcToSpeckleConverter : ITypedConverter ITypedConverter pointConverter, ITypedConverter planeConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, IBoxFactory boxFactory ) { _pointConverter = pointConverter; _planeConverter = planeConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; _boxFactory = boxFactory; } @@ -43,7 +42,7 @@ public class ArcToSpeckleConverter : ITypedConverter target.StartAngle, target.EndAngle, target.Angle, - _contextStack.Current.SpeckleUnits + _settingsStore.Current.SpeckleUnits ) { startPoint = _pointConverter.Convert(target.StartPoint), diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/BoxToSpeckleConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/BoxToSpeckleConverter.cs index f9bcd9f1c..7b0503bae 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/BoxToSpeckleConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/BoxToSpeckleConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; namespace Speckle.Converters.Rhino.ToSpeckle.Raw; @@ -8,17 +7,17 @@ public class BoxToSpeckleConverter : ITypedConverter { private readonly ITypedConverter _planeConverter; private readonly ITypedConverter _intervalConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public BoxToSpeckleConverter( ITypedConverter planeConverter, ITypedConverter intervalConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _planeConverter = planeConverter; _intervalConverter = intervalConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } /// @@ -33,7 +32,7 @@ public class BoxToSpeckleConverter : ITypedConverter xSize = _intervalConverter.Convert(target.X), ySize = _intervalConverter.Convert(target.Y), zSize = _intervalConverter.Convert(target.Z), - units = _contextStack.Current.SpeckleUnits, + units = _settingsStore.Current.SpeckleUnits, area = target.Area, volume = target.Volume, }; diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/BrepToSpeckleConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/BrepToSpeckleConverter.cs index 0e3431ed4..d373e10bb 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/BrepToSpeckleConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/BrepToSpeckleConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Objects; using Speckle.Sdk; @@ -15,7 +14,7 @@ public class BrepToSpeckleConverter : ITypedConverter private readonly ITypedConverter _meshConverter; private readonly ITypedConverter _boxConverter; private readonly ITypedConverter _intervalConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public BrepToSpeckleConverter( ITypedConverter pointConverter, @@ -24,7 +23,7 @@ public class BrepToSpeckleConverter : ITypedConverter ITypedConverter meshConverter, ITypedConverter boxConverter, ITypedConverter intervalConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; @@ -33,7 +32,7 @@ public class BrepToSpeckleConverter : ITypedConverter _meshConverter = meshConverter; _boxConverter = boxConverter; _intervalConverter = intervalConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } /// @@ -43,7 +42,7 @@ public class BrepToSpeckleConverter : ITypedConverter /// The converted Speckle Brep object. public SOG.Brep Convert(RG.Brep target) { - var tol = _contextStack.Current.Document.ModelAbsoluteTolerance; + var tol = _settingsStore.Current.Document.ModelAbsoluteTolerance; target.Repair(tol); // POC: CNX-9276 This should come as part of the user settings in the context object. @@ -77,7 +76,7 @@ public class BrepToSpeckleConverter : ITypedConverter surfaces.AddRange(target.Surfaces.Select(srf => _surfaceConverter.Convert(srf.ToNurbsSurface()))); List curves2d = new(target.Curves2D.Count); - using (_contextStack.Push(Units.None)) + using (_settingsStore.Push(x => x with { SpeckleUnits = Units.None })) { // Curves2D are unitless, so we convert them within a new pushed context with None units. curves2d.AddRange(target.Curves2D.Select(curve2d => _curveConverter.Convert(curve2d))); @@ -95,7 +94,7 @@ public class BrepToSpeckleConverter : ITypedConverter volume = target.IsSolid ? target.GetVolume() : 0, area = target.GetArea(), bbox = _boxConverter.Convert(new RG.Box(target.GetBoundingBox(false))), - units = _contextStack.Current.SpeckleUnits, + units = _settingsStore.Current.SpeckleUnits, Edges = new(target.Edges.Count), Loops = new(target.Loops.Count), Trims = new(target.Trims.Count), diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/CircleToSpeckleConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/CircleToSpeckleConverter.cs index bcc115b11..6d617adde 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/CircleToSpeckleConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/CircleToSpeckleConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Sdk.Models; @@ -8,15 +7,15 @@ namespace Speckle.Converters.Rhino.ToSpeckle.Raw; public class CircleToSpeckleConverter : ITypedConverter { private readonly ITypedConverter _planeConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public CircleToSpeckleConverter( ITypedConverter planeConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _planeConverter = planeConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } public Base Convert(object target) => Convert((RG.Circle)target); @@ -34,7 +33,7 @@ public class CircleToSpeckleConverter : ITypedConverter { plane = _planeConverter.Convert(target.Plane), radius = target.Radius, - units = _contextStack.Current.SpeckleUnits, + units = _settingsStore.Current.SpeckleUnits, domain = SOP.Interval.UnitInterval, length = 2 * Math.PI * target.Radius, area = Math.PI * Math.Pow(target.Radius, 2), diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/ControlPointToSpeckleConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/ControlPointToSpeckleConverter.cs index e3d575d23..647229c7a 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/ControlPointToSpeckleConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/ControlPointToSpeckleConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Sdk.Models; @@ -7,11 +6,11 @@ namespace Speckle.Converters.Rhino.ToSpeckle.Raw; public class ControlPointToSpeckleConverter : ITypedConverter { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; - public ControlPointToSpeckleConverter(IConversionContextStack contextStack) + public ControlPointToSpeckleConverter(IConverterSettingsStore settingsStore) { - _contextStack = contextStack; + _settingsStore = settingsStore; } /// @@ -20,7 +19,7 @@ public class ControlPointToSpeckleConverter : ITypedConverterThe ControlPoint object to convert. /// The converted Speckle ControlPoint object. public SOG.ControlPoint Convert(RG.ControlPoint target) => - new(target.Location.X, target.Location.Y, target.Location.Z, target.Weight, _contextStack.Current.SpeckleUnits); + new(target.Location.X, target.Location.Y, target.Location.Z, target.Weight, _settingsStore.Current.SpeckleUnits); public Base Convert(object target) => Convert((RG.ControlPoint)target); } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/EllipseToSpeckleConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/EllipseToSpeckleConverter.cs index ffab7a7c9..3326e0d1b 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/EllipseToSpeckleConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/EllipseToSpeckleConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; namespace Speckle.Converters.Rhino.ToSpeckle.Raw; @@ -8,17 +7,17 @@ public class EllipseToSpeckleConverter : ITypedConverter _planeConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public EllipseToSpeckleConverter( ITypedConverter planeConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _planeConverter = planeConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } /// @@ -37,7 +36,7 @@ public class EllipseToSpeckleConverter : ITypedConverter, ITyped { private readonly ITypedConverter _pointConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public LineToSpeckleConverter( ITypedConverter pointConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } /// @@ -34,7 +33,7 @@ public class LineToSpeckleConverter : ITypedConverter, ITyped { start = _pointConverter.Convert(target.From), end = _pointConverter.Convert(target.To), - units = _contextStack.Current.SpeckleUnits, + units = _settingsStore.Current.SpeckleUnits, domain = new SOP.Interval { start = 0, end = target.Length }, bbox = _boxConverter.Convert(new RG.Box(target.BoundingBox)) }; diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/MeshToSpeckleConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/MeshToSpeckleConverter.cs index 9b2d4402d..97f7622e7 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/MeshToSpeckleConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/MeshToSpeckleConverter.cs @@ -1,4 +1,3 @@ -using Rhino; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; @@ -9,17 +8,17 @@ public class MeshToSpeckleConverter : ITypedConverter { private readonly ITypedConverter _pointConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public MeshToSpeckleConverter( ITypedConverter pointConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _pointConverter = pointConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } /// @@ -74,7 +73,7 @@ public class MeshToSpeckleConverter : ITypedConverter faces = faces, colors = colors, textureCoordinates = textureCoordinates, - units = _contextStack.Current.SpeckleUnits, + units = _settingsStore.Current.SpeckleUnits, volume = volume, bbox = bbox }; diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/NurbsCurveConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/NurbsCurveConverter.cs index cb37b12e4..2f0f1ac1d 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/NurbsCurveConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/NurbsCurveConverter.cs @@ -1,4 +1,3 @@ -using Rhino; using Rhino.Geometry; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; @@ -10,19 +9,19 @@ public class NurbsCurveConverter : ITypedConverter private readonly ITypedConverter _polylineConverter; private readonly ITypedConverter _intervalConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public NurbsCurveConverter( ITypedConverter polylineConverter, ITypedConverter intervalConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _polylineConverter = polylineConverter; _intervalConverter = intervalConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } /// @@ -38,7 +37,7 @@ public class NurbsCurveConverter : ITypedConverter public SOG.Curve Convert(RG.NurbsCurve target) { // tolerance - double tolerance = _contextStack.Current.Document.ModelAbsoluteTolerance; + double tolerance = _settingsStore.Current.Document.ModelAbsoluteTolerance; if (target.ToPolyline(0, 1, 0, 0, 0, tolerance, 0, 0, true) is not PolylineCurve polylineCurve) { @@ -67,7 +66,7 @@ public class NurbsCurveConverter : ITypedConverter var myCurve = new SOG.Curve { displayValue = displayPoly, - units = _contextStack.Current.SpeckleUnits, + units = _settingsStore.Current.SpeckleUnits, weights = nurbsCurve.Points.Select(ctp => ctp.Weight).ToList(), points = nurbsCurve.Points.SelectMany(ctp => new[] { ctp.Location.X, ctp.Location.Y, ctp.Location.Z }).ToList(), knots = knots, diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/NurbsSurfaceToSpeckleConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/NurbsSurfaceToSpeckleConverter.cs index 7984a78fc..c42c87e47 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/NurbsSurfaceToSpeckleConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/NurbsSurfaceToSpeckleConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Rhino.Geometry.Collections; +using Rhino.Geometry.Collections; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; @@ -10,19 +9,19 @@ public class NurbsSurfaceToSpeckleConverter : ITypedConverter _boxConverter; private readonly ITypedConverter _intervalConverter; private readonly ITypedConverter _controlPointConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public NurbsSurfaceToSpeckleConverter( ITypedConverter boxConverter, ITypedConverter intervalConverter, ITypedConverter controlPointConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _boxConverter = boxConverter; _intervalConverter = intervalConverter; _controlPointConverter = controlPointConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } /// @@ -43,7 +42,7 @@ public class NurbsSurfaceToSpeckleConverter : ITypedConverter { private readonly ITypedConverter _vectorConverter; private readonly ITypedConverter _pointConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public PlaneToSpeckleConverter( ITypedConverter vectorConverter, ITypedConverter pointConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _vectorConverter = vectorConverter; _pointConverter = pointConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } /// @@ -33,6 +32,6 @@ public class PlaneToSpeckleConverter : ITypedConverter normal = _vectorConverter.Convert(target.ZAxis), xdir = _vectorConverter.Convert(target.XAxis), ydir = _vectorConverter.Convert(target.YAxis), - units = _contextStack.Current.SpeckleUnits + units = _settingsStore.Current.SpeckleUnits }; } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/PointToSpeckleConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/PointToSpeckleConverter.cs index b81de953d..3a4a1747d 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/PointToSpeckleConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/PointToSpeckleConverter.cs @@ -1,4 +1,3 @@ -using Rhino; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; @@ -6,11 +5,11 @@ namespace Speckle.Converters.Rhino.ToSpeckle.Raw; public class PointToSpeckleConverter : ITypedConverter, ITypedConverter { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; - public PointToSpeckleConverter(IConversionContextStack contextStack) + public PointToSpeckleConverter(IConverterSettingsStore settingsStore) { - _contextStack = contextStack; + _settingsStore = settingsStore; } /// @@ -18,7 +17,7 @@ public class PointToSpeckleConverter : ITypedConverter, I /// /// The Rhino 3D point to convert. /// The converted Speckle point. - public SOG.Point Convert(RG.Point3d target) => new(target.X, target.Y, target.Z, _contextStack.Current.SpeckleUnits); + public SOG.Point Convert(RG.Point3d target) => new(target.X, target.Y, target.Z, _settingsStore.Current.SpeckleUnits); public SOG.Point Convert(RG.Point target) => Convert(target.Location); } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/PolyCurveToSpeckleConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/PolyCurveToSpeckleConverter.cs index 7b25ddc49..d5dd6fa5c 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/PolyCurveToSpeckleConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/PolyCurveToSpeckleConverter.cs @@ -1,5 +1,4 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Objects; using Speckle.Sdk.Common; @@ -11,17 +10,17 @@ public class PolyCurveToSpeckleConverter : ITypedConverter? CurveConverter { get; set; } // POC: CNX-9279 This created a circular dependency on the constructor, making it a property allows for the container to resolve it correctly private readonly ITypedConverter _intervalConverter; private readonly ITypedConverter _boxConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public PolyCurveToSpeckleConverter( ITypedConverter intervalConverter, ITypedConverter boxConverter, - IConversionContextStack contextStack + IConverterSettingsStore settingsStore ) { _intervalConverter = intervalConverter; _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; } /// @@ -42,7 +41,7 @@ public class PolyCurveToSpeckleConverter : ITypedConverter CurveConverter.NotNull().Convert(x)).ToList(), - units = _contextStack.Current.SpeckleUnits + units = _settingsStore.Current.SpeckleUnits }; return myPoly; } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/PolylineToSpeckleConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/PolylineToSpeckleConverter.cs index a591c3b4a..2e3edc364 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/PolylineToSpeckleConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/PolylineToSpeckleConverter.cs @@ -1,4 +1,3 @@ -using Rhino; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; @@ -10,16 +9,16 @@ public class PolylineToSpeckleConverter { private readonly ITypedConverter _boxConverter; private readonly ITypedConverter _intervalConverter; - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; public PolylineToSpeckleConverter( ITypedConverter boxConverter, - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter intervalConverter ) { _boxConverter = boxConverter; - _contextStack = contextStack; + _settingsStore = settingsStore; _intervalConverter = intervalConverter; } @@ -46,7 +45,7 @@ public class PolylineToSpeckleConverter return new SOG.Polyline { value = points, - units = _contextStack.Current.SpeckleUnits, + units = _settingsStore.Current.SpeckleUnits, bbox = box, length = target.Length, domain = new() { start = 0, end = target.Length }, diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/RawPointCloudToSpeckle.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/RawPointCloudToSpeckle.cs index 1e1d5ad52..f434fef41 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/RawPointCloudToSpeckle.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/RawPointCloudToSpeckle.cs @@ -1,20 +1,19 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; namespace Speckle.Converters.Rhino.ToSpeckle.Raw; public class RawPointCloudToSpeckle : ITypedConverter { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; private readonly ITypedConverter _boxConverter; public RawPointCloudToSpeckle( - IConversionContextStack contextStack, + IConverterSettingsStore settingsStore, ITypedConverter boxConverter ) { - _contextStack = contextStack; + _settingsStore = settingsStore; _boxConverter = boxConverter; } @@ -29,6 +28,6 @@ public class RawPointCloudToSpeckle : ITypedConverter new[] { pt.X, pt.Y, pt.Z }).ToList(), colors = target.GetColors().Select(o => o.ToArgb()).ToList(), bbox = _boxConverter.Convert(new RG.Box(target.GetBoundingBox(true))), - units = _contextStack.Current.SpeckleUnits + units = _settingsStore.Current.SpeckleUnits }; } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/VectorToSpeckleConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/VectorToSpeckleConverter.cs index 1cbc7bbe7..c7be40960 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/VectorToSpeckleConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/VectorToSpeckleConverter.cs @@ -1,16 +1,15 @@ -using Rhino; -using Speckle.Converters.Common; +using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; namespace Speckle.Converters.Rhino.ToSpeckle.Raw; public class VectorToSpeckleConverter : ITypedConverter { - private readonly IConversionContextStack _contextStack; + private readonly IConverterSettingsStore _settingsStore; - public VectorToSpeckleConverter(IConversionContextStack contextStack) + public VectorToSpeckleConverter(IConverterSettingsStore settingsStore) { - _contextStack = contextStack; + _settingsStore = settingsStore; } /// @@ -19,5 +18,5 @@ public class VectorToSpeckleConverter : ITypedConverter /// The Rhino Vector3d object to convert. /// The converted Speckle Vector object. public SOG.Vector Convert(RG.Vector3d target) => - new(target.X, target.Y, target.Z, _contextStack.Current.SpeckleUnits); + new(target.X, target.Y, target.Z, _settingsStore.Current.SpeckleUnits); } diff --git a/Sdk/Speckle.Autofac/DependencyInjection/UnitOfWork.cs b/Sdk/Speckle.Autofac/DependencyInjection/UnitOfWork.cs index 43e69adf3..ddeb43c70 100644 --- a/Sdk/Speckle.Autofac/DependencyInjection/UnitOfWork.cs +++ b/Sdk/Speckle.Autofac/DependencyInjection/UnitOfWork.cs @@ -1,34 +1,25 @@ using Autofac; -using Speckle.InterfaceGenerator; namespace Speckle.Autofac.DependencyInjection; -public partial interface IUnitOfWork : IDisposable - where TService : class { } - -[GenerateAutoInterface] -public sealed class UnitOfWork : IUnitOfWork - where TService : class +public interface IUnitOfWork : IDisposable +{ + T Resolve() + where T : class; +} + +public sealed class UnitOfWork(ILifetimeScope unitOfWorkScope) : IUnitOfWork { - private readonly ILifetimeScope _unitOfWorkScope; private bool _notDisposed = true; - public UnitOfWork(ILifetimeScope unitOfWorkScope, TService service) + public T Resolve() + where T : class => unitOfWorkScope.Resolve(); + + public void Dispose() { - _unitOfWorkScope = unitOfWorkScope; - Service = service; - } - - public TService Service { get; } - - [AutoInterfaceIgnore] - public void Dispose() => Disposing(true); - - private void Disposing(bool fromDispose) - { - if (_notDisposed && fromDispose) + if (_notDisposed) { - _unitOfWorkScope.Dispose(); + unitOfWorkScope.Dispose(); _notDisposed = false; } } diff --git a/Sdk/Speckle.Autofac/DependencyInjection/UnitOfWorkFactory.cs b/Sdk/Speckle.Autofac/DependencyInjection/UnitOfWorkFactory.cs index 5acb7c0de..7c4f0dc93 100644 --- a/Sdk/Speckle.Autofac/DependencyInjection/UnitOfWorkFactory.cs +++ b/Sdk/Speckle.Autofac/DependencyInjection/UnitOfWorkFactory.cs @@ -5,40 +5,24 @@ namespace Speckle.Autofac.DependencyInjection; public interface IUnitOfWorkFactory { - public IUnitOfWork Resolve(Action? action = null) - where TService : class; + public IUnitOfWork Create(); } -public class UnitOfWorkFactory : IUnitOfWorkFactory +public class UnitOfWorkFactory(ILifetimeScope parentScope) : IUnitOfWorkFactory { - private readonly ILifetimeScope _parentScope; - - public UnitOfWorkFactory(ILifetimeScope parentScope) - { - _parentScope = parentScope; - } - - public IUnitOfWork Resolve(Action? action = null) - where TService : class + public IUnitOfWork Create() { ILifetimeScope? childScope = null; try { - childScope = action != null ? _parentScope.BeginLifetimeScope(action) : _parentScope.BeginLifetimeScope(); - var service = childScope.Resolve(); - - return new UnitOfWork(childScope, service); + childScope = parentScope.BeginLifetimeScope(); + return new UnitOfWork(childScope); } - catch (DependencyResolutionException dre) + catch (DependencyResolutionException) { childScope?.Dispose(); - - // POC: check exception and how to pass this further up - throw new DependencyResolutionException( - $"Dependency error resolving {typeof(TService)} within UnitOfWorkFactory", - dre - ); + throw; } } } diff --git a/Sdk/Speckle.Converters.Common/ContextWrapper.cs b/Sdk/Speckle.Converters.Common/ContextWrapper.cs deleted file mode 100644 index 97d77a338..000000000 --- a/Sdk/Speckle.Converters.Common/ContextWrapper.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace Speckle.Converters.Common; - -public class ContextWrapper : IDisposable - where TDocument : class -{ - private IConversionContextStack? _stack; - - public IConversionContext? Context { get; private set; } - - public ContextWrapper(IConversionContextStack stack) - { - _stack = stack; - Context = _stack.Current; - } - - protected virtual void Dispose(bool disposing) - { - if (disposing && _stack != null) - { - // technically we could be popping something not this but throwing in dispose is bad - _stack.Pop(); - _stack = null; - Context = null; - } - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } -} diff --git a/Sdk/Speckle.Converters.Common/ConversionContext.cs b/Sdk/Speckle.Converters.Common/ConversionContext.cs deleted file mode 100644 index 5fafa4046..000000000 --- a/Sdk/Speckle.Converters.Common/ConversionContext.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Speckle.InterfaceGenerator; - -namespace Speckle.Converters.Common; - -// POC: record? -[GenerateAutoInterface] -public class ConversionContext : IConversionContext - where TDocument : class -{ - public ConversionContext(TDocument doc, string speckleUnits) - { - Document = doc; - SpeckleUnits = speckleUnits; - } - - public TDocument Document { get; } - public string SpeckleUnits { get; private set; } -} diff --git a/Sdk/Speckle.Converters.Common/ConversionContextStack.cs b/Sdk/Speckle.Converters.Common/ConversionContextStack.cs deleted file mode 100644 index 8de8e7f49..000000000 --- a/Sdk/Speckle.Converters.Common/ConversionContextStack.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using Speckle.InterfaceGenerator; - -namespace Speckle.Converters.Common; - -// POC: Suppressed naming warning for now, but we should evaluate if we should follow this or disable it. -[SuppressMessage( - "Naming", - "CA1711:Identifiers should not have incorrect suffix", - Justification = "Name ends in Stack but it is in fact a Stack, just not inheriting from `System.Collections.Stack`" -)] -[GenerateAutoInterface] -public abstract class ConversionContextStack : IConversionContextStack - where TDocument : class -{ - private readonly IHostToSpeckleUnitConverter _unitConverter; - private readonly TDocument _document; - - protected ConversionContextStack( - TDocument document, - THostUnit hostUnit, - IHostToSpeckleUnitConverter unitConverter - ) - { - _document = document; - _unitConverter = unitConverter; - - _stack.Push(new ConversionContext(_document, _unitConverter.ConvertOrThrow(hostUnit))); - } - - private readonly Stack> _stack = new(); - - public IConversionContext Current => _stack.Peek(); - - public ContextWrapper Push(string speckleUnit) - { - var context = new ConversionContext(_document, speckleUnit); - _stack.Push(context); - return new ContextWrapper(this); - } - - public ContextWrapper Push(THostUnit hostUnit) - { - return Push(_unitConverter.ConvertOrThrow(hostUnit)); - } - - public void Pop() => _stack.Pop(); -} diff --git a/Sdk/Speckle.Converters.Common/ConverterSettingsStore.cs b/Sdk/Speckle.Converters.Common/ConverterSettingsStore.cs new file mode 100644 index 000000000..979487427 --- /dev/null +++ b/Sdk/Speckle.Converters.Common/ConverterSettingsStore.cs @@ -0,0 +1,31 @@ +namespace Speckle.Converters.Common; + +public sealed class ConverterSettingsStore : IConverterSettingsStore + where T : class +{ + private readonly Stack _stack = new(); + + public T Current => _stack.Peek(); + + public IDisposable Push(Func nextContext) + { + _stack.Push(nextContext(Current)); + return new ContextWrapper(this); + } + + public void Initialize(T context) + { + if (_stack.Count != 0) + { + throw new ArgumentException("Already initialized"); + } + _stack.Push(context); + } + + private sealed class ContextWrapper(ConverterSettingsStore store) : IDisposable + { + public void Dispose() => + // technically we could be popping something not this but throwing in dispose is bad + store._stack.Pop(); + } +} diff --git a/Sdk/Speckle.Converters.Common/IConverterSettingsStore.cs b/Sdk/Speckle.Converters.Common/IConverterSettingsStore.cs new file mode 100644 index 000000000..5b1e96a72 --- /dev/null +++ b/Sdk/Speckle.Converters.Common/IConverterSettingsStore.cs @@ -0,0 +1,9 @@ +namespace Speckle.Converters.Common; + +public interface IConverterSettingsStore + where T : class +{ + T Current { get; } + IDisposable Push(Func nextContext); + void Initialize(T context); +}