diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/DependencyInjection/ArcGISConnectorModule.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/DependencyInjection/ArcGISConnectorModule.cs index 1908a7372..301c13272 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/DependencyInjection/ArcGISConnectorModule.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/DependencyInjection/ArcGISConnectorModule.cs @@ -29,36 +29,36 @@ public static void AddArcGIS(this IServiceCollection serviceCollection) serviceCollection.AddConnectorUtils(); serviceCollection.AddDUI(); serviceCollection.AddDUIView(); + // Register bindings serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); - - serviceCollection.RegisterTopLevelExceptionHandler(); - serviceCollection.AddSingleton(sp => sp.GetRequiredService()); serviceCollection.AddSingleton(); - serviceCollection.AddSingleton(); - serviceCollection.AddSingleton(); - serviceCollection.AddSingleton(); - - serviceCollection.AddTransient(); - serviceCollection.AddScoped(); + serviceCollection.RegisterTopLevelExceptionHandler(); serviceCollection.AddSingleton(DefaultTraversal.CreateTraversalFunc()); // register send operation and dependencies + serviceCollection.AddSingleton(); serviceCollection.AddScoped>(); + serviceCollection.AddSingleton(); + serviceCollection.AddTransient(); serviceCollection.AddScoped(); serviceCollection.AddScoped, ArcGISRootObjectBuilder>(); + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + // register send conversion cache + serviceCollection.AddSingleton(); + // register receive operation and dependencies + // serviceCollection.AddSingleton(); // POC: disabled until receive code is refactored serviceCollection.AddScoped(); - serviceCollection.AddScoped(); - serviceCollection.AddScoped(); + serviceCollection.AddScoped(); - // register send conversion cache - serviceCollection.AddSingleton(); + serviceCollection.AddScoped(); // operation progress manager serviceCollection.AddSingleton(); diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/GlobalUsing.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/GlobalUsing.cs new file mode 100644 index 000000000..baef56fea --- /dev/null +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/GlobalUsing.cs @@ -0,0 +1,3 @@ +global using AC = ArcGIS.Core; +global using ACD = ArcGIS.Core.Data; +global using ADM = ArcGIS.Desktop.Mapping; diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISColorManager.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISColorManager.cs index afa769f8e..2ac406ca4 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISColorManager.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISColorManager.cs @@ -1,57 +1,25 @@ using System.Drawing; using ArcGIS.Core.CIM; -using ArcGIS.Core.Data; using ArcGIS.Desktop.Mapping; using Speckle.Connectors.Common.Operations; using Speckle.Converters.ArcGIS3.Utils; using Speckle.Objects; using Speckle.Objects.Other; -using Speckle.Sdk.Common; using Speckle.Sdk.Models.Collections; +using Speckle.Sdk.Models.Extensions; using Speckle.Sdk.Models.GraphTraversal; using Speckle.Sdk.Models.Proxies; namespace Speckle.Connectors.ArcGIS.HostApp; +/// +/// TODO: definitely need to refactor this, probably will collect colors during layer iteration in the root object builder. +/// public class ArcGISColorManager { - private Dictionary ColorProxies { get; set; } = new(); public Dictionary ObjectColorsIdMap { get; set; } = new(); public Dictionary ObjectMaterialsIdMap { get; set; } = new(); - /// - /// Iterates through a given set of arcGIS map members (layers containing objects) and collects their colors. - /// - /// - /// A list of color proxies, where the application Id is argb value + display priority - /// - /// In ArcGIS, map members contain a formula, which individual features contained in map members will use to calculate their color. - /// Since display priority is important for ArcGIS layers, we are creating different Color Proxies for eg the same argb color value but different display priority. - /// - public List UnpackColors(List<(MapMember, int)> mapMembersWithDisplayPriority) - { - // injected as Singleton, so we need to clean existing proxies first - ColorProxies = new(); - - foreach ((MapMember mapMember, int priority) in mapMembersWithDisplayPriority) - { - switch (mapMember) - { - // FeatureLayer colors will be processed per feature object - case FeatureLayer featureLayer: - ProcessFeatureLayerColors(featureLayer, priority); - break; - - // RasterLayer object colors are converted as mesh vertex colors, but we need to store displayPriority on the raster layer. Default color is used for all rasters. - case RasterLayer rasterLayer: - ProcessRasterLayerColors(rasterLayer, priority); - break; - } - } - - return ColorProxies.Values.ToList(); - } - /// /// Parse Color Proxies and stores in ObjectColorsIdMap the relationship between object ids and colors /// @@ -94,6 +62,14 @@ public void ParseMaterials(List materialProxies, IProgress< } } + public int CIMColorToInt(CIMColor color) + { + return (255 << 24) + | ((int)Math.Round(color.Values[0]) << 16) + | ((int)Math.Round(color.Values[1]) << 8) + | (int)Math.Round(color.Values[2]); + } + /// /// Create a new CIMUniqueValueClass for UniqueRenderer per each object ID /// @@ -107,6 +83,7 @@ string uniqueLabel { // declare default white color Color color = Color.FromArgb(255, 255, 255, 255); + bool colorFound = false; // get color moving upwards from the object foreach (var parent in tc.GetAscendants()) @@ -116,16 +93,43 @@ string uniqueLabel if (ObjectMaterialsIdMap.TryGetValue(appId, out Color objColorMaterial)) { color = objColorMaterial; + colorFound = true; break; } if (ObjectColorsIdMap.TryGetValue(appId, out Color objColor)) { color = objColor; + colorFound = true; break; } } } + // handling Revit case, where child objects have separate colors/materials + if (!colorFound && tc.Current is IDataObject) + { + var displayable = tc.Current.TryGetDisplayValue(); + if (displayable != null) + { + foreach (var childObj in displayable) + { + if (childObj.applicationId is string appId) + { + if (ObjectMaterialsIdMap.TryGetValue(appId, out Color objColorMaterial)) + { + color = objColorMaterial; + break; + } + if (ObjectColorsIdMap.TryGetValue(appId, out Color objColor)) + { + color = objColor; + break; + } + } + } + } + } + CIMSymbolReference symbol = CreateSymbol(speckleGeometryType, color); // First create a "CIMUniqueValueClass" @@ -192,7 +196,7 @@ private CIMSymbolReference CreateSymbol(esriGeometryType speckleGeometryType, Co } // declare default grey color, create default symbol for the given layer geometry type - var color = Color.FromArgb(ColorFactory.Instance.GreyRGB.CIMColorToInt()); + var color = Color.FromArgb(CIMColorToInt(ColorFactory.Instance.GreyRGB)); CIMSymbolReference defaultSymbol = CreateSymbol(fLayer.ShapeType, color); // get existing renderer classes @@ -223,7 +227,10 @@ private CIMSymbolReference CreateSymbol(esriGeometryType speckleGeometryType, Co foreach (var tContext in traversalContexts) { // get unique label - string uniqueLabel = tContext.Current.id.NotNull(); + string? uniqueLabel = tContext.Current?.id; + + // remove any GIS-specific classes for now + /* if (tContext.Current is IGisFeature gisFeat) { var existingLabel = gisFeat.attributes["Speckle_ID"]; @@ -231,9 +238,9 @@ private CIMSymbolReference CreateSymbol(esriGeometryType speckleGeometryType, Co { uniqueLabel = stringLabel; } - } + }*/ - if (!listUniqueValueClasses.Select(x => x.Label).Contains(uniqueLabel)) + if (uniqueLabel is not null && !listUniqueValueClasses.Select(x => x.Label).Contains(uniqueLabel)) { CIMUniqueValueClass newUniqueValueClass = CreateColorCategory(tContext, fLayer.ShapeType, uniqueLabel); listUniqueValueClasses.Add(newUniqueValueClass); @@ -255,376 +262,4 @@ private CIMSymbolReference CreateSymbol(esriGeometryType speckleGeometryType, Co }; return uvr; } - - private string GetColorApplicationId(int argb, double order) => $"{argb}_{order}"; - - // Adds the element id to the color proxy based on colorId if it exists in ColorProxies, - // otherwise creates a new Color Proxy with the element id in the objects property - private void AddElementIdToColorProxy(string elementAppId, int colorValue, string colorId, int displayPriority) - { - if (ColorProxies.TryGetValue(colorId, out ColorProxy? colorProxy)) - { - colorProxy.objects.Add(elementAppId); - } - else - { - ColorProxy newProxy = - new() - { - value = colorValue, - applicationId = colorId, - objects = new() { elementAppId }, - name = colorId - }; - - newProxy["displayOrder"] = displayPriority; // 0 - top layer (top display priority), 1,2,3.. decreasing priority - ColorProxies.Add(colorId, newProxy); - } - } - - private void ProcessRasterLayerColors(RasterLayer rasterLayer, int displayPriority) - { - string elementAppId = $"{rasterLayer.URI}_0"; // POC: explain why count = 0 here - int argb = -1; - string colorId = GetColorApplicationId(argb, displayPriority); // We are using a default color of -1 for all raster layers - AddElementIdToColorProxy(elementAppId, argb, colorId, displayPriority); - } - - /// - /// Record colors from every feature of the layer into ColorProxies - /// - /// - /// - private void ProcessFeatureLayerColors(FeatureLayer layer, int displayPriority) - { - // first get a list of layer fields - // field names are unique, but often their alias is used instead by renderer headings - // so we are storing both names and alieas in this dictionary for fast lookup - // POC: adding aliases are not optimal, because they do not need to be unique && they can be the same as the name of another field - Dictionary layerFieldDictionary = new(); - foreach (FieldDescription field in layer.GetFieldDescriptions()) - { - layerFieldDictionary.TryAdd(field.Name, field); - layerFieldDictionary.TryAdd(field.Alias, field); - } - - CIMRenderer layerRenderer = layer.GetRenderer(); - int count = 1; - using (RowCursor rowCursor = layer.Search()) - { - // if layer doesn't have a valid data source (and the conversion likely failed), don't create a colorProxy - if (rowCursor is null) - { - return; - } - while (rowCursor.MoveNext()) - { - string elementAppId = $"{layer.URI}_{count}"; - using (Row row = rowCursor.Current) - { - // get row color - int argb = GetLayerColorByRendererAndRow(layerRenderer, row, layerFieldDictionary); - string colorId = GetColorApplicationId(argb, displayPriority); - AddElementIdToColorProxy(elementAppId, argb, colorId, displayPriority); - } - - count++; - } - } - } - - // Attempts to retrieve the color from a CIMSymbol - private bool TryGetSymbolColor(CIMSymbol symbol, out int symbolColor) - { - symbolColor = -1; - if (symbol.GetColor() is CIMColor cimColor) - { - switch (cimColor) - { - case CIMRGBColor rgbColor: - symbolColor = rgbColor.CIMColorToInt(); - return true; - case CIMHSVColor hsvColor: - symbolColor = RgbFromHsv(hsvColor); - return true; - case CIMCMYKColor cmykColor: - symbolColor = RgbFromCmyk(cmykColor); - return true; - default: - return false; - } - } - else - { - return false; - } - } - - private int RbgToInt(int a, int r, int g, int b) - { - return (a << 24) | (r << 16) | (g << 8) | b; - } - - private int RgbFromCmyk(CIMCMYKColor cmykColor) - { - float c = cmykColor.C; - float m = cmykColor.M; - float y = cmykColor.Y; - float k = cmykColor.K; - - int r = Convert.ToInt32(255 * (1 - c) * (1 - k)); - int g = Convert.ToInt32(255 * (1 - m) * (1 - k)); - int b = Convert.ToInt32(255 * (1 - y) * (1 - k)); - return RbgToInt(255, r, g, b); - } - - private int RgbFromHsv(CIMHSVColor hsvColor) - { - // Translates HSV color to RGB color - // H: 0.0 - 360.0, S: 0.0 - 100.0, V: 0.0 - 100.0 - // R, G, B: 0.0 - 1.0 - - float hue = hsvColor.H; - float saturation = hsvColor.S; - float value = hsvColor.V; - - float c = (value / 100) * (saturation / 100); - float x = c * (1 - Math.Abs(((hue / 60) % 2) - 1)); - float m = (value / 100) - c; - - float r = 0; - float g = 0; - float b = 0; - - if (hue >= 0 && hue < 60) - { - r = c; - g = x; - b = 0; - } - else if (hue >= 60 && hue < 120) - { - r = x; - g = c; - b = 0; - } - else if (hue >= 120 && hue < 180) - { - r = 0; - g = c; - b = x; - } - else if (hue >= 180 && hue < 240) - { - r = 0; - g = x; - b = c; - } - else if (hue >= 240 && hue < 300) - { - r = x; - g = 0; - b = c; - } - else if (hue >= 300 && hue < 360) - { - r = c; - g = 0; - b = x; - } - - r += m; - g += m; - b += m; - - // convert rgb 0.0-1.0 float to int - int red = (int)Math.Round(r * 255); - int green = (int)Math.Round(g * 255); - int blue = (int)Math.Round(b * 255); - - return RbgToInt(255, red, green, blue); - } - - private bool TryGetUniqueRendererColor( - CIMUniqueValueRenderer uniqueRenderer, - Row row, - Dictionary fields, - out int color - ) - { - if (uniqueRenderer.DefaultSymbol is null) - { - color = RbgToInt(255, 255, 255, 255); - return false; - } - if (!TryGetSymbolColor(uniqueRenderer.DefaultSymbol.Symbol, out color)) // get default color - { - return false; - } - - // note: usually there is only 1 group - foreach (CIMUniqueValueGroup group in uniqueRenderer.Groups) - { - string[] fieldNames = uniqueRenderer.Fields; - List usedFields = new(); - foreach (string fieldName in fieldNames) - { - if (fields.TryGetValue(fieldName, out FieldDescription? headingField)) - { - usedFields.Add(headingField.Name); - } - } - - // loop through all values in groups to see if any have met conditions that result in a different color - foreach (CIMUniqueValueClass groupClass in group.Classes) - { - bool groupConditionsMet = true; - foreach (CIMUniqueValue value in groupClass.Values) - { - // all field values have to match the row values - for (int i = 0; i < usedFields.Count; i++) - { - string groupValue = value.FieldValues[i].Replace("", ""); - object? rowValue = row[usedFields[i]]; - - (string newRowValue, string newGroupValue) = MakeValuesComparable(rowValue, groupValue); - if (newGroupValue != newRowValue) - { - groupConditionsMet = false; - break; - } - } - } - - // set the group color to class symbol color if conditions are met - if (groupConditionsMet) - { - if (groupClass.Symbol is null) - { - color = RbgToInt(255, 255, 255, 255); - return false; - } - if (!TryGetSymbolColor(groupClass.Symbol.Symbol, out color)) - { - return false; - } - } - } - } - - return true; - } - - /// - /// Make comparable the Label string of a UniqueValueRenderer (groupValue), and a Feature Attribute value (rowValue) - /// - /// - /// - private (string, string) MakeValuesComparable(object? rowValue, string groupValue) - { - string newGroupValue = groupValue; - string newRowValue = Convert.ToString(rowValue) ?? ""; - - // int, doubles are tricky to compare with strings, trimming both to 5 digits - if (rowValue is int or short or long) - { - newRowValue = newRowValue.Split(".")[0]; - newGroupValue = newGroupValue.Split(".")[0]; - } - else if (rowValue is double || rowValue is float) - { - newRowValue = string.Concat( - newRowValue.Split(".")[0], - ".", - newRowValue.Split(".")[^1].AsSpan(0, Math.Min(5, newRowValue.Split(".")[^1].Length)) - ); - newGroupValue = string.Concat( - newGroupValue.Split(".")[0], - ".", - newGroupValue.Split(".")[^1].AsSpan(0, Math.Min(5, newGroupValue.Split(".")[^1].Length)) - ); - } - - return (newRowValue, newGroupValue); - } - - private bool TryGetGraduatedRendererColor( - CIMClassBreaksRenderer graduatedRenderer, - Row row, - Dictionary fields, - out int color - ) - { - if (graduatedRenderer.DefaultSymbol is null) - { - color = RbgToInt(255, 255, 255, 255); - return false; - } - if (!TryGetSymbolColor(graduatedRenderer.DefaultSymbol.Symbol, out color)) // get default color - { - return false; - } - - string? usedField = null; - if (fields.TryGetValue(graduatedRenderer.Field, out FieldDescription? field)) - { - usedField = field.Name; - } - - List reversedBreaks = new(graduatedRenderer.Breaks); - reversedBreaks.Reverse(); - foreach (var rBreak in reversedBreaks) - { - // keep looping until the last matching condition - if (Convert.ToDouble(row[usedField]) <= rBreak.UpperBound) - { - if (!TryGetSymbolColor(rBreak.Symbol.Symbol, out color)) // get default color - { - return false; - } - } - } - - return true; - } - - // Tries to retrieve the feature layer color by renderer and row, or a default color of -1 - private int GetLayerColorByRendererAndRow(CIMRenderer renderer, Row row, Dictionary fields) - { - // default color to white. this will be used if the renderer is not supported. - int color = -1; - - // get color depending on renderer type - switch (renderer) - { - case CIMSimpleRenderer simpleRenderer: - if (!TryGetSymbolColor(simpleRenderer.Symbol.Symbol, out color)) - { - // POC: report CONVERTED WITH WARNING when implemented - } - break; - - // unique renderers have groups of conditions that may affect the color of a feature - // resulting in a different color than the default renderer symbol color - case CIMUniqueValueRenderer uniqueRenderer: - if (!TryGetUniqueRendererColor(uniqueRenderer, row, fields, out color)) // get default color - { - // POC: report CONVERTED WITH WARNING when implemented - } - break; - - case CIMClassBreaksRenderer graduatedRenderer: - if (!TryGetGraduatedRendererColor(graduatedRenderer, row, fields, out color)) // get default color - { - // POC: report CONVERTED WITH WARNING when implemented - } - break; - - default: - // POC: report CONVERTED WITH WARNING when implemented, unsupported renderer e.g. CIMProportionalRenderer - break; - } - - return color; - } } diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISColorUnpacker.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISColorUnpacker.cs new file mode 100644 index 000000000..06d700ae1 --- /dev/null +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISColorUnpacker.cs @@ -0,0 +1,460 @@ +using ArcGIS.Desktop.Mapping; +using Speckle.Sdk.Models.Proxies; + +namespace Speckle.Connectors.ArcGIS.HostApp; + +public class ArcGISColorUnpacker +{ + /// + /// Cache of all color proxies for converted features. Key is the Color proxy argb value. + /// + public Dictionary ColorProxyCache { get; } = new(); + + /// + /// Stores the current renderer (determined by mapMember) + /// + private AC.CIM.CIMRenderer? StoredRenderer { get; set; } + + /// + /// Stores the current renderer (determined by tin mapmember) + /// + private AC.CIM.CIMTinRenderer? StoredTinRenderer { get; set; } + + /// + /// Stores the used renderer fields from the layer + /// + private List StoredRendererFields { get; set; } + + /// + /// Stores an already processed color for current mapMember, to dbe used by all mapMember objects. Only applies to simple type renderers + /// + private int? StoredColor { get; set; } + + /// + /// Stores a feature layer renderer to be used by in , any fields used by the renderer from the layer, and resets the and + /// + /// + /// Must be called on MCT. + public void StoreRendererAndFields(ADM.FeatureLayer featureLayer) + { + // field names are unique, but often their alias is used instead by renderer headings + // so we are storing both names and alias in this dictionary for fast lookup + // POC: adding aliases are not optimal, because they do not need to be unique && they can be the same as the name of another field + Dictionary layerFieldDictionary = new(); + foreach (ADM.FieldDescription field in featureLayer.GetFieldDescriptions()) + { + layerFieldDictionary.TryAdd(field.Name, field.Name); + layerFieldDictionary.TryAdd(field.Alias, field.Name); + } + + // clear stored values + StoredRendererFields = new(); + StoredColor = null; + StoredRenderer = null; + + AC.CIM.CIMRenderer layerRenderer = featureLayer.GetRenderer(); + List fields = new(); + bool isSupported = false; + switch (layerRenderer) + { + case AC.CIM.CIMSimpleRenderer: + isSupported = true; + break; + case AC.CIM.CIMUniqueValueRenderer uniqueValueRenderer: + isSupported = true; + fields = uniqueValueRenderer.Fields.ToList(); + break; + case AC.CIM.CIMClassBreaksRenderer classBreaksRenderer: + isSupported = true; + fields.Add(classBreaksRenderer.Field); + break; + default: + // TODO: log error here that a renderer is unsupported + break; + } + + if (isSupported) + { + StoredRenderer = layerRenderer; + foreach (string field in fields) + { + if (layerFieldDictionary.TryGetValue(field, out string? fieldName)) + { + StoredRendererFields.Add(fieldName); + } + } + } + } + + /// + /// Stores a las layer renderer to be used by in + /// + /// + /// Must be called on MCT. + public void StoreRenderer(ADM.LasDatasetLayer lasLayer) + { + // clear stored values + StoredTinRenderer = null; + + // POC: not sure why we are only using the first renderer here + AC.CIM.CIMTinRenderer layerRenderer = lasLayer.GetRenderers()[0]; + bool isSupported = false; + switch (layerRenderer) + { + case AC.CIM.CIMTinUniqueValueRenderer: + isSupported = true; + break; + default: + // TODO: log error here that a renderer is unsupported + break; + } + + if (isSupported) + { + StoredTinRenderer = layerRenderer; + } + } + + /// + /// Processes a las layer's point color by the stored , and stores the point's id and color proxy to the . + /// POC: logic probably can be combined with ProcessFeatureLayerColor. + /// + /// + public void ProcessLasLayerColor(ACD.Analyst3D.LasPoint point, string pointApplicationId) + { + // get the color from the renderer and point + AC.CIM.CIMColor? color; + switch (StoredTinRenderer) + { + case AC.CIM.CIMTinUniqueValueRenderer uniqueValueRenderer: + color = GetPointColorByUniqueValueRenderer(uniqueValueRenderer, point); + break; + + default: + return; + } + + // get or create the color proxy for the point + int argb = CIMColorToInt(color ?? point.RGBColor); + AddObjectIdToColorProxyCache(pointApplicationId, argb); + } + + // Retrieves the las point color from a unique value renderer + // unique renderers have groups of conditions that may affect the color of a feature + // resulting in a different color than the default renderer symbol color + private AC.CIM.CIMColor? GetPointColorByUniqueValueRenderer( + AC.CIM.CIMTinUniqueValueRenderer renderer, + ACD.Analyst3D.LasPoint point + ) + { + foreach (AC.CIM.CIMUniqueValueGroup group in renderer.Groups) + { + foreach (AC.CIM.CIMUniqueValueClass groupClass in group.Classes) + { + foreach (AC.CIM.CIMUniqueValue value in groupClass.Values) + { + // all field values have to match the row values + for (int i = 0; i < value.FieldValues.Length; i++) + { + string groupValue = value.FieldValues[i].Replace("", ""); + object? pointValue = point.ClassCode; + + if (ValuesAreEqual(groupValue, pointValue)) + { + return groupClass.Symbol.Symbol.GetColor(); + } + } + } + } + } + + return null; + } + + /// + /// Processes a feature layer's row color by the stored , and stores the row's id and color proxy to the . + /// + /// + /// + /// + public void ProcessFeatureLayerColor(ACD.Row row, string rowApplicationId) + { + // if stored color is not null, this means the renderer was a simple renderer that applies to the entire layer, and was already created. + // just add the row application id to the color proxy. + if (StoredColor is int existingColorProxyId) + { + AddObjectIdToColorProxyCache(rowApplicationId, existingColorProxyId); + } + + // get the color from the renderer and row + AC.CIM.CIMColor? color = null; + switch (StoredRenderer) + { + // simple renderers do not rely on fields, so the color can be retrieved from the renderer directly + case AC.CIM.CIMSimpleRenderer simpleRenderer: + color = simpleRenderer.Symbol.Symbol.GetColor(); + break; + + case AC.CIM.CIMUniqueValueRenderer uniqueValueRenderer: + color = GetRowColorByUniqueValueRenderer(uniqueValueRenderer, row); + break; + + case AC.CIM.CIMClassBreaksRenderer classBreaksRenderer: + color = GetRowColorByClassBreaksRenderer(classBreaksRenderer, row); + break; + } + + if (color is null) + { + // TODO: log error or throw exception that color could not be retrieved + return; + } + + // get or create the color proxy for the row + int argb = CIMColorToInt(color); + AddObjectIdToColorProxyCache(rowApplicationId, argb); + + // store color if from simple renderer + if (StoredRenderer is AC.CIM.CIMSimpleRenderer) + { + StoredColor = argb; + } + } + + // Retrieves the row color from a class breaks renderer + // unique renderers have groups of conditions that may affect the color of a feature + // resulting in a different color than the default renderer symbol color + private AC.CIM.CIMColor? GetRowColorByClassBreaksRenderer(AC.CIM.CIMClassBreaksRenderer renderer, ACD.Row row) + { + AC.CIM.CIMColor? color = null; + + // get the default symbol color + if (renderer.DefaultSymbol?.Symbol.GetColor() is AC.CIM.CIMColor defaultColor) + { + color = defaultColor; + } + + // get the first stored field, since this renderer should only have 1 field + double storedFieldValue = Convert.ToDouble(row[StoredRendererFields.First()]); + + List reversedBreaks = new(renderer.Breaks); + reversedBreaks.Reverse(); + foreach (var rBreak in reversedBreaks) + { + // keep looping until the last matching condition + if (storedFieldValue <= rBreak.UpperBound) + { + if (rBreak.Symbol.Symbol.GetColor() is AC.CIM.CIMColor breakColor) + { + color = breakColor; + } + else + { + // TODO: log error here, could not retrieve break color from symbol + } + } + } + + return color; + } + + // Retrieves the row color from a unique value renderer + // unique renderers have groups of conditions that may affect the color of a feature + // resulting in a different color than the default renderer symbol color + private AC.CIM.CIMColor? GetRowColorByUniqueValueRenderer(AC.CIM.CIMUniqueValueRenderer renderer, ACD.Row row) + { + AC.CIM.CIMColor? color = null; + + // get the default symbol color + if (renderer.DefaultSymbol?.Symbol.GetColor() is AC.CIM.CIMColor defaultColor) + { + color = defaultColor; + } + + // note: usually there is only 1 group + foreach (AC.CIM.CIMUniqueValueGroup group in renderer.Groups) + { + // loop through all values in groups to see if any have met conditions that result in a different color + foreach (AC.CIM.CIMUniqueValueClass groupClass in group.Classes) + { + bool groupConditionsMet = true; + foreach (AC.CIM.CIMUniqueValue value in groupClass.Values) + { + // all field values have to match the row values + for (int i = 0; i < StoredRendererFields.Count; i++) + { + string groupValue = value.FieldValues[i]; + object? rowValue = row[StoredRendererFields[i]]; + + if (!ValuesAreEqual(groupValue, rowValue)) + { + groupConditionsMet = false; + break; + } + } + } + + // set the group color to class symbol color if conditions are met + if (groupConditionsMet) + { + if (groupClass.Symbol.Symbol.GetColor() is AC.CIM.CIMColor groupColor) + { + color = groupColor; + } + else + { + // TODO: log error here, could not retrieve group color from symbol + } + } + } + } + + return color; + } + + /// + /// Compares the label string of a UniqueValueRenderer (groupValue), and an object value (row, las point), to determine if they are equal + /// + /// + /// + private bool ValuesAreEqual(string groupValue, object? objectValue) + { + switch (objectValue) + { + case int: + case short: + case long: + case byte: + string objectValueString = Convert.ToString(objectValue) ?? ""; + return groupValue.Equals(objectValueString); + + case string: + return groupValue.Equals(objectValue); + + // POC: these are tricky to compare with the label strings accurately, so will trim both values to 5 decimal places. + case double d: + return double.TryParse(groupValue, out double groupDouble) && groupDouble - d < 0.000001; + case float f: + return float.TryParse(groupValue, out float groupFloat) && groupFloat - f < 0.000001; + + default: + return false; + } + } + + private void AddObjectIdToColorProxyCache(string objectId, int argb) + { + if (ColorProxyCache.TryGetValue(argb, out ColorProxy? colorProxy)) + { + colorProxy.objects.Add(objectId); + } + else + { + ColorProxy newColorProxy = + new() + { + name = argb.ToString(), + objects = new() { objectId }, + value = argb, + applicationId = argb.ToString() + }; + + ColorProxyCache.Add(argb, newColorProxy); + } + } + + private int ArgbToInt(int a, int r, int g, int b) + { + return (a << 24) | (r << 16) | (g << 8) | b; + } + + // Gets the argb int from a CIMColor + // Defaults to assuming CIMColor.Values represent the red, green, and blue channels. + private int CIMColorToInt(AC.CIM.CIMColor color) + { + switch (color) + { + case AC.CIM.CIMHSVColor hsv: + (float hsvR, float hsvG, float hsvB) = RgbFromHsv(hsv.H, hsv.S, hsv.V); + return ArgbToInt( + (int)Math.Round(hsv.Alpha), + (int)Math.Round(hsvR * 255), + (int)Math.Round(hsvG * 255), + (int)Math.Round(hsvB * 255) + ); + + case AC.CIM.CIMCMYKColor cmyk: + float k = cmyk.K; + int cmykR = Convert.ToInt32(255 * (1 - cmyk.C) * (1 - k)); + int cmykG = Convert.ToInt32(255 * (1 - cmyk.M) * (1 - k)); + int cmykB = Convert.ToInt32(255 * (1 - cmyk.Y) * (1 - k)); + return ArgbToInt((int)Math.Round(cmyk.Alpha), cmykR, cmykG, cmykB); + + default: + return ArgbToInt( + (int)Math.Round(color.Alpha), + (int)Math.Round(color.Values[0]), + (int)Math.Round(color.Values[1]), + (int)Math.Round(color.Values[2]) + ); + } + } + + private (float, float, float) RgbFromHsv(float hue, float saturation, float value) + { + // Translates HSV color to RGB color + // H: 0.0 - 360.0, S: 0.0 - 100.0, V: 0.0 - 100.0 + // R, G, B: 0.0 - 1.0 + + float c = (value / 100) * (saturation / 100); + float x = c * (1 - Math.Abs(((hue / 60) % 2) - 1)); + float m = (value / 100) - c; + + float r = 0; + float g = 0; + float b = 0; + + if (hue >= 0 && hue < 60) + { + r = c; + g = x; + b = 0; + } + else if (hue >= 60 && hue < 120) + { + r = x; + g = c; + b = 0; + } + else if (hue >= 120 && hue < 180) + { + r = 0; + g = c; + b = x; + } + else if (hue >= 180 && hue < 240) + { + r = 0; + g = x; + b = c; + } + else if (hue >= 240 && hue < 300) + { + r = x; + g = 0; + b = c; + } + else if (hue >= 300 && hue < 360) + { + r = c; + g = 0; + b = x; + } + + r += m; + g += m; + b += m; + + return (r, g, b); + } +} diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISLayerUnpacker.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISLayerUnpacker.cs new file mode 100644 index 000000000..b8955f895 --- /dev/null +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISLayerUnpacker.cs @@ -0,0 +1,97 @@ +using Speckle.Connectors.ArcGIS.HostApp.Extensions; +using Speckle.Sdk.Models.Collections; + +namespace Speckle.Connectors.ArcGIS.HostApp; + +public class ArcGISLayerUnpacker +{ + /// + /// Cache of all collections created by unpacked Layer MapMembers. Key is the Speckle applicationId (Layer URI). + /// + public Dictionary CollectionCache { get; } = new(); + + /// + /// Mapmembers can be layers containing objects, or LayerContainers containing other layers. + /// Unpacks selected mapMembers and creates their corresponding collection on the root collection. + /// + /// + /// + /// List of layers containing objects. + /// Thrown when this method is *not* called on the MCT, because this method accesses mapmember fields + public async Task> UnpackSelectionAsync( + IEnumerable mapMembers, + Collection parentCollection, + List? objects = null + ) + { + if (objects is null) + { + objects = new(); + } + + foreach (ADM.MapMember mapMember in mapMembers) + { + switch (mapMember) + { + case ADM.ILayerContainer container: + Collection containerCollection = CreateAndCacheMapMemberCollection(mapMember, true); + parentCollection.elements.Add(containerCollection); + + await UnpackSelectionAsync(container.Layers, containerCollection, objects).ConfigureAwait(false); + break; + + default: + if (!(objects.Contains(mapMember))) + { + Collection collection = CreateAndCacheMapMemberCollection(mapMember); + parentCollection.elements.Add(collection); + objects.Add(mapMember); + } + break; + } + } + + return objects; + } + + private Collection CreateAndCacheMapMemberCollection(ADM.MapMember mapMember, bool isLayerContainer = false) + { + string mapMemberApplicationId = mapMember.GetSpeckleApplicationId(); + Collection collection = + new() + { + name = mapMember.Name, + applicationId = mapMemberApplicationId, + ["type"] = mapMember.GetType().Name + }; + + switch (mapMember) + { + case ADM.IDisplayTable displayTable: // get fields from layers that implement IDisplayTable, eg FeatureLayer or StandaloneTable + Dictionary? fields = displayTable + .GetFieldDescriptions() + .ToDictionary(field => field.Name, field => field.Type.ToString()); + collection["fields"] = fields; + if (mapMember is ADM.BasicFeatureLayer basicFeatureLayer) + { + collection["shapeType"] = basicFeatureLayer.ShapeType.ToString(); + } + break; + + case ADM.Layer layer: + collection["mapLayerType"] = layer.MapLayerType.ToString(); + break; + + case ADM.ILayerContainer: + default: + break; + } + + if (!isLayerContainer) // do not cache layer containers, since these won't contain any objects + { + CollectionCache.Add(mapMemberApplicationId, collection); + } + + return collection; + } +} diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/Extensions/SpeckleApplicationIdExtensions.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/Extensions/SpeckleApplicationIdExtensions.cs new file mode 100644 index 000000000..8a796234e --- /dev/null +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/Extensions/SpeckleApplicationIdExtensions.cs @@ -0,0 +1,31 @@ +using ArcGIS.Core.Data.Raster; + +namespace Speckle.Connectors.ArcGIS.HostApp.Extensions; + +public static class SpeckleApplicationIdExtensions +{ + /// + /// Retrieves the Speckle application id for map members + /// + public static string GetSpeckleApplicationId(this ADM.MapMember mapMember) => mapMember.URI; + + /// + /// Constructs the Speckle application id for Features as a concatenation of the layer URI (applicationId) + /// and the row OID (index of row in layer). + /// + /// Throws when this is *not* called on MCT. Use QueuedTask.Run. + public static string GetSpeckleApplicationId(this ACD.Row row, string layerApplicationId) => + $"{layerApplicationId}_{row.GetObjectID()}"; + + /// + /// Constructs the Speckle application id for Raster as a concatenation of the layer URI (applicationId) and 0-index + /// + public static string GetSpeckleApplicationId(this Raster _, string layerApplicationId) => $"{layerApplicationId}_0"; + + /// + /// Constructs the Speckle application id for LasDatasets as a concatenation of the layer URI (applicationId) + /// and point OID. + /// + public static string GetSpeckleApplicationId(this ACD.Analyst3D.LasPoint point, string layerApplicationId) => + $"{layerApplicationId}_{point.PointID}"; +} diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/ArcGISHostObjectBuilder.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/ArcGISHostObjectBuilder.cs index e74b27684..06edc2f86 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/ArcGISHostObjectBuilder.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/ArcGISHostObjectBuilder.cs @@ -11,7 +11,7 @@ using Speckle.Converters.ArcGIS3; using Speckle.Converters.ArcGIS3.Utils; using Speckle.Converters.Common; -using Speckle.Objects.GIS; +using Speckle.Objects.Data; using Speckle.Objects.Other; using Speckle.Sdk; using Speckle.Sdk.Models; @@ -19,7 +19,6 @@ using Speckle.Sdk.Models.GraphTraversal; using Speckle.Sdk.Models.Instances; using Speckle.Sdk.Models.Proxies; -using RasterLayer = Speckle.Objects.GIS.RasterLayer; namespace Speckle.Connectors.ArcGIS.Operations.Receive; @@ -29,7 +28,6 @@ public class ArcGISHostObjectBuilder : IHostObjectBuilder private readonly IFeatureClassUtils _featureClassUtils; private readonly ILocalToGlobalUnpacker _localToGlobalUnpacker; private readonly LocalToGlobalConverterUtils _localToGlobalConverterUtils; - private readonly ICrsUtils _crsUtils; // POC: figure out the correct scope to only initialize on Receive private readonly IConverterSettingsStore _settingsStore; @@ -42,7 +40,6 @@ public ArcGISHostObjectBuilder( IFeatureClassUtils featureClassUtils, ILocalToGlobalUnpacker localToGlobalUnpacker, LocalToGlobalConverterUtils localToGlobalConverterUtils, - ICrsUtils crsUtils, GraphTraversal traverseFunction, ArcGISColorManager colorManager ) @@ -54,7 +51,6 @@ ArcGISColorManager colorManager _localToGlobalConverterUtils = localToGlobalConverterUtils; _traverseFunction = traverseFunction; _colorManager = colorManager; - _crsUtils = crsUtils; } public HostObjectBuilderResult Build( @@ -103,10 +99,15 @@ CancellationToken cancellationToken try { obj = _localToGlobalConverterUtils.TransformObjects(objectToConvert.AtomicObject, objectToConvert.Matrix); - object? conversionResult = obj is GisNonGeometricFeature ? null : _converter.Convert(obj); + object? conversionResult = await QueuedTask.Run(() => _converter.Convert(obj)).ConfigureAwait(false); string nestedLayerPath = $"{string.Join("\\", path)}"; - if (objectToConvert.TraversalContext.Parent?.Current is not VectorLayer) + + if (obj is ArcgisObject gisObj) + { + nestedLayerPath += $"\\{gisObj.name}"; + } + else { nestedLayerPath += $"\\{obj.speckle_type.Split(".")[^1]}"; // add sub-layer by speckleType, for non-GIS objects } @@ -233,10 +234,6 @@ private IReadOnlyCollection GetObjectsToConvert(Base rootObjec // keep GISlayers in the list, because they are still needed to extract CRS of the commit (code below) List objectsToConvertTc = _traverseFunction.Traverse(rootObject).ToList(); - // get CRS from any present VectorLayer - Base? vLayer = objectsToConvertTc.FirstOrDefault(x => x.Current is VectorLayer)?.Current; - using var crs = _crsUtils.FindSetCrsDataOnReceive(vLayer); // TODO help - // now filter the objects objectsToConvertTc = objectsToConvertTc.Where(ctx => ctx.Current is not Collection).ToList(); @@ -397,17 +394,4 @@ private static string[] GetLayerPath(TraversalContext context) var originalPath = reverseOrderPath.Reverse().ToArray(); return originalPath.Where(x => !string.IsNullOrEmpty(x)).ToArray(); } - - [Pure] - private static bool HasGISParent(TraversalContext context) - { - List gisLayers = context.GetAscendants().Where(IsGISType).Where(obj => obj != context.Current).ToList(); - return gisLayers.Count > 0; - } - - [Pure] - private static bool IsGISType(Base obj) - { - return obj is RasterLayer or VectorLayer; - } } diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Send/ArcGISRootObjectBuilder.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Send/ArcGISRootObjectBuilder.cs index b0c3456d1..c5c3ca855 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Send/ArcGISRootObjectBuilder.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Send/ArcGISRootObjectBuilder.cs @@ -1,7 +1,9 @@ -using System.Diagnostics; -using ArcGIS.Desktop.Mapping; +using ArcGIS.Core.Data.Raster; +using ArcGIS.Core.Geometry; +using ArcGIS.Desktop.Framework.Threading.Tasks; using Microsoft.Extensions.Logging; using Speckle.Connectors.ArcGIS.HostApp; +using Speckle.Connectors.ArcGIS.HostApp.Extensions; using Speckle.Connectors.ArcGIS.Utils; using Speckle.Connectors.Common.Builders; using Speckle.Connectors.Common.Caching; @@ -10,51 +12,50 @@ using Speckle.Connectors.Common.Operations; using Speckle.Converters.ArcGIS3; using Speckle.Converters.Common; -using Speckle.Objects.GIS; using Speckle.Sdk; using Speckle.Sdk.Logging; using Speckle.Sdk.Models; using Speckle.Sdk.Models.Collections; -using Speckle.Sdk.Models.Proxies; namespace Speckle.Connectors.ArcGis.Operations.Send; /// /// Stateless builder object to turn an ISendFilter into a object /// -public class ArcGISRootObjectBuilder : IRootObjectBuilder +public class ArcGISRootObjectBuilder : IRootObjectBuilder { private readonly IRootToSpeckleConverter _rootToSpeckleConverter; private readonly ISendConversionCache _sendConversionCache; - private readonly ArcGISColorManager _colorManager; + private readonly ArcGISLayerUnpacker _layerUnpacker; + private readonly ArcGISColorUnpacker _colorUnpacker; private readonly IConverterSettingsStore _converterSettings; - private readonly MapMembersUtils _mapMemberUtils; private readonly ILogger _logger; private readonly ISdkActivityFactory _activityFactory; + private readonly MapMembersUtils _mapMemberUtils; public ArcGISRootObjectBuilder( ISendConversionCache sendConversionCache, - ArcGISColorManager colorManager, + ArcGISLayerUnpacker layerUnpacker, + ArcGISColorUnpacker colorUnpacker, IConverterSettingsStore converterSettings, IRootToSpeckleConverter rootToSpeckleConverter, - MapMembersUtils mapMemberUtils, ILogger logger, - ISdkActivityFactory activityFactory + ISdkActivityFactory activityFactory, + MapMembersUtils mapMemberUtils ) { _sendConversionCache = sendConversionCache; - _colorManager = colorManager; + _layerUnpacker = layerUnpacker; + _colorUnpacker = colorUnpacker; _converterSettings = converterSettings; _rootToSpeckleConverter = rootToSpeckleConverter; - _mapMemberUtils = mapMemberUtils; _logger = logger; _activityFactory = activityFactory; + _mapMemberUtils = mapMemberUtils; } -#pragma warning disable CA1506 - public RootObjectBuilderResult Build( -#pragma warning restore CA1506 - IReadOnlyList objects, + public async Task Build( + IReadOnlyList layers, SendInfo sendInfo, IProgress onOperationProgressed ) @@ -62,122 +63,122 @@ IProgress onOperationProgressed // TODO: add a warning if Geographic CRS is set // "Data has been sent in the units 'degrees'. It is advisable to set the project CRS to Projected type (e.g. EPSG:32631) to be able to receive geometry correctly in CAD/BIM software" - int count = 0; - Collection rootObjectCollection = new() { name = MapView.Active.Map.Name }; //TODO: Collections - rootObjectCollection["units"] = _converterSettings.Current.SpeckleUnits; + // 0 - Create Root collection and attach CRS properties + // CRS properties are useful for data based workflows coming out of gis applications + SpatialReference sr = _converterSettings.Current.ActiveCRSoffsetRotation.SpatialReference; + Dictionary spatialReference = + new() + { + ["name"] = sr.Name, + ["unit"] = sr.Unit.Name, + ["wkid"] = sr.Wkid, + ["wkt"] = sr.Wkt, + }; - List results = new(objects.Count); - var cacheHitCount = 0; - List<(ILayerContainer, Collection)> nestedGroups = new(); + Dictionary crs = + new() + { + ["trueNorthRadians"] = _converterSettings.Current.ActiveCRSoffsetRotation.TrueNorthRadians, + ["latOffset"] = _converterSettings.Current.ActiveCRSoffsetRotation.LatOffset, + ["lonOffset"] = _converterSettings.Current.ActiveCRSoffsetRotation.LonOffset, + ["spatialReference"] = spatialReference + }; + + Collection rootCollection = + new() + { + name = ADM.MapView.Active.Map.Name, + ["units"] = _converterSettings.Current.SpeckleUnits, + ["crs"] = crs + }; - // reorder selected layers by Table of Content (TOC) order - List<(MapMember, int)> layersWithDisplayPriority = _mapMemberUtils.GetLayerDisplayPriority( - MapView.Active.Map, - objects - ); + // 1 - Unpack the selected mapmembers + // In Arcgis, mapmembers are collections of other mapmember or objects. + // We need to unpack the selected mapmembers into all leaf-level mapmembers (containing just objects) and build the root collection structure during unpacking. + // Mapmember dynamically attached properties are also added at this step. + List unpackedLayers; + ADM.Map map = ADM.MapView.Active.Map; + IEnumerable layersOrdered = _mapMemberUtils.GetMapMembersInOrder(map, layers); + using (var _ = _activityFactory.Start("Unpacking selection")) + { + unpackedLayers = await QueuedTask + .Run(() => _layerUnpacker.UnpackSelectionAsync(layersOrdered, rootCollection)) + .ConfigureAwait(false); + } + List results = new(unpackedLayers.Count); onOperationProgressed.Report(new("Converting", null)); - using (var __ = _activityFactory.Start("Converting objects")) + using (var convertingActivity = _activityFactory.Start("Converting objects")) { - foreach ((MapMember mapMember, _) in layersWithDisplayPriority) + int count = 0; + foreach (ADM.MapMember layer in unpackedLayers) { - using (var convertingActivity = _activityFactory.Start("Converting object")) - { - var collectionHost = rootObjectCollection; - string applicationId = mapMember.URI; - string sourceType = mapMember.GetType().Name; + ct.ThrowIfCancellationRequested(); + string layerApplicationId = layer.GetSpeckleApplicationId(); - Base converted; - try + try + { + // get the corresponding collection for this layer - we'll add all converted objects to the collection + if (_layerUnpacker.CollectionCache.TryGetValue(layerApplicationId, out Collection? layerCollection)) { - int groupCount = nestedGroups.Count; // bake here, because count will change in the loop - // if the layer is not a part of the group, reset groups - for (int i = 0; i < groupCount; i++) - { - if (nestedGroups.Count > 0 && !nestedGroups[0].Item1.Layers.Select(x => x.URI).Contains(applicationId)) - { - nestedGroups.RemoveAt(0); - } - else - { - // break at the first group, which contains current layer - break; - } - } + var status = Status.SUCCESS; + var sdkStatus = SdkActivityStatusCode.Ok; - // don't use cache for group layers - if ( - mapMember is not ILayerContainer - && _sendConversionCache.TryGetValue(sendInfo.ProjectId, applicationId, out ObjectReference? value) - ) - { - converted = value; - cacheHitCount++; - } - else + // TODO: check cache first to see if this layer was previously converted + /* + if (_sendConversionCache.TryGetValue( + sendInfo.ProjectId, + layerApplicationId, + out ObjectReference? value + )) { - if (mapMember is ILayerContainer group) - { - // group layer will always come before it's contained layers - // keep active group last in the list - converted = new Collection(); - nestedGroups.Insert(0, (group, (Collection)converted)); - } - else - { - converted = (Collection)_rootToSpeckleConverter.Convert(mapMember); - - // get units & Active CRS (for writing geometry coords) - converted["units"] = _converterSettings.Current.SpeckleUnits; - - var spatialRef = _converterSettings.Current.ActiveCRSoffsetRotation.SpatialReference; - converted["crs"] = new CRS - { - wkt = spatialRef.Wkt, - name = spatialRef.Name, - offset_y = Convert.ToSingle(_converterSettings.Current.ActiveCRSoffsetRotation.LatOffset), - offset_x = Convert.ToSingle(_converterSettings.Current.ActiveCRSoffsetRotation.LonOffset), - rotation = Convert.ToSingle(_converterSettings.Current.ActiveCRSoffsetRotation.TrueNorthRadians), - units_native = _converterSettings.Current.SpeckleUnits - }; - } - // other common properties for layers and groups - converted["name"] = mapMember.Name; - converted.applicationId = applicationId; } + */ - if ( - nestedGroups.Count == 0 - || nestedGroups.Count == 1 && nestedGroups[0].Item2.applicationId == applicationId - ) - { - // add to host if no groups, or current root group - collectionHost.elements.Add(converted); - } - else + switch (layer) { - // if we are adding a layer inside the group - var parentCollection = nestedGroups.FirstOrDefault(x => - x.Item1.Layers.Select(y => y.URI).Contains(applicationId) - ); - parentCollection.Item2.elements.Add(converted); + case ADM.FeatureLayer featureLayer: + List convertedFeatureLayerObjects = await QueuedTask + .Run(() => ConvertFeatureLayerObjectsAsync(featureLayer)) + .ConfigureAwait(false); + layerCollection.elements.AddRange(convertedFeatureLayerObjects); + break; + case ADM.RasterLayer rasterLayer: + List convertedRasterLayerObjects = await QueuedTask + .Run(() => ConvertRasterLayerObjectsAsync(rasterLayer)) + .ConfigureAwait(false); + layerCollection.elements.AddRange(convertedRasterLayerObjects); + break; + case ADM.LasDatasetLayer lasDatasetLayer: + List convertedLasDatasetObjects = await QueuedTask + .Run(() => ConvertLasDatasetLayerObjectsAsync(lasDatasetLayer)) + .ConfigureAwait(false); + layerCollection.elements.AddRange(convertedLasDatasetObjects); + break; + default: + status = Status.ERROR; + sdkStatus = SdkActivityStatusCode.Error; + break; } - - results.Add(new(Status.SUCCESS, applicationId, sourceType, converted)); - convertingActivity?.SetStatus(SdkActivityStatusCode.Ok); + results.Add(new(status, layerApplicationId, layer.GetType().Name, layerCollection)); + convertingActivity?.SetStatus(sdkStatus); } - catch (Exception ex) when (!ex.IsFatal()) + else { - _logger.LogSendConversionError(ex, sourceType); - results.Add(new(Status.ERROR, applicationId, sourceType, null, ex)); - convertingActivity?.SetStatus(SdkActivityStatusCode.Error); - convertingActivity?.RecordException(ex); + throw new SpeckleException($"No converted Collection found for layer {layerApplicationId}."); } } + catch (Exception ex) when (!ex.IsFatal()) + { + _logger.LogSendConversionError(ex, layer.GetType().Name); + results.Add(new(Status.ERROR, layerApplicationId, layer.GetType().Name, null, ex)); + convertingActivity?.SetStatus(SdkActivityStatusCode.Error); + convertingActivity?.RecordException(ex); + } - onOperationProgressed.Report(new("Converting", (double)++count / objects.Count)); + onOperationProgressed.Report(new("Converting", (double)++count / layers.Count)); } } @@ -186,15 +187,108 @@ mapMember is not ILayerContainer throw new SpeckleException("Failed to convert all objects."); // fail fast instead creating empty commit! It will appear as model card error with red color. } - // POC: Add Color Proxies - List colorProxies = _colorManager.UnpackColors(layersWithDisplayPriority); - rootObjectCollection[ProxyKeys.COLOR] = colorProxies; + // 3 - Add Color Proxies + rootCollection[ProxyKeys.COLOR] = _colorUnpacker.ColorProxyCache.Values.ToList(); + + return new RootObjectBuilderResult(rootCollection, results); + } + + private async Task> ConvertFeatureLayerObjectsAsync(ADM.FeatureLayer featureLayer) + { + string layerApplicationId = featureLayer.GetSpeckleApplicationId(); + List convertedObjects = new(); + await QueuedTask + .Run(() => + { + // store the layer renderer for color unpacking + _colorUnpacker.StoreRendererAndFields(featureLayer); + + // search the rows of the layer, where each row is treated like an object + // RowCursor is IDisposable but is not being correctly picked up by IDE warnings. + // This means we need to be carefully adding using statements based on the API documentation coming from each method/class + using (ACD.RowCursor rowCursor = featureLayer.Search()) + { + while (rowCursor.MoveNext()) + { + // Same IDisposable issue appears to happen on Row class too. Docs say it should always be disposed of manually by the caller. + using (ACD.Row row = rowCursor.Current) + { + // get application id. test for subtypes before defaulting to base type. + Base converted = _rootToSpeckleConverter.Convert(row); + string applicationId = row.GetSpeckleApplicationId(layerApplicationId); + converted.applicationId = applicationId; + + convertedObjects.Add(converted); + + // process the object color + _colorUnpacker.ProcessFeatureLayerColor(row, applicationId); + } + } + } + }) + .ConfigureAwait(false); + + return convertedObjects; + } + + // POC: raster colors are stored as mesh vertex colors in RasterToSpeckleConverter. Should probably move to color unpacker. + private async Task> ConvertRasterLayerObjectsAsync(ADM.RasterLayer rasterLayer) + { + string layerApplicationId = rasterLayer.GetSpeckleApplicationId(); + List convertedObjects = new(); + await QueuedTask + .Run(() => + { + Raster raster = rasterLayer.GetRaster(); + Base converted = _rootToSpeckleConverter.Convert(raster); + string applicationId = raster.GetSpeckleApplicationId(layerApplicationId); + converted.applicationId = applicationId; + convertedObjects.Add(converted); + }) + .ConfigureAwait(false); + + return convertedObjects; + } + + private async Task> ConvertLasDatasetLayerObjectsAsync(ADM.LasDatasetLayer lasDatasetLayer) + { + string layerApplicationId = lasDatasetLayer.GetSpeckleApplicationId(); + List convertedObjects = new(); + + try + { + await QueuedTask + .Run(() => + { + // store the layer renderer for color unpacking + _colorUnpacker.StoreRenderer(lasDatasetLayer); + + using ( + ACD.Analyst3D.LasPointCursor ptCursor = lasDatasetLayer.SearchPoints(new ACD.Analyst3D.LasPointFilter()) + ) + { + while (ptCursor.MoveNext()) + { + using (ACD.Analyst3D.LasPoint pt = ptCursor.Current) + { + Base converted = _rootToSpeckleConverter.Convert(pt); + string applicationId = pt.GetSpeckleApplicationId(layerApplicationId); + converted.applicationId = applicationId; + convertedObjects.Add(converted); - // POC: Log would be nice, or can be removed. - Debug.WriteLine( - $"Cache hit count {cacheHitCount} out of {objects.Count} ({(double)cacheHitCount / objects.Count})" - ); + // process the object color + _colorUnpacker.ProcessLasLayerColor(pt, applicationId); + } + } + } + }) + .ConfigureAwait(false); + } + catch (ACD.Exceptions.TinException ex) + { + throw new SpeckleException("3D analyst extension is not enabled for .las layer operations", ex); + } - return new RootObjectBuilderResult(rootObjectCollection, results); + return convertedObjects; } } diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Utils/MapMembersUtils.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Utils/MapMembersUtils.cs index f03092c5d..345660ea6 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Utils/MapMembersUtils.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Utils/MapMembersUtils.cs @@ -40,24 +40,22 @@ public List UnpackMapLayers(IEnumerable mapMembersToUnpack return mapMembers; } - // Gets the layer display priority for selected layers - public List<(MapMember, int)> GetLayerDisplayPriority(Map map, IReadOnlyList selectedMapMembers) + /// + /// Sorts the selected mapmembers into the same order as they appear in the Table of Contents (TOC) bar in the file. + /// This is a required step before unpacking layers, because depending on the user selection order, some children layers may appear before their container layer if both the container and children layers are selected. + /// + public IEnumerable GetMapMembersInOrder(Map map, IReadOnlyList selectedMapMembers) { // first get all map layers List allMapMembers = GetAllMapMembers(map); // recalculate selected layer priority from all map layers - List<(MapMember, int)> selectedLayers = new(); - int newCount = 0; foreach (MapMember mapMember in allMapMembers) { if (selectedMapMembers.Contains(mapMember)) { - selectedLayers.Add((mapMember, newCount)); - newCount++; + yield return mapMember; } } - - return selectedLayers; } } diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json index 9bff7e034..9eeb9e707 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json @@ -231,9 +231,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -241,8 +241,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -266,7 +266,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -298,18 +298,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -319,14 +319,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } }, "net6.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json index 0ef0820a3..13fe3f649 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -299,7 +299,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json index e6eb82f2f..268b73b4d 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -299,7 +299,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json index 676fdd7e6..c888a99ed 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -300,7 +300,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -338,18 +338,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json index 4d06cff7f..4572ffa2f 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json @@ -220,9 +220,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -230,8 +230,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -256,7 +256,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -294,18 +294,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -314,14 +314,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json index 979ac5336..32746a13e 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -309,7 +309,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -347,18 +347,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -368,14 +368,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json index a62536972..4ed55b592 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -309,7 +309,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -347,18 +347,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -368,14 +368,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json index d140ab4b2..c834b8881 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -309,7 +309,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -347,18 +347,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -368,14 +368,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json index 4a611a9d9..c9ab57947 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json @@ -229,9 +229,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -239,8 +239,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -266,7 +266,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -304,18 +304,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -324,14 +324,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json b/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json index 0b8e7659f..64e7c4d7a 100644 --- a/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json +++ b/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -292,7 +292,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "speckle.converters.etabs21": { @@ -336,18 +336,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -357,14 +357,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json b/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json index 77e42bfb8..df66c1844 100644 --- a/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json +++ b/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json @@ -220,9 +220,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -230,8 +230,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -248,7 +248,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "speckle.converters.etabs22": { @@ -292,18 +292,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -312,14 +312,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Properties/launchSettings.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Properties/launchSettings.json new file mode 100644 index 000000000..618204c00 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "Speckle.Connector.Navisworks2020": { + "commandName": "Executable", + "executablePath": "C:\\Program Files\\Autodesk\\Navisworks Manage 2020\\Roamer.exe", + "commandLineArgs": " -licensing AdLM" + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj new file mode 100644 index 000000000..5b663b2ce --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj @@ -0,0 +1,56 @@ + + + net48 + x64 + win-x64 + 512 + + v17 + 2020 + + true + $(DefineConstants);TRACE;NAVIS2020;NAVIS + + NextGen Speckle Connector for Autodesk Navisworks Manage + $(Authors) jonathon@speckle.systems + $(PackageTags) connector nwd nwc nwf navisworks manage + + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json new file mode 100644 index 000000000..a46dbcd5b --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json @@ -0,0 +1,386 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2020.0.0, )", + "resolved": "2020.0.0", + "contentHash": "biB2RR0HNxrbHD7zBZoJUhwzPwVE5IFg9l4/747bHOLRJC3FM5UtzdjGwvRZwfOlFyM4P26NYARSiCaxSNIBpg==" + }, + "Speckle.Objects": { + "type": "Direct", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui.webview": { + "type": "Project", + "dependencies": { + "Microsoft.Web.WebView2": "[1.0.1938.49, )", + "Speckle.Connectors.DUI": "[1.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "speckle.converters.navisworks2020": { + "type": "Project", + "dependencies": { + "Speckle.Connectors.DUI": "[1.0.0, )", + "Speckle.Converters.Common": "[1.0.0, )", + "Speckle.Navisworks.API": "[2020.0.0, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + } + }, + ".NETFramework,Version=v4.8/win-x64": { + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + } + } + } +} \ No newline at end of file diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Properties/launchSettings.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Properties/launchSettings.json new file mode 100644 index 000000000..4c3311c03 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "Speckle.Connector.Navisworks2021": { + "commandName": "Executable", + "executablePath": "C:\\Program Files\\Autodesk\\Navisworks Manage 2021\\Roamer.exe", + "commandLineArgs": " -licensing AdLM" + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj new file mode 100644 index 000000000..542d8fae2 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj @@ -0,0 +1,56 @@ + + + net48 + x64 + win-x64 + 512 + + v18 + 2021 + + true + $(DefineConstants);TRACE;NAVIS2021;NAVIS + + NextGen Speckle Connector for Autodesk Navisworks Manage + $(Authors) jonathon@speckle.systems + $(PackageTags) connector nwd nwc nwf navisworks manage + + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json new file mode 100644 index 000000000..f108a8e5e --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json @@ -0,0 +1,386 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2021.0.0, )", + "resolved": "2021.0.0", + "contentHash": "cY7sU8dxISfTQLinUIOki/azS+bIX28uEZQO4ijrq0eOUhJlKcKWS273kHPoL0+T0Xrkd+1OWj2YFa2PbHGgwQ==" + }, + "Speckle.Objects": { + "type": "Direct", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui.webview": { + "type": "Project", + "dependencies": { + "Microsoft.Web.WebView2": "[1.0.1938.49, )", + "Speckle.Connectors.DUI": "[1.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "speckle.converters.navisworks2021": { + "type": "Project", + "dependencies": { + "Speckle.Connectors.DUI": "[1.0.0, )", + "Speckle.Converters.Common": "[1.0.0, )", + "Speckle.Navisworks.API": "[2021.0.0, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + } + }, + ".NETFramework,Version=v4.8/win-x64": { + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + } + } + } +} \ No newline at end of file diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Properties/launchSettings.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Properties/launchSettings.json new file mode 100644 index 000000000..c8dd67e7d --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "Speckle.Connector.Navisworks2022": { + "commandName": "Executable", + "executablePath": "C:\\Program Files\\Autodesk\\Navisworks Manage 2022\\Roamer.exe", + "commandLineArgs": " -licensing AdLM" + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj new file mode 100644 index 000000000..72c3d9959 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj @@ -0,0 +1,57 @@ + + + + net48 + x64 + win-x64 + 512 + + v19 + 2022 + + true + $(DefineConstants);TRACE;NAVIS2022;NAVIS + + NextGen Speckle Connector for Autodesk Navisworks Manage + $(Authors) jonathon@speckle.systems + $(PackageTags) connector nwd nwc nwf navisworks manage + + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json new file mode 100644 index 000000000..db91385d3 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json @@ -0,0 +1,386 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2022.0.0, )", + "resolved": "2022.0.0", + "contentHash": "x0RW4Iqw8YHVK4ZiLEyLLfI5ffuRBR0KhEvmy9ZpT8SLNeDL/c6jn+7JWBVFUJPu+ObVnU+KqJjLdHmphN0lMQ==" + }, + "Speckle.Objects": { + "type": "Direct", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui.webview": { + "type": "Project", + "dependencies": { + "Microsoft.Web.WebView2": "[1.0.1938.49, )", + "Speckle.Connectors.DUI": "[1.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "speckle.converters.navisworks2022": { + "type": "Project", + "dependencies": { + "Speckle.Connectors.DUI": "[1.0.0, )", + "Speckle.Converters.Common": "[1.0.0, )", + "Speckle.Navisworks.API": "[2022.0.0, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + } + }, + ".NETFramework,Version=v4.8/win-x64": { + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + } + } + } +} \ No newline at end of file diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Properties/launchSettings.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Properties/launchSettings.json new file mode 100644 index 000000000..2c8b4363f --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "Speckle.Connector.Navisworks2023": { + "commandName": "Executable", + "executablePath": "C:\\Program Files\\Autodesk\\Navisworks Manage 2023\\Roamer.exe", + "commandLineArgs": " -licensing AdLM" + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj new file mode 100644 index 000000000..d093ac0bf --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj @@ -0,0 +1,59 @@ + + + + net48 + x64 + win-x64 + 512 + + v20 + 2023 + + true + $(DefineConstants);TRACE;NAVIS2023;NAVIS + + NextGen Speckle Connector for Autodesk Navisworks Manage + $(Authors) jonathon@speckle.systems + $(PackageTags) connector nwd nwc nwf navisworks manage + + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + Speckle.Connector.Navisworks + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json new file mode 100644 index 000000000..c4615aa8c --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json @@ -0,0 +1,386 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2023.0.0, )", + "resolved": "2023.0.0", + "contentHash": "+qRmcyLD3DpuSSwX2IbEwp0gJllbiKgv313PZfEfh8I2uvxf+5YNqDzY0OGOxWIdPKqaQmdUZ1ELzoDtucCWzA==" + }, + "Speckle.Objects": { + "type": "Direct", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui.webview": { + "type": "Project", + "dependencies": { + "Microsoft.Web.WebView2": "[1.0.1938.49, )", + "Speckle.Connectors.DUI": "[1.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "speckle.converters.navisworks2023": { + "type": "Project", + "dependencies": { + "Speckle.Connectors.DUI": "[1.0.0, )", + "Speckle.Converters.Common": "[1.0.0, )", + "Speckle.Navisworks.API": "[2023.0.0, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + } + }, + ".NETFramework,Version=v4.8/win-x64": { + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + } + } + } +} \ No newline at end of file diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Properties/launchSettings.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Properties/launchSettings.json new file mode 100644 index 000000000..32e5dc126 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "Speckle.Connector.Navisworks2024": { + "commandName": "Executable", + "executablePath": "C:\\Program Files\\Autodesk\\Navisworks Manage 2024\\Roamer.exe", + "commandLineArgs": " -licensing AdLM" + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj new file mode 100644 index 000000000..6b346613c --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj @@ -0,0 +1,58 @@ + + + + net48 + x64 + win-x64 + 512 + + v21 + 2024 + + true + $(DefineConstants);TRACE;NAVIS2024;NAVIS + + NextGen Speckle Connector for Autodesk Navisworks Manage + $(Authors) jonathon@speckle.systems + $(PackageTags) connector nwd nwc nwf navisworks manage + + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + Speckle.Connector.Navisworks + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json new file mode 100644 index 000000000..f1c34b879 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json @@ -0,0 +1,386 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2024.0.0, )", + "resolved": "2024.0.0", + "contentHash": "SnkvhcENMy3YLWbzy4lCweMuWdAbNzAtwvffFH2xVHmnm/2INnMGucYGazAHN496d6wgl9YRGa4qftgVsg7T7A==" + }, + "Speckle.Objects": { + "type": "Direct", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui.webview": { + "type": "Project", + "dependencies": { + "Microsoft.Web.WebView2": "[1.0.1938.49, )", + "Speckle.Connectors.DUI": "[1.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "speckle.converters.navisworks2024": { + "type": "Project", + "dependencies": { + "Speckle.Connectors.DUI": "[1.0.0, )", + "Speckle.Converters.Common": "[1.0.0, )", + "Speckle.Navisworks.API": "[2024.0.0, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + } + }, + ".NETFramework,Version=v4.8/win-x64": { + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "Microsoft.Web.WebView2": { + "type": "CentralTransitive", + "requested": "[1.0.1938.49, )", + "resolved": "1.0.1938.49", + "contentHash": "z8KnFnaTYzhA/ZnyRX0qGfS1NU5ZBJeClAH64F0fVDvdDJTvME7xl6zTJ0Jlfe1BtL3C0NH9xTy64shg2baKdw==" + } + } + } +} \ No newline at end of file diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Properties/launchSettings.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Properties/launchSettings.json new file mode 100644 index 000000000..3b8100b12 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "Speckle.Connector.Navisworks2025": { + "commandName": "Executable", + "executablePath": "C:\\Program Files\\Autodesk\\Navisworks Manage 2025\\Roamer.exe", + "commandLineArgs": " -licensing AdLM" + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj new file mode 100644 index 000000000..917a87414 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj @@ -0,0 +1,56 @@ + + + net48 + x64 + win-x64 + 512 + + v22 + 2025 + + true + $(DefineConstants);TRACE;NAVIS2025;NAVIS + + NextGen Speckle Connector for Autodesk Navisworks Manage + $(Authors) jonathon@speckle.systems + $(PackageTags) connector nwd nwc nwf navisworks manage + + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json new file mode 100644 index 000000000..9236264cf --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json @@ -0,0 +1,386 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "Microsoft.Web.WebView2": { + "type": "Direct", + "requested": "[1.0.2045.28, )", + "resolved": "1.0.2045.28", + "contentHash": "QDsR/HCNjzqYZrIuNLxyfmOIqVfMq1iGyoBR3OVVlFl4NZ12T8jRC0MNpOReKfgwtO5zh8g+eBYR6RAXFltcVA==" + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2025.0.0, )", + "resolved": "2025.0.0", + "contentHash": "+q2IObnUGqtC1O/ddy2p0HKm1eXRo7Yi80oD9VIWClidvGb3rVsXKZWBHiv4HwSn5JcOMSEt1cdSlRQLm8Ehjg==" + }, + "Speckle.Objects": { + "type": "Direct", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui.webview": { + "type": "Project", + "dependencies": { + "Microsoft.Web.WebView2": "[1.0.1938.49, )", + "Speckle.Connectors.DUI": "[1.0.0, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "speckle.converters.navisworks2025": { + "type": "Project", + "dependencies": { + "Speckle.Connectors.DUI": "[1.0.0, )", + "Speckle.Converters.Common": "[1.0.0, )", + "Speckle.Navisworks.API": "[2025.0.0, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + } + }, + ".NETFramework,Version=v4.8/win-x64": { + "Microsoft.Web.WebView2": { + "type": "Direct", + "requested": "[1.0.2045.28, )", + "resolved": "1.0.2045.28", + "contentHash": "QDsR/HCNjzqYZrIuNLxyfmOIqVfMq1iGyoBR3OVVlFl4NZ12T8jRC0MNpOReKfgwtO5zh8g+eBYR6RAXFltcVA==" + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + } + } + } +} \ No newline at end of file diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksBasicConnectorBinding.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksBasicConnectorBinding.cs new file mode 100644 index 000000000..62c0ffda0 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksBasicConnectorBinding.cs @@ -0,0 +1,78 @@ +using Speckle.Connector.Navisworks.HostApp; +using Speckle.Connectors.Common.Caching; +using Speckle.Connectors.DUI.Bindings; +using Speckle.Connectors.DUI.Bridge; +using Speckle.Connectors.DUI.Models; +using Speckle.Connectors.DUI.Models.Card; +using Speckle.Sdk; + +namespace Speckle.Connector.Navisworks.Bindings; + +public class NavisworksBasicConnectorBinding : IBasicConnectorBinding +{ + public string Name => "baseBinding"; + public IBrowserBridge Parent { get; } + public BasicConnectorBindingCommands Commands { get; } + + private readonly DocumentModelStore _store; + private readonly ISendConversionCache _sendConversionCache; + private readonly ISpeckleApplication _speckleApplication; + private readonly NavisworksDocumentEvents _documentEvents; + + public NavisworksBasicConnectorBinding( + IBrowserBridge parent, + DocumentModelStore store, + ISendConversionCache sendConversionCache, + ISpeckleApplication speckleApplication, + NavisworksDocumentEvents documentEvents + ) + { + Parent = parent; + _store = store; + _sendConversionCache = sendConversionCache; + _speckleApplication = speckleApplication; + _documentEvents = documentEvents; + Commands = new BasicConnectorBindingCommands(parent); + } + + public string GetSourceApplicationName() => _speckleApplication.Slug; + + public string GetSourceApplicationVersion() => _speckleApplication.HostApplicationVersion; + + public string GetConnectorVersion() => _speckleApplication.SpeckleVersion; + + public DocumentInfo? GetDocumentInfo() => + Parent + .RunOnMainThreadAsync( + () => + Task.FromResult( + NavisworksApp.ActiveDocument is null || NavisworksApp.ActiveDocument.Models.Count == 0 + ? null + : new DocumentInfo( + NavisworksApp.ActiveDocument.CurrentFileName, + NavisworksApp.ActiveDocument.Title, + NavisworksApp.ActiveDocument.GetHashCode().ToString() + ) + ) + ) + .Result; + + public DocumentModelStore GetDocumentState() => _store; + + public void AddModel(ModelCard model) => _store.AddModel(model); + + public void UpdateModel(ModelCard model) => _store.UpdateModel(model); + + public void RemoveModel(ModelCard model) => _store.RemoveModel(model); + + public Task HighlightModel(string modelCardId) => Task.CompletedTask; + + public async Task HighlightObjects(IReadOnlyList objectIds) => + await Parent + .RunOnMainThreadAsync(async () => + { + // TODO: Implement highlighting logic on main thread + await Task.CompletedTask.ConfigureAwait(false); + }) + .ConfigureAwait(false); +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSelectionBinding.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSelectionBinding.cs new file mode 100644 index 000000000..52389c16b --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSelectionBinding.cs @@ -0,0 +1,71 @@ +using Speckle.Connector.Navisworks.Services; +using Speckle.Connectors.DUI.Bindings; +using Speckle.Connectors.DUI.Bridge; + +namespace Speckle.Connector.Navisworks.Bindings; + +public class NavisworksSelectionBinding : ISelectionBinding +{ + private readonly IAppIdleManager _appIdleManager; + private readonly IElementSelectionService _selectionService; + private const string SELECTION_EVENT = "setSelection"; + public string Name { get; } = "selectionBinding"; + public IBrowserBridge Parent { get; } + + public NavisworksSelectionBinding( + IAppIdleManager idleManager, + IBrowserBridge parent, + IElementSelectionService selectionService + ) + { + _selectionService = selectionService; + _appIdleManager = idleManager; + Parent = parent; + + NavisworksApp.ActiveDocument.CurrentSelection.Changed += OnSelectionChange; + } + + private void OnSelectionChange(object? o, EventArgs eventArgs) => + _appIdleManager.SubscribeToIdle( + nameof(NavisworksSelectionBinding), + async () => await UpdateSelectionAsync().ConfigureAwait(false) + ); + + private void UpdateSelection() + { + SelectionInfo selInfo = GetSelection(); + Parent.Send(SELECTION_EVENT, selInfo); + } + + private async Task UpdateSelectionAsync() + { + var selInfo = await Parent + .RunOnMainThreadAsync(() => Task.FromResult(GetSelection())) + .ConfigureAwait(false); + + await Parent.Send(SELECTION_EVENT, selInfo).ConfigureAwait(false); + } + + public SelectionInfo GetSelection() + { + // Ensure there is an active document and a valid selection + var activeDocument = NavisworksApp.ActiveDocument; + if (activeDocument == null || activeDocument.CurrentSelection.SelectedItems.IsEmpty) + { + // Return an empty list if no valid selection exists + return new SelectionInfo([], "No selection available"); + } + + // Ensure only visible elements are processed by filtering using IsElementVisible + var selectedObjectsIds = new HashSet( + activeDocument + .CurrentSelection.SelectedItems.Where(_selectionService.IsVisible) // Exclude hidden elements + .Select(_selectionService.GetModelItemPath) // Resolve to index paths + ); + + return new SelectionInfo( + [.. selectedObjectsIds], + $"{selectedObjectsIds.Count} object{(selectedObjectsIds.Count != 1 ? "s" : "")}" + ); + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs new file mode 100644 index 000000000..8e5c15e3a --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs @@ -0,0 +1,194 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Speckle.Connector.Navisworks.Operations.Send.Settings; +using Speckle.Connector.Navisworks.Services; +using Speckle.Connectors.Common.Cancellation; +using Speckle.Connectors.Common.Operations; +using Speckle.Connectors.DUI.Bindings; +using Speckle.Connectors.DUI.Bridge; +using Speckle.Connectors.DUI.Exceptions; +using Speckle.Connectors.DUI.Logging; +using Speckle.Connectors.DUI.Models; +using Speckle.Connectors.DUI.Models.Card; +using Speckle.Connectors.DUI.Models.Card.SendFilter; +using Speckle.Connectors.DUI.Settings; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using Speckle.Sdk; +using Speckle.Sdk.Common; +using Speckle.Sdk.Logging; + +namespace Speckle.Connector.Navisworks.Bindings; + +public class NavisworksSendBinding : ISendBinding +{ + public string Name => "sendBinding"; + public IBrowserBridge Parent { get; } + + public SendBindingUICommands Commands { get; } + + private readonly DocumentModelStore _store; + private readonly IServiceProvider _serviceProvider; + private readonly List _sendFilters; + private readonly CancellationManager _cancellationManager; + private readonly IOperationProgressManager _operationProgressManager; + private readonly ILogger _logger; + private readonly ISpeckleApplication _speckleApplication; + private readonly ISdkActivityFactory _activityFactory; + private readonly INavisworksConversionSettingsFactory _conversionSettingsFactory; + private readonly ToSpeckleSettingsManagerNavisworks _toSpeckleSettingsManagerNavisworks; + private readonly IElementSelectionService _selectionService; + + public NavisworksSendBinding( + DocumentModelStore store, + IBrowserBridge parent, + IEnumerable sendFilters, + IServiceProvider serviceProvider, + CancellationManager cancellationManager, + IOperationProgressManager operationProgressManager, + ILogger logger, + ISpeckleApplication speckleApplication, + ISdkActivityFactory activityFactory, + INavisworksConversionSettingsFactory conversionSettingsFactory, + ToSpeckleSettingsManagerNavisworks toSpeckleSettingsManagerNavisworks, + IElementSelectionService selectionService + ) + { + Parent = parent; + Commands = new SendBindingUICommands(parent); + _store = store; + _serviceProvider = serviceProvider; + _sendFilters = sendFilters.ToList(); + _cancellationManager = cancellationManager; + _operationProgressManager = operationProgressManager; + _logger = logger; + _speckleApplication = speckleApplication; + _activityFactory = activityFactory; + _conversionSettingsFactory = conversionSettingsFactory; + _toSpeckleSettingsManagerNavisworks = toSpeckleSettingsManagerNavisworks; + _selectionService = selectionService; + SubscribeToNavisworksEvents(); + } + + private static void SubscribeToNavisworksEvents() { } + + public List GetSendFilters() => _sendFilters; + + public List GetSendSettings() => + [ + new VisualRepresentationSetting(RepresentationMode.Active), + new OriginModeSetting(OriginMode.ModelOrigin), + new IncludeInternalPropertiesSetting(false), + new ConvertHiddenElementsSetting(false), + ]; + + public async Task Send(string modelCardId) + { + using var activity = _activityFactory.Start(); + try + { + await Parent + .RunOnMainThreadAsync(async () => + { + var modelCard = GetModelCard(modelCardId); + + using var scope = _serviceProvider.CreateScope(); + + InitializeConverterSettings(scope, modelCard); + + CancellationToken token = _cancellationManager.InitCancellationTokenSource(modelCardId); + + var navisworksModelItems = GetNavisworksModelItems(modelCard); + + var sendResult = await ExecuteSendOperation(scope, modelCard, navisworksModelItems, token) + .ConfigureAwait(false); + + await Commands + .SetModelSendResult(modelCardId, sendResult.RootObjId, sendResult.ConversionResults) + .ConfigureAwait(false); + }) + .ConfigureAwait(false); + } + catch (OperationCanceledException) + { + // SWALLOW -> UI handles it immediately, so we do not need to handle anything for now! + // Idea for later -> when cancel called, create promise from UI to solve it later with this catch block. + // So have 3 state on UI -> Cancellation clicked -> Cancelling -> Cancelled + } + catch (Exception ex) when (!ex.IsFatal()) // UX reasons - we will report operation exceptions as model card error. We may change this later when we have more exception documentation + { + _logger.LogModelCardHandledError(ex); + await Commands.SetModelError(modelCardId, ex).ConfigureAwait(false); + } + } + + private SenderModelCard GetModelCard(string modelCardId) => + _store.GetModelById(modelCardId) is not SenderModelCard modelCard + ? throw new InvalidOperationException("No publish model card was found.") + : modelCard; + + private void InitializeConverterSettings(IServiceScope scope, SenderModelCard modelCard) => + scope + .ServiceProvider.GetRequiredService>() + .Initialize( + _conversionSettingsFactory.Create( + originMode: _toSpeckleSettingsManagerNavisworks.GetOriginMode(modelCard), + visualRepresentationMode: _toSpeckleSettingsManagerNavisworks.GetVisualRepresentationMode(modelCard), + convertHiddenElements: _toSpeckleSettingsManagerNavisworks.GetConvertHiddenElements(modelCard), + includeInternalProperties: _toSpeckleSettingsManagerNavisworks.GetIncludeInternalProperties(modelCard) + ) + ); + + private List GetNavisworksModelItems(SenderModelCard modelCard) + { + var selectedPaths = modelCard.SendFilter.NotNull().RefreshObjectIds(); + if (selectedPaths.Count == 0) + { + throw new SpeckleSendFilterException("No objects were found to convert. Please update your publish filter!"); + } + + var modelItems = modelCard + .SendFilter.NotNull() + .RefreshObjectIds() + .Select(_selectionService.GetModelItemFromPath) + .SelectMany(_selectionService.GetGeometryNodes) + .Where(_selectionService.IsVisible) + .ToList(); + + return modelItems.Count == 0 + ? throw new SpeckleSendFilterException("No objects were found to convert. Please update your publish filter!") + : modelItems; + } + + private async Task ExecuteSendOperation( + IServiceScope scope, + SenderModelCard modelCard, + List navisworksModelItems, + CancellationToken token + ) => + await scope + .ServiceProvider.GetRequiredService>() + .Execute( + navisworksModelItems, + modelCard.GetSendInfo(_speckleApplication.Slug), + _operationProgressManager.CreateOperationProgressEventHandler(Parent, modelCard.ModelCardId!, token), + token + ) + .ConfigureAwait(false); + + public void CancelSend(string modelCardId) => _cancellationManager.CancelOperation(modelCardId); + + /// + /// Cancels all outstanding send operations for the current document. + /// This method is called when the active document changes, to ensure + /// that any in-progress send operations are properly canceled before + /// the new document is loaded. + /// + public void CancelAllSendOperations() + { + foreach (var modelCardId in _store.GetSenders().Select(m => m.ModelCardId)) + { + CancelSend(modelCardId ?? string.Empty); + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/DependencyInjection/NavisworksConnectorServiceRegistration.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/DependencyInjection/NavisworksConnectorServiceRegistration.cs new file mode 100644 index 000000000..a1d398292 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/DependencyInjection/NavisworksConnectorServiceRegistration.cs @@ -0,0 +1,72 @@ +using Microsoft.Extensions.DependencyInjection; +using Speckle.Connector.Navisworks.Bindings; +using Speckle.Connector.Navisworks.HostApp; +using Speckle.Connector.Navisworks.Operations.Send; +using Speckle.Connector.Navisworks.Operations.Send.Filters; +using Speckle.Connector.Navisworks.Operations.Send.Settings; +using Speckle.Connector.Navisworks.Services; +using Speckle.Connectors.Common; +using Speckle.Connectors.Common.Builders; +using Speckle.Connectors.Common.Cancellation; +using Speckle.Connectors.Common.Operations; +using Speckle.Connectors.DUI; +using Speckle.Connectors.DUI.Bindings; +using Speckle.Connectors.DUI.Bridge; +using Speckle.Connectors.DUI.Models; +using Speckle.Connectors.DUI.Models.Card.SendFilter; +using Speckle.Connectors.DUI.WebView; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using Speckle.Sdk.Models.GraphTraversal; + +namespace Speckle.Connector.Navisworks.DependencyInjection; + +public static class NavisworksConnectorServiceRegistration +{ + public static void AddNavisworks(this IServiceCollection serviceCollection) + { + // Register Core functionality + serviceCollection.AddConnectorUtils(); + serviceCollection.AddDUI(); + serviceCollection.AddDUIView(); + + // Register bindings + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + + // Register Navisworks specific binding + serviceCollection.AddSingleton(sp => sp.GetRequiredService()); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + + // Conversion settings + serviceCollection.AddSingleton(); + serviceCollection.AddScoped< + IConverterSettingsStore, + ConverterSettingsStore + >(); + + serviceCollection.AddScoped(); + + // Sending operations + serviceCollection.AddScoped, NavisworksRootObjectBuilder>(); + serviceCollection.AddScoped>(); + serviceCollection.AddSingleton(DefaultTraversal.CreateTraversalFunc()); + serviceCollection.AddSingleton(); + + // Register Intercom/interop + serviceCollection.RegisterTopLevelExceptionHandler(); + serviceCollection.AddTransient(); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(sp => sp.GetRequiredService()); + serviceCollection.AddSingleton(); + + // register filters + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Extensions/ElementSelectionService.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Extensions/ElementSelectionService.cs new file mode 100644 index 000000000..4399b947a --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Extensions/ElementSelectionService.cs @@ -0,0 +1,23 @@ +using static Speckle.Converter.Navisworks.Helpers.ElementSelectionHelper; + +namespace Speckle.Connector.Navisworks.Services; + +public interface IElementSelectionService +{ + string GetModelItemPath(NAV.ModelItem modelItem); + NAV.ModelItem GetModelItemFromPath(string path); + bool IsVisible(NAV.ModelItem modelItem); + IReadOnlyCollection GetGeometryNodes(NAV.ModelItem modelItem); +} + +public class ElementSelectionService : IElementSelectionService +{ + public string GetModelItemPath(NAV.ModelItem modelItem) => ResolveModelItemToIndexPath(modelItem); + + public NAV.ModelItem GetModelItemFromPath(string path) => ResolveIndexPathToModelItem(path); + + public bool IsVisible(NAV.ModelItem modelItem) => IsElementVisible(modelItem); + + public IReadOnlyCollection GetGeometryNodes(NAV.ModelItem modelItem) => + ResolveGeometryLeafNodes(modelItem); +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/GlobalUsing.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/GlobalUsing.cs new file mode 100644 index 000000000..8b9816d3e --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/GlobalUsing.cs @@ -0,0 +1,2 @@ +global using NAV = Autodesk.Navisworks.Api; +global using NavisworksApp = Autodesk.Navisworks.Api.Application; diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentEvents.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentEvents.cs new file mode 100644 index 000000000..26fed81ee --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentEvents.cs @@ -0,0 +1,224 @@ +using Microsoft.Extensions.DependencyInjection; +using Speckle.Connector.Navisworks.Bindings; +using Speckle.Connectors.DUI.Bindings; +using Speckle.Connectors.DUI.Bridge; + +namespace Speckle.Connector.Navisworks.HostApp; + +/// +/// Manages document and model state change notifications for the Navisworks connector. +/// Coalesces various document events into batched updates to be processed during idle time. +/// +public sealed class NavisworksDocumentEvents : IDisposable +{ + private readonly IServiceProvider _serviceProvider; + private readonly ITopLevelExceptionHandler _topLevelExceptionHandler; + private readonly IAppIdleManager _idleManager; + private readonly IBrowserBridge _parent; + private readonly object _subscriptionLock = new(); + + private bool _isSubscribed; + private bool _isProcessing; + private bool _disposed; + + private int _priorModelCount; + private int _finalModelCount; + + /// + /// Initializes a new instance of the class and subscribes to document events. + /// + /// The service provider for dependency injection. + /// Handles exceptions during event processing. + /// Manages idle processing. + public NavisworksDocumentEvents( + IServiceProvider serviceProvider, + ITopLevelExceptionHandler topLevelExceptionHandler, + IAppIdleManager idleManager, + IBrowserBridge parent + ) + { + _serviceProvider = serviceProvider; + _topLevelExceptionHandler = topLevelExceptionHandler; + _idleManager = idleManager; + + _parent = parent; + + SubscribeToDocumentModelEvents(); + } + + /// + /// Subscribes to document-level events to monitor model state changes. + /// + private void SubscribeToDocumentModelEvents() + { + lock (_subscriptionLock) + { + if (_isSubscribed) + { + return; + } + + var activeDocument = NavisworksApp.ActiveDocument; + if (activeDocument != null) + { + activeDocument.Models.CollectionChanging += HandleDocumentModelCountChanging; + activeDocument.Models.CollectionChanged += HandleDocumentModelCountChanged; + } + + _isSubscribed = true; + } + } + + /// + /// Tracks the current model count before changes occur. + /// + private void HandleDocumentModelCountChanging(object sender, EventArgs e) => + _priorModelCount = ((NAV.Document)sender).Models.Count; + + /// + /// Schedules processing of model count changes during idle time. + /// + private void HandleDocumentModelCountChanged(object sender, EventArgs e) + { + _finalModelCount = ((NAV.Document)sender).Models.Count; + + _topLevelExceptionHandler.CatchUnhandled( + () => + _idleManager.SubscribeToIdle( + nameof(NavisworksDocumentEvents), + async () => await ProcessModelStateChangeAsync().ConfigureAwait(false) + ) + ); + } + + private async Task ProcessModelStateChangeAsync() + { + if (_isProcessing) + { + return; + } + + _isProcessing = true; + + try + { + await _parent + .RunOnMainThreadAsync(async () => + { + var store = _serviceProvider.GetRequiredService(); + var basicBinding = _serviceProvider.GetRequiredService(); + var commands = (basicBinding as NavisworksBasicConnectorBinding)?.Commands; + + switch (_finalModelCount) + { + case 0 when _priorModelCount > 0: + store.ClearAndSave(); + break; + case > 0 when _priorModelCount == 0: + store.ReloadState(); + break; + } + + if (commands != null) + { + await commands.NotifyDocumentChanged().ConfigureAwait(false); + } + }) + .ConfigureAwait(false); + } + finally + { + _isProcessing = false; + } + } + + /// + /// Processes model state changes by updating the store and notifying commands. + /// + private async Task NotifyValidModelStateChange() + { + if (_isProcessing) + { + return; + } + + _isProcessing = true; + + try + { + var store = _serviceProvider.GetRequiredService(); + var basicBinding = _serviceProvider.GetRequiredService(); + var commands = (basicBinding as NavisworksBasicConnectorBinding)?.Commands; + + switch (_finalModelCount) + { + case 0 when _priorModelCount > 0: + // Clear the store when models are removed + store.ClearAndSave(); + break; + case > 0 when _priorModelCount == 0: + // Load state when models are added + store.ReloadState(); + break; + } + + if (commands != null) + { + await commands.NotifyDocumentChanged().ConfigureAwait(false); + } + } + finally + { + _isProcessing = false; + } + } + + private void UnsubscribeFromDocumentModelEvents() + { + var activeDocument = NavisworksApp.ActiveDocument; + if (activeDocument != null) + { + UnsubscribeFromModelEvents(activeDocument); + } + + _isSubscribed = false; + } + + private void UnsubscribeFromModelEvents(NAV.Document document) + { + document.Models.CollectionChanged -= HandleDocumentModelCountChanged; + document.Models.CollectionChanging -= HandleDocumentModelCountChanging; + + var sendBinding = _serviceProvider.GetRequiredService(); + sendBinding.CancelAllSendOperations(); + } + + /// + /// Disposes of resources and unsubscribes from events. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + private void Dispose(bool disposing) + { + if (_disposed) + { + return; + } + + if (disposing) + { + UnsubscribeFromDocumentModelEvents(); + } + + _disposed = true; + } + + ~NavisworksDocumentEvents() + { + Dispose(false); + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentModelStore.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentModelStore.cs new file mode 100644 index 000000000..e00529721 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentModelStore.cs @@ -0,0 +1,170 @@ +using System.Data; +using Speckle.Connectors.DUI.Bridge; +using Speckle.Connectors.DUI.Models; +using Speckle.Connectors.DUI.Utils; + +namespace Speckle.Connector.Navisworks.HostApp; + +/// +/// Manages persistence of Speckle model states within Navisworks' embedded SQLite database. +/// Provides mechanisms for reliable read/write operations with retry handling and validation. +/// +public sealed class NavisworksDocumentModelStore : DocumentModelStore +{ + private const string TABLE_NAME = "speckle"; + private const string KEY_NAME = "Speckle_DUI3"; + + private readonly ITopLevelExceptionHandler _topLevelExceptionHandler; + + public NavisworksDocumentModelStore( + IJsonSerializer jsonSerializer, + ITopLevelExceptionHandler topLevelExceptionHandler + ) + : base(jsonSerializer) + { + _topLevelExceptionHandler = topLevelExceptionHandler; + LoadState(); + } + + protected override void HostAppSaveState(string modelCardState) + { + if (!IsActiveDocumentValid()) + { + return; + } + + try + { + SaveStateToDatabase(modelCardState); + } + catch (NAV.Data.DatabaseException ex) + { + _topLevelExceptionHandler.CatchUnhandled( + () => throw new InvalidOperationException("Failed to write Speckle state to database", ex) + ); + } + } + + /// + /// Public method to reload the state from storage. + /// + public void ReloadState() => LoadState(); + + protected override void LoadState() + { + if (!IsActiveDocumentValid()) + { + ClearAndSave(); + return; + } + + try + { + string serializedState = RetrieveStateFromDatabase(); + LoadFromString(serializedState); + } + catch (NAV.Data.DatabaseException ex) + { + ClearAndSave(); // Clear models on failure to avoid stale data + _topLevelExceptionHandler.CatchUnhandled( + () => throw new InvalidOperationException("Failed to read Speckle state from database", ex) + ); + } + } + + private static bool IsActiveDocumentValid() + { + try + { + var activeDoc = NavisworksApp.ActiveDocument; + return activeDoc?.Database != null && activeDoc.Models.Count > 0 && activeDoc.ActiveSheet != null; + } + catch (ArgumentException) + { + return false; // Handle invalid document access + } + catch (ObjectDisposedException) + { + return false; // Handle disposed document state + } + } + + private static void SaveStateToDatabase(string modelCardState) + { + var activeDoc = NavisworksApp.ActiveDocument; + if (activeDoc?.Database == null) + { + return; + } + + var database = activeDoc.Database; + + using (var transaction = database.BeginTransaction(NAV.Data.DatabaseChangedAction.Reset)) + { + EnsureDatabaseTableExists(transaction); + } + + using (var transaction = database.BeginTransaction(NAV.Data.DatabaseChangedAction.Edited)) + { + try + { + ReplaceStateInDatabase(transaction, modelCardState); + transaction.Commit(); + } + catch + { + transaction.Rollback(); // Roll back transaction on failure + throw; + } + } + } + + private static void EnsureDatabaseTableExists(NAV.Data.NavisworksTransaction transaction) + { + var command = transaction.Connection.CreateCommand(); + command.CommandText = $"CREATE TABLE IF NOT EXISTS {TABLE_NAME}(key TEXT PRIMARY KEY, value TEXT)"; + command.ExecuteNonQuery(); + transaction.Commit(); // Ensure table exists before proceeding + } + + private static void ReplaceStateInDatabase(NAV.Data.NavisworksTransaction transaction, string serializedState) + { + var command = transaction.Connection.CreateCommand(); + + command.CommandText = $"DELETE FROM {TABLE_NAME} WHERE key = @key"; + command.Parameters.AddWithValue("@key", KEY_NAME); + command.ExecuteNonQuery(); + + command.CommandText = $"INSERT INTO {TABLE_NAME}(key, value) VALUES(@key, @value)"; + command.Parameters.AddWithValue("@key", KEY_NAME); + command.Parameters.AddWithValue("@value", serializedState); + command.ExecuteNonQuery(); + } + + private static string RetrieveStateFromDatabase() + { + var database = NavisworksApp.ActiveDocument!.Database; + using var table = new DataTable(); + + using (var transaction = database.BeginTransaction(NAV.Data.DatabaseChangedAction.Reset)) + { + EnsureDatabaseTableExists(transaction); + } + + using var dataAdapter = new NAV.Data.NavisworksDataAdapter( + $"SELECT value FROM {TABLE_NAME} WHERE key = @key", + database.Value + ); + dataAdapter.SelectCommand.Parameters.AddWithValue("@key", KEY_NAME); + dataAdapter.Fill(table); + + if (table.Rows.Count <= 0) + { + return string.Empty; // Return an empty collection if no state is found + } + + string stateString = table.Rows[0]["value"] as string ?? string.Empty; + + return stateString; + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksIdleManager.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksIdleManager.cs new file mode 100644 index 000000000..2a9087774 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksIdleManager.cs @@ -0,0 +1,30 @@ +using Speckle.Connectors.DUI.Bridge; + +namespace Speckle.Connector.Navisworks.HostApp; + +/// +/// Manages the scheduling of deferred operations during Navisworks idle periods. +/// Ensures UI updates and operations are batched efficiently to prevent UI freezing. +/// +public sealed class NavisworksIdleManager : AppIdleManager +{ + private readonly IIdleCallManager _idleCallManager; + + /// + /// Initializes a new instance of the NavisworksIdleManager. + /// + /// The manager responsible for queuing and executing deferred operations. + public NavisworksIdleManager(IIdleCallManager idleCallManager) + : base(idleCallManager) + { + _idleCallManager = idleCallManager; + } + + /// + /// Subscribes to Navisworks idle events when operations are queued. + /// + protected override void AddEvent() => NavisworksApp.Idle += NavisworksAppOnIdle; + + private void NavisworksAppOnIdle(object? sender, EventArgs e) => + _idleCallManager.AppOnIdle(() => NavisworksApp.Idle -= NavisworksAppOnIdle); +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksMaterialUnpacker.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksMaterialUnpacker.cs new file mode 100644 index 000000000..030f00b5d --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksMaterialUnpacker.cs @@ -0,0 +1,164 @@ +using Microsoft.Extensions.Logging; +using Speckle.Connector.Navisworks.Services; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using Speckle.Objects.Other; +using Speckle.Sdk; + +namespace Speckle.Connector.Navisworks.HostApp; + +public class NavisworksMaterialUnpacker( + ILogger logger, + IConverterSettingsStore converterSettings, + IElementSelectionService selectionService +) +{ + // Helper function to select a property based on the representation mode + // Selector method for individual properties + private static T Select(RepresentationMode mode, T active, T permanent, T original, T defaultValue) => + mode switch + { + RepresentationMode.Active => active, + RepresentationMode.Permanent => permanent, + RepresentationMode.Original => original, + _ => defaultValue, + }; + + internal List UnpackRenderMaterial(IReadOnlyList navisworksObjects) + { + if (navisworksObjects == null) + { + throw new ArgumentNullException(nameof(navisworksObjects)); + } + + Dictionary renderMaterialProxies = []; + + foreach (NAV.ModelItem navisworksObject in navisworksObjects) + { + try + { + if (!navisworksObject.HasGeometry) + { + continue; + } + + var navisworksObjectId = selectionService.GetModelItemPath(navisworksObject); + + var geometry = navisworksObject.Geometry; + + // Extract the current visual representation mode + var mode = converterSettings.Current.User.VisualRepresentationMode; + + using var defaultColor = new NAV.Color(1.0, 1.0, 1.0); + + // Assign properties using the selector + var renderColor = Select( + mode, + geometry.ActiveColor, + geometry.PermanentColor, + geometry.OriginalColor, + defaultColor + ); + + var renderTransparency = Select( + mode, + geometry.ActiveTransparency, + geometry.PermanentTransparency, + geometry.OriginalTransparency, + 0.0 + ); + + var renderMaterialId = Select( + mode, + geometry.ActiveColor.GetHashCode(), + geometry.PermanentColor.GetHashCode(), + geometry.OriginalColor.GetHashCode(), + 0 + ); + + var materialName = $"NavisworksMaterial_{Math.Abs(NavisworksColorToColor(renderColor).ToArgb())}"; + + // Alternatively the material could be stored on the Item property + var itemCategory = navisworksObject.PropertyCategories.FindCategoryByDisplayName("Item"); + if (itemCategory != null) + { + var itemProperties = itemCategory.Properties; + var itemMaterial = itemProperties.FindPropertyByDisplayName("Material"); + if (itemMaterial != null && !string.IsNullOrEmpty(itemMaterial.DisplayName)) + { + materialName = itemMaterial.Value.ToDisplayString(); + } + } + + // Or in a Material property + var materialPropertyCategory = navisworksObject.PropertyCategories.FindCategoryByDisplayName("Material"); + if (materialPropertyCategory != null) + { + var material = materialPropertyCategory.Properties; + var name = material.FindPropertyByDisplayName("Name"); + if (name != null && !string.IsNullOrEmpty(name.DisplayName)) + { + materialName = name.Value.ToDisplayString(); + } + } + + if (renderMaterialProxies.TryGetValue(renderMaterialId.ToString(), out RenderMaterialProxy? value)) + { + value.objects.Add(navisworksObjectId); + } + else + { + renderMaterialProxies[renderMaterialId.ToString()] = new RenderMaterialProxy() + { + // For now, we will just use the color and transparency to create a new material + // There is more information that is in the Material object that could be used to create a more accurate material + // But is constant regardless of the user settings + value = ConvertRenderColorAndTransparencyToSpeckle( + materialName, + renderTransparency, + renderColor, + renderMaterialId + ), + objects = [navisworksObjectId] + }; + } + } + catch (Exception ex) when (!ex.IsFatal()) + { + logger.LogError(ex, "Failed to unpack render material from Navisworks object"); + } + } + + return renderMaterialProxies.Values.ToList(); + } + + private static RenderMaterial ConvertRenderColorAndTransparencyToSpeckle( + string name, + double transparency, + NAV.Color navisworksColor, + int applicationId + ) + { + var color = NavisworksColorToColor(navisworksColor); + + var speckleRenderMaterial = new RenderMaterial() + { + name = !string.IsNullOrEmpty(name) ? name : $"NavisworksMaterial_{Math.Abs(color.ToArgb())}", + opacity = 1 - transparency, + metalness = 0, + roughness = 1, + diffuse = color.ToArgb(), + emissive = 0, + applicationId = applicationId.ToString() + }; + + return speckleRenderMaterial; + } + + private static System.Drawing.Color NavisworksColorToColor(NAV.Color color) => + System.Drawing.Color.FromArgb( + Convert.ToInt32(color.R * 255), + Convert.ToInt32(color.G * 255), + Convert.ToInt32(color.B * 255) + ); +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Filters/NavisworksSelectionFilter.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Filters/NavisworksSelectionFilter.cs new file mode 100644 index 000000000..dab2b224d --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Filters/NavisworksSelectionFilter.cs @@ -0,0 +1,13 @@ +using Speckle.Connectors.DUI.Models.Card.SendFilter; + +namespace Speckle.Connector.Navisworks.Operations.Send.Filters; + +public class NavisworksSelectionFilter : DirectSelectionSendFilter +{ + public NavisworksSelectionFilter() + { + IsDefault = true; + } + + public override List RefreshObjectIds() => SelectedObjectIds; +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/GeometryNodeMerger.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/GeometryNodeMerger.cs new file mode 100644 index 000000000..828234ca1 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/GeometryNodeMerger.cs @@ -0,0 +1,22 @@ +using Speckle.Connector.Navisworks.Services; + +namespace Speckle.Connector.Navisworks.Operations.Send; + +/// +/// Groups geometry nodes by their parent paths for merging displayValues +/// +public static class GeometryNodeMerger +{ + public static Dictionary> GroupSiblingGeometryNodes(IReadOnlyList nodes) => + nodes + .Where(node => node.HasGeometry && string.IsNullOrEmpty(node.DisplayName)) // Only anonymous geometry nodes + .GroupBy(node => + { + var service = new ElementSelectionService(); + var path = service.GetModelItemPath(node); + var lastSeparatorIndex = path.LastIndexOf(PathConstants.SEPARATOR); + return lastSeparatorIndex == -1 ? path : path[..lastSeparatorIndex]; + }) + .Where(group => group.Count() > 1) // Only group multiples + .ToDictionary(group => group.Key, group => group.ToList()); +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs new file mode 100644 index 000000000..f58d59377 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs @@ -0,0 +1,182 @@ +using Microsoft.Extensions.Logging; +using Speckle.Connector.Navisworks.HostApp; +using Speckle.Connector.Navisworks.Services; +using Speckle.Connectors.Common.Builders; +using Speckle.Connectors.Common.Caching; +using Speckle.Connectors.Common.Conversion; +using Speckle.Connectors.Common.Operations; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using Speckle.Objects.Data; +using Speckle.Sdk; +using Speckle.Sdk.Logging; +using Speckle.Sdk.Models; +using Speckle.Sdk.Models.Collections; +using static Speckle.Connector.Navisworks.Operations.Send.GeometryNodeMerger; + +namespace Speckle.Connector.Navisworks.Operations.Send; + +public class NavisworksRootObjectBuilder( + IRootToSpeckleConverter rootToSpeckleConverter, + ISendConversionCache sendConversionCache, + IConverterSettingsStore converterSettings, + ILogger logger, + ISdkActivityFactory activityFactory, + NavisworksMaterialUnpacker materialUnpacker, + IElementSelectionService elementSelectionService +) : IRootObjectBuilder +{ + internal NavisworksConversionSettings GetCurrentSettings() => converterSettings.Current; + + public Task Build( + IReadOnlyList navisworksModelItems, + SendInfo sendInfo, + IProgress onOperationProgressed, + CancellationToken cancellationToken = default + ) + { + using var activity = activityFactory.Start("Build"); + + // 1. Validate input + if (!navisworksModelItems.Any()) + { + throw new SpeckleException("No objects to convert"); + } + + // 2. Initialize root collection + var rootObjectCollection = new Collection + { + name = NavisworksApp.ActiveDocument.Title ?? "Unnamed model", + ["units"] = converterSettings.Current.Derived.SpeckleUnits + }; + + // 3. Convert all model items and store results + if (navisworksModelItems == null) + { + throw new ArgumentNullException(nameof(navisworksModelItems)); + } + + List results = new(navisworksModelItems.Count); + var convertedBases = new Dictionary(); + int processedCount = 0; + int totalCount = navisworksModelItems.Count; + + if (onOperationProgressed == null || sendInfo == null) + { + throw new ArgumentNullException(nameof(onOperationProgressed)); + } + + foreach (var item in navisworksModelItems) + { + cancellationToken.ThrowIfCancellationRequested(); + var converted = ConvertNavisworksItem(item, convertedBases, sendInfo); + results.Add(converted); + processedCount++; + onOperationProgressed.Report(new CardProgress("Converting", (double)processedCount / totalCount)); + } + + if (results.All(x => x.Status == Status.ERROR)) + { + throw new SpeckleException("Failed to convert all objects."); // fail fast instead creating empty commit! It will appear as model card error with red color. + } + + // 4. Initialize final elements list and group nodes + var finalElements = new List(); + var groupedNodes = GroupSiblingGeometryNodes(navisworksModelItems); + var processedPaths = new HashSet(); + + // 5. Process and merge grouped nodes + foreach (var group in groupedNodes) + { + var siblingBases = new List(); + foreach (var itemPath in group.Value.Select(elementSelectionService.GetModelItemPath)) + { + processedPaths.Add(itemPath); + + if (convertedBases.TryGetValue(itemPath, out var convertedBase) && convertedBase != null) + { + siblingBases.Add(convertedBase); + } + } + + if (siblingBases.Count == 0) + { + continue; + } + + var navisworksObject = new NavisworksObject + { + name = elementSelectionService.GetModelItemFromPath(group.Key).DisplayName ?? string.Empty, + displayValue = siblingBases.SelectMany(b => b["displayValue"] as List ?? []).ToList(), + properties = siblingBases.First()["properties"] as Dictionary ?? [], + units = converterSettings.Current.Derived.SpeckleUnits, + applicationId = group.Key + }; + + finalElements.Add(navisworksObject); + } + + // 6. Add remaining non-grouped nodes + foreach (var result in results.Where(result => !processedPaths.Contains(result.SourceId))) + { + if (!convertedBases.TryGetValue(result.SourceId, out var convertedBase) || convertedBase == null) + { + continue; + } + // TODO: check if converted base is a collection when full tree sending is implemented + + if (convertedBase is Collection convertedCollection) + { + finalElements.Add(convertedCollection); + } + else + { + var navisworksObject = new NavisworksObject + { + name = convertedBase["name"] as string ?? string.Empty, + displayValue = convertedBase["displayValue"] as List ?? [], + properties = convertedBase["properties"] as Dictionary ?? [], + units = converterSettings.Current.Derived.SpeckleUnits, + applicationId = convertedBase.applicationId + }; + finalElements.Add(navisworksObject); + } + } + + using (var _ = activityFactory.Start("UnpackRenderMaterials")) + { + // 7. - Unpack the render material proxies + rootObjectCollection[ProxyKeys.RENDER_MATERIAL] = materialUnpacker.UnpackRenderMaterial(navisworksModelItems); + } + + // 8. Finalize and return + rootObjectCollection.elements = finalElements; + return Task.FromResult(new RootObjectBuilderResult(rootObjectCollection, results)); + } + + private SendConversionResult ConvertNavisworksItem( + NAV.ModelItem navisworksItem, + Dictionary convertedBases, + SendInfo sendInfo + ) + { + string applicationId = elementSelectionService.GetModelItemPath(navisworksItem); + string sourceType = navisworksItem.GetType().Name; + + try + { + Base converted = sendConversionCache.TryGetValue(applicationId, sendInfo.ProjectId, out ObjectReference? cached) + ? cached + : rootToSpeckleConverter.Convert(navisworksItem); + + convertedBases[applicationId] = converted; + + return new SendConversionResult(Status.SUCCESS, applicationId, sourceType, converted); + } + catch (Exception ex) when (!ex.IsFatal()) + { + logger.LogError(ex, "Failed to convert model item {id}", applicationId); + return new SendConversionResult(Status.ERROR, applicationId, "ModelItem", null, ex); + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ConvertHiddenEleementsSetting.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ConvertHiddenEleementsSetting.cs new file mode 100644 index 000000000..fe2966800 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ConvertHiddenEleementsSetting.cs @@ -0,0 +1,12 @@ +using Speckle.Connectors.DUI.Settings; + +namespace Speckle.Connector.Navisworks.Operations.Send.Settings; + +public class ConvertHiddenElementsSetting(bool value) : ICardSetting +{ + public string? Id { get; set; } = "convertHiddenElements"; + public string? Title { get; set; } = "Convert Hidden Elements"; + public string? Type { get; set; } = "boolean"; + public List? Enum { get; set; } + public object? Value { get; set; } = value; +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/IncludeInternalPropertiesSetting.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/IncludeInternalPropertiesSetting.cs new file mode 100644 index 000000000..594cf59bc --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/IncludeInternalPropertiesSetting.cs @@ -0,0 +1,12 @@ +using Speckle.Connectors.DUI.Settings; + +namespace Speckle.Connector.Navisworks.Operations.Send.Settings; + +public class IncludeInternalPropertiesSetting(bool value) : ICardSetting +{ + public string? Id { get; set; } = "includeInternalProperties"; + public string? Title { get; set; } = "Include Internal Properties"; + public string? Type { get; set; } = "boolean"; + public List? Enum { get; set; } + public object? Value { get; set; } = value; +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/OriginModeSetting.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/OriginModeSetting.cs new file mode 100644 index 000000000..cbc398d64 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/OriginModeSetting.cs @@ -0,0 +1,18 @@ +using Speckle.Connectors.DUI.Settings; +using Speckle.Converter.Navisworks.Settings; + +namespace Speckle.Connector.Navisworks.Operations.Send.Settings; + +public class OriginModeSetting(OriginMode value) : ICardSetting +{ + public string? Id { get; set; } = "originMode"; + public string? Title { get; set; } = "Origin Mode"; + public string? Type { get; set; } = "string"; + public List? Enum { get; set; } = System.Enum.GetNames(typeof(OriginMode)).ToList(); + public object? Value { get; set; } = value.ToString(); + + public static readonly Dictionary OriginModeMap = System + .Enum.GetValues(typeof(OriginMode)) + .Cast() + .ToDictionary(v => v.ToString(), v => v); +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ToSpeckleSettingsManagerNavisworks.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ToSpeckleSettingsManagerNavisworks.cs new file mode 100644 index 000000000..d90be1218 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/ToSpeckleSettingsManagerNavisworks.cs @@ -0,0 +1,127 @@ +using System.Diagnostics.CodeAnalysis; +using Speckle.Connectors.Common.Caching; +using Speckle.Connectors.DUI.Models.Card; +using Speckle.Converter.Navisworks.Settings; +using Speckle.InterfaceGenerator; +using Speckle.Sdk.Common; + +namespace Speckle.Connector.Navisworks.Operations.Send.Settings; + +[GenerateAutoInterface] +public class ToSpeckleSettingsManagerNavisworks : IToSpeckleSettingsManagerNavisworks +{ + private readonly ISendConversionCache _sendConversionCache; + + // cache invalidation process run with ModelCardId since the settings are model specific + private readonly Dictionary _visualRepresentationCache = []; + private readonly Dictionary _originModeCache = []; + private readonly Dictionary _convertHiddenElementsCache = []; + private readonly Dictionary _includeInternalPropertiesCache = []; + + public ToSpeckleSettingsManagerNavisworks(ISendConversionCache sendConversionCache) + { + _sendConversionCache = sendConversionCache; + } + + public RepresentationMode GetVisualRepresentationMode(SenderModelCard modelCard) + { + if (modelCard == null) + { + throw new ArgumentNullException(nameof(modelCard)); + } + + var representationString = modelCard.Settings?.First(s => s.Id == "visualRepresentation").Value as string; + + if ( + representationString is not null + && VisualRepresentationSetting.VisualRepresentationMap.TryGetValue( + representationString, + out RepresentationMode representation + ) + ) + { + if (_visualRepresentationCache.TryGetValue(modelCard.ModelCardId.NotNull(), out RepresentationMode previousType)) + { + if (previousType != representation) + { + EvictCacheForModelCard(modelCard); + } + } + + _visualRepresentationCache[modelCard.ModelCardId.NotNull()] = representation; + return representation; + } + + throw new ArgumentException($"Invalid visual representation value: {representationString}"); + } + + public OriginMode GetOriginMode(SenderModelCard modelCard) + { + if (modelCard == null) + { + throw new ArgumentNullException(nameof(modelCard)); + } + + var originString = modelCard.Settings?.First(s => s.Id == "originMode").Value as string; + + if (originString is not null && OriginModeSetting.OriginModeMap.TryGetValue(originString, out OriginMode origin)) + { + if (_originModeCache.TryGetValue(modelCard.ModelCardId.NotNull(), out OriginMode previousType)) + { + if (previousType != origin) + { + EvictCacheForModelCard(modelCard); + } + } + _originModeCache[modelCard.ModelCardId.NotNull()] = origin; + return origin; + } + + throw new ArgumentException($"Invalid origin mode value: {originString}"); + } + + public bool GetConvertHiddenElements(SenderModelCard modelCard) + { + if (modelCard == null) + { + throw new ArgumentNullException(nameof(modelCard)); + } + + var value = modelCard.Settings?.FirstOrDefault(s => s.Id == "convertHiddenElements")?.Value as bool?; + + var returnValue = value != null && value.NotNull(); + if (_convertHiddenElementsCache.TryGetValue(modelCard.ModelCardId.NotNull(), out var previousValue)) + { + if (previousValue != returnValue) + { + EvictCacheForModelCard(modelCard); + } + } + + _convertHiddenElementsCache[modelCard.ModelCardId] = returnValue; + return returnValue; + } + + public bool GetIncludeInternalProperties([NotNull] SenderModelCard modelCard) + { + var value = modelCard.Settings?.FirstOrDefault(s => s.Id == "includeInternalProperties")?.Value as bool?; + + var returnValue = value != null && value.NotNull(); + if (_includeInternalPropertiesCache.TryGetValue(modelCard.ModelCardId.NotNull(), out var previousValue)) + { + if (previousValue != returnValue) + { + EvictCacheForModelCard(modelCard); + } + } + + _includeInternalPropertiesCache[modelCard.ModelCardId] = returnValue; + return returnValue; + } + + private void EvictCacheForModelCard(SenderModelCard modelCard) + { + var objectIds = modelCard.SendFilter != null ? modelCard.SendFilter.NotNull().SelectedObjectIds : []; + _sendConversionCache.EvictObjects(objectIds); + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/VisualRepresentationSetting.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/VisualRepresentationSetting.cs new file mode 100644 index 000000000..0c58f809f --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/Settings/VisualRepresentationSetting.cs @@ -0,0 +1,18 @@ +using Speckle.Connectors.DUI.Settings; +using Speckle.Converter.Navisworks.Settings; + +namespace Speckle.Connector.Navisworks.Operations.Send.Settings; + +public class VisualRepresentationSetting(RepresentationMode value) : ICardSetting +{ + public string? Id { get; set; } = "visualRepresentation"; + public string? Title { get; set; } = "Visual Representation"; + public string? Type { get; set; } = "string"; + public List? Enum { get; set; } = System.Enum.GetNames(typeof(RepresentationMode)).ToList(); + public object? Value { get; set; } = value.ToString(); + + public static readonly Dictionary VisualRepresentationMap = System + .Enum.GetValues(typeof(RepresentationMode)) + .Cast() + .ToDictionary(v => v.ToString(), v => v); +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/PathConstants.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/PathConstants.cs new file mode 100644 index 000000000..dae9e4253 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/PathConstants.cs @@ -0,0 +1,6 @@ +namespace Speckle.Connector.Navisworks; + +public static class PathConstants +{ + public const char SEPARATOR = '/'; +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/AppUtils.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/AppUtils.cs new file mode 100644 index 000000000..de3da18a5 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/AppUtils.cs @@ -0,0 +1,20 @@ +using Speckle.Sdk.Host; + +namespace Speckle.Connector.Navisworks.NavisPlugin; + +public static class AppUtils +{ + public static HostApplication App => +#if NAVIS + HostApplications.Navisworks; +#else + throw new NotSupportedException(); +#endif + + public static HostAppVersion Version => +#if NAVIS2024 + HostAppVersion.v2024; +#else + throw new NotSupportedException(); +#endif +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/BrowserPane.xaml b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/BrowserPane.xaml new file mode 100644 index 000000000..ab3a0c963 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/BrowserPane.xaml @@ -0,0 +1,17 @@ + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/BrowserPane.xaml.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/BrowserPane.xaml.cs new file mode 100644 index 000000000..2605eece7 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/BrowserPane.xaml.cs @@ -0,0 +1,8 @@ +using System.Windows.Controls; + +namespace Speckle.Connectors.Navisworks; + +public class BrowserPane : UserControl +{ + public BrowserPane() { } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/Commands.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/Commands.cs new file mode 100644 index 000000000..00bf0f0ea --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/Commands.cs @@ -0,0 +1,7 @@ +namespace Speckle.Connector.Navisworks.Plugin; + +public abstract class LaunchSpeckleConnector +{ + public const string COMMAND = "Speckle_Launch"; + public const string PLUGIN = "SpeckleUI3"; +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/DockableConnectorPane.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/DockableConnectorPane.cs new file mode 100644 index 000000000..d6022ca75 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/DockableConnectorPane.cs @@ -0,0 +1,63 @@ +using System.Diagnostics.CodeAnalysis; +using System.Windows.Forms; +using System.Windows.Forms.Integration; +using Microsoft.Extensions.DependencyInjection; +using Speckle.Connector.Navisworks.DependencyInjection; +using Speckle.Connectors.Common; +using Speckle.Connectors.DUI; +using Speckle.Connectors.DUI.WebView; +using Speckle.Converter.Navisworks.DependencyInjection; +using Speckle.Sdk.Host; + +namespace Speckle.Connector.Navisworks.Plugin; + +[ + NAV.Plugins.DockPanePlugin(450, 750, FixedSize = false, AutoScroll = true, MinimumHeight = 410, MinimumWidth = 250), + NAV.Plugins.Plugin( + LaunchSpeckleConnector.PLUGIN, + "Speckle", + DisplayName = "Speckle", + Options = NAV.Plugins.PluginOptions.None, + ToolTip = "Speckle Connector for Navisworks", + ExtendedToolTip = "Speckle Connector for Navisworks" + ) +] +[SuppressMessage( + "design", + "CA1812:Avoid uninstantiated internal classes", + Justification = "Instantiated by Navisworks" +)] +internal sealed class Connector : NAV.Plugins.DockPanePlugin +{ + private ServiceProvider? Container { get; set; } + + public override Control CreateControlPane() + { + var services = new ServiceCollection(); + + services.Initialize(HostApplications.Navisworks, HostAppVersion.v2024); + + services.AddNavisworks(); + services.AddNavisworksConverter(); + + Container = services.BuildServiceProvider(); + + Container.UseDUI(); + + var u = Container.GetRequiredService(); + + var speckleHost = new ElementHost { AutoSize = true, Child = u }; + + speckleHost.CreateControl(); + + return speckleHost; + } + + public override void DestroyControlPane(Control pane) + { + if (pane is UserControl control) + { + control.Dispose(); + } + } +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.name b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.name new file mode 100644 index 000000000..ac79a9a2f --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.name @@ -0,0 +1,9 @@ +# This file uses UTF8 encoding. Lines starting with # or $, or ending with = +# do NOT need translating. +$utf8 + +# DisplayName= +# SpeckleNextGen + +# Speckle.DisplayName= +# SpeckleNextGen diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.xaml b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.xaml new file mode 100644 index 000000000..787daf4a5 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.xaml @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.xaml.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.xaml.cs new file mode 100644 index 000000000..37fcbe83b --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/NavisworksRibbon.xaml.cs @@ -0,0 +1,198 @@ +using System.Diagnostics.CodeAnalysis; +using System.Windows.Forms; +#if DEBUG +using System.Text; +#endif + +namespace Speckle.Connector.Navisworks.Plugin; + +[ + NAV.Plugins.Plugin("SpeckleNavisworksNextGen", "Speckle", DisplayName = "Speckle Next Gen"), + NAV.Plugins.Strings("NavisworksRibbon.name"), + NAV.Plugins.RibbonLayout("NavisworksRibbon.xaml"), + NAV.Plugins.RibbonTab("Speckle", DisplayName = "Speckle Next Gen", LoadForCanExecute = true), + NAV.Plugins.Command( + LaunchSpeckleConnector.COMMAND, + LoadForCanExecute = true, + Icon = "Resources/s2logo16.png", + LargeIcon = "Resources/s2logo32.png", + Shortcut = "Ctrl+Shift+S", + ToolTip = "Next Gen Speckle Connector for Navisworks", + DisplayName = "Speckle\rConnector" + ), +] +[SuppressMessage( + "design", + "CA1812:Avoid uninstantiated internal classes", + Justification = "Instantiated by Navisworks" +)] +internal sealed class RibbonHandler : NAV.Plugins.CommandHandlerPlugin +{ + // ReSharper disable once CollectionNeverQueried.Local + private static readonly Dictionary s_loadedPlugins = []; + + /// + /// Determines the state of a command in Navisworks. + /// + /// The ID of the command to check. + /// The state of the command. + public override NAV.Plugins.CommandState CanExecuteCommand(string commandId) => + commandId == LaunchSpeckleConnector.COMMAND + ? new NAV.Plugins.CommandState(true) + : new NAV.Plugins.CommandState(false); + + /// + /// Loads a plugin in Navisworks. + /// + /// The name of the plugin to load. + /// Optional. Specifies whether to check if the application is automated. Default is true. + /// Optional. The command associated with the plugin. Default is an empty string. + private static void LoadPlugin(string plugin, bool notAutomatedCheck = true, string command = "") + { + if (ShouldSkipLoad(notAutomatedCheck)) + { + return; + } + + if (ShouldSkipPluginLoad(plugin, command)) + { + return; + } + + var pluginRecord = NavisworksApp.Plugins.FindPlugin(plugin + ".Speckle"); + if (pluginRecord is null) + { + return; + } + + var loadedPlugin = pluginRecord.LoadedPlugin ?? pluginRecord.LoadPlugin(); + + ActivatePluginPane(pluginRecord, loadedPlugin, command); + } + + /// + /// Checks whether the load should be skipped based on the notAutomatedCheck flag and application automation status. + /// + /// The flag indicating whether to check if the application is automated. + /// True if the load should be skipped, False otherwise. + private static bool ShouldSkipLoad(bool notAutomatedCheck) => notAutomatedCheck && NavisworksApp.IsAutomated; + + /// + /// Checks whether the plugin load should be skipped based on the plugin and command values. + /// + /// The name of the plugin. + /// The command associated with the plugin. + /// True if the plugin load should be skipped, False otherwise. + private static bool ShouldSkipPluginLoad(string plugin, string command) => + string.IsNullOrEmpty(plugin) || string.IsNullOrEmpty(command); + + /// + /// Activates the plugin's pane if it is of the right type. + /// + /// The plugin record. + /// The loaded plugin instance. + /// The command associated with the plugin. + private static void ActivatePluginPane(NAV.Plugins.PluginRecord pluginRecord, object loadedPlugin, string command) + { + if (ShouldActivatePluginPane(pluginRecord)) + { + var dockPanePlugin = (NAV.Plugins.DockPanePlugin)loadedPlugin; + dockPanePlugin.ActivatePane(); + + s_loadedPlugins[dockPanePlugin] = true; + } + else + { +#if DEBUG + ShowPluginInfoMessageBox(); + ShowPluginNotLoadedMessageBox(command); +#endif + } + } + + /// + /// Checks whether the plugin's pane should be activated based on the plugin record. + /// + /// The plugin record. + /// True if the plugin's pane should be activated, False otherwise. + private static bool ShouldActivatePluginPane(NAV.Plugins.PluginRecord pluginRecord) => + pluginRecord.IsLoaded && pluginRecord is NAV.Plugins.DockPanePluginRecord && pluginRecord.IsEnabled; + + public override int ExecuteCommand(string commandId, params string[] parameters) + { + // ReSharper disable once RedundantAssignment + var buildVersion = string.Empty; + +#if NAVIS2020 + buildVersion = "2020"; +#endif +#if NAVIS2021 + buildVersion = "2021"; +#endif +#if NAVIS2022 + buildVersion = "2022"; +#endif +#if NAVIS2023 + buildVersion = "2023"; +#endif +#if NAVIS2024 + buildVersion = "2024"; +#endif +#if NAVIS2025 + buildVersion = "2025"; +#endif + + // Version + if (!NavisworksApp.Version.RuntimeProductName.Contains(buildVersion)) + { + MessageBox.Show( + "This Add-In was built for Navisworks " + + buildVersion + + ", please contact jonathon@speckle.systems for assistance...", + "Cannot Continue!", + MessageBoxButtons.OK, + MessageBoxIcon.Error + ); + return 0; + } + + switch (commandId) + { + case LaunchSpeckleConnector.COMMAND: + { + LoadPlugin(LaunchSpeckleConnector.PLUGIN, command: commandId); + break; + } + + default: + { + MessageBox.Show("You have clicked on an unexpected command with ID = '" + commandId + "'"); + break; + } + } + + return 0; + } + +#if DEBUG + /// + /// Shows a message box displaying plugin information. + /// + private static void ShowPluginInfoMessageBox() + { + var sb = new StringBuilder(); + foreach (var pr in NavisworksApp.Plugins.PluginRecords) + { + sb.AppendLine(pr.Name + ": " + pr.DisplayName + ", " + pr.Id); + } + + MessageBox.Show(sb.ToString()); + } + + /// + /// Shows a message box indicating that the plugin was not loaded. + /// + /// The command associated with the plugin. + private static void ShowPluginNotLoadedMessageBox(string command) => MessageBox.Show(command + " Plugin not loaded."); +#endif +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/PackageContents.xml b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/PackageContents.xml new file mode 100644 index 000000000..3830371c3 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/PackageContents.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Resources/s2logo16.png b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Resources/s2logo16.png new file mode 100644 index 000000000..61872f0d0 Binary files /dev/null and b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Resources/s2logo16.png differ diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Resources/s2logo32.png b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Resources/s2logo32.png new file mode 100644 index 000000000..2ad0c346e Binary files /dev/null and b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Resources/s2logo32.png differ diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems new file mode 100644 index 000000000..099d2c611 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems @@ -0,0 +1,60 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + D1D9FBB0-5928-4AD0-9AD3-EC61B7BD96CA + + + Speckle.Connectors.NavisworksShared + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Always + + + Always + + + Always + + + Always + + + + + Always + + + + + + \ No newline at end of file diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.shproj b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.shproj new file mode 100644 index 000000000..1e6d1b02a --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.shproj @@ -0,0 +1,12 @@ + + + + {62813838-52F7-43CB-9062-BB2611C00C79} + + + + + + + diff --git a/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json index b6696cad1..9230a33ff 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json @@ -292,9 +292,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -302,8 +302,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.logging": { @@ -313,7 +313,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "speckle.converters.revit2022": { @@ -352,11 +352,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Revit.API": { @@ -367,9 +367,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json index 19999b9a4..68844dc7c 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json @@ -292,9 +292,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -302,8 +302,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.logging": { @@ -313,7 +313,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "speckle.converters.revit2023": { @@ -352,11 +352,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Revit.API": { @@ -367,9 +367,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json index 0c7d9a3e0..1143d418c 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json @@ -292,9 +292,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -302,8 +302,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.logging": { @@ -313,7 +313,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "speckle.converters.revit2024": { @@ -352,11 +352,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Revit.API": { @@ -367,9 +367,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json index 42d4357be..99b6ca2af 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json @@ -242,9 +242,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -252,8 +252,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.logging": { @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "speckle.converters.revit2025": { @@ -302,11 +302,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Revit.API": { @@ -317,9 +317,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -328,14 +328,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json index 1b066dd3f..13088a422 100644 --- a/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "speckle.converters.rhino7": { @@ -346,18 +346,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -367,14 +367,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json index 1539b5d5b..256cbc422 100644 --- a/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "speckle.converters.rhino8": { @@ -346,18 +346,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -367,14 +367,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json index 4071d1641..1564d07ac 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json @@ -35,11 +35,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Tekla.Structures.Dialog": { @@ -332,9 +332,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -342,8 +342,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -368,7 +368,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -406,9 +406,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -418,14 +418,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json index 518f9b4d3..ebd693812 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json @@ -35,11 +35,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Tekla.Structures.Dialog": { @@ -413,9 +413,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -423,8 +423,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -449,7 +449,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -487,9 +487,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -499,14 +499,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.TeklaShared/HostApp/TeklaDocumentModelStore.cs b/Connectors/Tekla/Speckle.Connector.TeklaShared/HostApp/TeklaDocumentModelStore.cs index bae477566..5f75cb37e 100644 --- a/Connectors/Tekla/Speckle.Connector.TeklaShared/HostApp/TeklaDocumentModelStore.cs +++ b/Connectors/Tekla/Speckle.Connector.TeklaShared/HostApp/TeklaDocumentModelStore.cs @@ -51,7 +51,7 @@ protected override void HostAppSaveState(string modelCardState) { return; } - _jsonCacheManager.SaveObject(_modelKey, modelCardState); + _jsonCacheManager.UpdateObject(_modelKey, modelCardState); } catch (Exception ex) when (!ex.IsFatal()) { diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConverterModule.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConverterModule.cs index 6597df04a..c7c0a1c49 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConverterModule.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConverterModule.cs @@ -1,6 +1,6 @@ using System.Reflection; -using ArcGIS.Core.Geometry; using Microsoft.Extensions.DependencyInjection; +using Speckle.Converters.ArcGIS3.ToSpeckle.Helpers; using Speckle.Converters.ArcGIS3.Utils; using Speckle.Converters.Common; using Speckle.Converters.Common.Registration; @@ -20,14 +20,15 @@ public static void AddArcGISConverters(this IServiceCollection serviceCollection serviceCollection.AddRootCommon(converterAssembly); // add application converters - serviceCollection.AddApplicationConverters(converterAssembly); + serviceCollection.AddApplicationConverters(converterAssembly); // most things should be InstancePerLifetimeScope so we get one per operation serviceCollection.AddScoped(); - serviceCollection.AddScoped(); serviceCollection.AddScoped(); serviceCollection.AddScoped(); serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); // single stack per conversion serviceCollection.AddScoped< diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISToSpeckleUnitConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISToSpeckleUnitConverter.cs index 7c8586365..656edfc6f 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISToSpeckleUnitConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISToSpeckleUnitConverter.cs @@ -22,7 +22,6 @@ private static IReadOnlyDictionary Create() dict[LinearUnit.Feet.FactoryCode] = Units.Feet; dict[LinearUnit.Yards.FactoryCode] = Units.Yards; dict[LinearUnit.Miles.FactoryCode] = Units.Miles; - //dict[9003] = Units.USFeet; return dict; } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/GlobalUsings.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/GlobalUsings.cs index d29d85270..ea0876c8c 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/GlobalUsings.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/GlobalUsings.cs @@ -1,3 +1,4 @@ +global using AC = ArcGIS.Core; +global using ACD = ArcGIS.Core.Data; global using ACG = ArcGIS.Core.Geometry; -global using SGIS = Speckle.Objects.GIS; global using SOG = Speckle.Objects.Geometry; diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Speckle.Converters.ArcGIS3.csproj b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Speckle.Converters.ArcGIS3.csproj index 579e00a68..adbee8c0b 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Speckle.Converters.ArcGIS3.csproj +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Speckle.Converters.ArcGIS3.csproj @@ -15,4 +15,8 @@ + + + + diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/GeometryToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/GeometryToHostConverter.cs index ce80dd378..31ef91337 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/GeometryToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/GeometryToHostConverter.cs @@ -8,23 +8,14 @@ public class GeometryToHostConverter : ITypedConverter, ACG. { private readonly ITypedConverter, ACG.Polyline> _polylineConverter; private readonly ITypedConverter, ACG.Multipoint> _multipointConverter; - private readonly ITypedConverter, ACG.Multipatch> _polygon3dConverter; - private readonly ITypedConverter, ACG.Polygon> _polygonConverter; - private readonly ITypedConverter, ACG.Multipatch> _multipatchConverter; public GeometryToHostConverter( ITypedConverter, ACG.Polyline> polylineConverter, - ITypedConverter, ACG.Multipoint> multipointConverter, - ITypedConverter, ACG.Multipatch> polygon3dConverter, - ITypedConverter, ACG.Polygon> polygonConverter, - ITypedConverter, ACG.Multipatch> multipatchConverter + ITypedConverter, ACG.Multipoint> multipointConverter ) { _polylineConverter = polylineConverter; _multipointConverter = multipointConverter; - _polygon3dConverter = polygon3dConverter; - _polygonConverter = polygonConverter; - _multipatchConverter = multipatchConverter; } public ACG.Geometry Convert(IReadOnlyList target) @@ -38,9 +29,6 @@ public ACG.Geometry Convert(IReadOnlyList target) { SOG.Point => _multipointConverter.Convert(target.Cast().ToList()), SOG.Polyline => _polylineConverter.Convert(target.Cast().ToList()), - SGIS.PolygonGeometry3d => _polygon3dConverter.Convert(target.Cast().ToList()), - SGIS.PolygonGeometry => _polygonConverter.Convert(target.Cast().ToList()), - SGIS.GisMultipatchGeometry => _multipatchConverter.Convert(target.Cast().ToList()), _ => throw new ValidationException($"No conversion found for type {target[0]}") }; } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/MeshListToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/MeshListToHostConverter.cs index c355b681a..462f22368 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/MeshListToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/MeshListToHostConverter.cs @@ -25,7 +25,8 @@ public ACG.Multipatch Convert(List target) { throw new ValidationException("Feature contains no geometries"); } - ACG.MultipatchBuilderEx multipatchPart = new(_settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference); + + ACG.MultipatchBuilderEx multipatchPart = new(); //_settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference); foreach (SOG.Mesh part in target) { diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/MultipatchListToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/MultipatchListToHostConverter.cs deleted file mode 100644 index 0060a2a20..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/MultipatchListToHostConverter.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Speckle.Converters.Common.Objects; -using Speckle.Sdk.Common.Exceptions; - -namespace Speckle.Converters.ArcGIS3.ToHost.Raw; - -public class MultipatchListToHostConverter : ITypedConverter, ACG.Multipatch> -{ - private readonly ITypedConverter _pointConverter; - - public MultipatchListToHostConverter(ITypedConverter pointConverter) - { - _pointConverter = pointConverter; - } - - public ACG.Multipatch Convert(List target) - { - if (target.Count == 0) - { - throw new ValidationException("Feature contains no geometries"); - } - ACG.MultipatchBuilderEx multipatchPart = new(); - foreach (SGIS.GisMultipatchGeometry part in target) - { - ACG.Patch newPatch = multipatchPart.MakePatch(ACG.PatchType.Triangles); - for (int i = 0; i < part.vertices.Count / 3; i++) - { - newPatch.AddPoint( - _pointConverter.Convert( - new SOG.Point(part.vertices[i * 3], part.vertices[i * 3 + 1], part.vertices[i * 3 + 2], part.units) - ) - ); - } - multipatchPart.Patches.Add(newPatch); - } - return multipatchPart.ToGeometry(); - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/PointcloudLayerToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/PointcloudLayerToHostConverter.cs deleted file mode 100644 index 6cc57af37..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/PointcloudLayerToHostConverter.cs +++ /dev/null @@ -1,17 +0,0 @@ -using ArcGIS.Desktop.Mapping; -using Speckle.Converters.Common.Objects; -using Speckle.Objects.GIS; -using Speckle.Sdk.Models; - -namespace Speckle.Converters.ArcGIS3.ToHost.Raw; - -public class PointcloudLayerToHostConverter : ITypedConverter -{ - public object Convert(Base target) => Convert((VectorLayer)target); - - public LasDatasetLayer Convert(VectorLayer target) - { - // POC: - throw new NotImplementedException($"Receiving Pointclouds is not supported"); - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/Polygon3dListToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/Polygon3dListToHostConverter.cs deleted file mode 100644 index 4f532d197..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/Polygon3dListToHostConverter.cs +++ /dev/null @@ -1,51 +0,0 @@ -using Speckle.Converters.Common.Objects; -using Speckle.Sdk.Common.Exceptions; - -namespace Speckle.Converters.ArcGIS3.ToHost.Raw; - -public class Polygon3dListToHostConverter : ITypedConverter, ACG.Multipatch> -{ - private readonly ITypedConverter _pointConverter; - private readonly ITypedConverter _polylineConverter; - - public Polygon3dListToHostConverter( - ITypedConverter pointConverter, - ITypedConverter polylineConverter - ) - { - _pointConverter = pointConverter; - _polylineConverter = polylineConverter; - } - - public ACG.Multipatch Convert(List target) - { - if (target.Count == 0) - { - throw new ValidationException("Feature contains no geometries"); - } - - ACG.MultipatchBuilderEx multipatchPart = new(); - foreach (SGIS.PolygonGeometry3d part in target) - { - ACG.Patch newPatch = multipatchPart.MakePatch(ACG.PatchType.FirstRing); - List boundaryPts = part.boundary.GetPoints(); - foreach (SOG.Point pt in boundaryPts) - { - newPatch.AddPoint(_pointConverter.Convert(pt)); - } - multipatchPart.Patches.Add(newPatch); - - foreach (SOG.Polyline loop in part.voids) - { - ACG.Patch newLoopPatch = multipatchPart.MakePatch(ACG.PatchType.Ring); - List loopPts = loop.GetPoints(); - foreach (SOG.Point pt in loopPts) - { - newLoopPatch.AddPoint(_pointConverter.Convert(pt)); - } - multipatchPart.Patches.Add(newLoopPatch); - } - } - return multipatchPart.ToGeometry(); - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/PolygonListToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/PolygonListToHostConverter.cs deleted file mode 100644 index f59d8d58f..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/PolygonListToHostConverter.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Speckle.Converters.Common.Objects; -using Speckle.Sdk.Common.Exceptions; - -namespace Speckle.Converters.ArcGIS3.ToHost.Raw; - -public class PolygonListToHostConverter : ITypedConverter, ACG.Polygon> -{ - private readonly ITypedConverter _polylineConverter; - - public PolygonListToHostConverter(ITypedConverter polylineConverter) - { - _polylineConverter = polylineConverter; - } - - public ACG.Polygon Convert(List target) - { - if (target.Count == 0) - { - throw new ValidationException("Feature contains no geometries"); - } - List polyList = new(); - foreach (SGIS.PolygonGeometry poly in target) - { - ACG.Polyline boundary = _polylineConverter.Convert(poly.boundary); - ACG.PolygonBuilderEx polyOuterRing = new(boundary); - - foreach (SOG.Polyline loop in poly.voids) - { - // adding inner loops: https://github.com/esri/arcgis-pro-sdk/wiki/ProSnippets-Geometry#build-a-donut-polygon - ACG.Polyline loopNative = _polylineConverter.Convert(loop); - polyOuterRing.AddPart(loopNative.Copy3DCoordinatesToList()); - } - ACG.Polygon polygon = polyOuterRing.ToGeometry(); - polyList.Add(polygon); - } - return new ACG.PolygonBuilderEx(polyList, ACG.AttributeFlags.HasZ).ToGeometry(); - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/GisMultipatchFeatureToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/GisMultipatchFeatureToHostConverter.cs deleted file mode 100644 index aeb9f2d7f..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/GisMultipatchFeatureToHostConverter.cs +++ /dev/null @@ -1,55 +0,0 @@ -using Speckle.Converters.Common; -using Speckle.Converters.Common.Objects; -using Speckle.Objects; -using Speckle.Sdk.Common.Exceptions; -using Speckle.Sdk.Models; - -namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; - -/// -/// Converter for with geometry. -/// -[NameAndRankValue(nameof(SGIS.GisMultipatchFeature), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] -public class GisMultipatchFeatureToHostConverter - : IToHostTopLevelConverter, - ITypedConverter -{ - private readonly ITypedConverter, ACG.Multipatch> _polygon3dConverter; - private readonly ITypedConverter, ACG.Multipatch> _multipatchConverter; - - public GisMultipatchFeatureToHostConverter( - ITypedConverter, ACG.Multipatch> polygon3dConverter, - ITypedConverter, ACG.Multipatch> multipatchConverter - ) - { - _polygon3dConverter = polygon3dConverter; - _multipatchConverter = multipatchConverter; - } - - public object Convert(Base target) => Convert((SGIS.GisMultipatchFeature)target); - - public ACG.Geometry Convert(SGIS.GisMultipatchFeature target) - { - if (target.geometry.Count == 0) - { - throw new ArgumentException("Multipatch Feature contains no geometries"); - } - - ACG.Multipatch? multipatch; - try - { - multipatch = _multipatchConverter.Convert(target.geometry.Cast().ToList()); - } - catch (InvalidCastException) - { - multipatch = _polygon3dConverter.Convert(target.geometry.Cast().ToList()); - } - - if (multipatch is null) - { - throw new ConversionException("Multipatch conversion did not return valid geometry"); - } - - return multipatch; - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/GisPointFeatureToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/GisPointFeatureToHostConverter.cs deleted file mode 100644 index debdbb923..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/GisPointFeatureToHostConverter.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Speckle.Converters.Common; -using Speckle.Converters.Common.Objects; -using Speckle.Objects; -using Speckle.Sdk.Models; - -namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; - -/// -/// Converter for with geometry. -/// -/// Thrown when IGisFeature is because it has no geometry, or when Multipatch geometry contained invalid types. -/// Thrown for unsupported classes. -[NameAndRankValue(nameof(SGIS.GisPointFeature), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] -public class GisPointFeatureToHostConverter - : IToHostTopLevelConverter, - ITypedConverter -{ - private readonly ITypedConverter, ACG.Multipoint> _multipointConverter; - - public GisPointFeatureToHostConverter(ITypedConverter, ACG.Multipoint> multipointConverter) - { - _multipointConverter = multipointConverter; - } - - public object Convert(Base target) => Convert((SGIS.GisPointFeature)target); - - public ACG.Geometry Convert(SGIS.GisPointFeature target) - { - ACG.Multipoint multipoint = _multipointConverter.Convert(target.geometry); - return multipoint; - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/GisPolygonFeatureToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/GisPolygonFeatureToHostConverter.cs deleted file mode 100644 index 06e6482a7..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/GisPolygonFeatureToHostConverter.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Speckle.Converters.Common; -using Speckle.Converters.Common.Objects; -using Speckle.Objects; -using Speckle.Sdk.Models; - -namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; - -/// -/// Converter for with geometry. -/// -/// Thrown when IGisFeature is because it has no geometry, or when Multipatch geometry contained invalid types. -/// Thrown for unsupported classes. -[NameAndRankValue(nameof(SGIS.GisPolygonFeature), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] -public class GisPolygonFeatureToHostConverter - : IToHostTopLevelConverter, - ITypedConverter -{ - private readonly ITypedConverter, ACG.Polygon> _polygonConverter; - - public GisPolygonFeatureToHostConverter(ITypedConverter, ACG.Polygon> polygonConverter) - { - _polygonConverter = polygonConverter; - } - - public object Convert(Base target) => Convert((SGIS.GisPolygonFeature)target); - - public ACG.Geometry Convert(SGIS.GisPolygonFeature target) - { - ACG.Polygon polygon = _polygonConverter.Convert(target.geometry); - return polygon; - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/GisPolylineFeatureToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/GisPolylineFeatureToHostConverter.cs deleted file mode 100644 index c1ff776bc..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/GisPolylineFeatureToHostConverter.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Speckle.Converters.Common; -using Speckle.Converters.Common.Objects; -using Speckle.Objects; -using Speckle.Sdk.Models; - -namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; - -/// -/// Converter for with geometry. -/// -/// Thrown when IGisFeature is because it has no geometry, or when Multipatch geometry contained invalid types. -/// Thrown for unsupported classes. -[NameAndRankValue(nameof(SGIS.GisPolylineFeature), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] -public class GisPolylineFeatureToHostConverter - : IToHostTopLevelConverter, - ITypedConverter -{ - private readonly ITypedConverter, ACG.Polyline> _polylineConverter; - - public GisPolylineFeatureToHostConverter(ITypedConverter, ACG.Polyline> polylineConverter) - { - _polylineConverter = polylineConverter; - } - - public object Convert(Base target) => Convert((SGIS.GisPolylineFeature)target); - - public ACG.Geometry Convert(SGIS.GisPolylineFeature target) - { - ACG.Polyline polyline = _polylineConverter.Convert(target.geometry); - return polyline; - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/RasterLayerToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/RasterLayerToHostConverter.cs deleted file mode 100644 index bcc036b49..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/RasterLayerToHostConverter.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Speckle.Converters.Common; -using Speckle.Converters.Common.Objects; -using Speckle.Objects.GIS; -using Speckle.Sdk.Models; - -namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; - -[NameAndRankValue(nameof(RasterLayer), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] -public class RasterLayerToHostConverter : IToHostTopLevelConverter, ITypedConverter -{ - public object Convert(Base target) => Convert((RasterLayer)target); - - public string Convert(RasterLayer target) - { - // POC: - throw new NotImplementedException($"Receiving Rasters is not supported"); - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Helpers/DisplayValueExtractor.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Helpers/DisplayValueExtractor.cs new file mode 100644 index 000000000..9a5b36f41 --- /dev/null +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Helpers/DisplayValueExtractor.cs @@ -0,0 +1,111 @@ +using Speckle.Converters.Common.Objects; +using Speckle.Sdk.Common.Exceptions; +using Speckle.Sdk.Models; + +namespace Speckle.Converters.ArcGIS3.ToSpeckle.Helpers; + +public sealed class DisplayValueExtractor +{ + private readonly ITypedConverter _pointConverter; + private readonly ITypedConverter> _multiPointConverter; + private readonly ITypedConverter> _polylineConverter; + private readonly ITypedConverter> _polygonConverter; + private readonly ITypedConverter> _multipatchConverter; + private readonly ITypedConverter _gisRasterConverter; + + public DisplayValueExtractor( + ITypedConverter pointConverter, + ITypedConverter> multiPointConverter, + ITypedConverter> polylineConverter, + ITypedConverter> polygonConverter, + ITypedConverter> multipatchConverter, + ITypedConverter gisRasterConverter + ) + { + _pointConverter = pointConverter; + _multiPointConverter = multiPointConverter; + _polylineConverter = polylineConverter; + _polygonConverter = polygonConverter; + _multipatchConverter = multipatchConverter; + _gisRasterConverter = gisRasterConverter; + } + + public IEnumerable GetDisplayValue(AC.CoreObjectsBase coreObjectsBase) + { + switch (coreObjectsBase) + { + case ACD.Row row: + foreach (Base shape in GetRowGeometries(row)) + { + yield return shape; + } + break; + + case ACD.Raster.Raster raster: + yield return _gisRasterConverter.Convert(raster); + break; + + case ACD.Analyst3D.LasPoint point: + yield return _pointConverter.Convert(point.ToMapPoint()); + break; + + default: + // TODO: log that no display value is supported for this type + yield break; + } + } + + private IEnumerable GetRowGeometries(ACD.Row row) + { + // see if this row contains any geometry fields + // POC: is it possible to have multiple geometry fields in a row? + string? geometryField = row.GetFields() + .Where(o => o.FieldType == ACD.FieldType.Geometry) + ?.Select(o => o.Name) + ?.First(); + + if (geometryField is null) + { + yield break; + } + + var shape = (ACG.Geometry)row[geometryField]; + switch (shape) + { + case ACG.MapPoint point: + yield return _pointConverter.Convert(point); + break; + + case ACG.Multipoint multipoint: + foreach (SOG.Point converted in _multiPointConverter.Convert(multipoint)) + { + yield return converted; + } + break; + + case ACG.Polyline polyline: + foreach (SOG.Polyline converted in _polylineConverter.Convert(polyline)) + { + yield return converted; + } + break; + + case ACG.Polygon polygon: + foreach (Base converted in _polygonConverter.Convert(polygon)) + { + yield return converted; + } + break; + + case ACG.Multipatch multipatch: + foreach (SOG.Mesh converted in _multipatchConverter.Convert(multipatch)) + { + yield return converted; + } + break; + + default: + throw new ValidationException($"No geometry conversion found for {shape.GetType().Name}"); + } + } +} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Helpers/PropertiesExtractor.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Helpers/PropertiesExtractor.cs new file mode 100644 index 000000000..1cd9ba587 --- /dev/null +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Helpers/PropertiesExtractor.cs @@ -0,0 +1,54 @@ +namespace Speckle.Converters.ArcGIS3.ToSpeckle.Helpers; + +public sealed class PropertiesExtractor +{ + public PropertiesExtractor() { } + + public Dictionary GetProperties(AC.CoreObjectsBase coreObjectsBase) + { + switch (coreObjectsBase) + { + case ACD.Row row: + return GetRowFields(row); + } + + return new(); + } + + public Dictionary GetRowFields(ACD.Row row) + { + Dictionary rowFields = new(); + foreach (ACD.Field field in row.GetFields()) + { + // POC: do not set null values + // POC: we are not filtering by the layer visible fields + if (FieldValueToSpeckle(row, field) is object value) + { + rowFields[field.Name] = value; + } + } + + return rowFields; + } + + private object? FieldValueToSpeckle(ACD.Row row, ACD.Field field) + { + switch (field.FieldType) + { + // these FieldTypes are not properly supported through API + case ACD.FieldType.Geometry: + case ACD.FieldType.Raster: + case ACD.FieldType.Blob: + case ACD.FieldType.XML: + return null; + + case ACD.FieldType.DateOnly: + case ACD.FieldType.TimeOnly: + case ACD.FieldType.TimestampOffset: + return row[field.Name]?.ToString(); + + default: + return row[field.Name]; + } + } +} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/AttributeToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/AttributeToSpeckleConverter.cs deleted file mode 100644 index 5c106b8b3..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/AttributeToSpeckleConverter.cs +++ /dev/null @@ -1,51 +0,0 @@ -using ArcGIS.Core.Data; -using Speckle.Converters.Common.Objects; -using Speckle.Sdk.Models; - -namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw; - -public class AttributesToSpeckleConverter : ITypedConverter -{ - public AttributesToSpeckleConverter() { } - - public Base Convert(Row target) - { - Base attributes = new(); - IReadOnlyList fields = target.GetFields(); - foreach (Field field in fields) - { - if (field.FieldType == FieldType.Geometry) - { - continue; // ignore fields with geometry - } - else - { - // TODO: currently we are setting raster, blob, and xml fields to null with this logic. Why are these sent as null and not skipped over? - attributes[field.Name] = FieldValueToSpeckle(target, field); - } - } - - return attributes; - } - - // TODO: often skipping over geometry, raster, blob, and xml fields. This happens in vector layer conversion as well. Why are we returning null here? We should encapsulate this in a field converter util. - private object? FieldValueToSpeckle(Row row, Field field) - { - switch (field.FieldType) - { - // these FieldTypes are not properly supported through API - case FieldType.Raster: - case FieldType.Blob: - case FieldType.XML: - return null; - - case FieldType.DateOnly: - case FieldType.TimeOnly: - case FieldType.TimestampOffset: - return row[field.Name]?.ToString(); - - default: - return row[field.Name]; - } - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/EnvelopBoxToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/EnvelopBoxToSpeckleConverter.cs deleted file mode 100644 index a871117ef..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/EnvelopBoxToSpeckleConverter.cs +++ /dev/null @@ -1,60 +0,0 @@ -using ArcGIS.Core.Geometry; -using Speckle.Converters.Common; -using Speckle.Converters.Common.Objects; -using Speckle.Objects.Primitive; - -namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw; - -public class EnvelopToSpeckleConverter : ITypedConverter -{ - private readonly IConverterSettingsStore _settingsStore; - private readonly ITypedConverter _pointConverter; - - public EnvelopToSpeckleConverter( - IConverterSettingsStore settingsStore, - ITypedConverter pointConverter - ) - { - _settingsStore = settingsStore; - _pointConverter = pointConverter; - } - - public SOG.Box Convert(Envelope target) - { - MapPoint pointMin = new MapPointBuilderEx( - target.XMin, - target.YMin, - target.ZMin, - _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference - ).ToGeometry(); - MapPoint pointMax = new MapPointBuilderEx( - target.XMax, - target.YMax, - target.ZMax, - _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference - ).ToGeometry(); - SOG.Point minPtSpeckle = _pointConverter.Convert(pointMin); - SOG.Point maxPtSpeckle = _pointConverter.Convert(pointMax); - - var units = _settingsStore.Current.SpeckleUnits; - - SOG.Plane plane = - new() - { - origin = minPtSpeckle, - normal = new SOG.Vector(0, 0, 1, units), - xdir = new SOG.Vector(1, 0, 0, units), - ydir = new SOG.Vector(0, 1, 0, units), - units = units - }; - - return new SOG.Box() - { - plane = plane, - 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 = _settingsStore.Current.SpeckleUnits - }; - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/GisFeatureToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/GisFeatureToSpeckleConverter.cs deleted file mode 100644 index 87ac8669b..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/GisFeatureToSpeckleConverter.cs +++ /dev/null @@ -1,198 +0,0 @@ -using ArcGIS.Core.Data; -using Speckle.Converters.ArcGIS3.Utils; -using Speckle.Converters.Common; -using Speckle.Converters.Common.Objects; -using Speckle.Objects; -using Speckle.Sdk.Common.Exceptions; -using Speckle.Sdk.Models; - -namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw; - -public class GisFeatureToSpeckleConverter : ITypedConverter<(Row, string), IGisFeature> -{ - private readonly ITypedConverter _pointConverter; - private readonly ITypedConverter> _multiPointConverter; - private readonly ITypedConverter> _polylineConverter; - private readonly ITypedConverter> _polygonConverter; - private readonly ITypedConverter> _multipatchConverter; - private readonly ITypedConverter _attributeConverter; - private readonly IConverterSettingsStore _settingsStore; - - public GisFeatureToSpeckleConverter( - ITypedConverter pointConverter, - ITypedConverter> multiPointConverter, - ITypedConverter> polylineConverter, - ITypedConverter> polygonConverter, - ITypedConverter> multipatchConverter, - ITypedConverter attributeConverter, - IConverterSettingsStore settingsStore - ) - { - _pointConverter = pointConverter; - _multiPointConverter = multiPointConverter; - _polylineConverter = polylineConverter; - _polygonConverter = polygonConverter; - _multipatchConverter = multipatchConverter; - _attributeConverter = attributeConverter; - _settingsStore = settingsStore; - } - - private List GetPolygonDisplayMeshes(List polygons) - { - List displayVal = new(); - foreach (SGIS.PolygonGeometry polygon in polygons) - { - // POC: check for voids, we cannot generate display value correctly if any of the polygons have voids - // Return meshed boundary for now, ignore voids - // if (polygon.voids.Count > 0) - // { - // return new(); - // } - - // ensure counter-clockwise orientation for up-facing mesh faces - bool isClockwise = polygon.boundary.IsClockwisePolygon(); - List boundaryPts = polygon.boundary.GetPoints(); - if (isClockwise) - { - boundaryPts.Reverse(); - } - - // generate Mesh - List faces = new() { boundaryPts.Count }; - faces.AddRange(Enumerable.Range(0, boundaryPts.Count).ToList()); - SOG.Mesh mesh = - new() - { - vertices = boundaryPts.SelectMany(x => new List { x.x, x.y, x.z }).ToList(), - faces = faces, - units = _settingsStore.Current.SpeckleUnits - }; - displayVal.Add(mesh); - } - - return displayVal; - } - - private List GetMultipatchDisplayMeshes(List multipatch) - { - List displayVal = new(); - foreach (SGIS.GisMultipatchGeometry geo in multipatch) - { - SOG.Mesh displayMesh = - new() - { - vertices = geo.vertices, - faces = geo.faces, - units = _settingsStore.Current.SpeckleUnits - }; - displayVal.Add(displayMesh); - } - - return displayVal; - } - - private List GetDisplayMeshes(List geometry) - { - List displayValue = new(); - List polygons = new(); - List multipatches = new(); - foreach (Base geo in geometry) - { - if (geo is SGIS.GisMultipatchGeometry multipatch) - { - multipatches.Add(multipatch); - } - else if (geo is SGIS.PolygonGeometry polygon) - { - polygons.Add(polygon); - } - } - - displayValue.AddRange(GetPolygonDisplayMeshes(polygons)); - displayValue.AddRange(GetMultipatchDisplayMeshes(multipatches)); - return displayValue; - } - - public IGisFeature Convert((Row, string) target) - { - Row row = target.Item1; - string appId = target.Item2; - - // get attributes - Base attributes = _attributeConverter.Convert(row); - - bool hasGeometry = false; - string geometryField = "Shape"; - foreach (Field field in row.GetFields()) - { - // POC: check for all possible reserved Shape names - if (field.FieldType == FieldType.Geometry) // ignore the field with geometry itself - { - hasGeometry = true; - geometryField = field.Name; - } - } - - // return GisFeatures that don't have geometry - if (!hasGeometry) - { - return new SGIS.GisNonGeometricFeature() { attributes = attributes, applicationId = appId }; - } - - var shape = (ACG.Geometry)row[geometryField]; - switch (shape) - { - case ACG.MapPoint point: - SOG.Point specklePoint = _pointConverter.Convert(point); - return new SGIS.GisPointFeature() - { - geometry = new() { specklePoint }, - attributes = attributes, - applicationId = appId - }; - - case ACG.Multipoint multipoint: - List specklePoints = _multiPointConverter.Convert(multipoint).ToList(); - return new SGIS.GisPointFeature() - { - geometry = specklePoints, - attributes = attributes, - applicationId = appId - }; - - case ACG.Polyline polyline: - List polylines = _polylineConverter.Convert(polyline).ToList(); - return new SGIS.GisPolylineFeature() - { - geometry = polylines, - attributes = attributes, - applicationId = appId - }; - - case ACG.Polygon polygon: - List polygons = _polygonConverter.Convert(polygon).ToList(); - List meshes = GetPolygonDisplayMeshes(polygons); - return new SGIS.GisPolygonFeature() - { - geometry = polygons, - displayValue = meshes, - attributes = attributes, - applicationId = appId - }; - - case ACG.Multipatch multipatch: - List geometry = _multipatchConverter.Convert(multipatch).ToList(); - List display = GetDisplayMeshes(geometry); - return new SGIS.GisMultipatchFeature() - { - geometry = geometry, - displayValue = display, - attributes = attributes, - applicationId = appId - }; - - default: - throw new ValidationException($"No geometry conversion found for {shape.GetType().Name}"); - } - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/MultipatchFeatureToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/MultipatchFeatureToSpeckleConverter.cs index 46ba7c663..ba589b4d7 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/MultipatchFeatureToSpeckleConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/MultipatchFeatureToSpeckleConverter.cs @@ -1,15 +1,13 @@ -using Speckle.Converters.ArcGIS3.Utils; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Sdk.Models; using ValidationException = System.ComponentModel.DataAnnotations.ValidationException; namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw; /// -/// Converts Multipatch objects into a list containing some combination of GisMultipatchGeometry or PolygonGeometry3d objects +/// Converts Multipatch objects into Meshes /// -public class MultipatchFeatureToSpeckleConverter : ITypedConverter> +public class MultipatchFeatureToSpeckleConverter : ITypedConverter> { private readonly IConverterSettingsStore _settingsStore; private readonly ITypedConverter _pointConverter; @@ -23,11 +21,11 @@ public MultipatchFeatureToSpeckleConverter( _pointConverter = pointConverter; } - public IReadOnlyList Convert(ACG.Multipatch target) + public IReadOnlyList Convert(ACG.Multipatch target) { - List converted = new(); + List converted = new(); // placeholder, needs to be declared in order to be used in the Ring patch type - SGIS.PolygonGeometry3d polygonGeom = new() { units = _settingsStore.Current.SpeckleUnits }; + //SOG.Polygon polygonGeom = new() { units = _settingsStore.Current.SpeckleUnits }; // convert and store all multipatch points per Part List> allPoints = new(); @@ -43,88 +41,128 @@ public IReadOnlyList Convert(ACG.Multipatch target) allPoints.Add(pointList); } - for (int idx = 0; idx < target.PartCount; idx++) + // convert all parts + for (int i = 0; i < target.PartCount; i++) { - // get the patch type to get the point arrangement in the mesh + // get the patch type to get the point arrangement // https://pro.arcgis.com/en/pro-app/latest/sdk/api-reference/topic27403.html - ACG.PatchType patchType = target.GetPatchType(idx); - int ptCount = target.GetPatchPointCount(idx); + ACG.PatchType patchType = target.GetPatchType(i); - if (patchType == ACG.PatchType.TriangleStrip) + // get the points in the patch + List points = new(); + int ptStartIndex = target.GetPatchStartPointIndex(i); + for (int ptIdx = ptStartIndex; ptIdx < ptStartIndex + target.GetPatchPointCount(i); ptIdx++) { - SGIS.GisMultipatchGeometry multipatch = target.CompleteMultipatchTriangleStrip(allPoints, idx); - multipatch.units = _settingsStore.Current.SpeckleUnits; - converted.Add(multipatch); + points.Add(target.Points[ptIdx]); } - else if (patchType == ACG.PatchType.Triangles) - { - SGIS.GisMultipatchGeometry multipatch = target.CompleteMultipatchTriangles(allPoints, idx); - multipatch.units = _settingsStore.Current.SpeckleUnits; - converted.Add(multipatch); - } - else if (patchType == ACG.PatchType.TriangleFan) + + switch (patchType) { - SGIS.GisMultipatchGeometry multipatch = target.CompleteMultipatchTriangleFan(allPoints, idx); - multipatch.units = _settingsStore.Current.SpeckleUnits; - converted.Add(multipatch); + case ACG.PatchType.TriangleStrip: + SOG.Mesh triangleStripPatch = GetMeshFromTriangleStripPatch(points); + converted.Add(triangleStripPatch); + break; + case ACG.PatchType.Triangles: + SOG.Mesh trianglesPatch = GetMeshFromTrianglesPatch(points); + converted.Add(trianglesPatch); + break; + case ACG.PatchType.TriangleFan: + SOG.Mesh triangleFanPatch = GetMeshFromTriangleFanPatch(points); + converted.Add(triangleFanPatch); + break; + case ACG.PatchType.FirstRing: + SOG.Mesh firstRingPatch = GetMeshFromFirstRingPatch(points); + converted.Add(firstRingPatch); + break; + + default: + throw new ValidationException($"{patchType} patch type is not supported"); } - // in case of RingMultipatch - return PolygonGeometry3d - // the following Patch Parts cannot be pushed to external method, as they will possibly, add voids/rings to the same GisPolygon - else if (patchType == ACG.PatchType.FirstRing) + } + return converted; + } + + private SOG.Mesh GetMeshFromTriangleStripPatch(List points) + { + List pointCoords = points.SelectMany(x => new List() { x.X, x.Y, x.Z }).ToList(); + List faces = new(); + List vertices = new(); + + for (int i = 0; i < points.Count; i++) + { + if (i >= 2) // every new point adds a triangle { - // chech if there were already Polygons, add them to list - if (polygonGeom.boundary != null) - { - converted.Add(polygonGeom); - } - - // first ring means a start of a new PolygonGeometry3d - polygonGeom = new() { voids = new List(), units = _settingsStore.Current.SpeckleUnits }; - List pointCoords = allPoints[idx].SelectMany(x => new List() { x.x, x.y, x.z }).ToList(); - - SOG.Polyline polyline = new() { value = pointCoords, units = _settingsStore.Current.SpeckleUnits }; - polygonGeom.boundary = polyline; - - // if it's already the last part, add to list - if (idx == target.PartCount - 1) - { - converted.Add(polygonGeom); - } + faces.AddRange(new List() { 3, i - 2, i - 1, i }); + vertices.AddRange(pointCoords.GetRange(3 * (i - 2), 9).ToList()); } - else if (patchType == ACG.PatchType.Ring) + } + + return new() + { + faces = faces, + vertices = vertices, + units = _settingsStore.Current.SpeckleUnits + }; + } + + private SOG.Mesh GetMeshFromTrianglesPatch(List points) + { + List pointCoords = points.SelectMany(x => new List() { x.X, x.Y, x.Z }).ToList(); + List faces = new(); + List vertices = new(); + + for (int i = 0; i < points.Count; i++) + { + if (i >= 2 && (i + 1) % 3 == 0) // every 3 new points is a new triangle { - List pointCoords = allPoints[idx].SelectMany(x => new List() { x.x, x.y, x.z }).ToList(); - SOG.Polyline polyline = new() { value = pointCoords, units = _settingsStore.Current.SpeckleUnits }; - - // every outer ring is oriented clockwise - bool isClockwise = polyline.IsClockwisePolygon(); - if (!isClockwise) - { - // add void to existing polygon - polygonGeom.voids.Add(polyline); - } - else - { - // add existing polygon to list, start a new polygon with a boundary - converted.Add(polygonGeom); - polygonGeom = new() - { - voids = new List(), - boundary = polyline, - units = _settingsStore.Current.SpeckleUnits - }; - } - // if it's already the last part, add to list - if (idx == target.PartCount - 1) - { - converted.Add(polygonGeom); - } + faces.AddRange(new List() { 3, i - 2, i - 1, i }); + vertices.AddRange(pointCoords.GetRange(3 * (i - 2), 9).ToList()); } - else + } + + return new() + { + faces = faces, + vertices = vertices, + units = _settingsStore.Current.SpeckleUnits + }; + } + + private SOG.Mesh GetMeshFromTriangleFanPatch(List points) + { + List pointCoords = points.SelectMany(x => new List() { x.X, x.Y, x.Z }).ToList(); + List faces = new(); + List vertices = new(); + + for (int i = 0; i < points.Count; i++) + { + if (i >= 2) // every new point adds a triangle (originates from 0) { - throw new ValidationException($"Patch type {patchType} is not supported"); + faces.AddRange(new List() { 3, 0, i - 1, i }); + vertices.AddRange(pointCoords.GetRange(2 * (i - 2), 6).ToList()); } } - return converted; + + return new() + { + faces = faces, + vertices = vertices, + units = _settingsStore.Current.SpeckleUnits + }; + } + + // first ring means a start of a new PolygonGeometry3d + // POC: guess we are skipping inner rings for now, though we could send as polylines + private SOG.Mesh GetMeshFromFirstRingPatch(List points) + { + List pointCoords = points.SelectMany(x => new List() { x.X, x.Y, x.Z }).ToList(); + List faces = Enumerable.Range(0, pointCoords.Count).ToList(); + + return new() + { + faces = faces, + vertices = pointCoords, + units = _settingsStore.Current.SpeckleUnits + }; } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PointToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PointToSpeckleConverter.cs index 657077906..3716ef3ab 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PointToSpeckleConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PointToSpeckleConverter.cs @@ -1,12 +1,10 @@ -using System.ComponentModel.DataAnnotations; -using ArcGIS.Core.Geometry; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Sdk; +using Speckle.Sdk.Common.Exceptions; namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw; -public class PointToSpeckleConverter : ITypedConverter +public class PointToSpeckleConverter : ITypedConverter { private readonly IConverterSettingsStore _settingsStore; @@ -15,48 +13,42 @@ public PointToSpeckleConverter(IConverterSettingsStore _settingsStore = settingsStore; } - public SOG.Point Convert(MapPoint target) + public SOG.Point Convert(ACG.MapPoint target) { + ACG.MapPoint point; try { // reproject to Active CRS - if ( - GeometryEngine.Instance.Project(target, _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference) - is not MapPoint reprojectedPt - ) - { - throw new ValidationException( - $"Conversion to Spatial Reference {_settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference.Name} failed" - ); - } - - if ( - Double.IsNaN(reprojectedPt.X) - || Double.IsInfinity(reprojectedPt.X) - || Double.IsNaN(reprojectedPt.Y) - || Double.IsInfinity(reprojectedPt.Y) - ) - { - throw new ValidationException( - $"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, _settingsStore.Current.SpeckleUnits); - SOG.Point scaledMovedRotatedPoint = _settingsStore.Current.ActiveCRSoffsetRotation.OffsetRotateOnSend( - reprojectedSpecklePt, - _settingsStore.Current.SpeckleUnits - ); - return scaledMovedRotatedPoint; + point = (ACG.MapPoint) + ACG.GeometryEngine.Instance.Project(target, _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference); + } + catch (ArgumentNullException anEx) + { + throw new ConversionException("MapPoint was null", anEx); + } + catch (ArgumentException aEx) + { + throw new ConversionException("Spatial reference was not supported", aEx); + } + catch (NotImplementedException niEx) + { + throw new ConversionException("", niEx); } - catch (ArgumentException ex) + + if (double.IsNaN(point.X) || double.IsInfinity(point.X) || double.IsNaN(point.Y) || double.IsInfinity(point.Y)) { - throw new SpeckleException( - $"Conversion to Spatial Reference {_settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference.Name} failed", - ex + throw new ConversionException( + $"Conversion to Spatial Reference {_settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference.Name} failed: coordinates undefined" ); } + + // convert to Speckle Pt + SOG.Point reprojectedSpecklePt = new(point.X, point.Y, point.Z, _settingsStore.Current.SpeckleUnits); + SOG.Point scaledMovedRotatedPoint = _settingsStore.Current.ActiveCRSoffsetRotation.OffsetRotateOnSend( + reprojectedSpecklePt, + _settingsStore.Current.SpeckleUnits + ); + + return scaledMovedRotatedPoint; } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PolygonFeatureToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PolygonFeatureToSpeckleConverter.cs index ddfaff318..1e3273e5d 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PolygonFeatureToSpeckleConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/PolygonFeatureToSpeckleConverter.cs @@ -1,64 +1,41 @@ -using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Objects.GIS; using Speckle.Sdk.Common.Exceptions; namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw; -public class PolygonFeatureToSpeckleConverter : ITypedConverter> +/// +/// Converts a Polygon feature to a list of polylines from the polygon boundary and inner loops. +/// This is a placeholder conversion since we don't have a polygon class or meshing strategy for interior loops yet. +/// +public class PolygonFeatureToSpeckleConverter : ITypedConverter> { private readonly ITypedConverter _segmentConverter; - private readonly IConverterSettingsStore _settingsStore; - public PolygonFeatureToSpeckleConverter( - ITypedConverter segmentConverter, - IConverterSettingsStore settingsStore - ) + public PolygonFeatureToSpeckleConverter(ITypedConverter segmentConverter) { _segmentConverter = segmentConverter; - _settingsStore = settingsStore; } - public IReadOnlyList Convert(ACG.Polygon target) + public IReadOnlyList Convert(ACG.Polygon target) { // https://pro.arcgis.com/en/pro-app/latest/sdk/api-reference/topic30235.html - List polygonList = new(); int partCount = target.PartCount; + List parts = new(partCount); if (partCount == 0) { throw new ValidationException("ArcGIS Polygon contains no parts"); } - PolygonGeometry? polygon = null; - - // test each part for "exterior ring" - for (int idx = 0; idx < partCount; idx++) + for (int i = 0; i < partCount; i++) { - ACG.ReadOnlySegmentCollection segmentCollection = target.Parts[idx]; + // get the part polyline + ACG.ReadOnlySegmentCollection segmentCollection = target.Parts[i]; SOG.Polyline polyline = _segmentConverter.Convert(segmentCollection); - - bool isExteriorRing = target.IsExteriorRing(idx); - if (isExteriorRing) - { - polygon = new() - { - boundary = polyline, - voids = new List(), - units = _settingsStore.Current.SpeckleUnits - }; - polygonList.Add(polygon); - } - else // interior part - { - if (polygon == null) - { - throw new ValidationException("Invalid ArcGIS Polygon. Interior part preceeding the exterior ring."); - } - polygon.voids.Add(polyline); - } + // POC: we could create a mesh from exterior polyline: target.IsExteriorRing(idx) + parts.Add(polyline); } - return polygonList; + return parts; } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/GisRasterToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/RasterToSpeckleConverter.cs similarity index 73% rename from Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/GisRasterToSpeckleConverter.cs rename to Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/RasterToSpeckleConverter.cs index 2c4938dc8..5f3a49686 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/GisRasterToSpeckleConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/Raw/RasterToSpeckleConverter.cs @@ -1,101 +1,23 @@ using ArcGIS.Core.Data.Raster; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; -using Speckle.Objects.GIS; +using Speckle.Sdk.Common.Exceptions; using Speckle.Sdk.Models; namespace Speckle.Converters.ArcGIS3.ToSpeckle.Raw; -public class GisRasterToSpeckleConverter : ITypedConverter +public class RasterToSpeckleConverter : ITypedConverter { private readonly IConverterSettingsStore _settingsStore; - public GisRasterToSpeckleConverter(IConverterSettingsStore settingsStore) + public RasterToSpeckleConverter(IConverterSettingsStore settingsStore) { _settingsStore = settingsStore; } public Base Convert(object target) => Convert((Raster)target); - private List GetRasterMeshCoords(Raster target, List> pixelValsPerBand) - { - List pixelsList = pixelValsPerBand[^1]; - var extent = target.GetExtent(); - var cellSize = target.GetMeanCellSize(); - - int bandCount = target.GetBandCount(); - float xOrigin = (float)extent.XMin; - float yOrigin = (float)extent.YMax; - int xSize = target.GetWidth(); - int ySize = target.GetHeight(); - float xResolution = (float)cellSize.Item1; - float yResolution = -1 * (float)cellSize.Item2; - - List newCoords = pixelsList - .SelectMany( - (_, ind) => - new List() - { - xOrigin + xResolution * (int)Math.Floor((double)ind / ySize), - yOrigin + yResolution * (ind % ySize), - 0, - xOrigin + xResolution * ((int)Math.Floor((double)ind / ySize) + 1), - yOrigin + yResolution * (ind % ySize), - 0, - xOrigin + xResolution * (int)Math.Floor((double)ind / ySize + 1), - yOrigin + yResolution * (ind % ySize + 1), - 0, - xOrigin + xResolution * (int)Math.Floor((double)ind / ySize), - yOrigin + yResolution * (ind % ySize + 1), - 0 - } - ) - .ToList(); - return newCoords; - } - - private List GetRasterColors(int bandCount, List> pixelValsPerBand) - { - List newColors = new(); - List pixelsList = pixelValsPerBand[^1]; - if (bandCount == 3 || bandCount == 4) // RGB - { - var pixMin0 = pixelValsPerBand[0].Min(); - var pixMax0 = pixelValsPerBand[0].Max(); - var pixMin1 = pixelValsPerBand[1].Min(); - var pixMax1 = pixelValsPerBand[1].Max(); - var pixMin2 = pixelValsPerBand[2].Min(); - var pixMax2 = pixelValsPerBand[2].Max(); - newColors = pixelsList - .Select( - (_, ind) => - (255 << 24) - | (255 * (pixelValsPerBand[0][ind] - pixMin0) / (pixMax0 - pixMin0) << 16) - | (255 * (pixelValsPerBand[1][ind] - pixMin1) / (pixMax1 - pixMin1) << 8) - | 255 * (pixelValsPerBand[2][ind] - pixMin2) / (pixMax2 - pixMin2) - ) - .SelectMany(x => new List() { x, x, x, x }) - .ToList(); - } - else // greyscale - { - var pixMin = pixelValsPerBand[0].Min(); - var pixMax = pixelValsPerBand[0].Max(); - newColors = pixelsList - .Select( - (_, ind) => - (255 << 24) - | (255 * (pixelValsPerBand[0][ind] - pixMin) / (pixMax - pixMin) << 16) - | (255 * (pixelValsPerBand[0][ind] - pixMin) / (pixMax - pixMin) << 8) - | 255 * (pixelValsPerBand[0][ind] - pixMin) / (pixMax - pixMin) - ) - .SelectMany(x => new List() { x, x, x, x }) - .ToList(); - } - return newColors; - } - - public RasterElement Convert(Raster target) + public SOG.Mesh Convert(Raster target) { // assisting variables var extent = target.GetExtent(); @@ -113,8 +35,8 @@ public RasterElement Convert(Raster target) var pixelType = target.GetPixelType(); // e.g. UCHAR var xyOrigin = target.PixelToMap(0, 0); - RasterElement rasterElement = - new(bandCount, new List(), xOrigin, yOrigin, xSize, ySize, xResolution, yResolution, new List()); + //RasterElement rasterElement = + // new(bandCount, new List(), xOrigin, yOrigin, xSize, ySize, xResolution, yResolution, new List()); // prepare to construct a mesh List newCoords = new(); @@ -130,9 +52,9 @@ public RasterElement Convert(Raster target) PixelBlock block = target.CreatePixelBlock(target.GetWidth(), target.GetHeight()); target.Read(0, 0, block); - RasterBandDefinition bandDef = target.GetBand(i).GetDefinition(); - string bandName = bandDef.GetName(); - rasterElement.band_names.Add(bandName); + //RasterBandDefinition bandDef = target.GetBand(i).GetDefinition(); + //string bandName = bandDef.GetName(); + //rasterElement.band_names.Add(bandName); // Read 2-dimensional pixel values into 1-dimensional byte array // TODO: format to list of float @@ -140,6 +62,7 @@ public RasterElement Convert(Raster target) List pixelsList = pixels2D.Cast().ToList(); pixelValsPerBand.Add(pixelsList); + /* ignoring for now, only needed for interop // transpose to match QGIS data structure var transposedPixelList = Enumerable .Range(0, ySize) @@ -156,6 +79,7 @@ public RasterElement Convert(Raster target) noDataVal = (float)noDataValOriginal; } rasterElement.noDataValue.Add(noDataVal); + */ // construct mesh newFaces = pixelsList @@ -180,8 +104,113 @@ public RasterElement Convert(Raster target) colors = newColors, units = _settingsStore.Current.SpeckleUnits }; - rasterElement.displayValue = new List() { mesh }; + //rasterElement.displayValue = new List() { mesh }; + + return mesh; + } + + private List GetRasterMeshCoords(Raster target, List> pixelValsPerBand) + { + List pixelsList = pixelValsPerBand[^1]; + var extent = target.GetExtent(); + var cellSize = target.GetMeanCellSize(); + + // reproject raster origin to Active CRS + var originMin = new ACG.MapPointBuilderEx( + (float)extent.XMin, + (float)extent.YMax, + 0, + target.GetSpatialReference() + ).ToGeometry(); + + var originMax = new ACG.MapPointBuilderEx( + (float)extent.XMax, + (float)extent.YMin, + 0, + target.GetSpatialReference() + ).ToGeometry(); + + if ( + ACG.GeometryEngine.Instance.Project(originMin, _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference) + is not ACG.MapPoint originMinProjected + || ACG.GeometryEngine.Instance.Project(originMax, _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference) + is not ACG.MapPoint originMaxProjected + ) + { + throw new ValidationException( + $"Conversion to Spatial Reference {_settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference.Name} failed" + ); + } + + // int bandCount = target.GetBandCount(); + double xOrigin = originMinProjected.X; + double yOrigin = originMinProjected.Y; + int xSize = target.GetWidth(); + int ySize = target.GetHeight(); + double xResolution = (originMaxProjected.X - originMinProjected.X) / xSize; // (float)cellSize.Item1; + double yResolution = (originMaxProjected.Y - originMinProjected.Y) / ySize; // -1 * (float)cellSize.Item2; - return rasterElement; + List newCoords = pixelsList + .SelectMany( + (_, ind) => + new List() + { + xOrigin + xResolution * (int)Math.Floor((double)ind / ySize), + yOrigin + yResolution * (ind % ySize), + 0, + xOrigin + xResolution * ((int)Math.Floor((double)ind / ySize) + 1), + yOrigin + yResolution * (ind % ySize), + 0, + xOrigin + xResolution * (int)Math.Floor((double)ind / ySize + 1), + yOrigin + yResolution * (ind % ySize + 1), + 0, + xOrigin + xResolution * (int)Math.Floor((double)ind / ySize), + yOrigin + yResolution * (ind % ySize + 1), + 0 + } + ) + .ToList(); + return newCoords; + } + + private List GetRasterColors(int bandCount, List> pixelValsPerBand) + { + List newColors = new(); + List pixelsList = pixelValsPerBand[^1]; + if (bandCount == 3 || bandCount == 4) // RGB + { + var pixMin0 = pixelValsPerBand[0].Min(); + var pixMax0 = pixelValsPerBand[0].Max(); + var pixMin1 = pixelValsPerBand[1].Min(); + var pixMax1 = pixelValsPerBand[1].Max(); + var pixMin2 = pixelValsPerBand[2].Min(); + var pixMax2 = pixelValsPerBand[2].Max(); + newColors = pixelsList + .Select( + (_, ind) => + (255 << 24) + | (255 * (pixelValsPerBand[0][ind] - pixMin0) / (pixMax0 - pixMin0) << 16) + | (255 * (pixelValsPerBand[1][ind] - pixMin1) / (pixMax1 - pixMin1) << 8) + | 255 * (pixelValsPerBand[2][ind] - pixMin2) / (pixMax2 - pixMin2) + ) + .SelectMany(x => new List() { x, x, x, x }) + .ToList(); + } + else // greyscale + { + var pixMin = pixelValsPerBand[0].Min(); + var pixMax = pixelValsPerBand[0].Max(); + newColors = pixelsList + .Select( + (_, ind) => + (255 << 24) + | (255 * (pixelValsPerBand[0][ind] - pixMin) / (pixMax - pixMin) << 16) + | (255 * (pixelValsPerBand[0][ind] - pixMin) / (pixMax - pixMin) << 8) + | 255 * (pixelValsPerBand[0][ind] - pixMin) / (pixMax - pixMin) + ) + .SelectMany(x => new List() { x, x, x, x }) + .ToList(); + } + return newColors; } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/CoreObjectsBaseToSpeckleTopLevelConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/CoreObjectsBaseToSpeckleTopLevelConverter.cs new file mode 100644 index 000000000..2bb4a2032 --- /dev/null +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/CoreObjectsBaseToSpeckleTopLevelConverter.cs @@ -0,0 +1,52 @@ +using Speckle.Converters.ArcGIS3.ToSpeckle.Helpers; +using Speckle.Converters.Common; +using Speckle.Converters.Common.Objects; +using Speckle.Objects.Data; +using Speckle.Sdk.Models; + +namespace Speckle.Converters.ArcGIS3.ToSpeckle.TopLevel; + +[NameAndRankValue(nameof(AC.CoreObjectsBase), 0)] +public class CoreObjectsBaseToSpeckleTopLevelConverter : IToSpeckleTopLevelConverter +{ + private readonly DisplayValueExtractor _displayValueExtractor; + private readonly PropertiesExtractor _propertiesExtractor; + private readonly IConverterSettingsStore _settingsStore; + + public CoreObjectsBaseToSpeckleTopLevelConverter( + DisplayValueExtractor displayValueExtractor, + PropertiesExtractor propertiesExtractor, + IConverterSettingsStore settingsStore + ) + { + _displayValueExtractor = displayValueExtractor; + _propertiesExtractor = propertiesExtractor; + _settingsStore = settingsStore; + } + + public Base Convert(object target) => Convert((AC.CoreObjectsBase)target); + + private ArcgisObject Convert(AC.CoreObjectsBase target) + { + string type = target.GetType().Name; + + // get display value + List display = _displayValueExtractor.GetDisplayValue(target).ToList(); + + // get properties + Dictionary properties = _propertiesExtractor.GetProperties(target); + + ArcgisObject result = + new() + { + name = type, + type = type, + displayValue = display, + properties = properties, + units = _settingsStore.Current.SpeckleUnits, + applicationId = "" + }; + + return result; + } +} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/PointcloudLayerToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/PointcloudLayerToSpeckleConverter.cs deleted file mode 100644 index 978d036b4..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/PointcloudLayerToSpeckleConverter.cs +++ /dev/null @@ -1,112 +0,0 @@ -using ArcGIS.Core.CIM; -using ArcGIS.Core.Data.Analyst3D; -using ArcGIS.Desktop.Mapping; -using Speckle.Converters.ArcGIS3.Utils; -using Speckle.Converters.Common; -using Speckle.Converters.Common.Objects; -using Speckle.Sdk.Models; - -namespace Speckle.Converters.ArcGIS3.ToSpeckle.TopLevel; - -[NameAndRankValue(nameof(LasDatasetLayer), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] -public class PointCloudToSpeckleConverter - : IToSpeckleTopLevelConverter, - ITypedConverter -{ - private readonly ITypedConverter _pointConverter; - private readonly ITypedConverter _boxConverter; - private readonly IConverterSettingsStore _settingsStore; - - public PointCloudToSpeckleConverter( - ITypedConverter pointConverter, - ITypedConverter boxConverter, - IConverterSettingsStore settingsStore - ) - { - _pointConverter = pointConverter; - _boxConverter = boxConverter; - _settingsStore = settingsStore; - } - - private int GetPointColor(LasPoint pt, object renderer) - { - // get color - int color = 0; - string classCode = pt.ClassCode.ToString(); - if (renderer is CIMTinUniqueValueRenderer uniqueRenderer) - { - foreach (CIMUniqueValueGroup group in uniqueRenderer.Groups) - { - if (color != 0) - { - break; - } - foreach (CIMUniqueValueClass groupClass in group.Classes) - { - if (color != 0) - { - break; - } - for (int i = 0; i < groupClass.Values.Length; i++) - { - if (classCode == groupClass.Values[i].FieldValues[0]) - { - CIMColor symbolColor = groupClass.Symbol.Symbol.GetColor(); - color = symbolColor.CIMColorToInt(); - break; - } - } - } - } - } - else - { - color = pt.RGBColor.RGBToInt(); - } - return color; - } - - public Base Convert(object target) - { - return Convert((LasDatasetLayer)target); - } - - public SGIS.VectorLayer Convert(LasDatasetLayer target) - { - SGIS.VectorLayer speckleLayer = - new() { nativeGeomType = target.MapLayerType.ToString(), geomType = GISLayerGeometryType.POINTCLOUD }; - - // prepare data for pointcloud - List specklePts = new(); - List values = new(); - List speckleColors = new(); - var renderer = target.GetRenderers()[0]; - - using (LasPointCursor ptCursor = target.SearchPoints(new LasPointFilter())) - { - while (ptCursor.MoveNext()) - { - using (LasPoint pt = ptCursor.Current) - { - specklePts.Add(_pointConverter.Convert(pt.ToMapPoint())); - values.Add(pt.ClassCode); - int color = GetPointColor(pt, renderer); - speckleColors.Add(color); - } - } - } - - SOG.Pointcloud cloud = - new() - { - points = specklePts.SelectMany(pt => new List() { pt.x, pt.y, pt.z }).ToList(), - colors = speckleColors, - sizes = values, - bbox = _boxConverter.Convert(target.QueryExtent()), - units = _settingsStore.Current.SpeckleUnits - }; - - speckleLayer.elements.Add(cloud); - return speckleLayer; - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/RasterLayerToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/RasterLayerToSpeckleConverter.cs deleted file mode 100644 index c806ba9a3..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/RasterLayerToSpeckleConverter.cs +++ /dev/null @@ -1,55 +0,0 @@ -using ArcGIS.Core.Data.Raster; -using Speckle.Converters.Common; -using Speckle.Converters.Common.Objects; -using Speckle.Objects.GIS; -using Speckle.Sdk.Models; -using RasterLayer = ArcGIS.Desktop.Mapping.RasterLayer; - -namespace Speckle.Converters.ArcGIS3.ToSpeckle.TopLevel; - -[NameAndRankValue(nameof(RasterLayer), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] -public class RasterLayerToSpeckleConverter : IToSpeckleTopLevelConverter, ITypedConverter -{ - private readonly ITypedConverter _gisRasterConverter; - private readonly IConverterSettingsStore _settingsStore; - - public RasterLayerToSpeckleConverter( - ITypedConverter gisRasterConverter, - IConverterSettingsStore settingsStore - ) - { - _gisRasterConverter = gisRasterConverter; - _settingsStore = settingsStore; - } - - public Base Convert(object target) - { - return Convert((RasterLayer)target); - } - - public SGIS.RasterLayer Convert(RasterLayer target) - { - var speckleLayer = new SGIS.RasterLayer(); - - // layer native crs (for writing properties e.g. resolution, origin etc.) - var spatialRefRaster = target.GetSpatialReference(); - // get active map CRS if layer CRS is empty - if (spatialRefRaster.Unit is null) - { - spatialRefRaster = _settingsStore.Current.ActiveCRSoffsetRotation.SpatialReference; - } - speckleLayer.rasterCrs = new CRS - { - wkt = spatialRefRaster.Wkt, - name = spatialRefRaster.Name, - units_native = spatialRefRaster.Unit.ToString(), - }; - - // write details about the Raster - RasterElement element = _gisRasterConverter.Convert(target.GetRaster()); - element.applicationId = $"{target.URI}_0"; - speckleLayer.elements.Add(element); - - return speckleLayer; - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/TableToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/TableToSpeckleConverter.cs deleted file mode 100644 index b3d8a3a9b..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/TableToSpeckleConverter.cs +++ /dev/null @@ -1,81 +0,0 @@ -using ArcGIS.Core.Data; -using ArcGIS.Desktop.Mapping; -using Speckle.Converters.Common; -using Speckle.Converters.Common.Objects; -using Speckle.Objects; -using Speckle.Objects.GIS; -using Speckle.Sdk.Models; - -namespace Speckle.Converters.ArcGIS3.ToSpeckle.TopLevel; - -[NameAndRankValue(nameof(StandaloneTable), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] -public class StandaloneTableToSpeckleConverter - : IToSpeckleTopLevelConverter, - ITypedConverter -{ - private readonly ITypedConverter<(Row, string), IGisFeature> _gisFeatureConverter; - - public StandaloneTableToSpeckleConverter(ITypedConverter<(Row, string), IGisFeature> gisFeatureConverter) - { - _gisFeatureConverter = gisFeatureConverter; - } - - public Base Convert(object target) - { - return Convert((StandaloneTable)target); - } - - public VectorLayer Convert(StandaloneTable target) - { - VectorLayer speckleLayer = new() { }; - - // get feature class fields - var attributes = new Base(); - var displayTable = target as IDisplayTable; - HashSet visibleFields = new(); - foreach (FieldDescription field in displayTable.GetFieldDescriptions()) - { - if (field.IsVisible) - { - visibleFields.Add(field.Name); - string name = field.Name; - attributes[name] = (int)field.Type; - } - } - - speckleLayer.attributes = attributes; - string spekleGeometryType = "None"; - - int count = 1; - using (RowCursor rowCursor = displayTable.Search()) - { - while (rowCursor.MoveNext()) - { - // Same IDisposable issue appears to happen on Row class too. Docs say it should always be disposed of manually by the caller. - using (Row row = rowCursor.Current) - { - string appId = $"{target.URI}_{count}"; - IGisFeature element = _gisFeatureConverter.Convert((row, appId)); - - // create new element attributes from the existing attributes, based on the vector layer visible fields - // POC: this should be refactored to store the feature layer properties in the context stack, so this logic can be done in the gisFeatureConverter - Base elementAttributes = new(); - foreach (string elementAtt in element.attributes.DynamicPropertyKeys) - { - if (visibleFields.Contains(elementAtt)) - { - elementAttributes[elementAtt] = element.attributes[elementAtt]; - } - } - - element.attributes = elementAttributes; - speckleLayer.elements.Add((Base)element); - } - count++; - } - } - - speckleLayer.geomType = spekleGeometryType; - return speckleLayer; - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/VectorLayerToSpeckleConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/VectorLayerToSpeckleConverter.cs deleted file mode 100644 index eff7ea7d8..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/VectorLayerToSpeckleConverter.cs +++ /dev/null @@ -1,97 +0,0 @@ -using ArcGIS.Core.Data; -using ArcGIS.Desktop.Mapping; -using Speckle.Converters.ArcGIS3.Utils; -using Speckle.Converters.Common; -using Speckle.Converters.Common.Objects; -using Speckle.Objects; -using Speckle.Objects.GIS; -using Speckle.Sdk.Models; - -namespace Speckle.Converters.ArcGIS3.ToSpeckle.TopLevel; - -[NameAndRankValue(nameof(FeatureLayer), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] -public class VectorLayerToSpeckleConverter : IToSpeckleTopLevelConverter, ITypedConverter -{ - private readonly ITypedConverter<(Row, string), IGisFeature> _gisFeatureConverter; - - public VectorLayerToSpeckleConverter(ITypedConverter<(Row, string), IGisFeature> gisFeatureConverter) - { - _gisFeatureConverter = gisFeatureConverter; - } - - public Base Convert(object target) - { - return Convert((FeatureLayer)target); - } - - public VectorLayer Convert(FeatureLayer target) - { - VectorLayer speckleLayer = new(); - - // get feature class fields - var allLayerAttributes = new Base(); - var dispayTable = target as IDisplayTable; - HashSet visibleFieldDescriptions = new(); - - // POC: this should be refactored into a stored method of supported/unsupported field types, since this logic is duplicated in GisFeature converter - foreach (FieldDescription field in dispayTable.GetFieldDescriptions()) - { - if (field.IsVisible) - { - string name = field.Name; - if ( - field.Type == FieldType.Geometry - || field.Type == FieldType.Raster - || field.Type == FieldType.XML - || field.Type == FieldType.Blob - ) - { - continue; - } - - visibleFieldDescriptions.Add(field.Name); - allLayerAttributes[name] = GISAttributeFieldType.FieldTypeToSpeckle(field.Type); - } - } - speckleLayer.attributes = allLayerAttributes; - - // get a simple geometry type - string spekleGeometryType = GISLayerGeometryType.LayerGeometryTypeToSpeckle(target.ShapeType); - speckleLayer.geomType = spekleGeometryType; - - // search the rows - // RowCursor is IDisposable but is not being correctly picked up by IDE warnings. - // This means we need to be carefully adding using statements based on the API documentation coming from each method/class - - int count = 1; - using (RowCursor rowCursor = target.Search()) - { - while (rowCursor.MoveNext()) - { - // Same IDisposable issue appears to happen on Row class too. Docs say it should always be disposed of manually by the caller. - using (Row row = rowCursor.Current) - { - string appId = $"{target.URI}_{count}"; - IGisFeature element = _gisFeatureConverter.Convert((row, appId)); - - // create new element attributes from the existing attributes, based on the vector layer visible fields - // POC: this should be refactored to store the feeature layer properties in the context stack, so this logic can be done in the gisFeatureConverter - Base elementAttributes = new(); - foreach (string elementAtt in element.attributes.DynamicPropertyKeys) - { - if (visibleFieldDescriptions.Contains(elementAtt)) - { - elementAttributes[elementAtt] = element.attributes[elementAtt]; - } - } - - element.attributes = elementAttributes; - speckleLayer.elements.Add((Base)element); - } - count++; - } - } - - return speckleLayer; - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/ArcGISFieldUtils.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/ArcGISFieldUtils.cs index 5e48fb6de..758c99aa0 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/ArcGISFieldUtils.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/ArcGISFieldUtils.cs @@ -2,10 +2,10 @@ using ArcGIS.Core.Data; using ArcGIS.Core.Data.Exceptions; using Speckle.InterfaceGenerator; -using Speckle.Objects; -using Speckle.Objects.GIS; using Speckle.Sdk; +using Speckle.Sdk.Common.Exceptions; using Speckle.Sdk.Models; +using Speckle.Sdk.Models.Collections; using Speckle.Sdk.Models.GraphTraversal; using FieldDescription = ArcGIS.Core.Data.DDL.FieldDescription; @@ -80,48 +80,54 @@ public RowBuffer AssignFieldValuesToRow( return rowBuffer; } - public List GetFieldsFromSpeckleLayer(VectorLayer target) + public List GetFieldsFromSpeckleLayer(Collection target) { - List fields = new(); - List fieldAdded = new(); - - foreach (var field in target.attributes.GetMembers(DynamicBaseMemberType.Dynamic)) + if (target["fields"] is Dictionary attributes) { - if (!fieldAdded.Contains(field.Key) && field.Key != FID_FIELD_NAME) + List fields = new(); + List fieldAdded = new(); + + foreach (var field in attributes) { - // POC: TODO check for the forbidden characters/combinations: https://support.esri.com/en-us/knowledge-base/what-characters-should-not-be-used-in-arcgis-for-field--000005588 - try + if (!fieldAdded.Contains(field.Key) && field.Key != FID_FIELD_NAME) { - if (field.Value is not null) + // POC: TODO check for the forbidden characters/combinations: https://support.esri.com/en-us/knowledge-base/what-characters-should-not-be-used-in-arcgis-for-field--000005588 + try { - string key = field.Key; - FieldType fieldType = GISAttributeFieldType.FieldTypeToNative(field.Value); + if (field.Value is not null) + { + string key = field.Key; + FieldType fieldType = GISAttributeFieldType.FieldTypeToNative(field.Value); - FieldDescription fieldDescription = - new(_characterCleaner.CleanCharacters(key), fieldType) { AliasName = key }; - fields.Add(fieldDescription); - fieldAdded.Add(key); + FieldDescription fieldDescription = + new(_characterCleaner.CleanCharacters(key), fieldType) { AliasName = key }; + fields.Add(fieldDescription); + fieldAdded.Add(key); + } + else + { + // log missing field + } } - else + catch (GeodatabaseFieldException) { // log missing field } } - catch (GeodatabaseFieldException) - { - // log missing field - } } - } - // every feature needs Speckle_ID to be colored (before we implement native GIS renderers on Receive) - if (!fieldAdded.Contains("Speckle_ID")) - { - FieldDescription fieldDescriptionId = - new(_characterCleaner.CleanCharacters("Speckle_ID"), FieldType.String) { AliasName = "Speckle_ID" }; - fields.Add(fieldDescriptionId); + // every feature needs Speckle_ID to be colored (before we implement native GIS renderers on Receive) + if (!fieldAdded.Contains("Speckle_ID")) + { + FieldDescription fieldDescriptionId = + new(_characterCleaner.CleanCharacters("Speckle_ID"), FieldType.String) { AliasName = "Speckle_ID" }; + fields.Add(fieldDescriptionId); + } + + return fields; } - return fields; + + throw new ValidationException("Creation of the custom fields failed: provided object is not a valid Vector Layer"); } public List<(FieldDescription, Func)> CreateFieldsFromListOfBase(List target) @@ -281,11 +287,14 @@ List fieldAdded List fields = new(); // Get Fields, geomType and attributeFunction - separately for GIS and non-GIS - if (listOfContextAndTrackers.FirstOrDefault().Item1.Parent?.Current is SGIS.VectorLayer vLayer) // GIS + if ( + listOfContextAndTrackers.FirstOrDefault().Item1.Parent?.Current is Collection vLayer + && vLayer["fields"] is Dictionary + ) // GIS { fields = GetFieldsFromSpeckleLayer(vLayer); fieldsAndFunctions = fields - .Select(x => (x, (Func)(y => (y as IGisFeature)?.attributes[x.Name]))) + .Select(x => (x, (Func)(y => (y?["properties"] as Base)?[x.Name]))) .ToList(); } else // non-GIS diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/CRSorigin.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/CRSorigin.cs index eeb12cd01..e70eecf08 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/CRSorigin.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/CRSorigin.cs @@ -1,5 +1,3 @@ -using ArcGIS.Core.Geometry; - namespace Speckle.Converters.ArcGIS3.Utils; /// @@ -21,13 +19,13 @@ public CRSorigin(double latDegrees, double lonDegrees) LonDegrees = lonDegrees; } - public SpatialReference CreateCustomCRS() + public ACG.SpatialReference CreateCustomCRS() { string wktString = // QGIS example: $"PROJCS[\"unknown\", GEOGCS[\"unknown\", DATUM[\"WGS_1984\", SPHEROID[\"WGS 84\", 6378137, 298.257223563], AUTHORITY[\"EPSG\", \"6326\"]], PRIMEM[\"Greenwich\", 0, AUTHORITY[\"EPSG\", \"8901\"]], UNIT[\"degree\", 0.0174532925199433]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"latitude_of_origin\", {LatDegrees}], PARAMETER[\"central_meridian\", {LonDegrees}], PARAMETER[\"scale_factor\", 1], PARAMETER[\"false_easting\", 0], PARAMETER[\"false_northing\", 0], UNIT[\"metre\", 1, AUTHORITY[\"EPSG\", \"9001\"]], AXIS[\"Easting\", EAST], AXIS[\"Northing\", NORTH]]"; // replicating ArcGIS created custom WKT: $"PROJCS[\"SpeckleSpatialReference_latlon_{LatDegrees}_{LonDegrees}\", GEOGCS[\"GCS_WGS_1984\", DATUM[\"D_WGS_1984\", SPHEROID[\"WGS_1984\", 6378137.0, 298.257223563]], PRIMEM[\"Greenwich\", 0.0], UNIT[\"Degree\", 0.0174532925199433]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"False_Easting\", 0.0], PARAMETER[\"False_Northing\", 0.0], PARAMETER[\"Central_Meridian\", {LonDegrees}], PARAMETER[\"Scale_Factor\", 1.0], PARAMETER[\"Latitude_Of_Origin\", {LatDegrees}], UNIT[\"Meter\", 1.0]]"; - return SpatialReferenceBuilder.CreateSpatialReference(wktString); + return ACG.SpatialReferenceBuilder.CreateSpatialReference(wktString); } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/CrsUtils.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/CrsUtils.cs deleted file mode 100644 index 8177e3096..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/CrsUtils.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Speckle.Converters.Common; -using Speckle.InterfaceGenerator; -using Speckle.Sdk.Models; - -namespace Speckle.Converters.ArcGIS3.Utils; - -[GenerateAutoInterface] -public class CrsUtils(IConverterSettingsStore settingsStore) : ICrsUtils -{ - public IDisposable? FindSetCrsDataOnReceive(Base? rootObj) - { - if (rootObj is SGIS.VectorLayer vLayer) - { - // create Spatial Reference (i.e. Coordinate Reference System - CRS) - string wktString = string.Empty; - if (vLayer.crs is not null && vLayer.crs.wkt is not null) - { - wktString = vLayer.crs.wkt; - } - - // ATM, GIS commit CRS is stored per layer, but should be moved to the Root level too, and created once per Receive - ACG.SpatialReference spatialRef = ACG.SpatialReferenceBuilder.CreateSpatialReference(wktString); - - 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); - return settingsStore.Push(x => - x with - { - ActiveCRSoffsetRotation = new CRSoffsetRotation(spatialRef, latOffset, lonOffset, trueNorthRadians) - } - ); - } - - return null; - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/FeatureClassUtils.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/FeatureClassUtils.cs index 0795d4550..81bd19a87 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/FeatureClassUtils.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/FeatureClassUtils.cs @@ -113,10 +113,12 @@ private Geodatabase GetDatabase() $"speckle_{speckleType}_SR_{activeSR.SpatialReference.Name[..Math.Min(15, activeSR.SpatialReference.Name.Length - 1)]}_X_{xOffset}_Y_{yOffset}_North_{trueNorth}_speckleID_{parentId}"; // for gis elements, use a parent layer ID - if (item.Key.Parent?.Current is SGIS.VectorLayer vLayer) + /* + if (item.Key.Parent?.Current is SGIS.GisLayer vLayer) { uniqueKey = "speckleID_" + vLayer.id; } + */ if (!geometryGroups.TryGetValue(uniqueKey, out _)) { @@ -279,20 +281,23 @@ private ACG.GeometryType DefineDatasetGeomType( ) { ACG.GeometryType geomType; - if (listOfContextAndTrackers.FirstOrDefault().Item1.Parent?.Current is SGIS.VectorLayer vLayer) // GIS + // remove all native geometry type checks for now + /* + if ( + listOfContextAndTrackers.FirstOrDefault().Item1.Parent?.Current is SGIS.GisLayer vLayer + && vLayer["attributes"] is Base + ) // GIS { geomType = GISLayerGeometryType.GetNativeLayerGeometryType(vLayer); - } - else // non-GIS + }*/ + + var hostAppGeom = listOfContextAndTrackers[0].Item2.HostAppGeom; + if (hostAppGeom is null) // type check, should not happen { - var hostAppGeom = listOfContextAndTrackers[0].Item2.HostAppGeom; - if (hostAppGeom is null) // type check, should not happen - { - // TODO: Unsure about the type this exception should be. - throw new SpeckleException("Conversion failed"); - } - geomType = hostAppGeom.GeometryType; + // TODO: Unsure about the type this exception should be. + throw new SpeckleException("Conversion failed"); } + geomType = hostAppGeom.GeometryType; return geomType; } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/GISAttributeFieldType.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/GISAttributeFieldType.cs index c9d848119..f2b7150b1 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/GISAttributeFieldType.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/GISAttributeFieldType.cs @@ -18,26 +18,6 @@ public static class GISAttributeFieldType public const string TIMESTAMPOFFSET = "TimeStampOffset"; public const string BOOL = "Bool"; // not supported in ArcGIS, only in QGIS - public static string FieldTypeToSpeckle(FieldType fieldType) - { - return fieldType switch - { - FieldType.GUID => GUID_TYPE, - FieldType.OID => OID, - FieldType.String => STRING_TYPE, - FieldType.Single => FLOAT_TYPE, - FieldType.Integer => INTEGER_TYPE, - FieldType.BigInteger => BIGINTEGER, - FieldType.SmallInteger => SMALLINTEGER, - FieldType.Double => DOUBLE_TYPE, - FieldType.Date => DATETIME, - FieldType.DateOnly => DATEONLY, - FieldType.TimeOnly => TIMEONLY, - FieldType.TimestampOffset => TIMESTAMPOFFSET, - _ => throw new ArgumentOutOfRangeException(nameof(fieldType)), - }; - } - public static FieldType FieldTypeToNative(object fieldType) { if (fieldType is string fieldStringType) diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/GISLayerGeometryType.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/GISLayerGeometryType.cs deleted file mode 100644 index f10c872d6..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/GISLayerGeometryType.cs +++ /dev/null @@ -1,43 +0,0 @@ -using ArcGIS.Core.CIM; - -namespace Speckle.Converters.ArcGIS3.Utils; - -public static class GISLayerGeometryType -{ - public const string NONE = "None"; - public const string POINT = "Point"; - public const string POLYLINE = "Polyline"; - public const string POLYGON = "Polygon"; - public const string POLYGON3D = "Polygon3d"; - public const string MULTIPATCH = "Multipatch"; - public const string POINTCLOUD = "Pointcloud"; - - public static string LayerGeometryTypeToSpeckle(esriGeometryType nativeGeometryType) - { - return nativeGeometryType switch - { - esriGeometryType.esriGeometryMultipoint => GISLayerGeometryType.POINT, - esriGeometryType.esriGeometryPoint => GISLayerGeometryType.POINT, - esriGeometryType.esriGeometryLine => GISLayerGeometryType.POLYLINE, - esriGeometryType.esriGeometryPolyline => GISLayerGeometryType.POLYLINE, - esriGeometryType.esriGeometryPolygon => GISLayerGeometryType.POLYGON, - esriGeometryType.esriGeometryMultiPatch => GISLayerGeometryType.MULTIPATCH, - _ => GISLayerGeometryType.NONE, - }; - } - - public static ACG.GeometryType GetNativeLayerGeometryType(Objects.GIS.VectorLayer target) - { - string? originalGeomType = target.geomType != null ? target.geomType : target.nativeGeomType; - return originalGeomType switch - { - GISLayerGeometryType.NONE => ACG.GeometryType.Unknown, - GISLayerGeometryType.POINT => ACG.GeometryType.Multipoint, - GISLayerGeometryType.POLYGON => ACG.GeometryType.Polygon, - GISLayerGeometryType.POLYLINE => ACG.GeometryType.Polyline, - GISLayerGeometryType.MULTIPATCH => ACG.GeometryType.Multipatch, - GISLayerGeometryType.POLYGON3D => ACG.GeometryType.Multipatch, - _ => throw new ArgumentOutOfRangeException(nameof(target)), - }; - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/GeometryExtension.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/GeometryExtension.cs deleted file mode 100644 index 7d873f8a2..000000000 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/GeometryExtension.cs +++ /dev/null @@ -1,144 +0,0 @@ -using ArcGIS.Core.CIM; - -namespace Speckle.Converters.ArcGIS3.Utils; - -public static class GeometryUtils -{ - public static bool ValidateMesh(this SOG.Mesh mesh) - { - if (mesh.vertices.Count < 3) - { - return false; - } - else if (mesh.faces.Count < 4) - { - return false; - } - return true; - } - - public static int RGBToInt(this CIMRGBColor color) - { - return (255 << 24) | ((int)Math.Round(color.R) << 16) | ((int)Math.Round(color.G) << 8) | (int)Math.Round(color.B); - } - - public static int CIMColorToInt(this CIMColor color) - { - return (255 << 24) - | ((int)Math.Round(color.Values[0]) << 16) - | ((int)Math.Round(color.Values[1]) << 8) - | (int)Math.Round(color.Values[2]); - } - - public static List Values(this SOG.Arc arc) - { - List coords = - new() - { - arc.startPoint.x, - arc.startPoint.y, - arc.startPoint.z, - arc.midPoint.x, - arc.midPoint.y, - arc.midPoint.z, - arc.endPoint.x, - arc.endPoint.y, - arc.endPoint.z - }; - return coords; - } - - public static bool IsClockwisePolygon(this SOG.Polyline polyline) - { - bool isClockwise; - double sum = 0; - - List points = polyline.GetPoints(); - - if (points.Count < 3) - { - throw new ArgumentException("Not enough points for polygon orientation check"); - } - if (points[0] != points[^1]) - { - points.Add(points[0]); - } - - for (int i = 0; i < points.Count - 1; i++) - { - sum += (points[i + 1].x - points[i].x) * (points[i + 1].y + points[i].y); - } - isClockwise = sum > 0; - return isClockwise; - } - - public static SGIS.GisMultipatchGeometry CompleteMultipatchTriangleStrip( - this ACG.Multipatch target, - List> allPoints, - int idx - ) - { - SGIS.GisMultipatchGeometry multipatch = new(); - List pointCoords = allPoints[idx].SelectMany(x => new List() { x.x, x.y, x.z }).ToList(); - - // get data for this multipatch part - int ptCount = target.GetPatchPointCount(idx); - - for (int ptIdx = 0; ptIdx < ptCount; ptIdx++) - { - if (ptIdx >= 2) // every new point adds a triangle - { - multipatch.faces.AddRange(new List() { 3, ptIdx - 2, ptIdx - 1, ptIdx }); - multipatch.vertices.AddRange(pointCoords.GetRange(3 * (ptIdx - 2), 9).ToList()); - } - } - return multipatch; - } - - public static SGIS.GisMultipatchGeometry CompleteMultipatchTriangles( - this ACG.Multipatch target, - List> allPoints, - int idx - ) - { - SGIS.GisMultipatchGeometry multipatch = new(); - List pointCoords = allPoints[idx].SelectMany(x => new List() { x.x, x.y, x.z }).ToList(); - - // get data for this multipatch part - int ptCount = target.GetPatchPointCount(idx); - for (int ptIdx = 0; ptIdx < ptCount; ptIdx++) - { - var convertedPt = allPoints[idx][ptIdx]; - if (ptIdx >= 2 && (ptIdx + 1) % 3 == 0) // every 3 new points is a new triangle - { - multipatch.faces.AddRange(new List() { 3, ptIdx - 2, ptIdx - 1, ptIdx }); - multipatch.vertices.AddRange(pointCoords.GetRange(3 * (ptIdx - 2), 9).ToList()); - } - } - return multipatch; - } - - public static SGIS.GisMultipatchGeometry CompleteMultipatchTriangleFan( - this ACG.Multipatch target, - List> allPoints, - int idx - ) - { - SGIS.GisMultipatchGeometry multipatch = new(); - List pointCoords = allPoints[idx].SelectMany(x => new List() { x.x, x.y, x.z }).ToList(); - - // get data for this multipatch part - int ptCount = target.GetPatchPointCount(idx); - - for (int ptIdx = 0; ptIdx < ptCount; ptIdx++) - { - var convertedPt = allPoints[idx][ptIdx]; - if (ptIdx >= 2) // every new point adds a triangle (originates from 0) - { - multipatch.faces.AddRange(new List() { 3, 0, ptIdx - 1, ptIdx }); - multipatch.vertices.AddRange(pointCoords.GetRange(2 * (ptIdx - 2), 6).ToList()); - } - } - return multipatch; - } -} diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json index 562868855..2b459e62f 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json @@ -224,7 +224,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.Logging": { @@ -247,18 +247,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -268,14 +268,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json index 32556ab6c..763bad71e 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json index 9a85aefe5..2559efbe4 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json index f5488d3f8..2745b420f 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -292,7 +292,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -330,18 +330,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -351,14 +351,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json index a92f983b2..644ac5291 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json @@ -220,9 +220,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -230,8 +230,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -248,7 +248,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -306,14 +306,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json b/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json index c8d5f5b2f..0b25d680f 100644 --- a/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json +++ b/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json b/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json index 364836f97..0e264e050 100644 --- a/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json +++ b/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json @@ -219,7 +219,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.Logging": { @@ -242,18 +242,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -262,14 +262,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json index 3a309bd36..7c3aff1c7 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json @@ -272,7 +272,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.Logging": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -316,14 +316,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json index 0c6e200ef..3e477b593 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json @@ -272,7 +272,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.Logging": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -316,14 +316,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json index 12a8c3dbd..18d128ed8 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json @@ -272,7 +272,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.Logging": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -316,14 +316,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json index e95b39f1a..7f32d3318 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json @@ -229,9 +229,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -239,8 +239,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui.webview": { @@ -257,7 +257,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -315,14 +315,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2020/Speckle.Converters.Navisworks2020.csproj b/Converters/Navisworks/Speckle.Converters.Navisworks2020/Speckle.Converters.Navisworks2020.csproj new file mode 100644 index 000000000..e00724486 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2020/Speckle.Converters.Navisworks2020.csproj @@ -0,0 +1,20 @@ + + + net48 + x64 + $(DefineConstants);NAVIS2020 + Debug;Release;Local + + + + + + + + + + + + + + diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json new file mode 100644 index 000000000..a42e08815 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json @@ -0,0 +1,352 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2020.0.0, )", + "resolved": "2020.0.0", + "contentHash": "biB2RR0HNxrbHD7zBZoJUhwzPwVE5IFg9l4/747bHOLRJC3FM5UtzdjGwvRZwfOlFyM4P26NYARSiCaxSNIBpg==" + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Speckle.Objects": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + } + } + } +} \ No newline at end of file diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2021/Speckle.Converters.Navisworks2021.csproj b/Converters/Navisworks/Speckle.Converters.Navisworks2021/Speckle.Converters.Navisworks2021.csproj new file mode 100644 index 000000000..79e45bc9a --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2021/Speckle.Converters.Navisworks2021.csproj @@ -0,0 +1,20 @@ + + + net48 + x64 + $(DefineConstants);NAVIS2021 + Debug;Release;Local + + + + + + + + + + + + + + diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json new file mode 100644 index 000000000..6372a4c5b --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json @@ -0,0 +1,352 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2021.0.0, )", + "resolved": "2021.0.0", + "contentHash": "cY7sU8dxISfTQLinUIOki/azS+bIX28uEZQO4ijrq0eOUhJlKcKWS273kHPoL0+T0Xrkd+1OWj2YFa2PbHGgwQ==" + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Speckle.Objects": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + } + } + } +} \ No newline at end of file diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2022/Speckle.Converters.Navisworks2022.csproj b/Converters/Navisworks/Speckle.Converters.Navisworks2022/Speckle.Converters.Navisworks2022.csproj new file mode 100644 index 000000000..c95f1af02 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2022/Speckle.Converters.Navisworks2022.csproj @@ -0,0 +1,20 @@ + + + net48 + x64 + $(DefineConstants);NAVIS2022 + Debug;Release;Local + + + + + + + + + + + + + + diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json new file mode 100644 index 000000000..d868b6b61 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json @@ -0,0 +1,352 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2022.0.0, )", + "resolved": "2022.0.0", + "contentHash": "x0RW4Iqw8YHVK4ZiLEyLLfI5ffuRBR0KhEvmy9ZpT8SLNeDL/c6jn+7JWBVFUJPu+ObVnU+KqJjLdHmphN0lMQ==" + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Speckle.Objects": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + } + } + } +} \ No newline at end of file diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2023/Speckle.Converters.Navisworks2023.csproj b/Converters/Navisworks/Speckle.Converters.Navisworks2023/Speckle.Converters.Navisworks2023.csproj new file mode 100644 index 000000000..e81f35e97 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2023/Speckle.Converters.Navisworks2023.csproj @@ -0,0 +1,20 @@ + + + net48 + x64 + $(DefineConstants);NAVIS2023 + Debug;Release;Local + + + + + + + + + + + + + + diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json new file mode 100644 index 000000000..7fae36030 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json @@ -0,0 +1,352 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2023.0.0, )", + "resolved": "2023.0.0", + "contentHash": "+qRmcyLD3DpuSSwX2IbEwp0gJllbiKgv313PZfEfh8I2uvxf+5YNqDzY0OGOxWIdPKqaQmdUZ1ELzoDtucCWzA==" + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Speckle.Objects": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + } + } + } +} \ No newline at end of file diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2024/Speckle.Converters.Navisworks2024.csproj b/Converters/Navisworks/Speckle.Converters.Navisworks2024/Speckle.Converters.Navisworks2024.csproj new file mode 100644 index 000000000..4b10afb81 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2024/Speckle.Converters.Navisworks2024.csproj @@ -0,0 +1,20 @@ + + + net48 + x64 + $(DefineConstants);NAVIS2024 + Debug;Release;Local + + + + + + + + + + + + + + diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json new file mode 100644 index 000000000..82f435381 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json @@ -0,0 +1,352 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2024.0.0, )", + "resolved": "2024.0.0", + "contentHash": "SnkvhcENMy3YLWbzy4lCweMuWdAbNzAtwvffFH2xVHmnm/2INnMGucYGazAHN496d6wgl9YRGa4qftgVsg7T7A==" + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Speckle.Objects": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + } + } + } +} \ No newline at end of file diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2025/Speckle.Converters.Navisworks2025.csproj b/Converters/Navisworks/Speckle.Converters.Navisworks2025/Speckle.Converters.Navisworks2025.csproj new file mode 100644 index 000000000..0ef228dda --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2025/Speckle.Converters.Navisworks2025.csproj @@ -0,0 +1,20 @@ + + + net48 + x64 + $(DefineConstants);NAVIS2025 + Debug;Release;Local + + + + + + + + + + + + + + diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json new file mode 100644 index 000000000..984c3e5ab --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json @@ -0,0 +1,352 @@ +{ + "version": 2, + "dependencies": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Navisworks.API": { + "type": "Direct", + "requested": "[2025.0.0, )", + "resolved": "2025.0.0", + "contentHash": "+q2IObnUGqtC1O/ddy2p0HKm1eXRo7Yi80oD9VIWClidvGb3rVsXKZWBHiv4HwSn5JcOMSEt1cdSlRQLm8Ehjg==" + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Net.WebSockets.Client.Managed": "1.0.22", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "W8DPQjkMScOMTtJbPwmPyj9c3zYSFGawDW3jwlBOOsnY+EzZFLgNQ/UMkK35JmkNOVPdCyPr2Tw7Vv9N+KA3ZQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.dynamic_cdecl": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.dynamic_cdecl": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "ZsaKKhgYF9B1fvcnOGKl3EycNAwd9CRWX7v0rEfuPWhQQ5Jjpvf2VEHahiLIGHio3hxi3EIKFJw9KvyowWOUAw==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Net.WebSockets.Client.Managed": { + "type": "Transitive", + "resolved": "1.0.22", + "contentHash": "WqEOxPlXjuZrIjUtXNE9NxEfU/n5E35iV2PtoZdJSUC4tlrqwHnTee+wvMIM4OUaJWmwrymeqcgYrE0IkGAgLA==", + "dependencies": { + "System.Buffers": "4.4.0", + "System.Numerics.Vectors": "4.4.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", + "dependencies": { + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.3" + } + }, + "speckle.connectors.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Connectors.Logging": "[1.0.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.dui": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Connectors.Common": "[1.0.0, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" + } + }, + "speckle.connectors.logging": { + "type": "Project" + }, + "speckle.converters.common": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.218, )" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Speckle.Objects": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.218" + } + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.Bcl.AsyncInterfaces": "5.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" + } + } + } +} \ No newline at end of file diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/ClassPropertiesExtractor.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/ClassPropertiesExtractor.cs new file mode 100644 index 000000000..d55a7a801 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/ClassPropertiesExtractor.cs @@ -0,0 +1,51 @@ +using static Speckle.Converter.Navisworks.Helpers.PropertyHelpers; + +namespace Speckle.Converter.Navisworks.ToSpeckle; + +public static class ClassPropertiesExtractor +{ + public static Dictionary? GetClassProperties(NAV.ModelItem modelItem) + { + if (modelItem == null) + { + throw new ArgumentNullException(nameof(modelItem)); + } + + return ExtractClassProperties(modelItem); + } + + /// + /// Extracts property sets from a NAV.ModelItem and adds them to a dictionary, + /// including various details such as ClassName, ClassDisplayName, DisplayName, + /// InstanceGuid, Source, and Source Guid, ensuring that null or empty values + /// are not included in the final dictionary. + /// + /// The NAV.ModelItem from which properties are extracted. + /// A dictionary containing non-null/non-empty properties of the modelItem. + private static Dictionary ExtractClassProperties(NAV.ModelItem modelItem) + { + var propertyDictionary = new Dictionary(); + + // Define properties and their values to be added to the dictionary + var propertiesToAdd = new (string PropertyName, object? Value)[] + { + ("ClassName", modelItem.ClassName), + ("ClassDisplayName", modelItem.ClassDisplayName), + ("DisplayName", modelItem.DisplayName), + ("InstanceGuid", modelItem.InstanceGuid != Guid.Empty ? modelItem.InstanceGuid : null), + ("Source", modelItem.Model?.SourceFileName), + ("Source Guid", modelItem.Model?.SourceGuid) + }; + + // Loop through properties and add them if they are not null or empty + foreach ((string propertyName, object? value) in propertiesToAdd) + { + if (value != null) + { + AddPropertyIfNotNullOrEmpty(propertyDictionary, propertyName, value); + } + } + + return propertyDictionary; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/DisplayValueExtractor.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/DisplayValueExtractor.cs new file mode 100644 index 000000000..7ba6a7b24 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/DisplayValueExtractor.cs @@ -0,0 +1,38 @@ +using Microsoft.Extensions.Logging; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using Speckle.Sdk.Models; +using static Speckle.Converter.Navisworks.Helpers.ElementSelectionHelper; + +namespace Speckle.Converter.Navisworks.ToSpeckle; + +public class DisplayValueExtractor +{ + private readonly IConverterSettingsStore _converterSettings; + private readonly ILogger _logger; + private readonly GeometryToSpeckleConverter _geometryConverter; + + public DisplayValueExtractor( + IConverterSettingsStore converterSettings, + ILogger logger + ) + { + _converterSettings = converterSettings; + _logger = logger; + _geometryConverter = new GeometryToSpeckleConverter(_converterSettings.Current); + } + + internal List GetDisplayValue(NAV.ModelItem modelItem) + { + if (modelItem == null) + { + throw new ArgumentNullException(nameof(modelItem)); + } + if (!modelItem.HasGeometry) + { + return []; + } + + return !IsElementVisible(modelItem) ? [] : _geometryConverter.Convert(modelItem); + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/ModelPropertiesExtractor.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/ModelPropertiesExtractor.cs new file mode 100644 index 000000000..cd6ae2230 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/ModelPropertiesExtractor.cs @@ -0,0 +1,59 @@ +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; + +namespace Speckle.Converter.Navisworks.ToSpeckle; + +public class ModelPropertiesExtractor +{ + private readonly IConverterSettingsStore _settingsStore; + + public ModelPropertiesExtractor(IConverterSettingsStore settingsStore) + { + _settingsStore = settingsStore; + } + + internal Dictionary? GetModelProperties(NAV.Model model) + { + if (_settingsStore.Current.User.ExcludeProperties) + { + return null; + } + + var propertyDictionary = ExtractModelProperties(model); + + return propertyDictionary; + } + + /// + /// Extracts model properties from a NAV.ModelItem and adds them to a dictionary, + /// + /// The NAV.ModelItem from which model properties are extracted. + /// A dictionary containing model properties of the modelItem. + private static Dictionary ExtractModelProperties(NAV.Model model) + { + var propertyDictionary = new Dictionary(); + + // Define properties and their values to be added to the dictionary + var propertiesToAdd = new (string PropertyName, object? Value)[] + { + ("Creator", model.Creator), + ("Filename", model.FileName), + ("Source Filename", model.SourceFileName), + ("Units", model.Units.ToString()), + ("Transform", model.Transform.ToString()), + ("Guid", model.Guid != Guid.Empty ? model.Guid : null), + ("Source Guid", model.SourceGuid != Guid.Empty ? model.SourceGuid : null) + }; + + // Loop through properties and add them if they are not null or empty + foreach ((string propertyName, object? value) in propertiesToAdd) + { + if (value != null) + { + Helpers.PropertyHelpers.AddPropertyIfNotNullOrEmpty(propertyDictionary, propertyName, value); + } + } + + return propertyDictionary; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/PropertySetsExtractor.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/PropertySetsExtractor.cs new file mode 100644 index 000000000..ea7c8bc8f --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/PropertySetsExtractor.cs @@ -0,0 +1,64 @@ +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using static Speckle.Converter.Navisworks.Helpers.PropertyHelpers; + +namespace Speckle.Converter.Navisworks.ToSpeckle; + +public class PropertySetsExtractor(IConverterSettingsStore settingsStore) +{ + internal Dictionary? GetPropertySets(NAV.ModelItem modelItem) + { + if (settingsStore.Current.User.ExcludeProperties) + { + return null; + } + + var propertyDictionary = ExtractPropertySets(modelItem); + + return propertyDictionary; + } + + /// + /// Extracts property sets from a NAV.ModelItem and adds them to a dictionary, + /// PropertySets are specific to the host application source appended to Navisworks and therefore + /// arbitrary in nature. + /// + /// The NAV.ModelItem from which property sets are extracted. + /// A dictionary containing property sets of the modelItem. + private Dictionary ExtractPropertySets(NAV.ModelItem modelItem) + { + var propertySetDictionary = new Dictionary(); + + foreach (var propertyCategory in modelItem.PropertyCategories) + { + if (IsCategoryToBeSkipped(propertyCategory)) + { + continue; + } + + var propertySet = new Dictionary(); + + foreach (var property in propertyCategory.Properties) + { + string sanitizedName = SanitizePropertyName(property.DisplayName); + var propertyValue = ConvertPropertyValue(property.Value, settingsStore.Current.Derived.SpeckleUnits); + + if (propertyValue != null) + { + propertySet[sanitizedName] = propertyValue; + } + } + + if (propertySet.Count <= 0) + { + continue; + } + + string categoryName = SanitizePropertyName(propertyCategory.DisplayName); + + propertySetDictionary[categoryName] = propertySet; + } + + return propertySetDictionary; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/BasePropertyHandler.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/BasePropertyHandler.cs new file mode 100644 index 000000000..363ec66e0 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/BasePropertyHandler.cs @@ -0,0 +1,101 @@ +namespace Speckle.Converter.Navisworks.ToSpeckle.PropertyHandlers; + +/// +/// Base property handler providing common functionality for property assignment. +/// +public abstract class BasePropertyHandler( + PropertySetsExtractor propertySetsExtractor, + ModelPropertiesExtractor modelPropertiesExtractor +) : IPropertyHandler +{ + public void AssignProperties(SSM.Base speckleObject, NAV.ModelItem modelItem) + { + AssignClassProperties(speckleObject, modelItem); + AssignPropertySets(speckleObject, modelItem); + } + + private static void AssignClassProperties(SSM.Base speckleObject, NAV.ModelItem modelItem) + { + var classProperties = ClassPropertiesExtractor.GetClassProperties(modelItem); + if (classProperties == null) + { + return; + } + + foreach (var kvp in classProperties) + { + if (speckleObject != null) + { + speckleObject[kvp.Key] = kvp.Value; + } + } + } + + protected abstract void AssignPropertySets(SSM.Base speckleObject, NAV.ModelItem modelItem); + + protected Dictionary> ProcessPropertySets(NAV.ModelItem modelItem) + { + var categorizedProperties = new Dictionary>(); + var propertySets = propertySetsExtractor.GetPropertySets(modelItem); + + if (propertySets != null) + { + foreach (var category in propertySets.Where(c => c.Key != "Internal")) + { + if (category.Value is not Dictionary properties) + { + continue; + } + + var categoryProps = CreatePropertyDictionary(properties); + if (categoryProps.Count > 0) + { + categorizedProperties[category.Key] = categoryProps; + } + } + } + + if (modelItem == null) + { + throw new ArgumentNullException(nameof(modelItem)); + } + + AddModelProperties(modelItem, categorizedProperties); + return categorizedProperties; + } + + private void AddModelProperties( + NAV.ModelItem modelItem, + Dictionary> categorizedProperties + ) + { + if (!modelItem.HasModel) + { + return; + } + + var modelProperties = modelPropertiesExtractor.GetModelProperties(modelItem.Model); + if (modelProperties == null) + { + return; + } + + var modelProps = CreatePropertyDictionary(modelProperties); + if (modelProps.Count > 0) + { + categorizedProperties["Model"] = modelProps; + } + } + + private static Dictionary CreatePropertyDictionary(Dictionary properties) + { + var propertyDict = new Dictionary(); + foreach (var prop in properties.Where(prop => IsValidPropertyValue(prop.Value))) + { + propertyDict[prop.Key] = prop.Value; + } + return propertyDict; + } + + protected static bool IsValidPropertyValue(object? value) => value != null && !string.IsNullOrEmpty(value.ToString()); +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/HierarchicalPropertyHandler.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/HierarchicalPropertyHandler.cs new file mode 100644 index 000000000..9f25c6fb9 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/HierarchicalPropertyHandler.cs @@ -0,0 +1,117 @@ +namespace Speckle.Converter.Navisworks.ToSpeckle.PropertyHandlers; + +/// +/// Handles property assignment with hierarchy merging for objects that require ancestor properties. +/// +public class HierarchicalPropertyHandler( + PropertySetsExtractor propertySetsExtractor, + ModelPropertiesExtractor modelPropertiesExtractor +) : BasePropertyHandler(propertySetsExtractor, modelPropertiesExtractor) +{ + protected override void AssignPropertySets(SSM.Base speckleObject, NAV.ModelItem modelItem) + { + if (speckleObject == null) + { + throw new ArgumentNullException(nameof(speckleObject)); + } + var propertyDict = speckleObject["properties"] as Dictionary ?? new Dictionary(); + + if (modelItem == null) + { + throw new ArgumentNullException(nameof(modelItem)); + } + + var hierarchy = GetObjectHierarchy(modelItem); + var propertyCollection = new Dictionary>>(); + + foreach (var item in hierarchy) + { + CollectHierarchicalProperties(item, propertyCollection); + } + + ApplyFilteredProperties(propertyDict, propertyCollection); + + speckleObject["properties"] = propertyDict; + } + + private static List GetObjectHierarchy(NAV.ModelItem target) + { + var hierarchy = new List(); + var firstObjectAncestor = target.FindFirstObjectAncestor(); + + if (firstObjectAncestor == null) + { + hierarchy.Add(target); + return hierarchy; + } + + var current = target; + while (current != null) + { + hierarchy.Add(current); + if (current == firstObjectAncestor) + { + break; + } + current = current.Parent; + } + + hierarchy.Reverse(); + return hierarchy; + } + + private void CollectHierarchicalProperties( + NAV.ModelItem item, + Dictionary>> propertyCollection + ) + { + var categoryDictionaries = ProcessPropertySets(item); + + foreach (var kvp in categoryDictionaries) + { + if (!propertyCollection.TryGetValue(kvp.Key, out var categoryProperties)) + { + categoryProperties = []; + propertyCollection.Add(kvp.Key, categoryProperties); + } + + foreach (var prop in kvp.Value.Where(prop => IsValidPropertyValue(prop.Value))) + { + if (!categoryProperties.TryGetValue(prop.Key, out var valueSet)) + { + valueSet = []; + categoryProperties.Add(prop.Key, valueSet); + } + valueSet.Add(prop.Value); + } + } + } + + private static void ApplyFilteredProperties( + Dictionary propertyDict, + Dictionary>> propertyCollection + ) + { + foreach (var kvp in propertyCollection) + { + var categoryDict = new Dictionary(); + bool hasProperties = false; + + foreach (var kvS in kvp.Value) + { + if ((kvS.Value).Count != 1) + { + continue; + } + + categoryDict[kvS.Key] = kvS.Value.First(); + hasProperties = true; + } + + if (hasProperties) + { + propertyDict[kvp.Key] = categoryDict; + } + } + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/IPropertyHandler.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/IPropertyHandler.cs new file mode 100644 index 000000000..73fbcc4bf --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/IPropertyHandler.cs @@ -0,0 +1,12 @@ +namespace Speckle.Converter.Navisworks.ToSpeckle.PropertyHandlers; + +/// +/// Defines the contract for handling property assignment to Speckle objects. +/// +public interface IPropertyHandler +{ + /// + /// Processes and adds properties to a Speckle object from a Navisworks model item. + /// + void AssignProperties(SSM.Base speckleObject, NAV.ModelItem modelItem); +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/StandardPropertyHandler.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/StandardPropertyHandler.cs new file mode 100644 index 000000000..6c12e7db6 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataHandlers/StandardPropertyHandler.cs @@ -0,0 +1,28 @@ +namespace Speckle.Converter.Navisworks.ToSpeckle.PropertyHandlers; + +/// +/// Handles standard property assignment without any merging or hierarchy processing. +/// +public class StandardPropertyHandler( + PropertySetsExtractor propertySetsExtractor, + ModelPropertiesExtractor modelPropertiesExtractor +) : BasePropertyHandler(propertySetsExtractor, modelPropertiesExtractor) +{ + protected override void AssignPropertySets(SSM.Base speckleObject, NAV.ModelItem modelItem) + { + if (speckleObject == null) + { + throw new ArgumentNullException(nameof(speckleObject)); + } + var propertyDictionary = speckleObject["properties"] as Dictionary ?? []; + + var categoryDictionaries = ProcessPropertySets(modelItem); + + foreach (var kvp in categoryDictionaries) + { + categoryDictionaries[$"{kvp.Key}"] = kvp.Value; + } + + speckleObject["properties"] = propertyDictionary; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DependencyInjection/NavisworksConverterServiceRegistration.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DependencyInjection/NavisworksConverterServiceRegistration.cs new file mode 100644 index 000000000..31af6f872 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DependencyInjection/NavisworksConverterServiceRegistration.cs @@ -0,0 +1,50 @@ +using System.Reflection; +using Microsoft.Extensions.DependencyInjection; +using Speckle.Converter.Navisworks.Helpers; +using Speckle.Converter.Navisworks.Services; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converter.Navisworks.ToSpeckle; +using Speckle.Converter.Navisworks.ToSpeckle.PropertyHandlers; +using Speckle.Converters.Common; +using Speckle.Converters.Common.Registration; +using Speckle.Sdk; + +namespace Speckle.Converter.Navisworks.DependencyInjection; + +public static class NavisworksConverterServiceRegistration +{ + public static IServiceCollection AddNavisworksConverter(this IServiceCollection serviceCollection) + { + var converterAssembly = Assembly.GetExecutingAssembly(); + + // Register base converters + serviceCollection.AddMatchingInterfacesAsTransient(converterAssembly); + serviceCollection.AddRootCommon(converterAssembly); + + // Register property handlers + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + + // Register settings management + serviceCollection.AddScoped(); + serviceCollection.AddScoped< + IConverterSettingsStore, + ConverterSettingsStore + >(); + + // Register unit conversion + serviceCollection.AddSingleton, NavisworksToSpeckleUnitConverter>(); + + // Register converters and handlers + serviceCollection.AddApplicationConverters(converterAssembly); + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + + // Register geometry conversion + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + + return serviceCollection; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Extensions/ArrayExtensions.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Extensions/ArrayExtensions.cs new file mode 100644 index 000000000..c8c3b5e74 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Extensions/ArrayExtensions.cs @@ -0,0 +1,15 @@ +using System.Runtime.CompilerServices; + +namespace Speckle.Converter.Navisworks.Extensions; + +internal static class ArrayExtension +{ + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static T[] ToArray(this Array arr) + where T : struct + { + var result = new T[arr.Length]; + Array.Copy(arr, result, result.Length); + return result; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Geometries/Primitives.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Geometries/Primitives.cs new file mode 100644 index 000000000..deb59b5bd --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Geometries/Primitives.cs @@ -0,0 +1,155 @@ +namespace Speckle.Converter.Navisworks.Geometry; + +public readonly struct SafeBoundingBox +{ + public SafeVertex Center { get; } + public SafeVertex Min { get; } + public SafeVertex Max { get; } + public double SizeX { get; } + public double SizeY { get; } + public double SizeZ { get; } + + public SafeBoundingBox(NAV.BoundingBox3D boundingBox) + { + if (boundingBox == null) + { + throw new ArgumentNullException(nameof(boundingBox)); + } + + Center = new SafeVertex(boundingBox.Center); + Min = new SafeVertex(boundingBox.Min); + Max = new SafeVertex(boundingBox.Max); + SizeX = boundingBox.Size.X; + SizeY = boundingBox.Size.Y; + SizeZ = boundingBox.Size.Z; + } +} + +/// +/// Safe structure to store vector coordinates without COM dependency +/// +public readonly struct SafeVector +{ + public double X { get; } + public double Y { get; } + public double Z { get; } + + public SafeVector(NAV.Vector3D vector) + { + if (vector == null) + { + throw new ArgumentNullException(nameof(vector)); + } + X = vector.X; + Y = vector.Y; + Z = vector.Z; + } + + public SafeVector(NAV.Point3D point) + { + if (point == null) + { + throw new ArgumentNullException(nameof(point)); + } + X = point.X; + Y = point.Y; + Z = point.Z; + } + + // Constructor for raw coordinates + public SafeVector(double x, double y, double z) + { + X = x; + Y = y; + Z = z; + } +} + +public readonly struct SafeVertex +{ + public double X { get; } + public double Y { get; } + public double Z { get; } + + public SafeVertex(NAV.Vector3D vector) + { + if (vector == null) + { + throw new ArgumentNullException(nameof(vector)); + } + + X = vector.X; + Y = vector.Y; + Z = vector.Z; + } + + public SafeVertex(NAV.Point3D point) + { + if (point == null) + { + throw new ArgumentNullException(nameof(point)); + } + X = point.X; + Y = point.Y; + Z = point.Z; + } + + // Constructor for raw coordinates + public SafeVertex(double x, double y, double z) + { + X = x; + Y = y; + Z = z; + } +} + +public readonly struct SafePoint +{ + public SafeVertex Vertex { get; } + + public SafePoint(NAV.Vector3D point) + { + if (point == null) + { + throw new ArgumentNullException(nameof(point)); + } + + Vertex = new SafeVertex(point); + } +} + +public readonly struct SafeTriangle +{ + public SafeVertex Vertex1 { get; } + public SafeVertex Vertex2 { get; } + public SafeVertex Vertex3 { get; } + + public SafeTriangle(NAV.Vector3D v1, NAV.Vector3D v2, NAV.Vector3D v3) + { + if (v1 == null || v2 == null || v3 == null) + { + throw new ArgumentNullException(nameof(v1)); + } + + Vertex1 = new SafeVertex(v1); + Vertex2 = new SafeVertex(v2); + Vertex3 = new SafeVertex(v3); + } +} + +public readonly struct SafeLine +{ + public SafeVertex Start { get; } + public SafeVertex End { get; } + + public SafeLine(NAV.Vector3D start, NAV.Vector3D end) + { + if (start == null || end == null) + { + throw new ArgumentNullException(nameof(start)); + } + + Start = new SafeVertex(start); + End = new SafeVertex(end); + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Geometries/TransformMatrix.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Geometries/TransformMatrix.cs new file mode 100644 index 000000000..8fd7dde7d --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Geometries/TransformMatrix.cs @@ -0,0 +1,59 @@ +using Speckle.DoubleNumerics; + +namespace Speckle.Converter.Navisworks.Geometry; + +public class Transforms +{ + private readonly double[] _elements; + + /// + /// Creates a new 4x4 matrix with the given elements in row-major order. + /// + /// An array of 16 elements representing the matrix. + public Transforms(double[] elements) + { + if (elements == null || elements.Length != 16) + { + throw new ArgumentException("A 4x4 matrix must have exactly 16 elements.", nameof(elements)); + } + + this._elements = elements; + } + + /// + /// Accesses the element at the given row and column. + /// + public double this[int row, int col] + { + get => _elements[row * 4 + col]; + set => _elements[row * 4 + col] = value; + } + + /// + /// Applies the transformation defined by this matrix to a 3D vector. + /// + public NAV.Vector3D Transform(Vector3 vector) + { + var t1 = this[0, 3] * vector.X + this[1, 3] * vector.Y + this[2, 3] * vector.Z + this[3, 3]; + if (t1 == 0) + { + t1 = 1; // Prevent division by zero + } + + var x = (this[0, 0] * vector.X + this[0, 1] * vector.Y + this[0, 2] * vector.Z + this[0, 3]) / t1; + var y = (this[1, 0] * vector.X + this[1, 1] * vector.Y + this[1, 2] * vector.Z + this[1, 3]) / t1; + var z = (this[2, 0] * vector.X + this[2, 1] * vector.Y + this[2, 2] * vector.Z + this[2, 3]) / t1; + + return new NAV.Vector3D(x, y, z); + } + + /// + /// Creates an identity matrix. + /// + public static Transforms Identity() => new([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); + + /// + /// Returns the matrix as a flat array in row-major order. + /// + public double[] ToArray() => (double[])_elements.Clone(); +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/GlobalUsing.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/GlobalUsing.cs new file mode 100644 index 000000000..778ce58c3 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/GlobalUsing.cs @@ -0,0 +1,4 @@ +global using NAV = Autodesk.Navisworks.Api; +global using NavisworksApp = Autodesk.Navisworks.Api.Application; +global using SSC = Speckle.Sdk.Common; +global using SSM = Speckle.Sdk.Models; diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/ElementSelectionHelper.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/ElementSelectionHelper.cs new file mode 100644 index 000000000..e9605c38c --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/ElementSelectionHelper.cs @@ -0,0 +1,80 @@ +namespace Speckle.Converter.Navisworks.Helpers; + +/// +/// Provides extension methods for working with Navisworks ModelItem selections. +/// +public static class ElementSelectionHelper +{ + /// + /// Resolves a Navisworks to its unique index path representation. + /// + /// The model item to resolve. + /// + /// A string representing the model item's path. The path includes the model index and + /// a hierarchical path identifier, separated by the specified separator (e.g., "0.a.b"). + /// For root-level model items, only the model index is included. + /// + /// Thrown if is null. + public static string ResolveModelItemToIndexPath(NAV.ModelItem modelItem) + { + if (modelItem == null) + { + throw new ArgumentNullException(nameof(modelItem)); + } + + var modelItemPathId = NavisworksApp.ActiveDocument.Models.CreatePathId(modelItem); + + var pathIndex = + modelItemPathId.PathId == "a" + ? $"{modelItemPathId.ModelIndex}" // Root-level model item + : $"{modelItemPathId.ModelIndex}{PathConstants.SEPARATOR}{modelItemPathId.PathId}"; // Nested model item + + return pathIndex; + } + + public static NAV.ModelItem ResolveIndexPathToModelItem(string indexPath) + { + if (indexPath == null) + { + throw new ArgumentNullException(nameof(indexPath)); + } + + var indexPathParts = indexPath.Split(PathConstants.SEPARATOR); + + var modelIndex = int.Parse(indexPathParts[0]); + var pathId = string.Join(PathConstants.SEPARATOR.ToString(), indexPathParts.Skip(1)); + + // assign the first part of indexPathParts to modelIndex and parse it to int, the second part to pathId string + NAV.DocumentParts.ModelItemPathId modelItemPathId = new() { ModelIndex = modelIndex, PathId = pathId }; + + var modelItem = NavisworksApp.ActiveDocument.Models.ResolvePathId(modelItemPathId); + return modelItem; + } + + /// + /// Determines whether a Navisworks and all its ancestors are visible. + /// + /// The model item to check for visibility. + /// True if the item and all ancestors are visible; otherwise, false. + /// Thrown if is null. + public static bool IsElementVisible(NAV.ModelItem modelItem) + { + if (modelItem == null) + { + throw new ArgumentNullException(nameof(modelItem)); + } + + // Check visibility status for the item and its ancestors + return modelItem.AncestorsAndSelf.All(item => !item.IsHidden); + } + + public static IReadOnlyCollection ResolveGeometryLeafNodes(NAV.ModelItem modelItem) + { + if (modelItem == null) + { + throw new ArgumentNullException(nameof(modelItem)); + } + + return modelItem.DescendantsAndSelf.Where(x => x.HasGeometry).ToList(); + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/GeometryHelpers.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/GeometryHelpers.cs new file mode 100644 index 000000000..2ca3b3d6f --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/GeometryHelpers.cs @@ -0,0 +1,16 @@ +namespace Speckle.Converter.Navisworks.Helpers; + +public static class GeometryHelpers +{ + /// + /// Compares two vectors to determine if they are approximately equal within a given tolerance. + /// + /// The first comparison vector. + /// The second comparison vector. + /// The tolerance value for the comparison. Default is 1e-9. + /// True if the vectors match within the tolerance; otherwise, false. + internal static bool VectorMatch(NAV.Vector3D vectorA, NAV.Vector3D vectorB, double tolerance = 1e-9) => + Math.Abs(vectorA.X - vectorB.X) < tolerance + && Math.Abs(vectorA.Y - vectorB.Y) < tolerance + && Math.Abs(vectorA.Z - vectorB.Z) < tolerance; +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PrimitiveProcessor.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PrimitiveProcessor.cs new file mode 100644 index 000000000..b646184fd --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PrimitiveProcessor.cs @@ -0,0 +1,173 @@ +using System.Collections.ObjectModel; +using Autodesk.Navisworks.Api.Interop.ComApi; +using Speckle.Converter.Navisworks.Geometry; +using Speckle.DoubleNumerics; + +namespace Speckle.Converter.Navisworks.Helpers; + +public class PrimitiveProcessor : InwSimplePrimitivesCB +{ + private readonly List _coords = []; + private List _faces = []; + private List _lines = []; + private List _points = []; + private List _triangles = []; + private bool IsUpright { get; set; } + + internal PrimitiveProcessor(bool isUpright) + { + IsUpright = isUpright; + SetCoords(new ReadOnlyCollection([])); + SetFaces([]); + SetTriangles([]); + SetLines([]); + SetPoints([]); + } + + public IReadOnlyList Coords => _coords.AsReadOnly(); + private IReadOnlyList Faces => _faces.AsReadOnly(); + public IReadOnlyList Triangles => _triangles.AsReadOnly(); + public IReadOnlyList Lines => _lines.AsReadOnly(); + public IReadOnlyList Points => _points.AsReadOnly(); + internal IEnumerable? LocalToWorldTransformation { get; set; } + + public void Line(InwSimpleVertex? v1, InwSimpleVertex? v2) + { + if (v1 == null || v2 == null) + { + return; + } + + using var vD1 = TransformVectorToOrientation( + ApplyTransformation(VectorFromVertex(v1), LocalToWorldTransformation), + IsUpright + ); + using var vD2 = TransformVectorToOrientation( + ApplyTransformation(VectorFromVertex(v2), LocalToWorldTransformation), + IsUpright + ); + + try + { + var safeLine = new SafeLine(vD1, vD2); + AddLine(safeLine); + } + catch (ArgumentException ex) + { + Console.WriteLine($"ArgumentException caught: {ex.Message}"); + } + catch (InvalidOperationException ex) + { + Console.WriteLine($"InvalidOperationException caught: {ex.Message}"); + } + } + + public void Point(InwSimpleVertex? v1) + { + if (v1 == null) + { + return; + } + + using var vD1 = TransformVectorToOrientation( + ApplyTransformation(VectorFromVertex(v1), LocalToWorldTransformation), + IsUpright + ); + + var safePoint = new SafePoint(vD1); + AddPoint(safePoint); + } + + // TODO: Needed for Splines + public void SnapPoint(InwSimpleVertex? v1) => Point(v1); + + public void Triangle(InwSimpleVertex? v1, InwSimpleVertex? v2, InwSimpleVertex? v3) + { + if (v1 == null || v2 == null || v3 == null) + { + return; + } + + using var vD1 = TransformVectorToOrientation( + ApplyTransformation(VectorFromVertex(v1), LocalToWorldTransformation), + IsUpright + ); + using var vD2 = TransformVectorToOrientation( + ApplyTransformation(VectorFromVertex(v2), LocalToWorldTransformation), + IsUpright + ); + using var vD3 = TransformVectorToOrientation( + ApplyTransformation(VectorFromVertex(v3), LocalToWorldTransformation), + IsUpright + ); + + // Capture values immediately in our safe struct + var safeTriangle = new SafeTriangle(vD1, vD2, vD3); + + var indexPointer = Faces.Count; + AddFace(3); + AddFaces([indexPointer + 0, indexPointer + 1, indexPointer + 2]); + AddCoords( + [ + safeTriangle.Vertex1.X, + safeTriangle.Vertex1.Y, + safeTriangle.Vertex1.Z, + safeTriangle.Vertex2.X, + safeTriangle.Vertex2.Y, + safeTriangle.Vertex2.Z, + safeTriangle.Vertex3.X, + safeTriangle.Vertex3.Y, + safeTriangle.Vertex3.Z + ] + ); + + AddTriangle(safeTriangle); + } + + private void SetCoords(IEnumerable coords) + { + _coords.Clear(); + _coords.AddRange(coords); + } + + private void AddCoords(IEnumerable coords) => _coords.AddRange(coords); + + private void SetFaces(List faces) => _faces = faces ?? throw new ArgumentNullException(nameof(faces)); + + private void AddFace(int face) => _faces.Add(face); + + private void AddFaces(IEnumerable faces) => _faces.AddRange(faces); + + private void SetTriangles(List triangles) => + _triangles = triangles ?? throw new ArgumentNullException(nameof(triangles)); + + private void AddTriangle(SafeTriangle triangle) => _triangles.Add(triangle); + + private void SetLines(List lines) => _lines = lines ?? throw new ArgumentNullException(nameof(lines)); + + private void AddLine(SafeLine line) => _lines.Add(line); + + private void SetPoints(List points) => _points = points ?? throw new ArgumentNullException(nameof(points)); + + private void AddPoint(SafePoint point) => _points.Add(point); + + private static NAV.Vector3D TransformVectorToOrientation(NAV.Vector3D v, bool isUpright) => + isUpright ? v : new NAV.Vector3D(v.X, -v.Z, v.Y); + + private static NAV.Vector3D ApplyTransformation(Vector3 vector3, IEnumerable? matrixStore) + { + var matrix = matrixStore!.ToList(); + var t1 = matrix[3] * vector3.X + matrix[7] * vector3.Y + matrix[11] * vector3.Z + matrix[15]; + var vectorDoubleX = (matrix[0] * vector3.X + matrix[4] * vector3.Y + matrix[8] * vector3.Z + matrix[12]) / t1; + var vectorDoubleY = (matrix[1] * vector3.X + matrix[5] * vector3.Y + matrix[9] * vector3.Z + matrix[13]) / t1; + var vectorDoubleZ = (matrix[2] * vector3.X + matrix[6] * vector3.Y + matrix[10] * vector3.Z + matrix[14]) / t1; + + return new NAV.Vector3D(vectorDoubleX, vectorDoubleY, vectorDoubleZ); + } + + private static Vector3 VectorFromVertex(InwSimpleVertex v) + { + var arrayV = (Array)v.coord; + return new Vector3((float)arrayV.GetValue(1), (float)arrayV.GetValue(2), (float)arrayV.GetValue(3)); + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PropertyHelpers.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PropertyHelpers.cs new file mode 100644 index 000000000..a9e771d64 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/PropertyHelpers.cs @@ -0,0 +1,106 @@ +using System.Globalization; +using System.Text.RegularExpressions; +using Speckle.Objects.Geometry; + +namespace Speckle.Converter.Navisworks.Helpers; + +public static class PropertyHelpers +{ + private static readonly HashSet s_excludedCategories = ["Geometry", "Metadata"]; + + private static readonly Dictionary> s_typeHandlers = + new() + { + { NAV.VariantDataType.Boolean, (value, _) => value.ToBoolean() }, + { NAV.VariantDataType.DisplayString, (value, _) => value.ToDisplayString() }, + { NAV.VariantDataType.IdentifierString, (value, _) => value.ToIdentifierString() }, + { NAV.VariantDataType.Int32, (value, _) => value.ToInt32() }, + { NAV.VariantDataType.Double, (value, _) => value.ToDouble() }, + { NAV.VariantDataType.DoubleAngle, (value, _) => value.ToDoubleAngle() }, + { NAV.VariantDataType.DoubleArea, (value, _) => value.ToDoubleArea() }, + { NAV.VariantDataType.DoubleLength, (value, _) => value.ToDoubleLength() }, + { NAV.VariantDataType.DoubleVolume, (value, _) => value.ToDoubleVolume() }, + { NAV.VariantDataType.DateTime, (value, _) => value.ToDateTime().ToString(CultureInfo.InvariantCulture) }, + { NAV.VariantDataType.NamedConstant, (value, _) => value.ToNamedConstant().DisplayName }, + { NAV.VariantDataType.None, (_, _) => null }, + { NAV.VariantDataType.Point2D, (_, _) => null }, + { + NAV.VariantDataType.Point3D, + (value, units) => + { + var point = value.ToPoint3D(); + var pointProperty = new Point(point.X, point.Y, point.Z, units); + return pointProperty.ToString(); + } + } + }; + + internal static dynamic? ConvertPropertyValue(NAV.VariantData value, string units) + { + if (s_typeHandlers.TryGetValue(value.DataType, out var handler)) + { + return handler(value, units); + } + + // Default case for unsupported types + return value.DataType == NAV.VariantDataType.None || value.DataType == NAV.VariantDataType.Point2D + ? null + : value.ToString(); + } + + /// + /// Adds a property to an object (either a Base object or a Dictionary) if the value is not null or empty. + /// + /// The object to which the property is to be added. Can be either a Base object or a Dictionary. + /// The name of the property to add. + /// The value of the property. + internal static void AddPropertyIfNotNullOrEmpty(object baseObject, string propertyName, object value) + { + switch (value) + { + case string stringValue: + { + if (!string.IsNullOrEmpty(stringValue)) + { + AssignProperty(baseObject, propertyName, value); + } + + break; + } + default: + AssignProperty(baseObject, propertyName, value); + break; + } + } + + /// + /// Helper method to assign the property to the base object or dictionary. + /// + private static void AssignProperty(object baseObject, string propertyName, object value) + { + switch (baseObject) + { + case SSM.Base baseObj: + baseObj[propertyName] = value; + break; + case Dictionary baseDict: + baseDict[propertyName] = value; + break; + default: + throw new ArgumentException("Unsupported object type", nameof(baseObject)); + } + } + + /// + /// Sanitizes property names by replacing invalid characters with underscores. + /// + internal static string SanitizePropertyName(string name) => + // Regex pattern from speckle-sharp/Core/Core/Models/DynamicBase.cs IsPropNameValid + name == "Item" + // Item is a reserved term for Indexed Properties: https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/indexers/using-indexers + ? "Item" + : Regex.Replace(name, @"[\.\/\s]", "_"); + + internal static bool IsCategoryToBeSkipped(NAV.PropertyCategory propertyCategory) => + s_excludedCategories.Contains(propertyCategory.DisplayName); +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/PathConstants.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/PathConstants.cs new file mode 100644 index 000000000..8d8c8ea1c --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/PathConstants.cs @@ -0,0 +1,6 @@ +namespace Speckle.Converter.Navisworks; + +public static class PathConstants +{ + public const char SEPARATOR = '/'; +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Services/NavisworksToSpeckleUnitConverter.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Services/NavisworksToSpeckleUnitConverter.cs new file mode 100644 index 000000000..8f75388a9 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Services/NavisworksToSpeckleUnitConverter.cs @@ -0,0 +1,26 @@ +using Speckle.Converters.Common; +using Speckle.Sdk.Common.Exceptions; + +namespace Speckle.Converter.Navisworks.Services; + +public sealed class NavisworksToSpeckleUnitConverter : IHostToSpeckleUnitConverter +{ + private readonly Dictionary _unitMapping = []; + + public NavisworksToSpeckleUnitConverter() + { + _unitMapping[NAV.Units.Millimeters] = SSC.Units.Millimeters; + _unitMapping[NAV.Units.Centimeters] = SSC.Units.Centimeters; + _unitMapping[NAV.Units.Meters] = SSC.Units.Meters; + _unitMapping[NAV.Units.Inches] = SSC.Units.Inches; + _unitMapping[NAV.Units.Feet] = SSC.Units.Feet; + _unitMapping[NAV.Units.Miles] = SSC.Units.Miles; + _unitMapping[NAV.Units.Kilometers] = SSC.Units.Kilometers; + _unitMapping[NAV.Units.Yards] = SSC.Units.Yards; + } + + public string ConvertOrThrow(NAV.Units hostUnit) => + _unitMapping.TryGetValue(hostUnit, out string? value) + ? value + : throw new UnitNotSupportedException($"The Unit System \"{hostUnit}\" is unsupported."); +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/ConversionModes.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/ConversionModes.cs new file mode 100644 index 000000000..854c2ada6 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/ConversionModes.cs @@ -0,0 +1,51 @@ +using System.Diagnostics.CodeAnalysis; + +namespace Speckle.Converter.Navisworks.Settings; + +/// +/// Defines the representation mode to be used during conversion. +/// +[SuppressMessage("ReSharper", "InconsistentNaming")] +public enum RepresentationMode +{ + /// + /// Uses the current active representation (e.g., overrides or temporary settings). + /// + Active, + + /// + /// Preserves the original representation as defined in the source data. + /// + Original, + + /// + /// Applies a fixed or user-defined representation, overriding others. + /// + Permanent +} + +/// +/// Specifies the origin mode, which defines the basis of a transformation +/// applied to the model before conversion. The transformation aligns +/// the model's origin point to a base point. +/// +[SuppressMessage("ReSharper", "InconsistentNaming")] +public enum OriginMode +{ + /// + /// Uses the model origin as the base point. This is the default mode. + /// No transformation is applied other than converting from the local + /// coordinate system to the world coordinate system. + /// + ModelOrigin, + + /// + /// Uses a user-defined project base point as the base point for the transformation. + /// + ProjectBasePoint, + + /// + /// Uses the center of the model's bounding box as the base point for the transformation. + /// + BoundingBoxCenter +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettings.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettings.cs new file mode 100644 index 000000000..666fecf29 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettings.cs @@ -0,0 +1,27 @@ +using Speckle.Converter.Navisworks.Geometry; + +namespace Speckle.Converter.Navisworks.Settings; + +/// +/// Represents the settings used for Navisworks conversions. +/// +public record NavisworksConversionSettings(Derived Derived, User User); + +// Derived from Navisworks Application +public record Derived( + NAV.Document Document, // The active Navisworks document to be processed. + SafeBoundingBox ModelBoundingBox, // The bounding box of the model. + SafeVector TransformVector, // Transformation vector applied to the model. + bool IsUpright, // Indicates if the model's orientation is upright relative to canonical up. + string SpeckleUnits // Units used in Speckle for standardised measurements. +); + +// Optional settings for conversion to be offered in UI +public record User( + OriginMode OriginMode, // Defines the base point for transformations. + bool IncludeInternalProperties, // Whether to include internal Navisworks properties in the output. + bool ConvertHiddenElements, // Whether to include hidden elements during the conversion process. + RepresentationMode VisualRepresentationMode, // Specifies the visual representation mode. + bool CoalescePropertiesFromFirstObjectAncestor, // Whether to merge properties from the first object ancestor. + bool ExcludeProperties // Whether to exclude properties from the output. +); diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettingsFactory.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettingsFactory.cs new file mode 100644 index 000000000..3f6fd9a62 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Settings/NavisworksConversionSettingsFactory.cs @@ -0,0 +1,140 @@ +using Microsoft.Extensions.Logging; +using Speckle.Converter.Navisworks.Geometry; +using Speckle.Converter.Navisworks.Helpers; +using Speckle.Converters.Common; +using Speckle.InterfaceGenerator; + +namespace Speckle.Converter.Navisworks.Settings; + +[GenerateAutoInterface] +public class NavisworksConversionSettingsFactory : INavisworksConversionSettingsFactory +{ + private readonly IConverterSettingsStore _settingsStore; + private readonly ILogger _logger; + private readonly IHostToSpeckleUnitConverter _unitsConverter; + + private NAV.Document? _document; + private SafeBoundingBox _modelBoundingBox; + private bool _convertHiddenElements; + + public NavisworksConversionSettingsFactory( + IHostToSpeckleUnitConverter unitsConverter, + IConverterSettingsStore settingsStore, + ILogger logger + ) + { + _logger = logger; + _settingsStore = settingsStore; + _unitsConverter = unitsConverter; + } + + public NavisworksConversionSettings Current => _settingsStore.Current; + + private static readonly NAV.Vector3D s_canonicalUp = new(0, 0, 1); + + private OriginMode _originMode; + + /// + /// Creates a new instance of NavisworksConversionSettings with calculated values. + /// + /// + /// Thrown when no active document is found or document units cannot be converted. + /// + public NavisworksConversionSettings Create( + OriginMode originMode, + RepresentationMode visualRepresentationMode, + bool convertHiddenElements, + bool includeInternalProperties + ) + { + _convertHiddenElements = convertHiddenElements; + _originMode = originMode; + + // Initialize document and validate + InitializeDocument(); + + if (_document == null) + { + throw new InvalidOperationException("No active document found."); + } + + var units = _unitsConverter.ConvertOrThrow(_document.Units); + if (string.IsNullOrEmpty(units)) + { + throw new InvalidOperationException("Document units could not be converted."); + } + + // Calculate the transformation vector based on the origin mode + var transformVector = CalculateTransformVector(); + var isUpright = GeometryHelpers.VectorMatch(_document.UpVector, s_canonicalUp); + + return new NavisworksConversionSettings( + // Derived from Navisworks Application + new Derived( + Document: _document, + ModelBoundingBox: _modelBoundingBox, + TransformVector: transformVector, + IsUpright: isUpright, + SpeckleUnits: units + ), + // Optional settings for conversion to be offered in UI + new User( + OriginMode: _originMode, + IncludeInternalProperties: includeInternalProperties, + ConvertHiddenElements: _convertHiddenElements, + VisualRepresentationMode: visualRepresentationMode, + CoalescePropertiesFromFirstObjectAncestor: false, // Not yet exposed in the UI + ExcludeProperties: false // Not yet exposed in the UI + ) + ); + } + + private void InitializeDocument() + { + _document = NavisworksApp.ActiveDocument ?? throw new InvalidOperationException("No active document found."); + _logger.LogInformation("Creating settings for document: {DocumentName}", _document.Title); + _modelBoundingBox = new SafeBoundingBox(_document.GetBoundingBox(_convertHiddenElements)); + } + + private SafeVector CalculateTransformVector() => + _originMode switch + { + OriginMode.ProjectBasePoint => CalculateProjectBasePointTransform(), + OriginMode.BoundingBoxCenter => CalculateBoundingBoxTransform(), + OriginMode.ModelOrigin => new SafeVector(0.0, 0.0, 0.0), // Default identity transform + _ => throw new NotSupportedException($"OriginMode {_originMode} is not supported.") + }; + + /// + /// Calculates the transformation vector based on the project base point. + /// + /// The calculated transformation vector. + /// + /// This uses mocked project base point data and should be replaced with actual logic + /// when finally integrating with UI or external configurations. + /// + private SafeVector CalculateProjectBasePointTransform() + { + // TODO: Replace with actual logic to fetch project base point and units from UI or settings + var projectBasePoint = new SafeVector(10, 20, 0); + // ReSharper disable once ConvertToConstant.Local + var projectBasePointUnits = NAV.Units.Meters; + + var scale = NAV.UnitConversion.ScaleFactor(projectBasePointUnits, _document!.Units); + + // The transformation vector is the negative of the project base point, scaled to the source units. + // These units are independent of the Speckle units, and because they are from user input. + return new SafeVector(-projectBasePoint.X * scale, -projectBasePoint.Y * scale, 0); + } + + /// + /// Calculates the transformation vector based on the bounding box center offset from the origin. + /// + /// The calculated transformation vector. + /// + /// This uses the document active model bounding box center as the base point for the transformation. + /// Assumes no translation in the Z-axis. + /// + private SafeVector CalculateBoundingBoxTransform() => + new(-_modelBoundingBox.Center.X, -_modelBoundingBox.Center.Y, 0); +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.projitems b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.projitems new file mode 100644 index 000000000..211a57058 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.projitems @@ -0,0 +1,40 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + 6886282C-EFA5-4ED0-85BD-2883E23E092B + + + Speckle.Converters.NavisworksShared + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.shproj b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.shproj new file mode 100644 index 000000000..016540e63 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.shproj @@ -0,0 +1,12 @@ + + + + {23830613-87F8-4655-B523-72189A597962} + + + + + + + diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/NavisworksRootToSpeckleConverter.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/NavisworksRootToSpeckleConverter.cs new file mode 100644 index 000000000..eb1bfb10b --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/NavisworksRootToSpeckleConverter.cs @@ -0,0 +1,53 @@ +using Microsoft.Extensions.Logging; +using Speckle.Converter.Navisworks.Helpers; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using Speckle.Converters.Common.Objects; +using Speckle.Converters.Common.Registration; +using Speckle.Sdk.Models; + +namespace Speckle.Converter.Navisworks.ToSpeckle; + +/// +/// Converts Navisworks ModelItem objects to Speckle Base objects. +/// +public class NavisworksRootToSpeckleConverter : IRootToSpeckleConverter +{ + private readonly IConverterManager _toSpeckle; + private readonly IConverterSettingsStore _settingsStore; + private readonly ILogger _logger; + + public NavisworksRootToSpeckleConverter( + IConverterSettingsStore settingsStore, + ILogger logger, + IConverterManager toSpeckle + ) + { + _toSpeckle = toSpeckle; + _logger = logger; + _settingsStore = settingsStore; + } + + public Base Convert(object target) + { + if (target == null) + { + throw new ArgumentNullException(nameof(target)); + } + + if (target is not NAV.ModelItem modelItem) + { + throw new InvalidOperationException($"The target object is not a ModelItem. It's a ${target.GetType()}."); + } + + Type type = target.GetType(); + + var objectConverter = _toSpeckle.ResolveConverter(type, true); + + Base result = objectConverter.Convert(modelItem); + + result.applicationId = ElementSelectionHelper.ResolveModelItemToIndexPath(modelItem); + + return result; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/BoundingBoxToSpeckleRawConverter.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/BoundingBoxToSpeckleRawConverter.cs new file mode 100644 index 000000000..43838ff4a --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/BoundingBoxToSpeckleRawConverter.cs @@ -0,0 +1,52 @@ +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using Speckle.Converters.Common.Objects; +using Speckle.Objects.Geometry; +using Speckle.Objects.Primitive; + +namespace Speckle.Converter.Navisworks.ToSpeckle.Raw; + +public class BoundingBoxToSpeckleRawConverter : ITypedConverter +{ + private readonly IConverterSettingsStore _settingsStore; + + public BoundingBoxToSpeckleRawConverter(IConverterSettingsStore settingsStore) + { + _settingsStore = settingsStore; + } + + public Box Convert(object target) => Convert((NAV.BoundingBox3D)target); + + public Box Convert(NAV.BoundingBox3D? target) + { + if (target == null) + { + return default!; // returns null for reference types (Box is a reference type) + } + + var minPoint = target.Min; + var maxPoint = target.Max; + + var units = _settingsStore.Current.Derived.SpeckleUnits; + + var basePlane = new Plane + { + origin = new Point(minPoint.X, minPoint.Y, minPoint.Z, units), + normal = new Vector(0, 0, 1, units), + xdir = new Vector(1, 0, 0, units), + ydir = new Vector(0, 1, 0, units), + units = units + }; + + var boundingBox = new Box + { + units = units, + plane = basePlane, + xSize = new Interval() { start = minPoint.X, end = maxPoint.X }, + ySize = new Interval() { start = minPoint.Y, end = maxPoint.Y }, + zSize = new Interval() { start = minPoint.Z, end = maxPoint.Z } + }; + + return boundingBox; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/GeometryToSpeckleConverter.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/GeometryToSpeckleConverter.cs new file mode 100644 index 000000000..cf440f256 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/GeometryToSpeckleConverter.cs @@ -0,0 +1,245 @@ +using System.Runtime.InteropServices; +using Autodesk.Navisworks.Api.Interop.ComApi; +using Speckle.Converter.Navisworks.Extensions; +using Speckle.Converter.Navisworks.Geometry; +using Speckle.Converter.Navisworks.Helpers; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Objects.Geometry; +using Speckle.Sdk.Models; +using ComApiBridge = Autodesk.Navisworks.Api.ComApi.ComApiBridge; + +namespace Speckle.Converter.Navisworks.ToSpeckle; + +/// +/// Converts Navisworks geometry to Speckle displayable geometry. +/// +/// Note: This class does not implement ITypedConverter{ModelGeometry, Base} because Navisworks geometry +/// conversion requires COM interop access that isn't available through the public ModelGeometry class. +/// The conversion process requires: +/// 1. Convert ModelItem to InwOaPath3 via ComApiBridge +/// 2. Use that to get InwOaFragmentList +/// 3. Process each InwOaFragment3 to generate primitives +/// 4. Convert those primitives to Speckle geometry with appropriate transforms +/// +public class GeometryToSpeckleConverter +{ + private readonly NavisworksConversionSettings _settings; + private readonly bool _isUpright; + private readonly SafeVector _transformVector; + private const double SCALE = 1.0; // Default scale factor + + public GeometryToSpeckleConverter(NavisworksConversionSettings settings) + { + _settings = settings ?? throw new ArgumentNullException(nameof(settings)); + _isUpright = settings.Derived.IsUpright; + _transformVector = settings.Derived.TransformVector; + } + + /// + /// Converts a ModelItem's geometry to Speckle display geometry by accessing the underlying COM objects. + /// Applies necessary transformations and unit scaling. + /// + internal List Convert(NAV.ModelItem modelItem) + { + if (modelItem == null) + { + throw new ArgumentNullException(nameof(modelItem)); + } + + if (!modelItem.HasGeometry) + { + return []; + } + + var comSelection = ComApiBridge.ToInwOpSelection([modelItem]); + try + { + var fragmentStack = new Stack(); + var paths = comSelection.Paths(); + try + { + // Populate fragment stack with all fragments + foreach (InwOaPath path in paths) + { + CollectFragments(path, fragmentStack); + } + + return ProcessFragments(fragmentStack, paths); + } + finally + { + if (paths != null) + { + Marshal.ReleaseComObject(paths); + } + } + } + finally + { + if (comSelection != null) + { + Marshal.ReleaseComObject(comSelection); + } + } + } + + private static void CollectFragments(InwOaPath path, Stack fragmentStack) + { + var fragments = path.Fragments(); + foreach (var fragment in fragments.OfType()) + { + if (fragment.path?.ArrayData is not Array pathData1 || path.ArrayData is not Array pathData2) + { + continue; + } + + var pathArray1 = pathData1.ToArray(); + var pathArray2 = pathData2.ToArray(); + + if (pathArray1.Length == pathArray2.Length && pathArray1.SequenceEqual(pathArray2)) + { + fragmentStack.Push(fragment); + } + } + } + + private List ProcessFragments(Stack fragmentStack, InwSelectionPathsColl paths) + { + var callbackListeners = new List(); + + foreach (InwOaPath path in paths) + { + var processor = new PrimitiveProcessor(_isUpright); + + foreach (var fragment in fragmentStack) + { + if (!ValidateFragmentPath(fragment, path)) + { + continue; + } + + var matrix = fragment.GetLocalToWorldMatrix(); + var transform = matrix as InwLTransform3f3; + if (transform?.Matrix is not Array matrixArray) + { + continue; + } + + processor.LocalToWorldTransformation = ConvertArrayToDouble(matrixArray); + fragment.GenerateSimplePrimitives(nwEVertexProperty.eNORMAL, processor); + } + + callbackListeners.Add(processor); + } + + var baseGeometries = ProcessGeometries(callbackListeners); + + return baseGeometries; + } + + private static bool ValidateFragmentPath(InwOaFragment3 fragment, InwOaPath path) + { + if (fragment.path?.ArrayData is not Array fragmentPathData || path.ArrayData is not Array pathData) + { + return false; + } + + return IsSameFragmentPath(fragmentPathData, pathData); + } + + private List ProcessGeometries(List processors) + { + var baseGeometries = new List(); + + foreach (var processor in processors) + { + if (processor.Triangles.Count > 0) + { + var mesh = CreateMesh(processor.Triangles); + baseGeometries.Add(mesh); + } + + if (processor.Lines.Count > 0) + { + var lines = CreateLines(processor.Lines); + baseGeometries.AddRange(lines); + } + } + + return baseGeometries; + } + + private Mesh CreateMesh(IReadOnlyList triangles) + { + var vertices = new List(); + var faces = new List(); + + for (var t = 0; t < triangles.Count; t++) + { + var triangle = triangles[t]; + + // No need to worry about disposal of COM across boundaries - we're working with our safe structs + vertices.AddRange( + [ + (triangle.Vertex1.X + _transformVector.X) * SCALE, + (triangle.Vertex1.Y + _transformVector.Y) * SCALE, + (triangle.Vertex1.Z + _transformVector.Z) * SCALE, + (triangle.Vertex2.X + _transformVector.X) * SCALE, + (triangle.Vertex2.Y + _transformVector.Y) * SCALE, + (triangle.Vertex2.Z + _transformVector.Z) * SCALE, + (triangle.Vertex3.X + _transformVector.X) * SCALE, + (triangle.Vertex3.Y + _transformVector.Y) * SCALE, + (triangle.Vertex3.Z + _transformVector.Z) * SCALE + ] + ); + faces.AddRange([0, t * 3, t * 3 + 1, t * 3 + 2]); + } + + return new Mesh + { + vertices = vertices, + faces = faces, + units = _settings.Derived.SpeckleUnits + }; + } + + private List CreateLines(IReadOnlyList lines) => + ( + from line in lines + select new Line + { + start = new Point( + (line.Start.X + _transformVector.X) * SCALE, + (line.Start.Y + _transformVector.Y) * SCALE, + (line.Start.Z + _transformVector.Z) * SCALE, + _settings.Derived.SpeckleUnits + ), + end = new Point( + (line.End.X + _transformVector.X) * SCALE, + (line.End.Y + _transformVector.Y) * SCALE, + (line.End.Z + _transformVector.Z) * SCALE, + _settings.Derived.SpeckleUnits + ), + units = _settings.Derived.SpeckleUnits + } + ).ToList(); + + private static double[]? ConvertArrayToDouble(Array arr) + { + if (arr.Rank != 1) + { + throw new ArgumentException("The input array must have a rank of 1."); + } + + var doubleArray = new double[arr.GetLength(0)]; + for (var ix = arr.GetLowerBound(0); ix <= arr.GetUpperBound(0); ++ix) + { + doubleArray[ix - arr.GetLowerBound(0)] = (double)arr.GetValue(ix); + } + + return doubleArray; + } + + private static bool IsSameFragmentPath(Array a1, Array a2) => + a1.Length == a2.Length && a1.Cast().SequenceEqual(a2.Cast()); +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/TopLevel/ModelItemTopLevelConverterToSpeckle.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/TopLevel/ModelItemTopLevelConverterToSpeckle.cs new file mode 100644 index 000000000..17e3a89f2 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/TopLevel/ModelItemTopLevelConverterToSpeckle.cs @@ -0,0 +1,108 @@ +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converter.Navisworks.ToSpeckle.PropertyHandlers; +using Speckle.Converters.Common; +using Speckle.Converters.Common.Objects; +using Speckle.Sdk.Models; +using Speckle.Sdk.Models.Collections; + +namespace Speckle.Converter.Navisworks.ToSpeckle; + +/// +/// Converts Navisworks ModelItem objects to Speckle Base objects. +/// +[NameAndRankValue(nameof(NAV.ModelItem), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +public class ModelItemToToSpeckleConverter : IToSpeckleTopLevelConverter +{ + private readonly StandardPropertyHandler _standardHandler; + private readonly HierarchicalPropertyHandler _hierarchicalHandler; + private readonly IConverterSettingsStore _settingsStore; + private readonly DisplayValueExtractor _displayValueExtractor; + + public ModelItemToToSpeckleConverter( + IConverterSettingsStore settingsStore, + StandardPropertyHandler standardHandler, + HierarchicalPropertyHandler hierarchicalHandler, + DisplayValueExtractor displayValueExtractor + ) + { + _settingsStore = settingsStore; + _standardHandler = standardHandler; + _hierarchicalHandler = hierarchicalHandler; + _displayValueExtractor = displayValueExtractor; + } + + /// + /// Converts a Navisworks object to a Speckle Base object. + /// + /// The object to convert. + /// The converted Speckle Base object. + public Base Convert(object target) + { + if (target == null) + { + throw new ArgumentNullException(nameof(target)); + } + + return Convert((NAV.ModelItem)target); + } + + // Converts a Navisworks ModelItem into a Speckle Base object + private Base Convert(NAV.ModelItem target) + { + var name = GetObjectName(target); + + Base navisworksObject = target.HasGeometry ? CreateGeometryObject(target, name) : CreateNonGeometryObject(name); + + IPropertyHandler handler = ShouldMergeProperties(target) ? _hierarchicalHandler : _standardHandler; + if (!_settingsStore.Current.User.ExcludeProperties) + { + handler.AssignProperties(navisworksObject, target); + } + + return navisworksObject; + } + + /// + /// Determines whether properties should be merged from ancestors. + /// Only geometry objects should have their properties merged. + /// + private static bool ShouldMergeProperties(NAV.ModelItem target) => target.HasGeometry; + + private Base CreateGeometryObject(NAV.ModelItem target, string name) => + new() + { + ["name"] = name, + ["displayValue"] = _displayValueExtractor.GetDisplayValue(target), + ["properties"] = new Dictionary() + }; + + private static Collection CreateNonGeometryObject(string name) => + new() + { + ["name"] = name, + ["elements"] = new List(), + ["properties"] = new Dictionary() + }; + + private static string GetObjectName(NAV.ModelItem target) + { + var targetName = target.DisplayName; + + var firstObjectAncestor = target.FindFirstObjectAncestor(); + + // while the target node name is null keep cycling through parent objects until displayname is not null or empty OR object is firstObjectAncestor + + while (string.IsNullOrEmpty(targetName) && target != firstObjectAncestor) + { + target = target.Parent; + targetName = target.DisplayName; + } + + if (string.IsNullOrEmpty(targetName)) + { + targetName = "Unnamed model item"; + } + + return targetName; + } +} diff --git a/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json index bc651a163..4b9f4f6fa 100644 --- a/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json index fe7fa9241..58abdda42 100644 --- a/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json index cc73941ec..c1bd719b5 100644 --- a/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json index f1b96ec04..a419a4f0c 100644 --- a/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json index 7e18868c3..5ed1a4a73 100644 --- a/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json index eecf42030..550a866ac 100644 --- a/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json index 5ca86c924..732460fe2 100644 --- a/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json @@ -219,7 +219,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.Logging": { @@ -242,18 +242,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -262,14 +262,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Revit/Speckle.Converters.RevitShared/Helpers/DisplayValueExtractor.cs b/Converters/Revit/Speckle.Converters.RevitShared/Helpers/DisplayValueExtractor.cs index fd4a04ddd..52e861a06 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/Helpers/DisplayValueExtractor.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/Helpers/DisplayValueExtractor.cs @@ -98,50 +98,12 @@ IConverterSettingsStore converterSettings { //options = ViewSpecificOptions ?? options ?? new Options() { DetailLevel = DetailLevelSetting }; options ??= new DB.Options { DetailLevel = _detailLevelMap[_converterSettings.Current.DetailLevel] }; - - // Note: some elements do not get display values (you get invalid solids) unless we force the view detail level to be fine. This is annoying, but it's bad ux: people think the - // elements are not there (they are, just invisible). - var elementBuiltInCategory = element.Category.GetBuiltInCategory(); - if ( - element.Category is not null - && ( - elementBuiltInCategory == DB.BuiltInCategory.OST_PipeFitting - || elementBuiltInCategory == DB.BuiltInCategory.OST_PipeAccessory - || elementBuiltInCategory == DB.BuiltInCategory.OST_PlumbingFixtures -#if REVIT2024_OR_GREATER - || element is DB.Toposolid // note, brought back from 2.x.x. -#endif - ) - ) - { - options.DetailLevel = DB.ViewDetailLevel.Fine; - } + options = OverrideViewOptions(element, options); DB.GeometryElement geom; try { geom = element.get_Geometry(options); - -#if REVIT2024_OR_GREATER - // NOTE: incomplete solution. https://forums.autodesk.com/t5/revit-api-forum/how-to-get-steelproxyelement-geometry/td-p/10347898 - // If steel element proxies will be sucked in via category selection, and they are not visible in the current view, they will not be extracted out. - // I'm inclined to go with this as a semi-permanent limitation. - // https://speckle.community/t/revit-2025-2-missing-elements-and-colors/14073 - if ( - geom is null - && ( - elementBuiltInCategory == DB.BuiltInCategory.OST_StructConnections - || elementBuiltInCategory == DB.BuiltInCategory.OST_StructConnectionPlates - || elementBuiltInCategory == DB.BuiltInCategory.OST_StructConnectionBolts - || elementBuiltInCategory == DB.BuiltInCategory.OST_StructConnectionWelds - || elementBuiltInCategory == DB.BuiltInCategory.OST_StructConnectionShearStuds - ) - ) - { - options = new DB.Options() { View = _converterSettings.Current.Document?.ActiveView }; // NOTE: in case it's a view filter, it should use that specific view! - geom = element.get_Geometry(options); - } -#endif } // POC: should we be trying to continue? catch (Autodesk.Revit.Exceptions.ArgumentException) @@ -270,4 +232,51 @@ private bool ShouldSetElementDisplayToTransparent(DB.Element element) return false; #endif } + + /// + /// Overrides current view options to extract meaningful geometry for various elements. E.g., pipes, plumbing fixtures, steel elements + /// + /// + /// + private DB.Options OverrideViewOptions(DB.Element element, DB.Options currentOptions) + { + var elementBuiltInCategory = element.Category.GetBuiltInCategory(); + + // Note: some elements do not get display values (you get invalid solids) unless we force the view detail level to be fine. This is annoying, but it's bad ux: people think the + // elements are not there (they are, just invisible). + if ( + element.Category is not null + && ( + elementBuiltInCategory == DB.BuiltInCategory.OST_PipeFitting + || elementBuiltInCategory == DB.BuiltInCategory.OST_PipeAccessory + || elementBuiltInCategory == DB.BuiltInCategory.OST_PlumbingFixtures +#if REVIT2024_OR_GREATER + || element is DB.Toposolid // note, brought back from 2.x.x. +#endif + ) + ) + { + currentOptions.DetailLevel = DB.ViewDetailLevel.Fine; // Force detail level to be fine + return currentOptions; + } + // NOTE: On steel elements. This is an incomplete solution. + // If steel element proxies will be sucked in via category selection, and they are not visible in the current view, they will not be extracted out. + // I'm inclined to go with this as a semi-permanent limitation. See: + // https://speckle.community/t/revit-2025-2-missing-elements-and-colors/14073 + // and https://forums.autodesk.com/t5/revit-api-forum/how-to-get-steelproxyelement-geometry/td-p/10347898 + if ( + elementBuiltInCategory + is DB.BuiltInCategory.OST_StructConnections + or DB.BuiltInCategory.OST_StructConnectionPlates + or DB.BuiltInCategory.OST_StructuralFraming + or DB.BuiltInCategory.OST_StructuralColumns + or DB.BuiltInCategory.OST_StructConnectionBolts + or DB.BuiltInCategory.OST_StructConnectionWelds + or DB.BuiltInCategory.OST_StructConnectionShearStuds + ) + { + return new DB.Options() { View = _converterSettings.Current.Document.NotNull().ActiveView }; // TODO/NOTE: in case it's a view filter, it should use that specific view. This is a limiting partial fix. + } + return currentOptions; + } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json index d64ce53b6..07de061d2 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json index 3cd2e3b18..66dd67d12 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json index 5e4681dee..d69b96292 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json b/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json index bf9a1e908..1e01e04e3 100644 --- a/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json +++ b/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json @@ -300,7 +300,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.Logging": { @@ -323,18 +323,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -344,14 +344,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" }, "Tekla.Structures.Dialog": { "type": "CentralTransitive", diff --git a/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json b/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json index 6bed27646..3f6e1a368 100644 --- a/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json +++ b/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json @@ -341,7 +341,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "Microsoft.Extensions.Logging": { @@ -364,18 +364,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -385,14 +385,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" }, "Tekla.Structures.Plugins": { "type": "CentralTransitive", diff --git a/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json b/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json index e93f05f76..107659d2c 100644 --- a/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json @@ -324,9 +324,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -334,8 +334,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.logging": { @@ -377,18 +377,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -397,14 +397,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json b/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json index 3f3d958aa..2f7ce647b 100644 --- a/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.logging": { @@ -310,18 +310,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -331,14 +331,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } }, "net6.0-windows7.0": { @@ -565,9 +565,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.dui": { @@ -575,8 +575,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.logging": { @@ -611,18 +611,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -632,14 +632,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/DUI3/Speckle.Connectors.DUI/Bindings/ConfigBinding.cs b/DUI3/Speckle.Connectors.DUI/Bindings/ConfigBinding.cs index 076773cff..9a537b61d 100644 --- a/DUI3/Speckle.Connectors.DUI/Bindings/ConfigBinding.cs +++ b/DUI3/Speckle.Connectors.DUI/Bindings/ConfigBinding.cs @@ -79,13 +79,13 @@ private ConnectorConfig SeedConfig() public void UpdateConfig(ConnectorConfig config) { var str = _serializer.Serialize(config); - _jsonCacheManager.SaveObject(_speckleApplication.HostApplication, str); + _jsonCacheManager.UpdateObject(_speckleApplication.HostApplication, str); } public void SetUserSelectedAccountId(string userSelectedAccountId) { var str = _serializer.Serialize(new AccountsConfig() { UserSelectedAccountId = userSelectedAccountId }); - _jsonCacheManager.SaveObject("accounts", str); + _jsonCacheManager.UpdateObject("accounts", str); } public AccountsConfig? GetUserSelectedAccountId() diff --git a/DUI3/Speckle.Connectors.DUI/packages.lock.json b/DUI3/Speckle.Connectors.DUI/packages.lock.json index 309998943..7e3e486e3 100644 --- a/DUI3/Speckle.Connectors.DUI/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI/packages.lock.json @@ -50,9 +50,9 @@ }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -62,14 +62,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" }, "GraphQL.Client": { "type": "Transitive", @@ -314,9 +314,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.logging": { @@ -345,11 +345,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } } } diff --git a/Directory.Packages.props b/Directory.Packages.props index 07d37704d..84511d0ec 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -36,13 +36,14 @@ + - - - + + + diff --git a/Local.sln b/Local.sln index 8e6072242..f8d9e93d0 100644 --- a/Local.sln +++ b/Local.sln @@ -218,6 +218,50 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Connectors.ETABSSha EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Converters.ETABSShared", "Converters\CSi\Speckle.Converters.ETABSShared\Speckle.Converters.ETABSShared.shproj", "{36377858-D696-4567-AB05-637F4EC841F5}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Navisworks", "Navisworks", "{95AD741F-44B5-4E01-AF9C-FF9256E26D4B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2024", "2024", "{AE58C92C-DBF3-4248-8614-8F283B8CB5F8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{46D4410B-009A-43BD-AA32-BDB8B00D9E93}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2024", "Connectors\Navisworks\Speckle.Connectors.Navisworks2024\Speckle.Connectors.Navisworks2024.csproj", "{CE4D238F-66C2-46B1-BD25-9AC22D7CCB1A}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Connectors.NavisworksShared", "Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.shproj", "{62813838-52F7-43CB-9062-BB2611C00C79}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Converters.NavisworksShared", "Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.shproj", "{23830613-87F8-4655-B523-72189A597962}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2020", "2020", "{EAFCD59F-3650-497C-94ED-AEEFC3131B18}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2020", "Connectors\Navisworks\Speckle.Connectors.Navisworks2020\Speckle.Connectors.Navisworks2020.csproj", "{B6985672-4704-4F86-A3E0-2310BF8E6D73}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2020", "Converters\Navisworks\Speckle.Converters.Navisworks2020\Speckle.Converters.Navisworks2020.csproj", "{56680EA7-3599-4D88-83A5-B43BA93AC046}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2021", "2021", "{78DE77B0-7954-41FF-B374-ABE705881CEC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2021", "Converters\Navisworks\Speckle.Converters.Navisworks2021\Speckle.Converters.Navisworks2021.csproj", "{6101B44D-3805-4AA1-B8D0-E06C461ED202}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2022", "2022", "{19F15419-F493-4D53-83EA-F90869D97D6E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2022", "Converters\Navisworks\Speckle.Converters.Navisworks2022\Speckle.Converters.Navisworks2022.csproj", "{A675E34C-667E-4069-A8FA-92F2C2DB8A27}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2023", "2023", "{91DCAFB0-283B-4B07-9F6F-7335DECEEB08}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2023", "Converters\Navisworks\Speckle.Converters.Navisworks2023\Speckle.Converters.Navisworks2023.csproj", "{57AFB8CB-B310-49E4-9C53-621A614063CF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2025", "2025", "{A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2025", "Converters\Navisworks\Speckle.Converters.Navisworks2025\Speckle.Converters.Navisworks2025.csproj", "{0B5AB325-3791-4A81-B0EF-BCA040381BE2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2021", "Connectors\Navisworks\Speckle.Connectors.Navisworks2021\Speckle.Connectors.Navisworks2021.csproj", "{C635619C-2938-4E6F-9E25-56CE1632A7EC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2022", "Connectors\Navisworks\Speckle.Connectors.Navisworks2022\Speckle.Connectors.Navisworks2022.csproj", "{04FC86A3-2E25-41A1-98C5-10898616CD78}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2023", "Connectors\Navisworks\Speckle.Connectors.Navisworks2023\Speckle.Connectors.Navisworks2023.csproj", "{FD44E1F0-D20A-49B6-ADC9-482D911A74FB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2025", "Connectors\Navisworks\Speckle.Connectors.Navisworks2025\Speckle.Connectors.Navisworks2025.csproj", "{7791806E-7531-41D8-9C9D-4A1249D9F99C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2024", "Converters\Navisworks\Speckle.Converters.Navisworks2024\Speckle.Converters.Navisworks2024.csproj", "{52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -555,6 +599,78 @@ Global {5E924B13-B3E8-4724-9BA7-CE82E39866EB}.Local|Any CPU.Build.0 = Debug|Any CPU {5E924B13-B3E8-4724-9BA7-CE82E39866EB}.Release|Any CPU.ActiveCfg = Release|Any CPU {5E924B13-B3E8-4724-9BA7-CE82E39866EB}.Release|Any CPU.Build.0 = Release|Any CPU + {CE4D238F-66C2-46B1-BD25-9AC22D7CCB1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CE4D238F-66C2-46B1-BD25-9AC22D7CCB1A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CE4D238F-66C2-46B1-BD25-9AC22D7CCB1A}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {CE4D238F-66C2-46B1-BD25-9AC22D7CCB1A}.Local|Any CPU.Build.0 = Debug|Any CPU + {CE4D238F-66C2-46B1-BD25-9AC22D7CCB1A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CE4D238F-66C2-46B1-BD25-9AC22D7CCB1A}.Release|Any CPU.Build.0 = Release|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Local|Any CPU.Build.0 = Debug|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Release|Any CPU.Build.0 = Release|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Debug|Any CPU.Build.0 = Debug|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Local|Any CPU.ActiveCfg = Local|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Local|Any CPU.Build.0 = Local|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Release|Any CPU.ActiveCfg = Release|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Release|Any CPU.Build.0 = Release|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Local|Any CPU.ActiveCfg = Local|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Local|Any CPU.Build.0 = Local|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Release|Any CPU.Build.0 = Release|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Local|Any CPU.ActiveCfg = Local|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Local|Any CPU.Build.0 = Local|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Release|Any CPU.Build.0 = Release|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Local|Any CPU.ActiveCfg = Local|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Local|Any CPU.Build.0 = Local|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Release|Any CPU.Build.0 = Release|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Local|Any CPU.ActiveCfg = Local|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Local|Any CPU.Build.0 = Local|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Release|Any CPU.Build.0 = Release|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Local|Any CPU.Build.0 = Debug|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Release|Any CPU.Build.0 = Release|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Local|Any CPU.Build.0 = Debug|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Release|Any CPU.ActiveCfg = Release|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Release|Any CPU.Build.0 = Release|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Local|Any CPU.Build.0 = Debug|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Release|Any CPU.Build.0 = Release|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Local|Any CPU.Build.0 = Debug|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Release|Any CPU.Build.0 = Release|Any CPU + {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}.Local|Any CPU.ActiveCfg = Local|Any CPU + {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}.Local|Any CPU.Build.0 = Local|Any CPU + {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -653,6 +769,28 @@ Global {1B5C5FB2-3B22-4371-9AA5-3EDF3B4D62DE} = {D2638AC8-28B2-4667-A47B-3FAB9F900E6F} {5D1E0B0D-56A7-4E13-B9A9-8633E02B8F17} = {D2638AC8-28B2-4667-A47B-3FAB9F900E6F} {36377858-D696-4567-AB05-637F4EC841F5} = {D2638AC8-28B2-4667-A47B-3FAB9F900E6F} + {95AD741F-44B5-4E01-AF9C-FF9256E26D4B} = {42826721-9A18-4762-8BA9-F1429DD5C5B1} + {AE58C92C-DBF3-4248-8614-8F283B8CB5F8} = {95AD741F-44B5-4E01-AF9C-FF9256E26D4B} + {46D4410B-009A-43BD-AA32-BDB8B00D9E93} = {95AD741F-44B5-4E01-AF9C-FF9256E26D4B} + {CE4D238F-66C2-46B1-BD25-9AC22D7CCB1A} = {AE58C92C-DBF3-4248-8614-8F283B8CB5F8} + {62813838-52F7-43CB-9062-BB2611C00C79} = {46D4410B-009A-43BD-AA32-BDB8B00D9E93} + {23830613-87F8-4655-B523-72189A597962} = {46D4410B-009A-43BD-AA32-BDB8B00D9E93} + {EAFCD59F-3650-497C-94ED-AEEFC3131B18} = {95AD741F-44B5-4E01-AF9C-FF9256E26D4B} + {B6985672-4704-4F86-A3E0-2310BF8E6D73} = {EAFCD59F-3650-497C-94ED-AEEFC3131B18} + {56680EA7-3599-4D88-83A5-B43BA93AC046} = {EAFCD59F-3650-497C-94ED-AEEFC3131B18} + {78DE77B0-7954-41FF-B374-ABE705881CEC} = {95AD741F-44B5-4E01-AF9C-FF9256E26D4B} + {6101B44D-3805-4AA1-B8D0-E06C461ED202} = {78DE77B0-7954-41FF-B374-ABE705881CEC} + {19F15419-F493-4D53-83EA-F90869D97D6E} = {95AD741F-44B5-4E01-AF9C-FF9256E26D4B} + {A675E34C-667E-4069-A8FA-92F2C2DB8A27} = {19F15419-F493-4D53-83EA-F90869D97D6E} + {91DCAFB0-283B-4B07-9F6F-7335DECEEB08} = {95AD741F-44B5-4E01-AF9C-FF9256E26D4B} + {57AFB8CB-B310-49E4-9C53-621A614063CF} = {91DCAFB0-283B-4B07-9F6F-7335DECEEB08} + {A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D} = {95AD741F-44B5-4E01-AF9C-FF9256E26D4B} + {0B5AB325-3791-4A81-B0EF-BCA040381BE2} = {A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D} + {C635619C-2938-4E6F-9E25-56CE1632A7EC} = {78DE77B0-7954-41FF-B374-ABE705881CEC} + {04FC86A3-2E25-41A1-98C5-10898616CD78} = {19F15419-F493-4D53-83EA-F90869D97D6E} + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB} = {91DCAFB0-283B-4B07-9F6F-7335DECEEB08} + {7791806E-7531-41D8-9C9D-4A1249D9F99C} = {A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D} + {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5} = {AE58C92C-DBF3-4248-8614-8F283B8CB5F8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {EE253116-7070-4E9A-BCE8-2911C251B8C8} @@ -660,12 +798,17 @@ Global GlobalSection(SharedMSBuildProjectFiles) = preSolution Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{01f98733-7352-47ad-a594-537d979de3de}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{01f98733-7352-47ad-a594-537d979de3de}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{04fc86a3-2e25-41a1-98c5-10898616cd78}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{0b5ab325-3791-4a81-b0ef-bca040381be2}*SharedItemsImports = 5 Connectors\CSi\Speckle.Connectors.CSiShared\Speckle.Connectors.CSiShared.projitems*{1696f113-7f6b-49d6-a4ef-15751c7600f9}*SharedItemsImports = 5 + Connectors\CSi\Speckle.Connectors.ETABSShared\Speckle.Connectors.ETABSShared.projitems*{1696f113-7f6b-49d6-a4ef-15751c7600f9}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{19424b55-058c-4e9c-b86f-700aef9eaec3}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{1b1f674c-cfd5-4eac-adfd-f29a70b9d229}*SharedItemsImports = 5 + Converters\CSi\Speckle.Converters.CSiShared\Speckle.Converters.CSiShared.projitems*{1b5c5fb2-3b22-4371-9aa5-3edf3b4d62de}*SharedItemsImports = 13 Connectors\Rhino\Speckle.Connectors.RhinoShared\Speckle.Connectors.RhinoShared.projitems*{1e2644a9-6b31-4350-8772-ceaad6ee0b21}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{1f93164a-42ee-4d72-b7cd-9ca831f60e09}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{1f93164a-42ee-4d72-b7cd-9ca831f60e09}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{23830613-87f8-4655-b523-72189a597962}*SharedItemsImports = 13 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{25172c49-7aa4-4739-bb07-69785094c379}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{25172c49-7aa4-4739-bb07-69785094c379}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{26391930-f86f-47e0-a5f6-b89919e38ce1}*SharedItemsImports = 5 @@ -673,14 +816,25 @@ Global Connectors\Tekla\Speckle.Connector.TeklaShared\Speckle.Connectors.TeklaShared.projitems*{2cbc9a3d-8ac6-4127-ada5-c6d7f07a35e3}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{2f04e109-2b13-4dfc-961d-b7eea94299bd}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{35175682-da83-4c0a-a49d-b191f5885d8e}*SharedItemsImports = 13 + Converters\CSi\Speckle.Converters.ETABSShared\Speckle.Converters.ETABSShared.projitems*{36377858-d696-4567-ab05-637f4ec841f5}*SharedItemsImports = 13 Connectors\Tekla\Speckle.Connector.TeklaShared\Speckle.Connectors.TeklaShared.projitems*{3ab9028b-b2d2-464b-9ba3-39c192441e50}*SharedItemsImports = 13 + Converters\CSi\Speckle.Converters.CSiShared\Speckle.Converters.CSiShared.projitems*{3b81b220-92e3-43fc-86c6-1e6dbeeb1917}*SharedItemsImports = 5 + Converters\CSi\Speckle.Converters.ETABSShared\Speckle.Converters.ETABSShared.projitems*{3b81b220-92e3-43fc-86c6-1e6dbeeb1917}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{41bc679f-887f-44cf-971d-a5502ee87db0}*SharedItemsImports = 13 Converters\Tekla\Speckle.Converters.TeklaShared\Speckle.Converters.TeklaShared.projitems*{4c373fd0-e3f3-478b-ad32-cdbf340d21a9}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{4d40a101-07e6-4ff2-8934-83434932591d}*SharedItemsImports = 5 Converters\Tekla\Speckle.Converters.TeklaShared\Speckle.Converters.TeklaShared.projitems*{52666479-5401-47d6-b7ba-d554784439ea}*SharedItemsImports = 13 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{52d789c2-5b3c-4225-9f84-c54b3ab4f1b5}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{56680ea7-3599-4d88-83a5-b43ba93ac046}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{57afb8cb-b310-49e4-9c53-621a614063cf}*SharedItemsImports = 5 Converters\Rhino\Speckle.Converters.RhinoShared\Speckle.Converters.RhinoShared.projitems*{57c1aa51-5be2-40f3-8cb2-8b7d2af0ff5c}*SharedItemsImports = 5 + Connectors\CSi\Speckle.Connectors.ETABSShared\Speckle.Connectors.ETABSShared.projitems*{5d1e0b0d-56a7-4e13-b9a9-8633e02b8f17}*SharedItemsImports = 13 + Converters\CSi\Speckle.Converters.CSiShared\Speckle.Converters.CSiShared.projitems*{5e924b13-b3e8-4724-9ba7-ce82e39866eb}*SharedItemsImports = 5 + Converters\CSi\Speckle.Converters.ETABSShared\Speckle.Converters.ETABSShared.projitems*{5e924b13-b3e8-4724-9ba7-ce82e39866eb}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{6101b44d-3805-4aa1-b8d0-e06c461ed202}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{617bd3c7-87d9-4d28-8ac9-4910945bb9fc}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{617bd3c7-87d9-4d28-8ac9-4910945bb9fc}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{62813838-52f7-43cb-9062-bb2611c00c79}*SharedItemsImports = 13 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{62f50a22-8bbf-497a-b599-f858dff1d31c}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{631c295a-7ccf-4b42-8686-7034e31469e7}*SharedItemsImports = 5 Converters\Rhino\Speckle.Converters.RhinoShared\Speckle.Converters.RhinoShared.projitems*{65a2f556-f14a-49f3-8a92-7f2e1e7ed3b5}*SharedItemsImports = 5 @@ -689,11 +843,13 @@ Global Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{68cf9bdf-94ac-4d2d-a7bd-d1c064f97051}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{6a40cbe4-ecab-4ced-9917-5c64cbf75da6}*SharedItemsImports = 13 Connectors\Rhino\Speckle.Connectors.RhinoShared\Speckle.Connectors.RhinoShared.projitems*{6f3fd892-6315-4f75-bfbd-843a489f8b94}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{7791806e-7531-41d8-9c9d-4a1249d9f99c}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{7f1fdcf2-0ce8-4119-b3c1-f2cc6d7e1c36}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{7f1fdcf2-0ce8-4119-b3c1-f2cc6d7e1c36}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{89c4cbc7-1606-40de-b6da-fbe3aac98395}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{9add1b7a-6401-4202-8613-f668e2fbc0a4}*SharedItemsImports = 13 Connectors\Tekla\Speckle.Connector.TeklaShared\Speckle.Connectors.TeklaShared.projitems*{a277cdf6-7c8f-4870-8d15-af35f4749caa}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{a675e34c-667e-4069-a8fa-92f2c2db8a27}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{a6de3da0-b242-4f49-aef0-4e26af92d16c}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{a6de3da0-b242-4f49-aef0-4e26af92d16c}*SharedItemsImports = 5 Connectors\CSi\Speckle.Connectors.CSiShared\Speckle.Connectors.CSiShared.projitems*{a8e949b8-aa55-4909-99f0-8b551791a1f8}*SharedItemsImports = 13 @@ -701,8 +857,10 @@ Global Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{ae75b68f-3594-403b-9719-9c36da0e3f8a}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{ae75b68f-3594-403b-9719-9c36da0e3f8a}*SharedItemsImports = 5 Connectors\CSi\Speckle.Connectors.CSiShared\Speckle.Connectors.CSiShared.projitems*{afb47b71-4185-4135-98bb-eedffa8aa194}*SharedItemsImports = 5 + Connectors\CSi\Speckle.Connectors.ETABSShared\Speckle.Connectors.ETABSShared.projitems*{afb47b71-4185-4135-98bb-eedffa8aa194}*SharedItemsImports = 5 Converters\Tekla\Speckle.Converters.TeklaShared\Speckle.Converters.TeklaShared.projitems*{b236750b-cfe5-4640-9073-77a27a7257f6}*SharedItemsImports = 5 Connectors\Rhino\Speckle.Connectors.RhinoShared\Speckle.Connectors.RhinoShared.projitems*{b37d4b9a-8d3f-4fa5-b9c8-e6c5f8a0c1e2}*SharedItemsImports = 13 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{b6985672-4704-4f86-a3e0-2310bf8e6d73}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{b6c04ec4-ed81-4e61-b4b2-4902015808d7}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{b6c04ec4-ed81-4e61-b4b2-4902015808d7}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{c2de264a-aa87-4012-b954-17e3f403a237}*SharedItemsImports = 5 @@ -712,8 +870,10 @@ Global Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{c34d0246-6c16-4e81-ae57-2ce70f81484b}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{c3879337-cd00-4011-89c5-585dd2cc3ed5}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{c3879337-cd00-4011-89c5-585dd2cc3ed5}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{c635619c-2938-4e6f-9e25-56ce1632a7ec}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{ca8eae01-ab9f-4ec1-b6f3-73721487e9e1}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{ca8eae01-ab9f-4ec1-b6f3-73721487e9e1}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{ce4d238f-66c2-46b1-bd25-9ac22d7ccb1a}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{d4566bf1-56cf-477a-8769-63299a9f45a3}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{d4566bf1-56cf-477a-8769-63299a9f45a3}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{dc570fff-6fe5-47bd-8bc1-b471a6067786}*SharedItemsImports = 13 @@ -722,6 +882,7 @@ Global Converters\Revit\Speckle.Converters.RevitShared.Tests\Speckle.Converters.RevitShared.Tests.projitems*{e1c43415-3202-45f4-8bf9-a4dd7d7f2ed6}*SharedItemsImports = 13 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{eaad080d-49af-49bf-b8bd-a18ceb210734}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{efd01520-93e8-4cca-8e03-9cdc635f55f4}*SharedItemsImports = 13 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{fd44e1f0-d20a-49b6-adc9-482d911a74fb}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{fe4cb79d-4e59-4070-871c-108545537e6c}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{fe4cb79d-4e59-4070-871c-108545537e6c}*SharedItemsImports = 5 EndGlobalSection diff --git a/Sdk/Speckle.Connectors.Common/packages.lock.json b/Sdk/Speckle.Connectors.Common/packages.lock.json index fb3772b27..5a01b6d55 100644 --- a/Sdk/Speckle.Connectors.Common/packages.lock.json +++ b/Sdk/Speckle.Connectors.Common/packages.lock.json @@ -53,18 +53,18 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -74,14 +74,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" }, "GraphQL.Client": { "type": "Transitive", @@ -386,18 +386,18 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -406,14 +406,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" }, "GraphQL.Client": { "type": "Transitive", diff --git a/Sdk/Speckle.Connectors.Tests/packages.lock.json b/Sdk/Speckle.Connectors.Tests/packages.lock.json index cabb1dfb8..cc8d93c6f 100644 --- a/Sdk/Speckle.Connectors.Tests/packages.lock.json +++ b/Sdk/Speckle.Connectors.Tests/packages.lock.json @@ -324,9 +324,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )", - "Speckle.Sdk": "[3.1.0-dev.216, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )", + "Speckle.Sdk": "[3.1.0-dev.218, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.218, )" } }, "speckle.connectors.logging": { @@ -368,18 +368,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -388,14 +388,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Sdk/Speckle.Converters.Common.Tests/packages.lock.json b/Sdk/Speckle.Converters.Common.Tests/packages.lock.json index ea25d1475..6e699cbf8 100644 --- a/Sdk/Speckle.Converters.Common.Tests/packages.lock.json +++ b/Sdk/Speckle.Converters.Common.Tests/packages.lock.json @@ -332,7 +332,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.216, )" + "Speckle.Objects": "[3.1.0-dev.218, )" } }, "speckle.testing": { @@ -362,18 +362,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -382,14 +382,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Sdk/Speckle.Converters.Common/packages.lock.json b/Sdk/Speckle.Converters.Common/packages.lock.json index bbaef998c..143a4a12f 100644 --- a/Sdk/Speckle.Converters.Common/packages.lock.json +++ b/Sdk/Speckle.Converters.Common/packages.lock.json @@ -50,11 +50,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "GraphQL.Client": { @@ -309,9 +309,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -321,14 +321,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } }, "net8.0": { @@ -371,11 +371,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "oHyjQ0VFFcRNjgohlNQxtg1xxI6pNfpTNHZtkfVkQftb9ijbZ4MgG8nnW3vsBO/smRtBxynncrO9d3j40Iyqiw==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "8IOc9hoQD3gNJCLglUPmiWERz8uzPzsO0k+bUWQPKFVzFYtc14qop9BSeNzvmNP7rUKYk9yUbg9zAu6YVn9E4A==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.216" + "Speckle.Sdk": "3.1.0-dev.218" } }, "GraphQL.Client": { @@ -568,9 +568,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "tnsNOzooSIBhQk3BX3xudrRLL3A+n8ojfG81dJpKA8bSDOszdwPR2nWBJVA24KpZ6J3666jfRsi6NvAaxNFRcQ==", + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "PXpexeiuMRCHUQMMdatUOKi9qvETvzXaa1ak92mhVZj9k/dnraok7g8yxBIIKSyks+b6uWbnbn9gPzhVtk4s/w==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -579,14 +579,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.216" + "Speckle.Sdk.Dependencies": "3.1.0-dev.218" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.216, )", - "resolved": "3.1.0-dev.216", - "contentHash": "v3EBevnZqcPres3xWn0mcnCCKhSLlqwTyfqUOTQSWHCCBBos8t0aBIQ21EBEkDaklaS7auj+Rk7vWByvgcrUbQ==" + "requested": "[3.1.0-dev.218, )", + "resolved": "3.1.0-dev.218", + "contentHash": "c3lAtu/HXPd18dD64r4GVid6b9/4AoB/MDhJGOGJeQlcGPejBh4r9HuTGoPxMc25pdCwbiTUe4R1NPckEka4XA==" } } } diff --git a/Speckle.Connectors.sln b/Speckle.Connectors.sln index 79ab2e23f..a28a14618 100644 --- a/Speckle.Connectors.sln +++ b/Speckle.Connectors.sln @@ -213,6 +213,50 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Connectors.ETABSSha EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Converters.ETABSShared", "Converters\CSi\Speckle.Converters.ETABSShared\Speckle.Converters.ETABSShared.shproj", "{36377858-D696-4567-AB05-637F4EC841F5}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Navisworks", "Navisworks", "{7B95C512-C1CD-4110-A9A9-CECCD9630353}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{3C54FE49-F14E-43A2-B1DF-85D5C7638117}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Connectors.NavisworksShared", "Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.shproj", "{62813838-52F7-43CB-9062-BB2611C00C79}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Converters.NavisworksShared", "Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.shproj", "{23830613-87F8-4655-B523-72189A597962}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2024", "2024", "{96FA29FE-766A-4500-853A-0A4D1BD0A78F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2024", "Connectors\Navisworks\Speckle.Connectors.Navisworks2024\Speckle.Connectors.Navisworks2024.csproj", "{8C14D930-03D2-4E2F-9D8D-A6B57F57A659}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2024", "Converters\Navisworks\Speckle.Converters.Navisworks2024\Speckle.Converters.Navisworks2024.csproj", "{B12D6A2E-51FD-4197-B442-46C7D8F5E4E4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2020", "2020", "{EAFCD59F-3650-497C-94ED-AEEFC3131B18}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2020", "Connectors\Navisworks\Speckle.Connectors.Navisworks2020\Speckle.Connectors.Navisworks2020.csproj", "{B6985672-4704-4F86-A3E0-2310BF8E6D73}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2020", "Converters\Navisworks\Speckle.Converters.Navisworks2020\Speckle.Converters.Navisworks2020.csproj", "{56680EA7-3599-4D88-83A5-B43BA93AC046}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2021", "2021", "{78DE77B0-7954-41FF-B374-ABE705881CEC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2021", "Converters\Navisworks\Speckle.Converters.Navisworks2021\Speckle.Converters.Navisworks2021.csproj", "{6101B44D-3805-4AA1-B8D0-E06C461ED202}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2022", "2022", "{19F15419-F493-4D53-83EA-F90869D97D6E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2022", "Converters\Navisworks\Speckle.Converters.Navisworks2022\Speckle.Converters.Navisworks2022.csproj", "{A675E34C-667E-4069-A8FA-92F2C2DB8A27}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2023", "2023", "{91DCAFB0-283B-4B07-9F6F-7335DECEEB08}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2023", "Converters\Navisworks\Speckle.Converters.Navisworks2023\Speckle.Converters.Navisworks2023.csproj", "{57AFB8CB-B310-49E4-9C53-621A614063CF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2025", "2025", "{A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2025", "Converters\Navisworks\Speckle.Converters.Navisworks2025\Speckle.Converters.Navisworks2025.csproj", "{0B5AB325-3791-4A81-B0EF-BCA040381BE2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2021", "Connectors\Navisworks\Speckle.Connectors.Navisworks2021\Speckle.Connectors.Navisworks2021.csproj", "{C635619C-2938-4E6F-9E25-56CE1632A7EC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2022", "Connectors\Navisworks\Speckle.Connectors.Navisworks2022\Speckle.Connectors.Navisworks2022.csproj", "{04FC86A3-2E25-41A1-98C5-10898616CD78}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2023", "Connectors\Navisworks\Speckle.Connectors.Navisworks2023\Speckle.Connectors.Navisworks2023.csproj", "{FD44E1F0-D20A-49B6-ADC9-482D911A74FB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2025", "Connectors\Navisworks\Speckle.Connectors.Navisworks2025\Speckle.Connectors.Navisworks2025.csproj", "{7791806E-7531-41D8-9C9D-4A1249D9F99C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -532,6 +576,78 @@ Global {D61ECD90-3D17-4AF0-8B1A-0E0AD302DFF9}.Local|Any CPU.Build.0 = Debug|Any CPU {D61ECD90-3D17-4AF0-8B1A-0E0AD302DFF9}.Release|Any CPU.ActiveCfg = Release|Any CPU {D61ECD90-3D17-4AF0-8B1A-0E0AD302DFF9}.Release|Any CPU.Build.0 = Release|Any CPU + {8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Local|Any CPU.Build.0 = Debug|Any CPU + {8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8C14D930-03D2-4E2F-9D8D-A6B57F57A659}.Release|Any CPU.Build.0 = Release|Any CPU + {B12D6A2E-51FD-4197-B442-46C7D8F5E4E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B12D6A2E-51FD-4197-B442-46C7D8F5E4E4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B12D6A2E-51FD-4197-B442-46C7D8F5E4E4}.Local|Any CPU.ActiveCfg = Local|Any CPU + {B12D6A2E-51FD-4197-B442-46C7D8F5E4E4}.Local|Any CPU.Build.0 = Local|Any CPU + {B12D6A2E-51FD-4197-B442-46C7D8F5E4E4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B12D6A2E-51FD-4197-B442-46C7D8F5E4E4}.Release|Any CPU.Build.0 = Release|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Local|Any CPU.Build.0 = Debug|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B6985672-4704-4F86-A3E0-2310BF8E6D73}.Release|Any CPU.Build.0 = Release|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Debug|Any CPU.Build.0 = Debug|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Local|Any CPU.ActiveCfg = Local|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Local|Any CPU.Build.0 = Local|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Release|Any CPU.ActiveCfg = Release|Any CPU + {56680EA7-3599-4D88-83A5-B43BA93AC046}.Release|Any CPU.Build.0 = Release|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Local|Any CPU.ActiveCfg = Local|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Local|Any CPU.Build.0 = Local|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6101B44D-3805-4AA1-B8D0-E06C461ED202}.Release|Any CPU.Build.0 = Release|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Local|Any CPU.ActiveCfg = Local|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Local|Any CPU.Build.0 = Local|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A675E34C-667E-4069-A8FA-92F2C2DB8A27}.Release|Any CPU.Build.0 = Release|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Local|Any CPU.ActiveCfg = Local|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Local|Any CPU.Build.0 = Local|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {57AFB8CB-B310-49E4-9C53-621A614063CF}.Release|Any CPU.Build.0 = Release|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Local|Any CPU.ActiveCfg = Local|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Local|Any CPU.Build.0 = Local|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B5AB325-3791-4A81-B0EF-BCA040381BE2}.Release|Any CPU.Build.0 = Release|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Local|Any CPU.Build.0 = Debug|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C635619C-2938-4E6F-9E25-56CE1632A7EC}.Release|Any CPU.Build.0 = Release|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Local|Any CPU.Build.0 = Debug|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Release|Any CPU.ActiveCfg = Release|Any CPU + {04FC86A3-2E25-41A1-98C5-10898616CD78}.Release|Any CPU.Build.0 = Release|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Local|Any CPU.Build.0 = Debug|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB}.Release|Any CPU.Build.0 = Release|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Local|Any CPU.Build.0 = Debug|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -630,6 +746,28 @@ Global {1B5C5FB2-3B22-4371-9AA5-3EDF3B4D62DE} = {181F0468-B7A7-4CD7-ABD1-7F32B3ABB991} {5D1E0B0D-56A7-4E13-B9A9-8633E02B8F17} = {181F0468-B7A7-4CD7-ABD1-7F32B3ABB991} {36377858-D696-4567-AB05-637F4EC841F5} = {181F0468-B7A7-4CD7-ABD1-7F32B3ABB991} + {7B95C512-C1CD-4110-A9A9-CECCD9630353} = {42826721-9A18-4762-8BA9-F1429DD5C5B1} + {3C54FE49-F14E-43A2-B1DF-85D5C7638117} = {7B95C512-C1CD-4110-A9A9-CECCD9630353} + {62813838-52F7-43CB-9062-BB2611C00C79} = {3C54FE49-F14E-43A2-B1DF-85D5C7638117} + {23830613-87F8-4655-B523-72189A597962} = {3C54FE49-F14E-43A2-B1DF-85D5C7638117} + {96FA29FE-766A-4500-853A-0A4D1BD0A78F} = {7B95C512-C1CD-4110-A9A9-CECCD9630353} + {8C14D930-03D2-4E2F-9D8D-A6B57F57A659} = {96FA29FE-766A-4500-853A-0A4D1BD0A78F} + {B12D6A2E-51FD-4197-B442-46C7D8F5E4E4} = {96FA29FE-766A-4500-853A-0A4D1BD0A78F} + {EAFCD59F-3650-497C-94ED-AEEFC3131B18} = {7B95C512-C1CD-4110-A9A9-CECCD9630353} + {B6985672-4704-4F86-A3E0-2310BF8E6D73} = {EAFCD59F-3650-497C-94ED-AEEFC3131B18} + {56680EA7-3599-4D88-83A5-B43BA93AC046} = {EAFCD59F-3650-497C-94ED-AEEFC3131B18} + {78DE77B0-7954-41FF-B374-ABE705881CEC} = {7B95C512-C1CD-4110-A9A9-CECCD9630353} + {6101B44D-3805-4AA1-B8D0-E06C461ED202} = {78DE77B0-7954-41FF-B374-ABE705881CEC} + {19F15419-F493-4D53-83EA-F90869D97D6E} = {7B95C512-C1CD-4110-A9A9-CECCD9630353} + {A675E34C-667E-4069-A8FA-92F2C2DB8A27} = {19F15419-F493-4D53-83EA-F90869D97D6E} + {91DCAFB0-283B-4B07-9F6F-7335DECEEB08} = {7B95C512-C1CD-4110-A9A9-CECCD9630353} + {57AFB8CB-B310-49E4-9C53-621A614063CF} = {91DCAFB0-283B-4B07-9F6F-7335DECEEB08} + {A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D} = {7B95C512-C1CD-4110-A9A9-CECCD9630353} + {0B5AB325-3791-4A81-B0EF-BCA040381BE2} = {A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D} + {C635619C-2938-4E6F-9E25-56CE1632A7EC} = {78DE77B0-7954-41FF-B374-ABE705881CEC} + {04FC86A3-2E25-41A1-98C5-10898616CD78} = {19F15419-F493-4D53-83EA-F90869D97D6E} + {FD44E1F0-D20A-49B6-ADC9-482D911A74FB} = {91DCAFB0-283B-4B07-9F6F-7335DECEEB08} + {7791806E-7531-41D8-9C9D-4A1249D9F99C} = {A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {EE253116-7070-4E9A-BCE8-2911C251B8C8} @@ -638,17 +776,19 @@ Global Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{01f98733-7352-47ad-a594-537d979de3de}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{01f98733-7352-47ad-a594-537d979de3de}*SharedItemsImports = 5 Connectors\Tekla\Speckle.Connector.TeklaShared\Speckle.Connectors.TeklaShared.projitems*{025c85f8-f741-4600-bc46-5fead754b65d}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{04fc86a3-2e25-41a1-98c5-10898616cd78}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{0b5ab325-3791-4a81-b0ef-bca040381be2}*SharedItemsImports = 5 Connectors\CSi\Speckle.Connectors.CsiShared\Speckle.Connectors.CsiShared.projitems*{115d6106-1801-484a-b4e5-bcc94b6e5c7f}*SharedItemsImports = 5 Connectors\CSi\Speckle.Connectors.ETABSShared\Speckle.Connectors.ETABSShared.projitems*{115d6106-1801-484a-b4e5-bcc94b6e5c7f}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{19424b55-058c-4e9c-b86f-700aef9eaec3}*SharedItemsImports = 5 Converters\CSi\Speckle.Converters.CSiShared\Speckle.Converters.CSiShared.projitems*{1b5c5fb2-3b22-4371-9aa5-3edf3b4d62de}*SharedItemsImports = 13 Connectors\Rhino\Speckle.Connectors.RhinoShared\Speckle.Connectors.RhinoShared.projitems*{1e2644a9-6b31-4350-8772-ceaad6ee0b21}*SharedItemsImports = 5 Connectors\Tekla\Speckle.Connector.TeklaShared\Speckle.Connectors.TeklaShared.projitems*{2319c00f-b268-4e4c-9f88-6b379e2bbd22}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{23830613-87f8-4655-b523-72189a597962}*SharedItemsImports = 13 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{25172c49-7aa4-4739-bb07-69785094c379}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{25172c49-7aa4-4739-bb07-69785094c379}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{26391930-f86f-47e0-a5f6-b89919e38ce1}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{35175682-da83-4c0a-a49d-b191f5885d8e}*SharedItemsImports = 13 - Converters\CSi\Speckle.Converters.ETABSShared\Speckle.Converters.ETABSShared.projitems*{36377858-d696-4567-ab05-637f4ec841f5}*SharedItemsImports = 13 Connectors\Tekla\Speckle.Connector.TeklaShared\Speckle.Connectors.TeklaShared.projitems*{3ab9028b-b2d2-464b-9ba3-39c192441e50}*SharedItemsImports = 13 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{41bc679f-887f-44cf-971d-a5502ee87db0}*SharedItemsImports = 13 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{4459f2b1-a340-488e-a856-eb2ae9c72ad4}*SharedItemsImports = 5 @@ -656,18 +796,23 @@ Global Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{4d40a101-07e6-4ff2-8934-83434932591d}*SharedItemsImports = 5 Converters\Tekla\Speckle.Converters.TeklaShared\Speckle.Converters.TeklaShared.projitems*{52666479-5401-47d6-b7ba-d554784439ea}*SharedItemsImports = 13 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{5505b953-d434-49ce-8ebd-efd7b3c378f7}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{56680ea7-3599-4d88-83a5-b43ba93ac046}*SharedItemsImports = 5 Converters\Rhino\Speckle.Converters.RhinoShared\Speckle.Converters.RhinoShared.projitems*{56a909ae-6e99-4d4d-a22e-38bdc5528b8e}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{57afb8cb-b310-49e4-9c53-621a614063cf}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{5cdec958-708e-4d19-a79e-0c1db23a6039}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{5cdec958-708e-4d19-a79e-0c1db23a6039}*SharedItemsImports = 5 Connectors\CSi\Speckle.Connectors.ETABSShared\Speckle.Connectors.ETABSShared.projitems*{5d1e0b0d-56a7-4e13-b9a9-8633e02b8f17}*SharedItemsImports = 13 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{6101b44d-3805-4aa1-b8d0-e06c461ed202}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{617bd3c7-87d9-4d28-8ac9-4910945bb9fc}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{617bd3c7-87d9-4d28-8ac9-4910945bb9fc}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{62813838-52f7-43cb-9062-bb2611c00c79}*SharedItemsImports = 13 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{631c295a-7ccf-4b42-8686-7034e31469e7}*SharedItemsImports = 5 Converters\Rhino\Speckle.Converters.RhinoShared\Speckle.Converters.RhinoShared.projitems*{65a2f556-f14a-49f3-8a92-7f2e1e7ed3b5}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{67b888d9-c6c4-49f1-883c-5b964151d889}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared.Tests\Speckle.Converters.RevitShared.Tests.projitems*{68cf9bdf-94ac-4d2d-a7bd-d1c064f97051}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{68cf9bdf-94ac-4d2d-a7bd-d1c064f97051}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{6a40cbe4-ecab-4ced-9917-5c64cbf75da6}*SharedItemsImports = 13 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{7791806e-7531-41d8-9c9d-4a1249d9f99c}*SharedItemsImports = 5 Converters\CSi\Speckle.Converters.CSiShared\Speckle.Converters.CSiShared.projitems*{791e3288-8001-4d54-8eab-03d1d7f51044}*SharedItemsImports = 5 Converters\CSi\Speckle.Converters.ETABSShared\Speckle.Converters.ETABSShared.projitems*{791e3288-8001-4d54-8eab-03d1d7f51044}*SharedItemsImports = 5 Connectors\CSi\Speckle.Connectors.CsiShared\Speckle.Connectors.CsiShared.projitems*{7c49337a-6f7b-47ab-b549-42e799e89cf2}*SharedItemsImports = 5 @@ -679,11 +824,13 @@ Global Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{842f4bfd-3997-485d-bab5-9419c1d982f2}*SharedItemsImports = 5 Converters\Civil3d\Speckle.Converters.Civil3dShared\Speckle.Converters.Civil3dShared.projitems*{842f4bfd-3997-485d-bab5-9419c1d982f2}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{89c4cbc7-1606-40de-b6da-fbe3aac98395}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{8c14d930-03d2-4e2f-9d8d-a6b57f57a659}*SharedItemsImports = 5 Converters\Tekla\Speckle.Converters.TeklaShared\Speckle.Converters.TeklaShared.projitems*{8f9181c2-1808-44c0-a33a-5bae40c49e63}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{9166cc10-12e1-4a0f-916b-61f6f2004f5a}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{9add1b7a-6401-4202-8613-f668e2fbc0a4}*SharedItemsImports = 13 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{9d66ede4-afc2-4f00-b40c-a7e878a2972f}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{a1b72ec1-5bc4-41fd-850f-5da87df49616}*SharedItemsImports = 13 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{a675e34c-667e-4069-a8fa-92f2c2db8a27}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared.Cef\Speckle.Connectors.RevitShared.Cef.projitems*{a6de3da0-b242-4f49-aef0-4e26af92d16c}*SharedItemsImports = 5 Connectors\Revit\Speckle.Connectors.RevitShared\Speckle.Connectors.RevitShared.projitems*{a6de3da0-b242-4f49-aef0-4e26af92d16c}*SharedItemsImports = 5 Connectors\Rhino\Speckle.Connectors.RhinoShared\Speckle.Connectors.RhinoShared.projitems*{a6e3a82f-4696-4d92-aba1-38aa80752067}*SharedItemsImports = 5 @@ -692,11 +839,14 @@ Global Converters\Tekla\Speckle.Converters.TeklaShared\Speckle.Converters.TeklaShared.projitems*{acf75860-7fce-4ae9-8c45-68ad1043550b}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{afab80bd-a4dd-4cad-9937-acbfed668a48}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{afab80bd-a4dd-4cad-9937-acbfed668a48}*SharedItemsImports = 5 + Converters\Navisworks\Speckle.Converters.NavisworksShared\Speckle.Converters.NavisworksShared.projitems*{b12d6a2e-51fd-4197-b442-46c7d8f5e4e4}*SharedItemsImports = 5 Connectors\Rhino\Speckle.Connectors.RhinoShared\Speckle.Connectors.RhinoShared.projitems*{b37d4b9a-8d3f-4fa5-b9c8-e6c5f8a0c1e2}*SharedItemsImports = 13 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{b6985672-4704-4f86-a3e0-2310bf8e6d73}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{bbf2c19e-221e-4aa0-8521-fe75d8f4a2b0}*SharedItemsImports = 5 Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.projitems*{c2de264a-aa87-4012-b954-17e3f403a237}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared.Tests\Speckle.Converters.RevitShared.Tests.projitems*{c32274d9-1b66-4d5c-82f9-eb3f10f46752}*SharedItemsImports = 5 Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{c32274d9-1b66-4d5c-82f9-eb3f10f46752}*SharedItemsImports = 5 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{c635619c-2938-4e6f-9e25-56ce1632a7ec}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{c70ebb84-ba5b-4f2f-819e-25e0985ba13c}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.projitems*{ca8eae01-ab9f-4ec1-b6f3-73721487e9e1}*SharedItemsImports = 5 Connectors\Autocad\Speckle.Connectors.Civil3dShared\Speckle.Connectors.Civil3dShared.projitems*{ca8eae01-ab9f-4ec1-b6f3-73721487e9e1}*SharedItemsImports = 5 @@ -710,5 +860,6 @@ Global Converters\Revit\Speckle.Converters.RevitShared\Speckle.Converters.RevitShared.projitems*{e1c43415-3200-45f4-8bf9-a4dd7d7f2ed6}*SharedItemsImports = 13 Converters\Rhino\Speckle.Converters.RhinoShared\Speckle.Converters.RhinoShared.projitems*{e1c43415-3200-45f4-8bf9-a4dd7d7f2ed9}*SharedItemsImports = 13 Converters\Revit\Speckle.Converters.RevitShared.Tests\Speckle.Converters.RevitShared.Tests.projitems*{e1c43415-3202-45f4-8bf9-a4dd7d7f2ed6}*SharedItemsImports = 13 + Connectors\Navisworks\Speckle.Connectors.NavisworksShared\Speckle.Connectors.NavisworksShared.projitems*{fd44e1f0-d20a-49b6-adc9-482d911a74fb}*SharedItemsImports = 5 EndGlobalSection EndGlobal