annotate cmd/tin2octree/builder.go @ 729:b0bd242ff821

Removed vertex duplicate.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sat, 22 Sep 2018 22:14:31 +0200
parents b17e3ce53285
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 package main
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 import (
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 "encoding/binary"
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 "io"
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 "log"
729
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
7
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
8 "gemma.intevation.de/gemma/pkg/octree"
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 )
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 type treeBuilder struct {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 t *tin
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13 nodes int
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 leaves int
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 index []int32
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17
729
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
18 var cubes = [8][2]octree.Vertex{
682
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
19 makeCube(0),
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
20 makeCube(1),
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
21 makeCube(2),
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
22 makeCube(3),
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
23 makeCube(4),
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
24 makeCube(5),
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
25 makeCube(6),
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
26 makeCube(7),
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
27 }
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
28
729
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
29 func makeCube(i int) [2]octree.Vertex {
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
30 var d octree.Vertex
682
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
31 if i&1 == 1 {
729
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
32 d.X = 0.5
682
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
33 }
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
34 if i&2 == 2 {
729
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
35 d.Y = 0.5
682
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
36 }
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
37 if i&4 == 4 {
729
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
38 d.Z = 0.5
682
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
39 }
729
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
40 return [2]octree.Vertex{
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
41 octree.Vertex{0.0, 0.0, 0.0}.Add(d),
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
42 octree.Vertex{0.5, 0.5, 0.5}.Add(d),
682
b17e3ce53285 octree: simplified cube indexing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 678
diff changeset
43 }
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 func (tb *treeBuilder) build() {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 triangles := make([]int32, len(tb.t.triangles))
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 for i := range triangles {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 triangles[i] = int32(i)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 tb.index = append(tb.index, 0)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 tb.buildRecursive(triangles, tb.t.min, tb.t.max, 0)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 tb.index[0] = int32(len(tb.index))
674
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 671
diff changeset
57 log.Printf("num nodes: %d\n", tb.index[0])
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 log.Printf("nodes: %d leaves: %d index %d\n",
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60 tb.nodes, tb.leaves, tb.index[0])
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 func (tb *treeBuilder) buildRecursive(
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 triangles []int32,
729
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
65 min, max octree.Vertex,
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 depth int,
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67 ) int32 {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68 if len(triangles) <= 16 || depth > 8 {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 pos := len(tb.index)
678
7bb961d750b6 octree: traverse horizontally over tree to find out which triangles to process.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 675
diff changeset
70 tb.index = append(tb.index, int32(len(triangles)))
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 tb.index = append(tb.index, triangles...)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 //log.Printf("leaf entries: %d (%d)\n", len(triangles), depth)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73 tb.leaves++
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74 return int32(-(pos + 1))
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 pos := len(tb.index)
675
1cb565d244cf octree: Allocate 8 child nodes per node not 4.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 674
diff changeset
78 tb.index = append(tb.index,
1cb565d244cf octree: Allocate 8 child nodes per node not 4.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 674
diff changeset
79 0, 0, 0, 0,
1cb565d244cf octree: Allocate 8 child nodes per node not 4.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 674
diff changeset
80 0, 0, 0, 0)
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
81
729
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
82 bbox := octree.Interpolate(min, max)
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83
729
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
84 bboxes := make([][2]octree.Vertex, len(cubes))
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
85
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
86 for i := range cubes {
729
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
87 bboxes[i] = [2]octree.Vertex{
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
88 bbox(cubes[i][0]),
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
89 bbox(cubes[i][1]),
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
90 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
91 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
92
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
93 var quandrants [8][]int32
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
94
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
95 for _, tri := range triangles {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
96 triangle := tb.t.triangles[tri]
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
97 v0 := tb.t.vertices[triangle[0]]
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
98 v1 := tb.t.vertices[triangle[1]]
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
99 v2 := tb.t.vertices[triangle[2]]
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
100
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
101 l := v0
729
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
102 l.Minimize(v1)
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
103 l.Minimize(v2)
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
104
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
105 h := v0
729
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
106 h.Maximize(v1)
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
107 h.Maximize(v2)
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
108
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
109 for i := range bboxes {
729
b0bd242ff821 Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 682
diff changeset
110 if !(h.Less(bboxes[i][0]) || bboxes[i][1].Less(l)) {
661
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
111 quandrants[i] = append(quandrants[i], tri)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
112 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
113 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
114 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
115
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
116 for i := range quandrants {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
117 if len(quandrants[i]) > 0 {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
118 child := tb.buildRecursive(
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
119 quandrants[i],
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
120 bboxes[i][0], bboxes[i][1],
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
121 depth+1)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
122 tb.index[pos+i] = child
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
123 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
124 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
125 tb.nodes++
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
126 return int32(pos)
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
127 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
128
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
129 func (tb *treeBuilder) Serialize(w io.Writer) error {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
130 var buf [binary.MaxVarintLen32]byte
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
131
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
132 if err := binary.Write(w, binary.LittleEndian, tb.index[0]); err != nil {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
133 return err
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
134 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
135
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
136 var last int32
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
137 var written int
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
138
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
139 for _, x := range tb.index[1:] {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
140 delta := x - last
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
141 n := binary.PutVarint(buf[:], int64(delta))
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
142 for p := buf[:n]; len(p) > 0; p = p[n:] {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
143 var err error
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
144 if n, err = w.Write(p); err != nil {
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
145 return err
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
146 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
147 written += n
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
148 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
149
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
150 last = x
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
151 }
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
152 log.Printf("compressed octree index in bytes: %d (%d)\n",
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
153 written, 4*len(tb.index))
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
154
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
155 return nil
af1d4d44a88a Experimental tin octree indexer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
156 }