Change conversion stack to better usage for products. (#215)
* fix: Push to sync with Jedd * Jedd's record suggestions * cleanup stack * Revit settings converted * more settings changes * fix unit of work and scope registration * rename * fix more settings * Use a generic factory to create settings contexts * fix ArcGIS * generic sending * fix ArcGIS * remove extras * fix crs scoping * fix autocad * fix units for arcgis * civil3d conversions * rhino mostly works * Rhino and recieve changed * fix revit tests * fix rhino tests * fix merge * make settings a record again * fixes from reversion * merge fixes * ArcGIS reverts * more senders reverted * remove added reference * clean up locks and files * update nunit * make things proper records * fix test * Merge fixes * merge fixes * Initialize the settings instead of push empty * scan things consistently --------- Co-authored-by: Alan Rynne <alan@speckle.systems> Co-authored-by: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
This commit is contained in:
@@ -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<ArcGISReceiveBinding> _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<ArcGISReceiveBinding> logger
|
||||
ILogger<ArcGISReceiveBinding> 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<ReceiveOperation> unitOfWork = _unitOfWorkFactory.Resolve<ReceiveOperation>();
|
||||
|
||||
using var unitOfWork = _unitOfWorkFactory.Create();
|
||||
unitOfWork
|
||||
.Resolve<IConverterSettingsStore<ArcGISConversionSettings>>()
|
||||
.Initialize(
|
||||
_arcGISConversionSettingsFactory.Create(
|
||||
Project.Current,
|
||||
MapView.Active.Map,
|
||||
new CRSoffsetRotation(MapView.Active.Map)
|
||||
)
|
||||
);
|
||||
// Receive host objects
|
||||
var receiveOperationResults = await unitOfWork
|
||||
.Service.Execute(
|
||||
.Resolve<ReceiveOperation>()
|
||||
.Execute(
|
||||
modelCard.GetReceiveInfo("ArcGIS"), // POC: get host app name from settings? same for GetSendInfo
|
||||
cancellationToken,
|
||||
(status, progress) =>
|
||||
|
||||
@@ -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<ArcGISSendBinding> _logger;
|
||||
private readonly ITopLevelExceptionHandler _topLevelExceptionHandler;
|
||||
private readonly MapMembersUtils _mapMemberUtils;
|
||||
private readonly IArcGISConversionSettingsFactory _arcGISConversionSettingsFactory;
|
||||
|
||||
/// <summary>
|
||||
/// 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<ArcGISSendBinding> 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<SendOperation<MapMember>>();
|
||||
|
||||
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<IConverterSettingsStore<ArcGISConversionSettings>>()
|
||||
.Initialize(
|
||||
_arcGISConversionSettingsFactory.Create(
|
||||
Project.Current,
|
||||
MapView.Active.Map,
|
||||
new CRSoffsetRotation(MapView.Active.Map)
|
||||
)
|
||||
);
|
||||
List<MapMember> mapMembers = modelCard
|
||||
.SendFilter.NotNull()
|
||||
.GetObjectIds()
|
||||
@@ -400,7 +417,8 @@ public sealed class ArcGISSendBinding : ISendBinding
|
||||
}
|
||||
|
||||
var result = await unitOfWork
|
||||
.Service.Execute(
|
||||
.Resolve<SendOperation<MapMember>>()
|
||||
.Execute(
|
||||
mapMembers,
|
||||
modelCard.GetSendInfo("ArcGIS"), // POC: get host app name from settings? same for GetReceiveInfo
|
||||
(status, progress) =>
|
||||
|
||||
+8
-9
@@ -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<ArcGISDocument, Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
private readonly GraphTraversal _traverseFunction;
|
||||
private readonly ArcGISColorManager _colorManager;
|
||||
|
||||
public ArcGISHostObjectBuilder(
|
||||
IRootToHostConverter converter,
|
||||
IConversionContextStack<ArcGISDocument, Unit> contextStack,
|
||||
IConverterSettingsStore<ArcGISConversionSettings> 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,
|
||||
|
||||
+9
-10
@@ -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<MapMember>
|
||||
private readonly IRootToSpeckleConverter _rootToSpeckleConverter;
|
||||
private readonly ISendConversionCache _sendConversionCache;
|
||||
private readonly ArcGISColorManager _colorManager;
|
||||
private readonly IConversionContextStack<ArcGISDocument, Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
private readonly MapMembersUtils _mapMemberUtils;
|
||||
private readonly ILogger<ArcGISRootObjectBuilder> _logger;
|
||||
|
||||
public ArcGISRootObjectBuilder(
|
||||
ISendConversionCache sendConversionCache,
|
||||
ArcGISColorManager colorManager,
|
||||
IConversionContextStack<ArcGISDocument, Unit> contextStack,
|
||||
IConverterSettingsStore<ArcGISConversionSettings> settingsStore,
|
||||
IRootToSpeckleConverter rootToSpeckleConverter,
|
||||
MapMembersUtils mapMemberUtils,
|
||||
ILogger<ArcGISRootObjectBuilder> logger
|
||||
@@ -43,7 +42,7 @@ public class ArcGISRootObjectBuilder : IRootObjectBuilder<MapMember>
|
||||
{
|
||||
_sendConversionCache = sendConversionCache;
|
||||
_colorManager = colorManager;
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
_rootToSpeckleConverter = rootToSpeckleConverter;
|
||||
_mapMemberUtils = mapMemberUtils;
|
||||
_logger = logger;
|
||||
@@ -125,17 +124,17 @@ public class ArcGISRootObjectBuilder : IRootObjectBuilder<MapMember>
|
||||
.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,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
+12
-3
@@ -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<AutocadReceiveBinding> _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<AutocadReceiveBinding> logger
|
||||
ILogger<AutocadReceiveBinding> 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<ReceiveOperation>();
|
||||
using var unitOfWork = _unitOfWorkFactory.Create();
|
||||
unitOfWork
|
||||
.Resolve<IConverterSettingsStore<AutocadConversionSettings>>()
|
||||
.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<ReceiveOperation>()
|
||||
.Execute(
|
||||
modelCard.GetReceiveInfo(Speckle.Connectors.Utils.Connector.Slug),
|
||||
cancellationToken,
|
||||
(status, progress) =>
|
||||
|
||||
@@ -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<AutocadSendBinding> _logger;
|
||||
private readonly ITopLevelExceptionHandler _topLevelExceptionHandler;
|
||||
private readonly IAutocadConversionSettingsFactory _autocadConversionSettingsFactory;
|
||||
|
||||
/// <summary>
|
||||
/// 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<AutocadSendBinding> logger
|
||||
ILogger<AutocadSendBinding> 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<SendOperation<AutocadRootObject>>();
|
||||
using var unitOfWork = _unitOfWorkFactory.Create();
|
||||
unitOfWork
|
||||
.Resolve<IConverterSettingsStore<AutocadConversionSettings>>()
|
||||
.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<SendOperation<AutocadRootObject>>()
|
||||
.Execute(
|
||||
autocadObjects,
|
||||
modelCard.GetSendInfo(Speckle.Connectors.Utils.Connector.Slug),
|
||||
(status, progress) =>
|
||||
|
||||
-2
@@ -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<AutocadMaterialBaker>();
|
||||
|
||||
builder.AddSingleton<IAutocadIdleManager, AutocadIdleManager>();
|
||||
builder.AddSingleton<IHostToSpeckleUnitConverter<UnitsValue>>();
|
||||
|
||||
// operation progress manager
|
||||
builder.AddSingleton<IOperationProgressManager, OperationProgressManager>();
|
||||
|
||||
@@ -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<List<Entity>>
|
||||
private readonly AutocadLayerBaker _layerBaker;
|
||||
private readonly AutocadColorBaker _colorBaker;
|
||||
private readonly AutocadMaterialBaker _materialBaker;
|
||||
private readonly IHostToSpeckleUnitConverter<UnitsValue> _unitsConverter;
|
||||
private readonly AutocadContext _autocadContext;
|
||||
private readonly ILogger<AutocadInstanceBaker> _logger;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _converterSettings;
|
||||
|
||||
public AutocadInstanceBaker(
|
||||
AutocadLayerBaker layerBaker,
|
||||
AutocadColorBaker colorBaker,
|
||||
AutocadMaterialBaker materialBaker,
|
||||
IHostToSpeckleUnitConverter<UnitsValue> unitsConverter,
|
||||
AutocadContext autocadContext,
|
||||
ILogger<AutocadInstanceBaker> logger
|
||||
ILogger<AutocadInstanceBaker> logger,
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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<List<Entity>>
|
||||
|
||||
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[]
|
||||
{
|
||||
|
||||
@@ -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<RevitReceiveBinding> logger
|
||||
ILogger<RevitReceiveBinding> 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<ReceiveOperation>();
|
||||
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<IConverterSettingsStore<RevitConversionSettings>>()
|
||||
.Initialize(
|
||||
_revitConversionSettingsFactory.Create(
|
||||
DetailLevelType.Coarse, //TODO figure out
|
||||
null
|
||||
)
|
||||
);
|
||||
// Receive host objects
|
||||
HostObjectBuilderResult conversionResults = await unitOfWork
|
||||
.Service.Execute(
|
||||
.Resolve<ReceiveOperation>()
|
||||
.Execute(
|
||||
modelCard.GetReceiveInfo(Speckle.Connectors.Utils.Connector.Slug),
|
||||
cancellationToken,
|
||||
(status, progress) =>
|
||||
|
||||
@@ -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<RevitSendBinding> _logger;
|
||||
private readonly ElementUnpacker _elementUnpacker;
|
||||
private readonly IRevitConversionSettingsFactory _revitConversionSettingsFactory;
|
||||
|
||||
/// <summary>
|
||||
/// 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<RevitSendBinding> 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<ElementId>> sendOperation = _unitOfWorkFactory.Resolve<SendOperation<ElementId>>(
|
||||
b =>
|
||||
{
|
||||
b.RegisterType<ToSpeckleSettings>().SingleInstance();
|
||||
b.Register(c => _toSpeckleSettingsManager.GetToSpeckleSettings(modelCard));
|
||||
}
|
||||
);
|
||||
using var unitOfWork = _unitOfWorkFactory.Create();
|
||||
unitOfWork
|
||||
.Resolve<IConverterSettingsStore<RevitConversionSettings>>()
|
||||
.Initialize(
|
||||
_revitConversionSettingsFactory.Create(
|
||||
_toSpeckleSettingsManager.GetDetailLevelSetting(modelCard),
|
||||
_toSpeckleSettingsManager.GetReferencePointSetting(modelCard)
|
||||
)
|
||||
);
|
||||
|
||||
var activeUIDoc =
|
||||
RevitContext.UIApplication?.ActiveUIDocument
|
||||
?? throw new SpeckleException("Unable to retrieve active UI document");
|
||||
|
||||
List<ElementId> 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<SendOperation<ElementId>>()
|
||||
.Execute(
|
||||
revitObjects,
|
||||
modelCard.GetSendInfo(Speckle.Connectors.Utils.Connector.Slug),
|
||||
(status, progress) =>
|
||||
|
||||
@@ -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;
|
||||
/// </summary>
|
||||
public class SendCollectionManager
|
||||
{
|
||||
private readonly IRevitConversionContextStack _contextStack;
|
||||
private readonly IConverterSettingsStore<RevitConversionSettings> _converterSettings;
|
||||
private readonly Dictionary<string, Collection> _collectionCache = new();
|
||||
|
||||
public SendCollectionManager(IRevitConversionContextStack contextStack)
|
||||
public SendCollectionManager(IConverterSettingsStore<RevitConversionSettings> converterSettings)
|
||||
{
|
||||
_contextStack = contextStack;
|
||||
_converterSettings = converterSettings;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -26,7 +27,7 @@ public class SendCollectionManager
|
||||
/// <returns></returns>
|
||||
public Collection GetAndCreateObjectHostCollection(Element element, Collection rootObject)
|
||||
{
|
||||
var doc = _contextStack.Current.Document;
|
||||
var doc = _converterSettings.Current.Document;
|
||||
var path = new List<string>();
|
||||
|
||||
// Step 1: create path components. Currently, this is
|
||||
|
||||
+5
-5
@@ -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<RevitConversionSettings> _converterSettings;
|
||||
private readonly GraphTraversal _traverseFunction;
|
||||
private readonly ITransactionManager _transactionManager;
|
||||
private readonly ISyncToThread _syncToThread;
|
||||
|
||||
public RevitHostObjectBuilder(
|
||||
IRootToHostConverter converter,
|
||||
IRevitConversionContextStack contextStack,
|
||||
IConverterSettingsStore<RevitConversionSettings> 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();
|
||||
|
||||
|
||||
+6
-5
@@ -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;
|
||||
/// </summary>
|
||||
public sealed class TransactionManager : ITransactionManager
|
||||
{
|
||||
private readonly IRevitConversionContextStack _contextStack;
|
||||
private Document Document => _contextStack.Current.Document;
|
||||
private readonly IConverterSettingsStore<RevitConversionSettings> _converterSettings;
|
||||
private Document Document => _converterSettings.Current.Document;
|
||||
|
||||
public TransactionManager(IRevitConversionContextStack contextStack)
|
||||
public TransactionManager(IConverterSettingsStore<RevitConversionSettings> converterSettings)
|
||||
{
|
||||
_contextStack = contextStack;
|
||||
_converterSettings = converterSettings;
|
||||
}
|
||||
|
||||
// poc : these are being disposed. I'm not sure why I need to supress this warning
|
||||
|
||||
+11
-9
@@ -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<ElementId>
|
||||
{
|
||||
// POC: SendSelection and RevitConversionContextStack should be interfaces, former needs interfaces
|
||||
private readonly IRootToSpeckleConverter _converter;
|
||||
private readonly IRevitConversionContextStack _conversionContextStack;
|
||||
private readonly IConverterSettingsStore<RevitConversionSettings> _converterSettings;
|
||||
private readonly Collection _rootObject;
|
||||
private readonly ISendConversionCache _sendConversionCache;
|
||||
private readonly ElementUnpacker _elementUnpacker;
|
||||
private readonly SendCollectionManager _sendCollectionManager;
|
||||
private readonly RevitMaterialCacheSingleton _revitMaterialCacheSingleton;
|
||||
private readonly ILogger<RevitRootObjectBuilder> _logger;
|
||||
|
||||
public RevitRootObjectBuilder(
|
||||
IRootToSpeckleConverter converter,
|
||||
IRevitConversionContextStack conversionContextStack,
|
||||
IConverterSettingsStore<RevitConversionSettings> converterSettings,
|
||||
ISendConversionCache sendConversionCache,
|
||||
ElementUnpacker elementUnpacker,
|
||||
SendCollectionManager sendCollectionManager,
|
||||
RevitMaterialCacheSingleton revitMaterialCacheSingleton,
|
||||
ILogger<RevitRootObjectBuilder> 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<ElementId>
|
||||
CancellationToken ct = default
|
||||
)
|
||||
{
|
||||
var doc = _conversionContextStack.Current.Document;
|
||||
var doc = _converterSettings.Current.Document;
|
||||
|
||||
if (doc.IsFamilyDocument)
|
||||
{
|
||||
@@ -69,7 +73,7 @@ public class RevitRootObjectBuilder : IRootObjectBuilder<ElementId>
|
||||
// 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<ElementId>
|
||||
}
|
||||
|
||||
var idsAndSubElementIds = _elementUnpacker.GetElementsAndSubelementIdsFromAtomicObjects(atomicObjects);
|
||||
var materialProxies = _conversionContextStack.RenderMaterialProxyCache.GetRenderMaterialProxyListForObjects(
|
||||
idsAndSubElementIds
|
||||
);
|
||||
var materialProxies = _revitMaterialCacheSingleton.GetRenderMaterialProxyListForObjects(idsAndSubElementIds);
|
||||
_rootObject[ProxyKeys.RENDER_MATERIAL] = materialProxies;
|
||||
|
||||
Debug.WriteLine(
|
||||
|
||||
+5
-11
@@ -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 (
|
||||
|
||||
@@ -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<RhinoReceiveBinding> _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<RhinoReceiveBinding> logger
|
||||
ILogger<RhinoReceiveBinding> 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<ReceiveOperation>();
|
||||
using var unitOfWork = _unitOfWorkFactory.Create();
|
||||
unitOfWork
|
||||
.Resolve<IConverterSettingsStore<RhinoConversionSettings>>()
|
||||
.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<ReceiveOperation>()
|
||||
.Execute(
|
||||
modelCard.GetReceiveInfo(Speckle.Connectors.Utils.Connector.Slug),
|
||||
cancellationToken,
|
||||
(status, progress) =>
|
||||
|
||||
@@ -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<RhinoSendBinding> _logger;
|
||||
private readonly ITopLevelExceptionHandler _topLevelExceptionHandler;
|
||||
private readonly IRhinoConversionSettingsFactory _rhinoConversionSettingsFactory;
|
||||
|
||||
/// <summary>
|
||||
/// 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<RhinoSendBinding> logger
|
||||
ILogger<RhinoSendBinding> 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<SendOperation<RhinoObject>>();
|
||||
using var unitOfWork = _unitOfWorkFactory.Create();
|
||||
unitOfWork
|
||||
.Resolve<IConverterSettingsStore<RhinoConversionSettings>>()
|
||||
.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<SendOperation<RhinoObject>>()
|
||||
.Execute(
|
||||
rhinoObjects,
|
||||
modelCard.GetSendInfo(Speckle.Connectors.Utils.Connector.Slug),
|
||||
(status, progress) =>
|
||||
|
||||
@@ -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<RhinoDoc, UnitSystem> _contextStack;
|
||||
private readonly IConverterSettingsStore<RhinoConversionSettings> _converterSettings;
|
||||
private readonly ILogger<RhinoGroupBaker> _logger;
|
||||
|
||||
public RhinoGroupBaker(IConversionContextStack<RhinoDoc, UnitSystem> contextStack, ILogger<RhinoGroupBaker> logger)
|
||||
public RhinoGroupBaker(
|
||||
IConverterSettingsStore<RhinoConversionSettings> converterSettings,
|
||||
ILogger<RhinoGroupBaker> 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())
|
||||
|
||||
@@ -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<RhinoDoc, UnitSystem> _contextStack;
|
||||
private readonly IConverterSettingsStore<RhinoConversionSettings> _converterSettings;
|
||||
private readonly ILogger<RhinoMaterialBaker> _logger;
|
||||
|
||||
public RhinoMaterialBaker(
|
||||
IConversionContextStack<RhinoDoc, UnitSystem> contextStack,
|
||||
IConverterSettingsStore<RhinoConversionSettings> converterSettings,
|
||||
ILogger<RhinoMaterialBaker> logger
|
||||
)
|
||||
{
|
||||
_contextStack = contextStack;
|
||||
_converterSettings = converterSettings;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
@@ -29,7 +30,7 @@ public class RhinoMaterialBaker
|
||||
|
||||
public void BakeMaterials(List<RenderMaterialProxy> 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<ReceiveConversionResult> conversionResults = new(); // TODO: return this guy
|
||||
|
||||
foreach (var proxy in speckleRenderMaterialProxies)
|
||||
|
||||
+15
-10
@@ -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<RhinoDoc, UnitSystem> _contextStack;
|
||||
private readonly IConverterSettingsStore<RhinoConversionSettings> _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<RhinoDoc, UnitSystem> contextStack,
|
||||
IConverterSettingsStore<RhinoConversionSettings> 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<Guid> 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;
|
||||
}
|
||||
|
||||
+6
-6
@@ -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<RhinoObject>
|
||||
{
|
||||
private readonly IRootToSpeckleConverter _rootToSpeckleConverter;
|
||||
private readonly ISendConversionCache _sendConversionCache;
|
||||
private readonly IConversionContextStack<RhinoDoc, UnitSystem> _contextStack;
|
||||
private readonly IConverterSettingsStore<RhinoConversionSettings> _converterSettings;
|
||||
private readonly RhinoLayerUnpacker _layerUnpacker;
|
||||
private readonly RhinoInstanceUnpacker _instanceUnpacker;
|
||||
private readonly RhinoGroupUnpacker _groupUnpacker;
|
||||
@@ -37,7 +37,7 @@ public class RhinoRootObjectBuilder : IRootObjectBuilder<RhinoObject>
|
||||
public RhinoRootObjectBuilder(
|
||||
IRootToSpeckleConverter rootToSpeckleConverter,
|
||||
ISendConversionCache sendConversionCache,
|
||||
IConversionContextStack<RhinoDoc, UnitSystem> contextStack,
|
||||
IConverterSettingsStore<RhinoConversionSettings> converterSettings,
|
||||
RhinoLayerUnpacker layerUnpacker,
|
||||
RhinoInstanceUnpacker instanceUnpacker,
|
||||
RhinoGroupUnpacker groupUnpacker,
|
||||
@@ -47,7 +47,7 @@ public class RhinoRootObjectBuilder : IRootObjectBuilder<RhinoObject>
|
||||
)
|
||||
{
|
||||
_sendConversionCache = sendConversionCache;
|
||||
_contextStack = contextStack;
|
||||
_converterSettings = converterSettings;
|
||||
_layerUnpacker = layerUnpacker;
|
||||
_instanceUnpacker = instanceUnpacker;
|
||||
_groupUnpacker = groupUnpacker;
|
||||
@@ -73,7 +73,7 @@ public class RhinoRootObjectBuilder : IRootObjectBuilder<RhinoObject>
|
||||
{
|
||||
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<RhinoObject> unpackResults;
|
||||
@@ -102,7 +102,7 @@ public class RhinoRootObjectBuilder : IRootObjectBuilder<RhinoObject>
|
||||
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);
|
||||
|
||||
|
||||
+6
-4
@@ -10,6 +10,8 @@ public class ArcGISConverterModule : ISpeckleModule
|
||||
{
|
||||
public void Load(SpeckleContainerBuilder builder)
|
||||
{
|
||||
//register types by default
|
||||
builder.ScanAssemblyOfType<ArcGISConversionSettings>();
|
||||
// add single root converter
|
||||
//don't need a host specific RootToSpeckleConverter
|
||||
builder.AddRootCommon<RootToSpeckleConverter>();
|
||||
@@ -23,11 +25,11 @@ public class ArcGISConverterModule : ISpeckleModule
|
||||
builder.AddScoped<IArcGISFieldUtils, ArcGISFieldUtils>();
|
||||
builder.AddScoped<ILocalToGlobalConverterUtils, LocalToGlobalConverterUtils>();
|
||||
builder.AddScoped<ICharacterCleaner, CharacterCleaner>();
|
||||
builder.AddScoped<ArcGISDocument>();
|
||||
|
||||
builder.AddScoped<IHostToSpeckleUnitConverter<Unit>, ArcGISToSpeckleUnitConverter>();
|
||||
|
||||
// single stack per conversion
|
||||
builder.AddScoped<IConversionContextStack<ArcGISDocument, Unit>, ArcGISConversionContextStack>();
|
||||
builder.AddScoped<
|
||||
IConverterSettingsStore<ArcGISConversionSettings>,
|
||||
ConverterSettingsStore<ArcGISConversionSettings>
|
||||
>();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
);
|
||||
+15
-34
@@ -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<ACG.Unit> 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<ArcGISDocument, ACG.Unit>
|
||||
{
|
||||
public ArcGISConversionContextStack(
|
||||
IHostToSpeckleUnitConverter<ACG.Unit> unitConverter,
|
||||
ArcGISDocument arcGisDocument
|
||||
)
|
||||
: base(arcGisDocument, MapView.Active.Map.SpatialReference.Unit, unitConverter) { }
|
||||
}
|
||||
@@ -7,15 +7,15 @@ namespace Speckle.Converters.ArcGIS3.ToHost.Raw;
|
||||
public class MeshListToHostConverter : ITypedConverter<List<SOG.Mesh>, ACG.Multipatch>
|
||||
{
|
||||
private readonly ITypedConverter<SOG.Point, ACG.MapPoint> _pointConverter;
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
|
||||
public MeshListToHostConverter(
|
||||
ITypedConverter<SOG.Point, ACG.MapPoint> pointConverter,
|
||||
IConversionContextStack<ArcGISDocument, ACG.Unit> contextStack
|
||||
IConverterSettingsStore<ArcGISConversionSettings> settingsStore
|
||||
)
|
||||
{
|
||||
_pointConverter = pointConverter;
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
}
|
||||
|
||||
public ACG.Multipatch Convert(List<SOG.Mesh> target)
|
||||
@@ -24,8 +24,7 @@ public class MeshListToHostConverter : ITypedConverter<List<SOG.Mesh>, 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)
|
||||
{
|
||||
|
||||
+7
-6
@@ -6,25 +6,26 @@ namespace Speckle.Converters.ArcGIS3.ToHost.Raw;
|
||||
|
||||
public class PointToHostConverter : ITypedConverter<SOG.Point, ACG.MapPoint>
|
||||
{
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
|
||||
public PointToHostConverter(IConversionContextStack<ArcGISDocument, ACG.Unit> contextStack)
|
||||
public PointToHostConverter(IConverterSettingsStore<ArcGISConversionSettings> 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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,15 +8,15 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel;
|
||||
public class ArcToHostConverter : IToHostTopLevelConverter, ITypedConverter<SOG.Arc, ACG.Polyline>
|
||||
{
|
||||
private readonly ITypedConverter<SOG.Point, ACG.MapPoint> _pointConverter;
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
|
||||
public ArcToHostConverter(
|
||||
ITypedConverter<SOG.Point, ACG.MapPoint> pointConverter,
|
||||
IConversionContextStack<ArcGISDocument, ACG.Unit> contextStack
|
||||
IConverterSettingsStore<ArcGISConversionSettings> 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<SOG.
|
||||
fromPt,
|
||||
toPt,
|
||||
new ACG.Coordinate2D(midPt),
|
||||
_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();
|
||||
}
|
||||
}
|
||||
|
||||
+6
-6
@@ -9,15 +9,15 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel;
|
||||
public class CircleToHostConverter : IToHostTopLevelConverter, ITypedConverter<SOG.Circle, ACG.Polyline>
|
||||
{
|
||||
private readonly ITypedConverter<SOG.Point, ACG.MapPoint> _pointConverter;
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
|
||||
public CircleToHostConverter(
|
||||
ITypedConverter<SOG.Point, ACG.MapPoint> pointConverter,
|
||||
IConversionContextStack<ArcGISDocument, ACG.Unit> contextStack
|
||||
IConverterSettingsStore<ArcGISConversionSettings> 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<S
|
||||
// create a native ArcGIS circle segment
|
||||
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);
|
||||
ACG.EllipticArcSegment circleSegment = ACG.EllipticArcBuilderEx.CreateCircle(
|
||||
new ACG.Coordinate2D(centerPt.X, centerPt.Y),
|
||||
(double)target.radius * scaleFactor,
|
||||
ACG.ArcOrientation.ArcClockwise,
|
||||
_contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference
|
||||
_settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference
|
||||
);
|
||||
|
||||
return new ACG.PolylineBuilderEx(
|
||||
circleSegment,
|
||||
ACG.AttributeFlags.HasZ,
|
||||
_contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference
|
||||
_settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference
|
||||
).ToGeometry();
|
||||
}
|
||||
}
|
||||
|
||||
+7
-7
@@ -9,15 +9,15 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel;
|
||||
public class EllipseToHostConverter : IToHostTopLevelConverter, ITypedConverter<SOG.Ellipse, ACG.Polyline>
|
||||
{
|
||||
private readonly ITypedConverter<SOG.Point, ACG.MapPoint> _pointConverter;
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
|
||||
public EllipseToHostConverter(
|
||||
ITypedConverter<SOG.Point, ACG.MapPoint> pointConverter,
|
||||
IConversionContextStack<ArcGISDocument, ACG.Unit> contextStack
|
||||
IConverterSettingsStore<ArcGISConversionSettings> 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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,15 +8,15 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel;
|
||||
public class LineSingleToHostConverter : IToHostTopLevelConverter, ITypedConverter<SOG.Line, ACG.Polyline>
|
||||
{
|
||||
private readonly ITypedConverter<SOG.Point, ACG.MapPoint> _pointConverter;
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
|
||||
public LineSingleToHostConverter(
|
||||
ITypedConverter<SOG.Point, ACG.MapPoint> pointConverter,
|
||||
IConversionContextStack<ArcGISDocument, ACG.Unit> contextStack
|
||||
IConverterSettingsStore<ArcGISConversionSettings> 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();
|
||||
}
|
||||
}
|
||||
|
||||
+4
-7
@@ -7,19 +7,16 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel;
|
||||
[NameAndRankValue(nameof(SOG.Polycurve), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)]
|
||||
public class PolycurveToHostConverter : IToHostTopLevelConverter, ITypedConverter<SOG.Polycurve, ACG.Polyline>
|
||||
{
|
||||
private readonly ITypedConverter<SOG.Point, ACG.MapPoint> _pointConverter;
|
||||
private readonly IRootToHostConverter _converter;
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
|
||||
public PolycurveToHostConverter(
|
||||
ITypedConverter<SOG.Point, ACG.MapPoint> pointConverter,
|
||||
IRootToHostConverter converter,
|
||||
IConversionContextStack<ArcGISDocument, ACG.Unit> contextStack
|
||||
IConverterSettingsStore<ArcGISConversionSettings> 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();
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -8,15 +8,15 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel;
|
||||
public class PolylineToHostConverter : IToHostTopLevelConverter, ITypedConverter<SOG.Polyline, ACG.Polyline>
|
||||
{
|
||||
private readonly ITypedConverter<SOG.Point, ACG.MapPoint> _pointConverter;
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
|
||||
public PolylineToHostConverter(
|
||||
ITypedConverter<SOG.Point, ACG.MapPoint> pointConverter,
|
||||
IConversionContextStack<ArcGISDocument, ACG.Unit> contextStack
|
||||
IConverterSettingsStore<ArcGISConversionSettings> 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();
|
||||
}
|
||||
}
|
||||
|
||||
+7
-7
@@ -7,15 +7,15 @@ namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw;
|
||||
|
||||
public class EnvelopToSpeckleConverter : ITypedConverter<Envelope, SOG.Box>
|
||||
{
|
||||
private readonly IConversionContextStack<ArcGISDocument, Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
private readonly ITypedConverter<MapPoint, SOG.Point> _pointConverter;
|
||||
|
||||
public EnvelopToSpeckleConverter(
|
||||
IConversionContextStack<ArcGISDocument, Unit> contextStack,
|
||||
IConverterSettingsStore<ArcGISConversionSettings> settingsStore,
|
||||
ITypedConverter<MapPoint, SOG.Point> pointConverter
|
||||
)
|
||||
{
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
_pointConverter = pointConverter;
|
||||
}
|
||||
|
||||
@@ -25,18 +25,18 @@ public class EnvelopToSpeckleConverter : ITypedConverter<Envelope, SOG.Box>
|
||||
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<Envelope, SOG.Box>
|
||||
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
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -15,7 +15,7 @@ public class GisFeatureToSpeckleConverter : ITypedConverter<(Row, string), IGisF
|
||||
private readonly ITypedConverter<ACG.Polygon, IReadOnlyList<SGIS.PolygonGeometry>> _polygonConverter;
|
||||
private readonly ITypedConverter<ACG.Multipatch, IReadOnlyList<Base>> _multipatchConverter;
|
||||
private readonly ITypedConverter<Row, Base> _attributeConverter;
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
|
||||
public GisFeatureToSpeckleConverter(
|
||||
ITypedConverter<ACG.MapPoint, SOG.Point> pointConverter,
|
||||
@@ -24,7 +24,7 @@ public class GisFeatureToSpeckleConverter : ITypedConverter<(Row, string), IGisF
|
||||
ITypedConverter<ACG.Polygon, IReadOnlyList<SGIS.PolygonGeometry>> polygonConverter,
|
||||
ITypedConverter<ACG.Multipatch, IReadOnlyList<Base>> multipatchConverter,
|
||||
ITypedConverter<Row, Base> attributeConverter,
|
||||
IConversionContextStack<ArcGISDocument, ACG.Unit> contextStack
|
||||
IConverterSettingsStore<ArcGISConversionSettings> 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<SOG.Mesh> GetPolygonDisplayMeshes(List<SGIS.PolygonGeometry> polygons)
|
||||
@@ -64,7 +64,7 @@ public class GisFeatureToSpeckleConverter : ITypedConverter<(Row, string), IGisF
|
||||
{
|
||||
vertices = boundaryPts.SelectMany(x => new List<double> { 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);
|
||||
}
|
||||
|
||||
+4
-4
@@ -8,11 +8,11 @@ namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw;
|
||||
|
||||
public class GisRasterToSpeckleConverter : ITypedConverter<Raster, RasterElement>
|
||||
{
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
|
||||
public GisRasterToSpeckleConverter(IConversionContextStack<ArcGISDocument, ACG.Unit> contextStack)
|
||||
public GisRasterToSpeckleConverter(IConverterSettingsStore<ArcGISConversionSettings> settingsStore)
|
||||
{
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
}
|
||||
|
||||
public Base Convert(object target) => Convert((Raster)target);
|
||||
@@ -178,7 +178,7 @@ public class GisRasterToSpeckleConverter : ITypedConverter<Raster, RasterElement
|
||||
vertices = newCoords,
|
||||
faces = newFaces,
|
||||
colors = newColors,
|
||||
units = _contextStack.Current.SpeckleUnits
|
||||
units = _settingsStore.Current.SpeckleUnits
|
||||
};
|
||||
rasterElement.displayValue = new List<SOG.Mesh>() { mesh };
|
||||
|
||||
|
||||
+11
-26
@@ -10,15 +10,15 @@ namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw;
|
||||
/// </summary>
|
||||
public class MultipatchFeatureToSpeckleConverter : ITypedConverter<ACG.Multipatch, IReadOnlyList<Base>>
|
||||
{
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
private readonly ITypedConverter<ACG.MapPoint, SOG.Point> _pointConverter;
|
||||
|
||||
public MultipatchFeatureToSpeckleConverter(
|
||||
IConversionContextStack<ArcGISDocument, ACG.Unit> contextStack,
|
||||
IConverterSettingsStore<ArcGISConversionSettings> settingsStore,
|
||||
ITypedConverter<ACG.MapPoint, SOG.Point> pointConverter
|
||||
)
|
||||
{
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
_pointConverter = pointConverter;
|
||||
}
|
||||
|
||||
@@ -26,8 +26,7 @@ public class MultipatchFeatureToSpeckleConverter : ITypedConverter<ACG.Multipatc
|
||||
{
|
||||
List<Base> 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<List<SOG.Point>> allPoints = new();
|
||||
@@ -53,19 +52,19 @@ public class MultipatchFeatureToSpeckleConverter : ITypedConverter<ACG.Multipatc
|
||||
if (patchType == ACG.PatchType.TriangleStrip)
|
||||
{
|
||||
SGIS.GisMultipatchGeometry multipatch = target.CompleteMultipatchTriangleStrip(allPoints, idx);
|
||||
multipatch.units = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString;
|
||||
multipatch.units = _settingsStore.Current.SpeckleUnits;
|
||||
converted.Add(multipatch);
|
||||
}
|
||||
else if (patchType == ACG.PatchType.Triangles)
|
||||
{
|
||||
SGIS.GisMultipatchGeometry multipatch = target.CompleteMultipatchTriangles(allPoints, idx);
|
||||
multipatch.units = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString;
|
||||
multipatch.units = _settingsStore.Current.SpeckleUnits;
|
||||
converted.Add(multipatch);
|
||||
}
|
||||
else if (patchType == ACG.PatchType.TriangleFan)
|
||||
{
|
||||
SGIS.GisMultipatchGeometry multipatch = target.CompleteMultipatchTriangleFan(allPoints, idx);
|
||||
multipatch.units = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString;
|
||||
multipatch.units = _settingsStore.Current.SpeckleUnits;
|
||||
converted.Add(multipatch);
|
||||
}
|
||||
// in case of RingMultipatch - return PolygonGeometry3d
|
||||
@@ -79,19 +78,10 @@ public class MultipatchFeatureToSpeckleConverter : ITypedConverter<ACG.Multipatc
|
||||
}
|
||||
|
||||
// first ring means a start of a new PolygonGeometry3d
|
||||
polygonGeom = new()
|
||||
{
|
||||
voids = new List<SOG.Polyline>(),
|
||||
units = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString
|
||||
};
|
||||
polygonGeom = new() { voids = new List<SOG.Polyline>(), units = _settingsStore.Current.SpeckleUnits };
|
||||
List<double> pointCoords = allPoints[idx].SelectMany(x => new List<double>() { 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<ACG.Multipatc
|
||||
else if (patchType == ACG.PatchType.Ring)
|
||||
{
|
||||
List<double> pointCoords = allPoints[idx].SelectMany(x => new List<double>() { 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<ACG.Multipatc
|
||||
{
|
||||
voids = new List<SOG.Polyline>(),
|
||||
boundary = polyline,
|
||||
units = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString
|
||||
units = _settingsStore.Current.SpeckleUnits
|
||||
};
|
||||
}
|
||||
// if it's already the last part, add to list
|
||||
|
||||
+11
-15
@@ -6,11 +6,11 @@ namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw;
|
||||
|
||||
public class PointToSpeckleConverter : ITypedConverter<MapPoint, SOG.Point>
|
||||
{
|
||||
private readonly IConversionContextStack<ArcGISDocument, Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
|
||||
public PointToSpeckleConverter(IConversionContextStack<ArcGISDocument, Unit> contextStack)
|
||||
public PointToSpeckleConverter(IConverterSettingsStore<ArcGISConversionSettings> settingsStore)
|
||||
{
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
}
|
||||
|
||||
public SOG.Point Convert(MapPoint target)
|
||||
@@ -19,12 +19,12 @@ public class PointToSpeckleConverter : ITypedConverter<MapPoint, SOG.Point>
|
||||
{
|
||||
// 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<MapPoint, SOG.Point>
|
||||
)
|
||||
{
|
||||
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
|
||||
);
|
||||
}
|
||||
|
||||
+4
-4
@@ -7,15 +7,15 @@ namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw;
|
||||
public class PolygonFeatureToSpeckleConverter : ITypedConverter<ACG.Polygon, IReadOnlyList<PolygonGeometry>>
|
||||
{
|
||||
private readonly ITypedConverter<ACG.ReadOnlySegmentCollection, SOG.Polyline> _segmentConverter;
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
|
||||
public PolygonFeatureToSpeckleConverter(
|
||||
ITypedConverter<ACG.ReadOnlySegmentCollection, SOG.Polyline> segmentConverter,
|
||||
IConversionContextStack<ArcGISDocument, ACG.Unit> contextStack
|
||||
IConverterSettingsStore<ArcGISConversionSettings> settingsStore
|
||||
)
|
||||
{
|
||||
_segmentConverter = segmentConverter;
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
}
|
||||
|
||||
public IReadOnlyList<PolygonGeometry> Convert(ACG.Polygon target)
|
||||
@@ -44,7 +44,7 @@ public class PolygonFeatureToSpeckleConverter : ITypedConverter<ACG.Polygon, IRe
|
||||
{
|
||||
boundary = polyline,
|
||||
voids = new List<SOG.Polyline>(),
|
||||
units = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpeckleUnitString
|
||||
units = _settingsStore.Current.SpeckleUnits
|
||||
};
|
||||
polygonList.Add(polygon);
|
||||
}
|
||||
|
||||
+5
-6
@@ -6,15 +6,15 @@ namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw;
|
||||
public class PolyineFeatureToSpeckleConverter : ITypedConverter<ACG.Polyline, IReadOnlyList<SOG.Polyline>>
|
||||
{
|
||||
private readonly ITypedConverter<ACG.ReadOnlySegmentCollection, SOG.Polyline> _segmentConverter;
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
|
||||
public PolyineFeatureToSpeckleConverter(
|
||||
ITypedConverter<ACG.ReadOnlySegmentCollection, SOG.Polyline> segmentConverter,
|
||||
IConversionContextStack<ArcGISDocument, ACG.Unit> contextStack
|
||||
IConverterSettingsStore<ArcGISConversionSettings> settingsStore
|
||||
)
|
||||
{
|
||||
_segmentConverter = segmentConverter;
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
}
|
||||
|
||||
public IReadOnlyList<SOG.Polyline> Convert(ACG.Polyline target)
|
||||
@@ -26,10 +26,9 @@ public class PolyineFeatureToSpeckleConverter : ITypedConverter<ACG.Polyline, IR
|
||||
// densify the polylines with curves using precision value of the Map's Spatial Reference
|
||||
if (target.HasCurves)
|
||||
{
|
||||
double tolerance = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference.XYTolerance;
|
||||
double conversionFactorToMeter = _contextStack
|
||||
double tolerance = _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference.XYTolerance;
|
||||
double conversionFactorToMeter = _settingsStore
|
||||
.Current
|
||||
.Document
|
||||
.ActiveCRSoffsetRotation
|
||||
.SpatialReference
|
||||
.Unit
|
||||
|
||||
+7
-8
@@ -5,15 +5,15 @@ namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw;
|
||||
|
||||
public class SegmentCollectionToSpeckleConverter : ITypedConverter<ACG.ReadOnlySegmentCollection, SOG.Polyline>
|
||||
{
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
private readonly ITypedConverter<ACG.MapPoint, SOG.Point> _pointConverter;
|
||||
|
||||
public SegmentCollectionToSpeckleConverter(
|
||||
IConversionContextStack<ArcGISDocument, ACG.Unit> contextStack,
|
||||
IConverterSettingsStore<ArcGISConversionSettings> settingsStore,
|
||||
ITypedConverter<ACG.MapPoint, SOG.Point> pointConverter
|
||||
)
|
||||
{
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
_pointConverter = pointConverter;
|
||||
}
|
||||
|
||||
@@ -33,13 +33,12 @@ public class SegmentCollectionToSpeckleConverter : ITypedConverter<ACG.ReadOnlyS
|
||||
ACG.Polyline polylineFromSegment = new ACG.PolylineBuilderEx(
|
||||
segment,
|
||||
ACG.AttributeFlags.HasZ,
|
||||
_contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference
|
||||
_settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference
|
||||
).ToGeometry();
|
||||
|
||||
double tolerance = _contextStack.Current.Document.ActiveCRSoffsetRotation.SpatialReference.XYTolerance;
|
||||
double conversionFactorToMeter = _contextStack
|
||||
double tolerance = _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference.XYTolerance;
|
||||
double conversionFactorToMeter = _settingsStore
|
||||
.Current
|
||||
.Document
|
||||
.ActiveCRSoffsetRotation
|
||||
.SpatialReference
|
||||
.Unit
|
||||
@@ -113,7 +112,7 @@ public class SegmentCollectionToSpeckleConverter : ITypedConverter<ACG.ReadOnlyS
|
||||
{
|
||||
value = points.SelectMany(pt => new[] { pt.x, pt.y, pt.z, }).ToList(),
|
||||
closed = closed,
|
||||
units = _contextStack.Current.SpeckleUnits
|
||||
units = _settingsStore.Current.SpeckleUnits
|
||||
};
|
||||
|
||||
return polyline;
|
||||
|
||||
+4
-4
@@ -15,17 +15,17 @@ public class PointCloudToSpeckleConverter
|
||||
{
|
||||
private readonly ITypedConverter<ACG.MapPoint, SOG.Point> _pointConverter;
|
||||
private readonly ITypedConverter<ACG.Envelope, SOG.Box> _boxConverter;
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
|
||||
public PointCloudToSpeckleConverter(
|
||||
ITypedConverter<ACG.MapPoint, SOG.Point> pointConverter,
|
||||
ITypedConverter<ACG.Envelope, SOG.Box> boxConverter,
|
||||
IConversionContextStack<ArcGISDocument, ACG.Unit> contextStack
|
||||
IConverterSettingsStore<ArcGISConversionSettings> 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);
|
||||
|
||||
+4
-5
@@ -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<RasterLayer, SGIS.RasterLayer>
|
||||
{
|
||||
private readonly ITypedConverter<Raster, RasterElement> _gisRasterConverter;
|
||||
private readonly IConversionContextStack<ArcGISDocument, Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
|
||||
public RasterLayerToSpeckleConverter(
|
||||
ITypedConverter<Raster, RasterElement> gisRasterConverter,
|
||||
IConversionContextStack<ArcGISDocument, Unit> contextStack
|
||||
IConverterSettingsStore<ArcGISConversionSettings> 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
|
||||
{
|
||||
|
||||
+1
-7
@@ -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<FeatureLayer, VectorLayer>
|
||||
{
|
||||
private readonly ITypedConverter<(Row, string), IGisFeature> _gisFeatureConverter;
|
||||
private readonly IConversionContextStack<ArcGISDocument, Unit> _contextStack;
|
||||
|
||||
public VectorLayerToSpeckleConverter(
|
||||
ITypedConverter<(Row, string), IGisFeature> gisFeatureConverter,
|
||||
IConversionContextStack<ArcGISDocument, Unit> contextStack
|
||||
)
|
||||
public VectorLayerToSpeckleConverter(ITypedConverter<(Row, string), IGisFeature> gisFeatureConverter)
|
||||
{
|
||||
_gisFeatureConverter = gisFeatureConverter;
|
||||
_contextStack = contextStack;
|
||||
}
|
||||
|
||||
public Base Convert(object target)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -5,16 +5,9 @@ using Speckle.Sdk.Models;
|
||||
namespace Speckle.Converters.ArcGIS3.Utils;
|
||||
|
||||
[GenerateAutoInterface]
|
||||
public class CrsUtils : ICrsUtils
|
||||
public class CrsUtils(IConverterSettingsStore<ArcGISConversionSettings> settingsStore) : ICrsUtils
|
||||
{
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
|
||||
public CrsUtils(IConversionContextStack<ArcGISDocument, ACG.Unit> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,15 +15,15 @@ namespace Speckle.Converters.ArcGIS3.Utils;
|
||||
public class FeatureClassUtils : IFeatureClassUtils
|
||||
{
|
||||
private readonly IArcGISFieldUtils _fieldsUtils;
|
||||
private readonly IConversionContextStack<ArcGISDocument, ACG.Unit> _contextStack;
|
||||
private readonly IConverterSettingsStore<ArcGISConversionSettings> _settingsStore;
|
||||
|
||||
public FeatureClassUtils(
|
||||
IArcGISFieldUtils fieldsUtils,
|
||||
IConversionContextStack<ArcGISDocument, ACG.Unit> contextStack
|
||||
IConverterSettingsStore<ArcGISConversionSettings> 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);
|
||||
}
|
||||
|
||||
+6
-2
@@ -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<AutocadConversionSettings>();
|
||||
// add single root converter
|
||||
builder.AddRootCommon<AutocadRootToHostConverter>();
|
||||
|
||||
// add application converters and context stack
|
||||
builder.AddApplicationConverters<AutocadToSpeckleUnitConverter, UnitsValue>();
|
||||
builder.AddScoped<IConversionContextStack<Document, UnitsValue>, AutocadConversionContextStack>();
|
||||
builder.AddScoped<
|
||||
IConverterSettingsStore<AutocadConversionSettings>,
|
||||
ConverterSettingsStore<AutocadConversionSettings>
|
||||
>();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Document, UnitsValue>
|
||||
{
|
||||
public AutocadConversionContextStack(IHostToSpeckleUnitConverter<UnitsValue> unitConverter)
|
||||
: base(
|
||||
Application.DocumentManager.CurrentDocument,
|
||||
Application.DocumentManager.CurrentDocument.Database.Insunits,
|
||||
unitConverter
|
||||
) { }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
namespace Speckle.Converters.Autocad;
|
||||
|
||||
public record AutocadConversionSettings(Document Document, string SpeckleUnits);
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
using Speckle.Converters.Common;
|
||||
using Speckle.InterfaceGenerator;
|
||||
|
||||
namespace Speckle.Converters.Autocad;
|
||||
|
||||
[GenerateAutoInterface]
|
||||
public class AutocadConversionSettingsFactory(IHostToSpeckleUnitConverter<ADB.UnitsValue> unitsConverter)
|
||||
: IAutocadConversionSettingsFactory
|
||||
{
|
||||
public AutocadConversionSettings Create(Document document) =>
|
||||
new(document, unitsConverter.ConvertOrThrow(document.Database.Insunits));
|
||||
}
|
||||
@@ -9,15 +9,15 @@ namespace Speckle.Converters.Autocad;
|
||||
public class AutocadRootToHostConverter : IRootToSpeckleConverter
|
||||
{
|
||||
private readonly IFactory<IToSpeckleTopLevelConverter> _toSpeckle;
|
||||
private readonly IConversionContextStack<Document, UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public AutocadRootToHostConverter(
|
||||
IFactory<IToSpeckleTopLevelConverter> toSpeckle,
|
||||
IConversionContextStack<Document, UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
+2
@@ -9,6 +9,8 @@
|
||||
<Import_RootNamespace>Speckle.Converters.AutocadShared</Import_RootNamespace>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="$(MSBuildThisFileDirectory)AutocadConversionSettings.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)AutocadConversionSettingsFactory.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)AutocadRootToHostConverter.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)AutocadConversionContextStack.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)AutocadToSpeckleUnitConverter.cs" />
|
||||
|
||||
+3
-3
@@ -9,17 +9,17 @@ public class ArcToHostConverter : IToHostTopLevelConverter, ITypedConverter<SOG.
|
||||
{
|
||||
private readonly ITypedConverter<SOG.Arc, AG.CircularArc3d> _arcConverter;
|
||||
private readonly ITypedConverter<SOG.Plane, AG.Plane> _planeConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public ArcToHostConverter(
|
||||
ITypedConverter<SOG.Arc, AG.CircularArc3d> arcConverter,
|
||||
ITypedConverter<SOG.Plane, AG.Plane> planeConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> settingsStore
|
||||
)
|
||||
{
|
||||
_arcConverter = arcConverter;
|
||||
_planeConverter = planeConverter;
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
}
|
||||
|
||||
public object Convert(Base target) => Convert((SOG.Arc)target);
|
||||
|
||||
+4
-4
@@ -10,17 +10,17 @@ public class CircleToHostConverter : IToHostTopLevelConverter, ITypedConverter<S
|
||||
{
|
||||
private readonly ITypedConverter<SOG.Point, AG.Point3d> _pointConverter;
|
||||
private readonly ITypedConverter<SOG.Vector, AG.Vector3d> _vectorConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public CircleToHostConverter(
|
||||
ITypedConverter<SOG.Point, AG.Point3d> pointConverter,
|
||||
ITypedConverter<SOG.Vector, AG.Vector3d> vectorConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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<S
|
||||
{
|
||||
AG.Vector3d normal = _vectorConverter.Convert(target.plane.normal);
|
||||
AG.Point3d origin = _pointConverter.Convert(target.plane.origin);
|
||||
double f = Units.GetConversionFactor(target.units, _contextStack.Current.SpeckleUnits);
|
||||
double f = Units.GetConversionFactor(target.units, _settingsStore.Current.SpeckleUnits);
|
||||
|
||||
var radius = f * target.radius;
|
||||
return new(origin, normal, radius);
|
||||
|
||||
+4
-4
@@ -10,17 +10,17 @@ public class EllipseToHostConverter : IToHostTopLevelConverter, ITypedConverter<
|
||||
{
|
||||
private readonly ITypedConverter<SOG.Point, AG.Point3d> _pointConverter;
|
||||
private readonly ITypedConverter<SOG.Vector, AG.Vector3d> _vectorConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public EllipseToHostConverter(
|
||||
ITypedConverter<SOG.Point, AG.Point3d> pointConverter,
|
||||
ITypedConverter<SOG.Vector, AG.Vector3d> vectorConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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<
|
||||
/// <exception cref="ArgumentNullException"> Throws if any ellipse radius value is null.</exception>
|
||||
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);
|
||||
|
||||
+6
-5
@@ -10,15 +10,15 @@ namespace Speckle.Converters.Autocad.Geometry;
|
||||
public class MeshToHostConverter : IToHostTopLevelConverter, ITypedConverter<SOG.Mesh, ADB.PolyFaceMesh>
|
||||
{
|
||||
private readonly ITypedConverter<SOG.Point, AG.Point3d> _pointConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public MeshToHostConverter(
|
||||
ITypedConverter<SOG.Point, AG.Point3d> pointConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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<SOG
|
||||
|
||||
ADB.PolyFaceMesh mesh = new();
|
||||
|
||||
ADB.Transaction tr = _contextStack.Current.Document.TransactionManager.TopTransaction;
|
||||
//TODO using?
|
||||
ADB.Transaction tr = _settingsStore.Current.Document.TransactionManager.TopTransaction;
|
||||
|
||||
mesh.SetDatabaseDefaults();
|
||||
|
||||
// append mesh to blocktable record - necessary before adding vertices and faces
|
||||
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(mesh);
|
||||
tr.AddNewlyCreatedDBObject(mesh, true);
|
||||
|
||||
|
||||
+7
-6
@@ -1,3 +1,4 @@
|
||||
using Speckle.Converters.Autocad;
|
||||
using Speckle.Converters.Autocad.Extensions;
|
||||
using Speckle.Converters.Common;
|
||||
using Speckle.Converters.Common.Objects;
|
||||
@@ -9,15 +10,15 @@ public class AutocadPolycurveToHostPolyline2dRawConverter
|
||||
: ITypedConverter<SOG.Autocad.AutocadPolycurve, ADB.Polyline2d>
|
||||
{
|
||||
private readonly ITypedConverter<SOG.Vector, AG.Vector3d> _vectorConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public AutocadPolycurveToHostPolyline2dRawConverter(
|
||||
ITypedConverter<SOG.Vector, AG.Vector3d> vectorConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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<AG.Point3d> 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);
|
||||
|
||||
|
||||
+7
-6
@@ -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<SOG.Autocad.AutocadPolycurve, ADB.Polyline3d>
|
||||
{
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public AutocadPolycurveToHostPolyline3dRawConverter(IConversionContextStack<Document, ADB.UnitsValue> contextStack)
|
||||
public AutocadPolycurveToHostPolyline3dRawConverter(IConverterSettingsStore<AutocadConversionSettings> 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<AG.Point3d> 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);
|
||||
|
||||
|
||||
+5
-4
@@ -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<SOG.Autocad.AutocadPolycurve, ADB.Polyline>
|
||||
{
|
||||
private readonly ITypedConverter<SOG.Vector, AG.Vector3d> _vectorConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public AutocadPolycurveToHostPolylineRawConverter(
|
||||
ITypedConverter<SOG.Vector, AG.Vector3d> vectorConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> settingsStore
|
||||
)
|
||||
{
|
||||
_vectorConverter = vectorConverter;
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
}
|
||||
|
||||
public ADB.Polyline Convert(SOG.Autocad.AutocadPolycurve target)
|
||||
@@ -28,7 +29,7 @@ public class AutocadPolycurveToHostPolylineRawConverter : ITypedConverter<SOG.Au
|
||||
);
|
||||
}
|
||||
|
||||
double f = Units.GetConversionFactor(target.units, _contextStack.Current.SpeckleUnits);
|
||||
double f = Units.GetConversionFactor(target.units, _settingsStore.Current.SpeckleUnits);
|
||||
List<AG.Point2d> points2d = target.value.ConvertToPoint2d(f);
|
||||
|
||||
ADB.Polyline polyline =
|
||||
|
||||
+4
-4
@@ -6,16 +6,16 @@ namespace Speckle.Converters.Autocad.ToHost.Raw;
|
||||
|
||||
public class PointToHostRawConverter : ITypedConverter<SOG.Point, AG.Point3d>
|
||||
{
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public PointToHostRawConverter(IConversionContextStack<Document, ADB.UnitsValue> contextStack)
|
||||
public PointToHostRawConverter(IConverterSettingsStore<AutocadConversionSettings> 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;
|
||||
}
|
||||
|
||||
+5
-4
@@ -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;
|
||||
/// </summary>
|
||||
public class PolycurveToHostPolylineRawConverter : ITypedConverter<SOG.Polycurve, ADB.Polyline>
|
||||
{
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
private readonly ITypedConverter<SOG.Point, AG.Point3d> _pointConverter;
|
||||
|
||||
public PolycurveToHostPolylineRawConverter(
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack,
|
||||
IConverterSettingsStore<AutocadConversionSettings> settingsStore,
|
||||
ITypedConverter<SOG.Point, AG.Point3d> pointConverter
|
||||
)
|
||||
{
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
_pointConverter = pointConverter;
|
||||
}
|
||||
|
||||
@@ -26,7 +27,7 @@ public class PolycurveToHostPolylineRawConverter : ITypedConverter<SOG.Polycurve
|
||||
AG.Plane plane =
|
||||
new(
|
||||
AG.Point3d.Origin,
|
||||
AG.Vector3d.ZAxis.TransformBy(_contextStack.Current.Document.Editor.CurrentUserCoordinateSystem)
|
||||
AG.Vector3d.ZAxis.TransformBy(_settingsStore.Current.Document.Editor.CurrentUserCoordinateSystem)
|
||||
);
|
||||
|
||||
int count = 0;
|
||||
|
||||
+4
-4
@@ -7,18 +7,18 @@ namespace Speckle.Converters.Autocad.ToHost.Raw;
|
||||
|
||||
public class VectorToHostRawConverter : ITypedConverter<SOG.Vector, AG.Vector3d>
|
||||
{
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public VectorToHostRawConverter(IConversionContextStack<Document, ADB.UnitsValue> contextStack)
|
||||
public VectorToHostRawConverter(IConverterSettingsStore<AutocadConversionSettings> 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);
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -16,17 +16,17 @@ public class DBPolyfaceMeshToSpeckleConverter : IToSpeckleTopLevelConverter
|
||||
{
|
||||
private readonly ITypedConverter<AG.Point3d, SOG.Point> _pointConverter;
|
||||
private readonly ITypedConverter<ADB.Extents3d, SOG.Box> _boxConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public DBPolyfaceMeshToSpeckleConverter(
|
||||
ITypedConverter<AG.Point3d, SOG.Point> pointConverter,
|
||||
ITypedConverter<ADB.Extents3d, SOG.Box> boxConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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<int> faces = new();
|
||||
List<int> faceVisibility = new();
|
||||
List<int> 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
|
||||
};
|
||||
|
||||
+6
-6
@@ -25,7 +25,7 @@ public class Polyline2dToSpeckleConverter
|
||||
private readonly ITypedConverter<ADB.Spline, SOG.Curve> _splineConverter;
|
||||
private readonly ITypedConverter<AG.Vector3d, SOG.Vector> _vectorConverter;
|
||||
private readonly ITypedConverter<ADB.Extents3d, SOG.Box> _boxConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public Polyline2dToSpeckleConverter(
|
||||
ITypedConverter<ADB.Arc, SOG.Arc> arcConverter,
|
||||
@@ -34,7 +34,7 @@ public class Polyline2dToSpeckleConverter
|
||||
ITypedConverter<ADB.Spline, SOG.Curve> splineConverter,
|
||||
ITypedConverter<AG.Vector3d, SOG.Vector> vectorConverter,
|
||||
ITypedConverter<ADB.Extents3d, SOG.Box> boxConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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<ADB.Vertex2d> vertices = target
|
||||
.GetSubEntities<ADB.Vertex2d>(
|
||||
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;
|
||||
|
||||
+7
-7
@@ -21,19 +21,19 @@ public class Polyline3dToSpeckleConverter
|
||||
private readonly ITypedConverter<AG.Point3d, SOG.Point> _pointConverter;
|
||||
private readonly ITypedConverter<ADB.Spline, SOG.Curve> _splineConverter;
|
||||
private readonly ITypedConverter<ADB.Extents3d, SOG.Box> _boxConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public Polyline3dToSpeckleConverter(
|
||||
ITypedConverter<AG.Point3d, SOG.Point> pointConverter,
|
||||
ITypedConverter<ADB.Spline, SOG.Curve> splineConverter,
|
||||
ITypedConverter<ADB.Extents3d, SOG.Box> boxConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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<ADB.PolylineVertex3d> vertices = target
|
||||
.GetSubEntities<ADB.PolylineVertex3d>(
|
||||
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;
|
||||
|
||||
+4
-4
@@ -19,21 +19,21 @@ public class PolylineToSpeckleConverter
|
||||
private readonly ITypedConverter<AG.CircularArc3d, SOG.Arc> _arcConverter;
|
||||
private readonly ITypedConverter<AG.Vector3d, SOG.Vector> _vectorConverter;
|
||||
private readonly ITypedConverter<ADB.Extents3d, SOG.Box> _boxConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public PolylineToSpeckleConverter(
|
||||
ITypedConverter<AG.LineSegment3d, SOG.Line> lineConverter,
|
||||
ITypedConverter<AG.CircularArc3d, SOG.Arc> arcConverter,
|
||||
ITypedConverter<AG.Vector3d, SOG.Vector> vectorConverter,
|
||||
ITypedConverter<ADB.Extents3d, SOG.Box> boxConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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;
|
||||
|
||||
+4
-4
@@ -9,17 +9,17 @@ public class DBSubDMeshToSpeckleConverter : IToSpeckleTopLevelConverter
|
||||
{
|
||||
private readonly ITypedConverter<AG.Point3d, SOG.Point> _pointConverter;
|
||||
private readonly ITypedConverter<ADB.Extents3d, SOG.Box> _boxConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public DBSubDMeshToSpeckleConverter(
|
||||
ITypedConverter<AG.Point3d, SOG.Point> pointConverter,
|
||||
ITypedConverter<ADB.Extents3d, SOG.Box> boxConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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
|
||||
};
|
||||
|
||||
|
||||
+5
-5
@@ -7,15 +7,15 @@ namespace Speckle.Converters.Autocad.ToSpeckle.Raw;
|
||||
public class BoxToSpeckleRawConverter : ITypedConverter<ADB.Extents3d, SOG.Box>
|
||||
{
|
||||
private readonly ITypedConverter<AG.Plane, SOG.Plane> _planeConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public BoxToSpeckleRawConverter(
|
||||
ITypedConverter<AG.Plane, SOG.Plane> planeConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> settingsStore
|
||||
)
|
||||
{
|
||||
_planeConverter = planeConverter;
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
}
|
||||
|
||||
public Base Convert(object target) => Convert((ADB.Extents3d)target);
|
||||
@@ -29,7 +29,7 @@ public class BoxToSpeckleRawConverter : ITypedConverter<ADB.Extents3d, SOG.Box>
|
||||
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<ADB.Extents3d, SOG.Box>
|
||||
xSize = xSize,
|
||||
ySize = ySize,
|
||||
zSize = zSize,
|
||||
units = _contextStack.Current.SpeckleUnits,
|
||||
units = _settingsStore.Current.SpeckleUnits,
|
||||
volume = volume,
|
||||
};
|
||||
|
||||
|
||||
+4
-4
@@ -7,17 +7,17 @@ public class CircularArc3dToSpeckleConverter : ITypedConverter<AG.CircularArc3d,
|
||||
{
|
||||
private readonly ITypedConverter<AG.Point3d, SOG.Point> _pointConverter;
|
||||
private readonly ITypedConverter<AG.Plane, SOG.Plane> _planeConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public CircularArc3dToSpeckleConverter(
|
||||
ITypedConverter<AG.Point3d, SOG.Point> pointConverter,
|
||||
ITypedConverter<AG.Plane, SOG.Plane> planeConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> settingsStore
|
||||
)
|
||||
{
|
||||
_pointConverter = pointConverter;
|
||||
_planeConverter = planeConverter;
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
}
|
||||
|
||||
public SOG.Arc Convert(AG.CircularArc3d target)
|
||||
@@ -37,7 +37,7 @@ public class CircularArc3dToSpeckleConverter : ITypedConverter<AG.CircularArc3d,
|
||||
target.StartAngle,
|
||||
target.EndAngle,
|
||||
target.EndAngle - target.StartAngle, // POC: testing, unsure
|
||||
_contextStack.Current.SpeckleUnits
|
||||
_settingsStore.Current.SpeckleUnits
|
||||
)
|
||||
{
|
||||
startPoint = start,
|
||||
|
||||
+4
-4
@@ -9,19 +9,19 @@ public class DBArcToSpeckleRawConverter : ITypedConverter<ADB.Arc, SOG.Arc>
|
||||
private readonly ITypedConverter<AG.Point3d, SOG.Point> _pointConverter;
|
||||
private readonly ITypedConverter<AG.Plane, SOG.Plane> _planeConverter;
|
||||
private readonly ITypedConverter<ADB.Extents3d, SOG.Box> _boxConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public DBArcToSpeckleRawConverter(
|
||||
ITypedConverter<AG.Point3d, SOG.Point> pointConverter,
|
||||
ITypedConverter<AG.Plane, SOG.Plane> planeConverter,
|
||||
ITypedConverter<ADB.Extents3d, SOG.Box> boxConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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<ADB.Arc, SOG.Arc>
|
||||
target.StartAngle,
|
||||
target.EndAngle,
|
||||
target.TotalAngle,
|
||||
_contextStack.Current.SpeckleUnits
|
||||
_settingsStore.Current.SpeckleUnits
|
||||
)
|
||||
{
|
||||
startPoint = start,
|
||||
|
||||
+4
-4
@@ -8,17 +8,17 @@ public class DBCircleToSpeckleRawConverter : ITypedConverter<ADB.Circle, SOG.Cir
|
||||
{
|
||||
private readonly ITypedConverter<AG.Plane, SOG.Plane> _planeConverter;
|
||||
private readonly ITypedConverter<ADB.Extents3d, SOG.Box> _boxConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public DBCircleToSpeckleRawConverter(
|
||||
ITypedConverter<AG.Plane, SOG.Plane> planeConverter,
|
||||
ITypedConverter<ADB.Extents3d, SOG.Box> boxConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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<ADB.Circle, SOG.Cir
|
||||
{
|
||||
plane = plane,
|
||||
radius = target.Radius,
|
||||
units = _contextStack.Current.SpeckleUnits,
|
||||
units = _settingsStore.Current.SpeckleUnits,
|
||||
length = target.Circumference,
|
||||
bbox = bbox
|
||||
};
|
||||
|
||||
+3
-3
@@ -15,7 +15,7 @@ public class DBCurveToSpeckleRawConverter : ITypedConverter<ADB.Curve, Objects.I
|
||||
private readonly ITypedConverter<ADB.Circle, SOG.Circle> _circleConverter;
|
||||
private readonly ITypedConverter<ADB.Ellipse, SOG.Ellipse> _ellipseConverter;
|
||||
private readonly ITypedConverter<ADB.Spline, SOG.Curve> _splineConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public DBCurveToSpeckleRawConverter(
|
||||
ITypedConverter<ADB.Line, SOG.Line> lineConverter,
|
||||
@@ -26,7 +26,7 @@ public class DBCurveToSpeckleRawConverter : ITypedConverter<ADB.Curve, Objects.I
|
||||
ITypedConverter<ADB.Circle, SOG.Circle> circleConverter,
|
||||
ITypedConverter<ADB.Ellipse, SOG.Ellipse> ellipseConverter,
|
||||
ITypedConverter<ADB.Spline, SOG.Curve> splineConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> settingsStore
|
||||
)
|
||||
{
|
||||
_lineConverter = lineConverter;
|
||||
@@ -37,7 +37,7 @@ public class DBCurveToSpeckleRawConverter : ITypedConverter<ADB.Curve, Objects.I
|
||||
_circleConverter = circleConverter;
|
||||
_ellipseConverter = ellipseConverter;
|
||||
_splineConverter = splineConverter;
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
+4
-4
@@ -8,17 +8,17 @@ public class DBEllipseToSpeckleRawConverter : ITypedConverter<ADB.Ellipse, SOG.E
|
||||
{
|
||||
private readonly ITypedConverter<AG.Plane, SOG.Plane> _planeConverter;
|
||||
private readonly ITypedConverter<ADB.Extents3d, SOG.Box> _boxConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public DBEllipseToSpeckleRawConverter(
|
||||
ITypedConverter<AG.Plane, SOG.Plane> planeConverter,
|
||||
ITypedConverter<ADB.Extents3d, SOG.Box> boxConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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<ADB.Ellipse, SOG.E
|
||||
plane = plane,
|
||||
firstRadius = target.MajorRadius,
|
||||
secondRadius = target.MinorRadius,
|
||||
units = _contextStack.Current.SpeckleUnits,
|
||||
units = _settingsStore.Current.SpeckleUnits,
|
||||
domain = new SOP.Interval { start = 0, end = Math.PI * 2 },
|
||||
trimDomain = trim,
|
||||
length = target.GetDistanceAtParameter(target.EndParam),
|
||||
|
||||
+4
-4
@@ -8,17 +8,17 @@ public class DBLineToSpeckleRawConverter : ITypedConverter<ADB.Line, SOG.Line>
|
||||
{
|
||||
private readonly ITypedConverter<AG.Point3d, SOG.Point> _pointConverter;
|
||||
private readonly ITypedConverter<ADB.Extents3d, SOG.Box> _boxConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public DBLineToSpeckleRawConverter(
|
||||
ITypedConverter<AG.Point3d, SOG.Point> pointConverter,
|
||||
ITypedConverter<ADB.Extents3d, SOG.Box> boxConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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<ADB.Line, SOG.Line>
|
||||
{
|
||||
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)
|
||||
};
|
||||
|
||||
+4
-4
@@ -8,17 +8,17 @@ public class Solid3dToSpeckleRawConverter : ITypedConverter<ADB.Solid3d, SOG.Mes
|
||||
{
|
||||
private readonly ITypedConverter<AG.Point3d, SOG.Point> _pointConverter;
|
||||
private readonly ITypedConverter<ADB.Extents3d, SOG.Box> _boxConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public Solid3dToSpeckleRawConverter(
|
||||
ITypedConverter<AG.Point3d, SOG.Point> pointConverter,
|
||||
ITypedConverter<ADB.Extents3d, SOG.Box> boxConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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<ADB.Solid3d, SOG.Mes
|
||||
{
|
||||
vertices = convertedVertices,
|
||||
faces = faces,
|
||||
units = _contextStack.Current.SpeckleUnits,
|
||||
units = _settingsStore.Current.SpeckleUnits,
|
||||
bbox = bbox,
|
||||
area = area,
|
||||
volume = volume
|
||||
|
||||
+8
-8
@@ -10,17 +10,17 @@ public class DBSplineToSpeckleRawConverter : ITypedConverter<ADB.Spline, SOG.Cur
|
||||
{
|
||||
private readonly ITypedConverter<AG.Interval, SOP.Interval> _intervalConverter;
|
||||
private readonly ITypedConverter<ADB.Extents3d, SOG.Box> _boxConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public DBSplineToSpeckleRawConverter(
|
||||
ITypedConverter<AG.Interval, SOP.Interval> intervalConverter,
|
||||
ITypedConverter<ADB.Extents3d, SOG.Box> boxConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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.Spline, SOG.Cur
|
||||
length = length,
|
||||
domain = domain,
|
||||
bbox = _boxConverter.Convert(target.GeometricExtents),
|
||||
units = _contextStack.Current.SpeckleUnits,
|
||||
displayValue = target.Database is not null ? GetDisplayValue(target) : null!,
|
||||
units = _settingsStore.Current.SpeckleUnits,
|
||||
displayValue = target.Database is not null ? GetDisplayValue(target) : null!, //TODO change?
|
||||
};
|
||||
|
||||
// POC: get display value if this is a database-resident spline
|
||||
@@ -129,7 +129,7 @@ public class DBSplineToSpeckleRawConverter : ITypedConverter<ADB.Spline, SOG.Cur
|
||||
case ADB.Polyline2d o:
|
||||
verticesList = o.GetSubEntities<ADB.Vertex2d>(
|
||||
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.Spline, SOG.Cur
|
||||
case ADB.Polyline3d o:
|
||||
verticesList = o.GetSubEntities<ADB.PolylineVertex3d>(
|
||||
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<ADB.Spline, SOG.Cur
|
||||
break;
|
||||
}
|
||||
|
||||
return verticesList.ConvertToSpecklePolyline(_contextStack.Current.SpeckleUnits);
|
||||
return verticesList.ConvertToSpecklePolyline(_settingsStore.Current.SpeckleUnits);
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -6,15 +6,15 @@ namespace Speckle.Converters.Autocad.ToSpeckle.Raw;
|
||||
public class LineSegment3dToSpeckleRawConverter : ITypedConverter<AG.LineSegment3d, SOG.Line>
|
||||
{
|
||||
private readonly ITypedConverter<AG.Point3d, SOG.Point> _pointConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public LineSegment3dToSpeckleRawConverter(
|
||||
ITypedConverter<AG.Point3d, SOG.Point> pointConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> settingsStore
|
||||
)
|
||||
{
|
||||
_pointConverter = pointConverter;
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
}
|
||||
|
||||
public SOG.Line Convert(AG.LineSegment3d target) =>
|
||||
@@ -22,7 +22,7 @@ public class LineSegment3dToSpeckleRawConverter : ITypedConverter<AG.LineSegment
|
||||
{
|
||||
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 },
|
||||
};
|
||||
}
|
||||
|
||||
+4
-4
@@ -8,17 +8,17 @@ public class PlaneToSpeckleRawConverter : ITypedConverter<AG.Plane, SOG.Plane>
|
||||
{
|
||||
private readonly ITypedConverter<AG.Vector3d, SOG.Vector> _vectorConverter;
|
||||
private readonly ITypedConverter<AG.Point3d, SOG.Point> _pointConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public PlaneToSpeckleRawConverter(
|
||||
ITypedConverter<AG.Vector3d, SOG.Vector> vectorConverter,
|
||||
ITypedConverter<AG.Point3d, SOG.Point> pointConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<AutocadConversionSettings> 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<AG.Plane, SOG.Plane>
|
||||
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,
|
||||
};
|
||||
}
|
||||
|
||||
+4
-4
@@ -5,12 +5,12 @@ namespace Speckle.Converters.Autocad.ToSpeckle.Raw;
|
||||
|
||||
public class PointToSpeckleRawConverter : ITypedConverter<AG.Point3d, SOG.Point>
|
||||
{
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public PointToSpeckleRawConverter(IConversionContextStack<Document, ADB.UnitsValue> contextStack)
|
||||
public PointToSpeckleRawConverter(IConverterSettingsStore<AutocadConversionSettings> 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);
|
||||
}
|
||||
|
||||
+4
-4
@@ -5,13 +5,13 @@ namespace Speckle.Converters.Autocad.ToSpeckle.Raw;
|
||||
|
||||
public class VectorToSpeckleRawConverter : ITypedConverter<AG.Vector3d, SOG.Vector>
|
||||
{
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<AutocadConversionSettings> _settingsStore;
|
||||
|
||||
public VectorToSpeckleRawConverter(IConversionContextStack<Document, ADB.UnitsValue> contextStack)
|
||||
public VectorToSpeckleRawConverter(IConverterSettingsStore<AutocadConversionSettings> 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);
|
||||
}
|
||||
|
||||
+11
-3
@@ -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<Civil3dConversionSettings>();
|
||||
builder.ScanAssemblyOfType<AutocadConversionSettings>();
|
||||
// Register single root
|
||||
builder.AddRootCommon<Civil3dRootToHostConverter>();
|
||||
|
||||
// register all application converters
|
||||
builder.AddApplicationConverters<Civil3dToSpeckleUnitConverter, Autodesk.Aec.BuiltInUnit>();
|
||||
builder.AddApplicationConverters<AutocadToSpeckleUnitConverter, UnitsValue>();
|
||||
builder.AddScoped<IConversionContextStack<Document, Autodesk.Aec.BuiltInUnit>, Civil3dConversionContextStack>();
|
||||
builder.AddScoped<IConversionContextStack<Document, UnitsValue>, AutocadConversionContextStack>();
|
||||
builder.AddScoped<
|
||||
IConverterSettingsStore<Civil3dConversionSettings>,
|
||||
ConverterSettingsStore<Civil3dConversionSettings>
|
||||
>();
|
||||
builder.AddScoped<
|
||||
IConverterSettingsStore<AutocadConversionSettings>,
|
||||
ConverterSettingsStore<AutocadConversionSettings>
|
||||
>();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Document, AAEC.BuiltInUnit>
|
||||
{
|
||||
public Civil3dConversionContextStack(IHostToSpeckleUnitConverter<AAEC.BuiltInUnit> 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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace Speckle.Converters.Civil3d;
|
||||
|
||||
public record Civil3dConversionSettings
|
||||
{
|
||||
public Document Document { get; init; }
|
||||
public string SpeckleUnits { get; init; }
|
||||
}
|
||||
@@ -9,15 +9,15 @@ namespace Speckle.Converters.Civil3d;
|
||||
public class Civil3dRootToHostConverter : IRootToSpeckleConverter
|
||||
{
|
||||
private readonly IFactory<IToSpeckleTopLevelConverter> _toSpeckle;
|
||||
private readonly IConversionContextStack<Document, AAEC.BuiltInUnit> _contextStack;
|
||||
private readonly IConverterSettingsStore<Civil3dConversionSettings> _settingsStore;
|
||||
|
||||
public Civil3dRootToHostConverter(
|
||||
IFactory<IToSpeckleTopLevelConverter> toSpeckle,
|
||||
IConversionContextStack<Document, AAEC.BuiltInUnit> contextStack
|
||||
IConverterSettingsStore<Civil3dConversionSettings> 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);
|
||||
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@
|
||||
<Import_RootNamespace>Speckle.Converters.Civil3dShared</Import_RootNamespace>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Civil3dConversionContextStack.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Civil3dConversionSettings.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Civil3dRootToHostConverter.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Civil3dToSpeckleUnitConverter.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)GlobalUsings.cs" />
|
||||
|
||||
+4
-4
@@ -15,7 +15,7 @@ public class PipeToSpeckleConverter : IToSpeckleTopLevelConverter
|
||||
private readonly ITypedConverter<ADB.Extents3d, SOG.Box> _boxConverter;
|
||||
private readonly ITypedConverter<ADB.Solid3d, SOG.Mesh> _solidConverter;
|
||||
private readonly ITypedConverter<AECPropDB.PropertySet, List<DataField>> _propertySetConverter;
|
||||
private readonly IConversionContextStack<Document, AAEC.BuiltInUnit> _contextStack;
|
||||
private readonly IConverterSettingsStore<Civil3dConversionSettings> _settingsStore;
|
||||
|
||||
public PipeToSpeckleConverter(
|
||||
ITypedConverter<AG.Point3d, SOG.Point> pointConverter,
|
||||
@@ -23,7 +23,7 @@ public class PipeToSpeckleConverter : IToSpeckleTopLevelConverter
|
||||
ITypedConverter<ADB.Extents3d, SOG.Box> boxConverter,
|
||||
ITypedConverter<ADB.Solid3d, SOG.Mesh> solidConverter,
|
||||
ITypedConverter<AECPropDB.PropertySet, List<DataField>> propertySetConverter,
|
||||
IConversionContextStack<Document, AAEC.BuiltInUnit> contextStack
|
||||
IConverterSettingsStore<Civil3dConversionSettings> 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<SOG.Mesh> { pipeMesh },
|
||||
units = _contextStack.Current.SpeckleUnits
|
||||
units = _settingsStore.Current.SpeckleUnits
|
||||
};
|
||||
|
||||
// POC: not setting property sets yet, need to determine connector parameter interoperability
|
||||
|
||||
+5
-4
@@ -9,17 +9,17 @@ public class PropertySetToSpeckleRawConverter : ITypedConverter<AECPropDB.Proper
|
||||
{
|
||||
private readonly ITypedConverter<AG.Vector3d, SOG.Vector> _vectorConverter;
|
||||
private readonly ITypedConverter<AG.Point3d, SOG.Point> _pointConverter;
|
||||
private readonly IConversionContextStack<Document, ADB.UnitsValue> _contextStack;
|
||||
private readonly IConverterSettingsStore<Civil3dConversionSettings> _settingsStore;
|
||||
|
||||
public PropertySetToSpeckleRawConverter(
|
||||
ITypedConverter<AG.Vector3d, SOG.Vector> vectorConverter,
|
||||
ITypedConverter<AG.Point3d, SOG.Point> pointConverter,
|
||||
IConversionContextStack<Document, ADB.UnitsValue> contextStack
|
||||
IConverterSettingsStore<Civil3dConversionSettings> settingsStore
|
||||
)
|
||||
{
|
||||
_vectorConverter = vectorConverter;
|
||||
_pointConverter = pointConverter;
|
||||
_contextStack = contextStack;
|
||||
_settingsStore = settingsStore;
|
||||
}
|
||||
|
||||
public List<DataField> Convert(object target) => Convert((AECPropDB.PropertySet)target);
|
||||
@@ -28,7 +28,8 @@ public class PropertySetToSpeckleRawConverter : ITypedConverter<AECPropDB.Proper
|
||||
{
|
||||
List<DataField> 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);
|
||||
|
||||
|
||||
+1
-1
@@ -25,6 +25,6 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Speckle.Revit2024.Fakes" VersionOverride="0.3.0" />
|
||||
<PackageReference Include="Speckle.Revit2024.Fakes" VersionOverride="[0.3.0, 1.0.0)" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -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": {
|
||||
|
||||
+6
-2
@@ -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<SlopeArrowExtractor>();
|
||||
builder.ScanAssemblyOfType<RevitConversionSettings>();
|
||||
// Register single root
|
||||
builder.AddRootCommon<RevitRootToSpeckleConverter>();
|
||||
|
||||
@@ -29,7 +30,10 @@ public class RevitConverterModule : ISpeckleModule
|
||||
builder.AddScoped<ScalingServiceToHost>();
|
||||
|
||||
// POC: the concrete type can come out if we remove all the reference to it
|
||||
builder.AddScoped<IRevitConversionContextStack, RevitConversionContextStack>();
|
||||
builder.AddScoped<
|
||||
IConverterSettingsStore<RevitConversionSettings>,
|
||||
ConverterSettingsStore<RevitConversionSettings>
|
||||
>();
|
||||
|
||||
builder.AddScoped<IReferencePointConverter, ReferencePointConverter>();
|
||||
|
||||
|
||||
+6
-7
@@ -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<IRevitConversionContextStack>();
|
||||
var revitConversionContextStack = Create<IConverterSettingsStore<RevitConversionSettings>>();
|
||||
var scalingServiceToSpeckle = Create<IScalingServiceToSpeckle>();
|
||||
var curveConverter = Create<ITypedConverter<DB.Curve, ICurve>>();
|
||||
|
||||
@@ -32,7 +32,7 @@ public class ModelCurveArrayToSpeckleConverterTests : MoqTest
|
||||
[Test]
|
||||
public void Convert()
|
||||
{
|
||||
var revitConversionContextStack = Create<IRevitConversionContextStack>();
|
||||
var revitConversionContextStack = Create<IConverterSettingsStore<RevitConversionSettings>>();
|
||||
var scalingServiceToSpeckle = Create<IScalingServiceToSpeckle>();
|
||||
var curveConverter = Create<ITypedConverter<DB.Curve, ICurve>>();
|
||||
|
||||
@@ -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<IConversionContext<DB.Document>>();
|
||||
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);
|
||||
|
||||
@@ -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<SOG.Mesh>
|
||||
> _meshByMaterialConverter;
|
||||
private readonly ILogger<DisplayValueExtractor> _logger;
|
||||
private readonly IRevitConversionContextStack _revitConversionContextStack;
|
||||
private readonly IConverterSettingsStore<RevitConversionSettings> _converterSettings;
|
||||
|
||||
public DisplayValueExtractor(
|
||||
ITypedConverter<
|
||||
@@ -21,12 +22,12 @@ public sealed class DisplayValueExtractor
|
||||
List<SOG.Mesh>
|
||||
> meshByMaterialConverter,
|
||||
ILogger<DisplayValueExtractor> logger,
|
||||
IRevitConversionContextStack revitConversionContextStack
|
||||
IConverterSettingsStore<RevitConversionSettings> converterSettings
|
||||
)
|
||||
{
|
||||
_meshByMaterialConverter = meshByMaterialConverter;
|
||||
_logger = logger;
|
||||
_revitConversionContextStack = revitConversionContextStack;
|
||||
_converterSettings = converterSettings;
|
||||
}
|
||||
|
||||
public List<SOG.Mesh> GetDisplayValue(DB.Element element, DB.Options? options = null)
|
||||
@@ -86,10 +87,7 @@ public sealed class DisplayValueExtractor
|
||||
private (List<DB.Solid>, List<DB.Mesh>) 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
|
||||
|
||||
-18
@@ -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<Document, ForgeTypeId>
|
||||
{
|
||||
public RevitMaterialCacheSingleton RenderMaterialProxyCache { get; }
|
||||
public ToSpeckleSettings ToSpeckleSettings { get; }
|
||||
}
|
||||
-45
@@ -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<Document, ForgeTypeId>, IRevitConversionContextStack
|
||||
{
|
||||
public ToSpeckleSettings ToSpeckleSettings { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Persistent cache (across conversions) for all generated render material proxies. Note this cache stores a list of render material proxies per element id.
|
||||
/// </summary>
|
||||
public RevitMaterialCacheSingleton RenderMaterialProxyCache { get; }
|
||||
|
||||
public const double TOLERANCE = 0.0164042; // 5mm in ft
|
||||
|
||||
public RevitConversionContextStack(
|
||||
RevitContext context,
|
||||
IHostToSpeckleUnitConverter<ForgeTypeId> 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;
|
||||
}
|
||||
}
|
||||
@@ -1,21 +1,18 @@
|
||||
using Speckle.Converters.Common;
|
||||
using Speckle.Converters.RevitShared.Settings;
|
||||
|
||||
namespace Speckle.Converters.RevitShared.Helpers;
|
||||
|
||||
/// <summary>
|
||||
/// 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
|
||||
/// </summary>
|
||||
public class ReferencePointConverter : IReferencePointConverter
|
||||
public class ReferencePointConverter(IConverterSettingsStore<RevitConversionSettings> 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);
|
||||
}
|
||||
|
||||
@@ -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<IToSpeckleTopLevelConverter> _toSpeckle;
|
||||
private readonly ParameterValueExtractor _parameterValueExtractor;
|
||||
private readonly ITypedConverter<DB.Element, List<Dictionary<string, object>>> _materialQuantityConverter;
|
||||
private readonly IRevitConversionContextStack _contextStack;
|
||||
|
||||
public RevitRootToSpeckleConverter(
|
||||
IConverterResolver<IToSpeckleTopLevelConverter> toSpeckle,
|
||||
ParameterValueExtractor parameterValueExtractor,
|
||||
ITypedConverter<DB.Element, List<Dictionary<string, object>>> materialQuantityConverter,
|
||||
IRevitConversionContextStack contextStack
|
||||
ITypedConverter<DB.Element, List<Dictionary<string, object>>> materialQuantityConverter
|
||||
)
|
||||
{
|
||||
_toSpeckle = toSpeckle;
|
||||
_parameterValueExtractor = parameterValueExtractor;
|
||||
_materialQuantityConverter = materialQuantityConverter;
|
||||
_contextStack = contextStack;
|
||||
}
|
||||
|
||||
// POC: our assumption here is target is valid for conversion
|
||||
|
||||
@@ -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<RevitConversionSettings> 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);
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Speckle.Converters.RevitShared.Settings;
|
||||
|
||||
public enum DetailLevelType
|
||||
{
|
||||
Coarse,
|
||||
Medium,
|
||||
Fine
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Speckle.Converters.RevitShared.Settings;
|
||||
|
||||
public enum ReferencePointType
|
||||
{
|
||||
InternalOrigin,
|
||||
ProjectBase,
|
||||
Survey
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user