changeset 5676:d56e043bbbca sr-v2

More code moving.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 11 Feb 2024 09:49:25 +0100
parents b8da63027b48
children a57be8bfb6ea
files pkg/mesh/loader.go pkg/mesh/serialize_v1.go pkg/mesh/strtree.go
diffstat 3 files changed, 157 insertions(+), 160 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/mesh/loader.go	Sat Feb 10 22:22:03 2024 +0100
+++ b/pkg/mesh/loader.go	Sun Feb 11 09:49:25 2024 +0100
@@ -20,60 +20,37 @@
 	"encoding/binary"
 	"errors"
 	"fmt"
-
-	"gemma.intevation.de/gemma/pkg/log"
 )
 
 const magicHeader = "SR3D"
 
-func (s *STRTree) deserializeIndex(r *bufio.Reader) error {
-	var numIndex int32
-	if err := binary.Read(r, binary.LittleEndian, &numIndex); err != nil {
-		return err
-	}
-	index := make([]int32, numIndex)
-	s.index = index
+// Bytes serializes this tree to a byte slice.
+func (s *STRTree) Bytes() ([]byte, error) {
 
-	var last int32
-	for i := range index {
-		v, err := binary.ReadVarint(r)
-		if err != nil {
-			return err
-		}
-		value := int32(v) + last
-		index[i] = value
-		last = value
+	var buf bytes.Buffer
+	w, err := gzip.NewWriterLevel(&buf, gzip.BestSpeed)
+	if err != nil {
+		return nil, err
 	}
 
-	return nil
+	if err := s.serializeV1(w); err != nil {
+		return nil, err
+	}
+
+	if err := w.Close(); err != nil {
+		return nil, err
+	}
+
+	return buf.Bytes(), nil
 }
 
-func (s *STRTree) deserializeBBoxes(r *bufio.Reader) error {
-
-	var numBBoxes int32
-	if err := binary.Read(r, binary.LittleEndian, &numBBoxes); err != nil {
+// FromBytes restores a STRTree from a binary representation.
+func (s *STRTree) FromBytes(data []byte, version *int64) error {
+	r, err := gzip.NewReader(bytes.NewReader(data))
+	if err != nil {
 		return err
 	}
-
-	bboxes := make([]Box2D, numBBoxes)
-	s.bboxes = bboxes
-
-	var err error
-
-	read := func(v *float64) {
-		if err == nil {
-			err = binary.Read(r, binary.LittleEndian, v)
-		}
-	}
-
-	for i := range bboxes {
-		read(&bboxes[i].X1)
-		read(&bboxes[i].Y1)
-		read(&bboxes[i].X2)
-		read(&bboxes[i].Y2)
-	}
-
-	return err
+	return s.deserialize(bufio.NewReader(r), version)
 }
 
 func (s *STRTree) deserialize(r *bufio.Reader, version *int64) error {
@@ -102,98 +79,3 @@
 	// TODO: Implement me!
 	return errors.New("not implemented, yet")
 }
-
-func (s *STRTree) deserializeV1(r *bufio.Reader) error {
-	s.tin = new(Tin)
-	if err := s.tin.Deserialize(r); err != nil {
-		return err
-	}
-	var numEntries uint8
-	if err := binary.Read(r, binary.LittleEndian, &numEntries); err != nil {
-		return err
-	}
-	s.Entries = int(numEntries)
-
-	if err := s.deserializeIndex(r); err != nil {
-		return err
-	}
-
-	return s.deserializeBBoxes(r)
-}
-
-// FromBytes restores a STRTree from a binary representation.
-func (s *STRTree) FromBytes(data []byte, version *int64) error {
-	r, err := gzip.NewReader(bytes.NewReader(data))
-	if err != nil {
-		return err
-	}
-	return s.deserialize(bufio.NewReader(r), version)
-}
-
-// Deserialize restores a TIN from a binary representation.
-func (t *Tin) Deserialize(r *bufio.Reader) error {
-
-	if err := binary.Read(r, binary.LittleEndian, &t.EPSG); err != nil {
-		return err
-	}
-
-	log.Infof("EPSG: %d\n", t.EPSG)
-
-	if err := t.Min.Read(r); err != nil {
-		return err
-	}
-
-	if err := t.Max.Read(r); err != nil {
-		return err
-	}
-
-	log.Infof("BBOX: [[%f, %f, %f], [%f, %f, %f]]\n",
-		t.Min.X, t.Min.Y, t.Min.Z,
-		t.Max.X, t.Max.Y, t.Max.Z)
-
-	var numVertices uint32
-	if err := binary.Read(r, binary.LittleEndian, &numVertices); err != nil {
-		return err
-	}
-
-	log.Infof("vertices: %d\n", numVertices)
-
-	vertices := make([]Vertex, numVertices)
-	t.Vertices = vertices
-
-	for i := range vertices {
-		if err := vertices[i].Read(r); err != nil {
-			return err
-		}
-	}
-
-	var numTriangles uint32
-	if err := binary.Read(r, binary.LittleEndian, &numTriangles); err != nil {
-		return err
-	}
-
-	log.Infof("triangles: %d\n", numTriangles)
-
-	indices := make([]int32, 3*numTriangles)
-	triangles := make([][]int32, numTriangles)
-	t.Triangles = triangles
-
-	var last int32
-
-	for i := range triangles {
-		tri := indices[:3]
-		indices = indices[3:]
-		triangles[i] = tri
-		for j := range tri {
-			v, err := binary.ReadVarint(r)
-			if err != nil {
-				return err
-			}
-			value := int32(v) + last
-			tri[j] = value
-			last = value
-		}
-	}
-
-	return nil
-}
--- a/pkg/mesh/serialize_v1.go	Sat Feb 10 22:22:03 2024 +0100
+++ b/pkg/mesh/serialize_v1.go	Sun Feb 11 09:49:25 2024 +0100
@@ -14,6 +14,7 @@
 package mesh
 
 import (
+	"bufio"
 	"encoding/binary"
 	"io"
 	"math"
@@ -161,3 +162,139 @@
 
 	return nil
 }
+
+func (s *STRTree) deserializeBBoxesV1(r *bufio.Reader) error {
+
+	var numBBoxes int32
+	if err := binary.Read(r, binary.LittleEndian, &numBBoxes); err != nil {
+		return err
+	}
+
+	bboxes := make([]Box2D, numBBoxes)
+	s.bboxes = bboxes
+
+	var err error
+
+	read := func(v *float64) {
+		if err == nil {
+			err = binary.Read(r, binary.LittleEndian, v)
+		}
+	}
+
+	for i := range bboxes {
+		read(&bboxes[i].X1)
+		read(&bboxes[i].Y1)
+		read(&bboxes[i].X2)
+		read(&bboxes[i].Y2)
+	}
+
+	return err
+}
+
+func (s *STRTree) deserializeIndexV1(r *bufio.Reader) error {
+	var numIndex int32
+	if err := binary.Read(r, binary.LittleEndian, &numIndex); err != nil {
+		return err
+	}
+	index := make([]int32, numIndex)
+	s.index = index
+
+	var last int32
+	for i := range index {
+		v, err := binary.ReadVarint(r)
+		if err != nil {
+			return err
+		}
+		value := int32(v) + last
+		index[i] = value
+		last = value
+	}
+
+	return nil
+}
+
+func (s *STRTree) deserializeV1(r *bufio.Reader) error {
+	s.tin = new(Tin)
+	if err := s.tin.deserializeV1(r); err != nil {
+		return err
+	}
+	var numEntries uint8
+	if err := binary.Read(r, binary.LittleEndian, &numEntries); err != nil {
+		return err
+	}
+	s.Entries = int(numEntries)
+
+	if err := s.deserializeIndexV1(r); err != nil {
+		return err
+	}
+
+	return s.deserializeBBoxesV1(r)
+}
+
+// deserializeV1 restores a TIN from a binary representation.
+func (t *Tin) deserializeV1(r *bufio.Reader) error {
+
+	if err := binary.Read(r, binary.LittleEndian, &t.EPSG); err != nil {
+		return err
+	}
+
+	log.Infof("EPSG: %d\n", t.EPSG)
+
+	if err := t.Min.Read(r); err != nil {
+		return err
+	}
+
+	if err := t.Max.Read(r); err != nil {
+		return err
+	}
+
+	log.Infof("BBOX: [[%f, %f, %f], [%f, %f, %f]]\n",
+		t.Min.X, t.Min.Y, t.Min.Z,
+		t.Max.X, t.Max.Y, t.Max.Z)
+
+	var numVertices uint32
+	if err := binary.Read(r, binary.LittleEndian, &numVertices); err != nil {
+		return err
+	}
+
+	log.Infof("vertices: %d\n", numVertices)
+
+	vertices := make([]Vertex, numVertices)
+	t.Vertices = vertices
+
+	for i := range vertices {
+		if err := vertices[i].Read(r); err != nil {
+			return err
+		}
+	}
+
+	var numTriangles uint32
+	if err := binary.Read(r, binary.LittleEndian, &numTriangles); err != nil {
+		return err
+	}
+
+	log.Infof("triangles: %d\n", numTriangles)
+
+	indices := make([]int32, 3*numTriangles)
+	triangles := make([][]int32, numTriangles)
+	t.Triangles = triangles
+
+	var last int32
+
+	for i := range triangles {
+		tri := indices[:3]
+		indices = indices[3:]
+		triangles[i] = tri
+		for j := range tri {
+			v, err := binary.ReadVarint(r)
+			if err != nil {
+				return err
+			}
+			value := int32(v) + last
+			tri[j] = value
+			last = value
+		}
+	}
+
+	return nil
+}
--- a/pkg/mesh/strtree.go	Sat Feb 10 22:22:03 2024 +0100
+++ b/pkg/mesh/strtree.go	Sun Feb 11 09:49:25 2024 +0100
@@ -14,8 +14,6 @@
 package mesh
 
 import (
-	"bytes"
-	"compress/gzip"
 	"math"
 	"sort"
 )
@@ -248,26 +246,6 @@
 	return removed
 }
 
-// Bytes serializes this tree to a byte slice.
-func (s *STRTree) Bytes() ([]byte, error) {
-
-	var buf bytes.Buffer
-	w, err := gzip.NewWriterLevel(&buf, gzip.BestSpeed)
-	if err != nil {
-		return nil, err
-	}
-
-	if err := s.serializeV1(w); err != nil {
-		return nil, err
-	}
-
-	if err := w.Close(); err != nil {
-		return nil, err
-	}
-
-	return buf.Bytes(), nil
-}
-
 func (s *STRTree) allTriangles(pos int32, tris map[int32]struct{}) {
 	stack := []int32{pos}
 	for len(stack) > 0 {