diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs index 7f5b3fc6c..9297b38af 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs @@ -1,4 +1,4 @@ -using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging; using Speckle.Connector.Navisworks.HostApp; using Speckle.Connectors.Common.Builders; using Speckle.Connectors.Common.Caching; @@ -366,13 +366,13 @@ public class NavisworksRootObjectBuilder( { var groupKey = kvp.Key; var geometries = kvp.Value; - var groupKeyHash = groupKey.ToHashString(); + var groupKeyPath = groupKey.ToPathString(); var defProxy = new InstanceDefinitionProxy { - name = $"Shared Geometry {groupKeyHash}", + name = $"Shared Geometry {groupKeyPath}", objects = geometries.Select(g => g.applicationId ?? "").Where(id => !string.IsNullOrEmpty(id)).ToList(), - applicationId = $"{DEFINITION_ID_PREFIX}{groupKeyHash}", + applicationId = $"{DEFINITION_ID_PREFIX}{groupKeyPath}", maxDepth = 0 }; diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/DisplayValueExtractor.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/DisplayValueExtractor.cs index ec721dac1..8abea029d 100644 --- a/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/DisplayValueExtractor.cs +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/DataExtractors/DisplayValueExtractor.cs @@ -18,6 +18,6 @@ public class DisplayValueExtractor( /// /// Gets the underlying geometry converter for accessing cache statistics. /// - internal GeometryToSpeckleConverter GeometryConverter { get; } = + private GeometryToSpeckleConverter GeometryConverter { get; } = geometryConverter ?? throw new ArgumentNullException(nameof(geometryConverter)); } diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Paths/PathKey.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Paths/PathKey.cs index 2fe1b2ab4..4eaf89f6d 100644 --- a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Paths/PathKey.cs +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Paths/PathKey.cs @@ -1,4 +1,4 @@ -namespace Speckle.Converter.Navisworks.Paths; +namespace Speckle.Converter.Navisworks.Paths; public readonly record struct PathKey { @@ -84,21 +84,9 @@ public readonly record struct PathKey return true; } - public override string ToString() - { - if (Data == null || Data.Length == 0) - { - return string.Empty; - } - return string.Join(",", Data); - } + public override string ToString() => Data == null || Data.Length == 0 ? string.Empty : string.Join(".", Data); - /// - /// Returns a compact string representation using the hash value as an unsigned integer. - /// Suitable for use as application IDs and definition IDs. - /// This avoids negative numbers in IDs by treating the hash as unsigned. - /// - public string ToHashString() => unchecked((uint)Hash).ToString(); + public string ToPathString() => Data == null || Data.Length == 0 ? "0" : string.Join(".", Data); } internal sealed class PathKeyComparer : IEqualityComparer diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/GeometryToSpeckleConverter.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/GeometryToSpeckleConverter.cs index 79bd99506..5f20b4eed 100644 --- a/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/GeometryToSpeckleConverter.cs +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/Raw/GeometryToSpeckleConverter.cs @@ -108,10 +108,10 @@ public sealed class GeometryToSpeckleConverter( var transformedWorld = _isUpright ? instanceWorld : TransformMatrixYUpToZUp(instanceWorld); var invDefWorld = GeometryHelpers.InvertRigid(transformedWorld); var definitionGeometry = UnbakeGeometry(geometries, invDefWorld); - var groupKeyHash = groupKey.ToHashString(); + var groupKeyPath = groupKey.ToPathString(); for (int i = 0; i < definitionGeometry.Count; i++) { - definitionGeometry[i].applicationId = $"{GEOMETRY_ID_PREFIX}{groupKeyHash}_{i}"; + definitionGeometry[i].applicationId = $"{GEOMETRY_ID_PREFIX}{groupKeyPath}_{i}"; } _registry.StoreDefinitionGeometry(groupKey, definitionGeometry); @@ -123,10 +123,10 @@ public sealed class GeometryToSpeckleConverter( var transformedWorld = _isUpright ? instanceWorld : TransformMatrixYUpToZUp(instanceWorld); var instanceProxy = new InstanceProxy { - definitionId = $"{InstanceConstants.DEFINITION_ID_PREFIX}{groupKey.ToHashString()}", + definitionId = $"{InstanceConstants.DEFINITION_ID_PREFIX}{groupKey.ToPathString()}", transform = ConvertToMatrix4X4(transformedWorld), units = _settings.Derived.SpeckleUnits, - applicationId = $"{InstanceConstants.INSTANCE_ID_PREFIX}{itemPathKey.ToHashString()}", + applicationId = $"{InstanceConstants.INSTANCE_ID_PREFIX}{itemPathKey.ToPathString()}", maxDepth = 0 };