annotate pkg/mesh/meshserialize_v1.go @ 5694:3bc15e38c7e8 sr-v2

Typo fix
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 12 Feb 2024 14:43:31 +0100
parents d920f0fa2f04
children ef80748ae4f3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5675
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2 // without warranty, see README.md and license for details.
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 //
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 //
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 // Copyright (C) 2024 by via donau
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 // Software engineering by Intevation GmbH
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 //
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 // Author(s):
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 package mesh
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 import (
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
17 "bufio"
5675
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 "encoding/binary"
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 "io"
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 "math"
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 "gemma.intevation.de/gemma/pkg/log"
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23 )
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 func (s *STRTree) serializeV1(w io.Writer) error {
5692
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
26 return serializer(w, s,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
27 (*STRTree).serializeTinV1,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
28 (*STRTree).serializeEntries,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
29 (*STRTree).serializeIndexV1,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
30 (*STRTree).serializeBBoxesV1,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
31 )
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
32 }
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
33
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
34 func (s *STRTree) serializeTinV1(w io.Writer) error {
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
35 return s.tin.serializeV1(w)
5675
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 func (s *STRTree) serializeBBoxesV1(w io.Writer) error {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 if err := binary.Write(w, binary.LittleEndian, int32(len(s.bboxes))); err != nil {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 return err
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 var err error
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 write := func(v float64) {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 if err == nil {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 err = binary.Write(w, binary.LittleEndian, math.Float64bits(v))
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 for _, box := range s.bboxes {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 write(box.X1)
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 write(box.Y1)
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51 write(box.X2)
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 write(box.Y2)
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 return err
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 func (s *STRTree) serializeIndexV1(w io.Writer) error {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 if err := binary.Write(w, binary.LittleEndian, int32(len(s.index))); err != nil {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 return err
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 var buf [binary.MaxVarintLen32]byte
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 var last int32
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 var written int
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 for _, x := range s.index {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 delta := x - last
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 n := binary.PutVarint(buf[:], int64(delta))
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67 for p := buf[:n]; len(p) > 0; p = p[n:] {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68 var err error
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 if n, err = w.Write(p); err != nil {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70 return err
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 written += n
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74 last = x
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76 log.Infof("compressed index in bytes: %d %.2f (%d %.2f)\n",
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 written,
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78 float64(written)/(1024*1024),
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
79 4*len(s.index),
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
80 float64(4*len(s.index))/(1024*1024),
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
81 )
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
82 return nil
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
85 func (t *Tin) serializeV1(w io.Writer) error {
5692
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
86 return serializer(w, t,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
87 (*Tin).serializeEPSG,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
88 (*Tin).serializeExtent,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
89 (*Tin).serializeV1,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
90 (*Tin).serializeTrianglesV1,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
91 )
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
92 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
93
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
94 func (t *Tin) serializeTrianglesV1(w io.Writer) error {
5690
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
95 if err := binary.Write(
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
96 w, binary.LittleEndian, uint32(len(t.Triangles))); err != nil {
5675
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
97 return err
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
98 }
5690
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
99 var buf [binary.MaxVarintLen32]byte
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
100 var written int
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
101 var last int32
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
102 for _, triangle := range t.Triangles {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
103 for _, idx := range triangle {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
104 value := idx - last
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
105 n := binary.PutVarint(buf[:], int64(value))
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
106 for p := buf[:n]; len(p) > 0; p = p[n:] {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
107 var err error
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
108 if n, err = w.Write(p); err != nil {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
109 return err
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
110 }
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
111 written += n
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
112 }
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
113 last = idx
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
114 }
5675
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
115 }
5690
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
116 log.Infof("compressed tin indices in bytes: %d (%d)\n",
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
117 written, 3*4*len(t.Triangles))
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
118 return nil
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
119 }
5675
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
120
5690
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
121 func (t *Tin) serializeVerticesV1(w io.Writer) error {
5675
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
122 if err := binary.Write(
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
123 w, binary.LittleEndian, uint32(len(t.Vertices))); err != nil {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
124 return err
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
125 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
126 var err error
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
127 vwrite := func(v float64) {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
128 if err == nil {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
129 err = binary.Write(w, binary.LittleEndian, math.Float64bits(v))
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
130 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
131 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
132 for _, v := range t.Vertices {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
133 vwrite(v.X)
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
134 vwrite(v.Y)
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
135 vwrite(v.Z)
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
136 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
137 if err != nil {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
138 return err
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
139 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
140 log.Infof("vertices %d (%d)\n", len(t.Vertices), len(t.Vertices)*3*8)
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
141 return nil
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
142 }
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
143
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
144 func (s *STRTree) deserializeV1(r *bufio.Reader) error {
5692
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
145 return serializer(r, s,
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
146 (*STRTree).deserializeTinV1,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
147 (*STRTree).deserializeEntries,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
148 (*STRTree).deserializeIndexV1,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
149 (*STRTree).deserializeBBoxesV1,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
150 )
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
151 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
152
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
153 func (s *STRTree) deserializeBBoxesV1(r *bufio.Reader) error {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
154 var numBBoxes int32
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
155 if err := binary.Read(r, binary.LittleEndian, &numBBoxes); err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
156 return err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
157 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
158 bboxes := make([]Box2D, numBBoxes)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
159 s.bboxes = bboxes
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
160 var err error
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
161 read := func(v *float64) {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
162 if err == nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
163 err = binary.Read(r, binary.LittleEndian, v)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
164 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
165 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
166 for i := range bboxes {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
167 read(&bboxes[i].X1)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
168 read(&bboxes[i].Y1)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
169 read(&bboxes[i].X2)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
170 read(&bboxes[i].Y2)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
171 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
172 return err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
173 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
174
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
175 func (s *STRTree) deserializeIndexV1(r *bufio.Reader) error {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
176 var numIndex int32
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
177 if err := binary.Read(r, binary.LittleEndian, &numIndex); err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
178 return err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
179 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
180 index := make([]int32, numIndex)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
181 s.index = index
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
182 var last int32
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
183 for i := range index {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
184 v, err := binary.ReadVarint(r)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
185 if err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
186 return err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
187 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
188 value := int32(v) + last
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
189 index[i] = value
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
190 last = value
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
191 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
192 return nil
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
193 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
194
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
195 func (s *STRTree) deserializeTinV1(r *bufio.Reader) error {
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
196 s.tin = new(Tin)
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
197 return s.tin.deserializeV1(r)
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
198 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
199
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
200 // deserializeV1 restores a TIN from a binary representation.
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
201 func (t *Tin) deserializeV1(r *bufio.Reader) error {
5692
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
202 return serializer(r, t,
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
203 (*Tin).deserializeEPSG,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
204 (*Tin).deserializeExtent,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
205 (*Tin).deserializeVerticesV1,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
206 (*Tin).deserializeTrianglesV1,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
207 )
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
208 }
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
209
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
210 func (t *Tin) deserializeVerticesV1(r *bufio.Reader) error {
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
211 var numVertices uint32
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
212 if err := binary.Read(r, binary.LittleEndian, &numVertices); err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
213 return err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
214 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
215 log.Infof("vertices: %d\n", numVertices)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
216 vertices := make([]Vertex, numVertices)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
217 t.Vertices = vertices
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
218 for i := range vertices {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
219 if err := vertices[i].Read(r); err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
220 return err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
221 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
222 }
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
223 return nil
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
224 }
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
225
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
226 func (t *Tin) deserializeTrianglesV1(r *bufio.Reader) error {
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
227 var numTriangles uint32
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
228 if err := binary.Read(r, binary.LittleEndian, &numTriangles); err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
229 return err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
230 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
231 log.Infof("triangles: %d\n", numTriangles)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
232 indices := make([]int32, 3*numTriangles)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
233 triangles := make([][]int32, numTriangles)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
234 t.Triangles = triangles
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
235 var last int32
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
236 for i := range triangles {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
237 tri := indices[:3]
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
238 indices = indices[3:]
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
239 triangles[i] = tri
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
240 for j := range tri {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
241 v, err := binary.ReadVarint(r)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
242 if err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
243 return err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
244 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
245 value := int32(v) + last
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
246 tri[j] = value
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
247 last = value
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
248 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
249 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
250 return nil
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
251 }