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
};