annotate pkg/mesh/meshserialize_v2.go @ 5680:a87900c0fd11 sr-v2

Remove triangles that are not registered in the spatial index.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 11 Feb 2024 18:40:37 +0100
parents
children 33499bd1b829
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5680
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2 // without warranty, see README.md and license for details.
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 //
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 //
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 // Copyright (C) 2024 by via donau
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 // Software engineering by Intevation GmbH
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 //
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 // Author(s):
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 package mesh
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 func (s *STRTree) optimizeForSerializationV2() {
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 s.removeUnusedTriangles()
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 // TODO: Implement me!
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 }
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 // removeUnusedTriangles removes all triangles from the
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 // TIN that are not registered in the spatial index.
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23 func (s *STRTree) removeUnusedTriangles() {
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 used := make([]bool, len(s.tin.Triangles))
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 unused := len(used)
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 s.allTriangleIndices(func(indices []int32) {
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 for _, idx := range indices {
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 used[idx] = true
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 unused-- // They only occur once in the spatial index.
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 }
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31 })
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 if unused <= 0 {
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 return
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 }
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35 newTris := make([][]int32, 0, len(s.tin.Triangles)-unused)
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 remap := map[int32]int32{}
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 for idx, tri := range s.tin.Triangles {
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 if used[idx] {
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 remap[int32(idx)] = int32(len(newTris))
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 newTris = append(newTris, tri)
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 }
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 }
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 s.tin.Triangles = newTris
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 // Update the spatial index as the gaps are now closed.
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 s.allTriangleIndices(func(indices []int32) {
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 for i, idx := range indices {
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 indices[i] = remap[idx]
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 }
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 })
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 }