Mercurial > gemma
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 |
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 } |