From 62aeeeeb271a7efa62722efd22d1187885e22fa8 Mon Sep 17 00:00:00 2001 From: Harald Steinlechner Date: Thu, 4 Apr 2024 14:03:14 +0200 Subject: [PATCH] exposed KdTree build flags & version bump --- RELEASE_NOTES.md | 3 +++ src/OPCViewer.Base/KdTrees.fs | 31 ++++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index e3527da..e381e08 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,3 +1,6 @@ +### 1.6.0 +- exposed kdtree build flags + ### 1.5.2 - creates relative paths for kdtrees as early as possible diff --git a/src/OPCViewer.Base/KdTrees.fs b/src/OPCViewer.Base/KdTrees.fs index 6339f7d..6affed0 100644 --- a/src/OPCViewer.Base/KdTrees.fs +++ b/src/OPCViewer.Base/KdTrees.fs @@ -176,6 +176,22 @@ module KdTrees = b.CodeT(ref kdTree) Log.stop() + type KdTreeParameters = { + flags : KdIntersectionTree.BuildFlags + relativeMinCellSize : float + splitPlaneEpsilon : float + setObjectSetToNull : bool // can be recomputed on load + } + + module KdTreeParameters = + let legacyDefault = + { + // retrieved from 2016 TextureConverter tool + flags = KdIntersectionTree.BuildFlags.Hierarchical ||| KdIntersectionTree.BuildFlags.MediumIntersection + relativeMinCellSize = 1E-06 + splitPlaneEpsilon = 1E-07 + setObjectSetToNull = true + } let loadKdTrees' (h: PatchHierarchy) @@ -187,6 +203,7 @@ module KdTrees = (ignoreMasterKdTree : bool) (loadTriangles : Trafo3d -> string -> TriangleSet) (surpressFileConstruction : bool) + (kdTreeParameters : KdTreeParameters) : HashMap = let masterKdPath = @@ -244,13 +261,13 @@ module KdTrees = let triangleSet = loadTriangles trafo objectSetPath Log.startTimed $"Building KdTree for {info.Name}" - let flags = - KdIntersectionTree.BuildFlags.Picking - ||| KdIntersectionTree.BuildFlags.FastBuild - ||| KdIntersectionTree.BuildFlags.EmptySpaceOptimization - - let kdTree = KdIntersectionTree(triangleSet, flags ) + let kdTree = KdIntersectionTree(triangleSet, kdTreeParameters.flags, kdTreeParameters.relativeMinCellSize, kdTreeParameters.splitPlaneEpsilon) Log.stop() + + // can (and will) be recomputed from vertex data on load + if kdTreeParameters.setObjectSetToNull then + kdTree.ObjectSet <- null + Log.startTimed "saving KdTree to: %s" info.Name saveKdTree kdTree kdPath Log.stop() @@ -348,4 +365,4 @@ module KdTrees = (b: BinarySerializer) (forceRebuild : bool) (ignoreMasterKdTree : bool) (loadTriangles : Trafo3d -> string -> TriangleSet) (surpressFileConstruction : bool) : HashMap = - loadKdTrees' h trafo true mode b forceRebuild ignoreMasterKdTree loadTriangles surpressFileConstruction + loadKdTrees' h trafo true mode b forceRebuild ignoreMasterKdTree loadTriangles surpressFileConstruction KdTreeParameters.legacyDefault