diff cmd/tin2octree/tin.go @ 729:b0bd242ff821

Removed vertex duplicate.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sat, 22 Sep 2018 22:14:31 +0200
parents a3d722e1f593
children
line wrap: on
line diff
--- a/cmd/tin2octree/tin.go	Sat Sep 22 21:58:15 2018 +0200
+++ b/cmd/tin2octree/tin.go	Sat Sep 22 22:14:31 2018 +0200
@@ -8,6 +8,8 @@
 	"io"
 	"log"
 	"math"
+
+	"gemma.intevation.de/gemma/pkg/octree"
 )
 
 var (
@@ -26,11 +28,11 @@
 
 type tin struct {
 	epsg      uint32
-	vertices  []vertex
+	vertices  []octree.Vertex
 	triangles [][]int32
 
-	min vertex
-	max vertex
+	min octree.Vertex
+	max octree.Vertex
 }
 
 func (t *tin) FromWKB(data []byte) error {
@@ -68,11 +70,11 @@
 		return err
 	}
 
-	vertices := make([]vertex, 0, 100000)
+	vertices := make([]octree.Vertex, 0, 100000)
 
-	var v vertex
+	var v octree.Vertex
 
-	v2i := make(map[vertex]int32, 100000)
+	v2i := make(map[octree.Vertex]int32, 100000)
 
 	var indexPool []int32
 
@@ -87,8 +89,8 @@
 
 	var triangles [][]int32
 
-	min := vertex{math.MaxFloat64, math.MaxFloat64, math.MaxFloat64}
-	max := vertex{-math.MaxFloat64, -math.MaxFloat64, -math.MaxFloat64}
+	min := octree.Vertex{math.MaxFloat64, math.MaxFloat64, math.MaxFloat64}
+	max := octree.Vertex{-math.MaxFloat64, -math.MaxFloat64, -math.MaxFloat64}
 
 	for i := uint32(0); i < num; i++ {
 
@@ -141,16 +143,16 @@
 				}
 				// Do this conversion later to spare reflect calls
 				// and allocs in binary.Read.
-				v.x = math.Float64frombits(x)
-				v.y = math.Float64frombits(y)
-				v.z = math.Float64frombits(z)
+				v.X = math.Float64frombits(x)
+				v.Y = math.Float64frombits(y)
+				v.Z = math.Float64frombits(z)
 				idx, found := v2i[v]
 				if !found {
 					idx = int32(len(vertices))
 					v2i[v] = idx
 					vertices = append(vertices, v)
-					min.minimize(v)
-					max.maximize(v)
+					min.Minimize(v)
+					max.Maximize(v)
 				}
 				triangle[p] = idx
 			}
@@ -159,7 +161,7 @@
 	}
 
 	log.Printf("bbox: [[%f, %f], [%f, %f]]\n",
-		min.x, min.y, max.x, max.y)
+		min.X, min.Y, max.X, max.Y)
 
 	*t = tin{
 		epsg:      wgs84,
@@ -181,26 +183,16 @@
 	return t.FromWKB(data)
 }
 
-func (v *vertex) write(w io.Writer) error {
-	for _, addr := range []*float64{&v.x, &v.y, &v.z} {
-		if err := binary.Write(
-			w, binary.LittleEndian, math.Float64bits(*addr)); err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
 func (t *tin) Serialize(w io.Writer) error {
 
 	if err := binary.Write(w, binary.LittleEndian, t.epsg); err != nil {
 		return err
 	}
 
-	if err := t.min.write(w); err != nil {
+	if err := t.min.Write(w); err != nil {
 		return err
 	}
-	if err := t.max.write(w); err != nil {
+	if err := t.max.Write(w); err != nil {
 		return err
 	}
 
@@ -210,7 +202,7 @@
 	}
 
 	for _, v := range t.vertices {
-		if err := v.write(w); err != nil {
+		if err := v.Write(w); err != nil {
 			return err
 		}
 	}