# HG changeset patch # User Sascha L. Teichmann # Date 1570817377 -7200 # Node ID fb09a43b062e7d3005f9ff0034fb7b46106acc3d # Parent 4380f5483c0358da7f61465c33fb81ebab1900a3 Decouple the tracing of the iso areas from the octree data structure. diff -r 4380f5483c03 -r fb09a43b062e pkg/controllers/diff.go --- a/pkg/controllers/diff.go Fri Oct 11 20:00:06 2019 +0200 +++ b/pkg/controllers/diff.go Fri Oct 11 20:09:37 2019 +0200 @@ -296,7 +296,7 @@ heights = common.DedupFloat64s(heights) - areas := tree.TraceAreas(heights, isoCellSize) + areas := octree.TraceAreas(heights, isoCellSize, tree.Min, tree.Max, tree.Value) var size int diff -r 4380f5483c03 -r fb09a43b062e pkg/imports/isr.go --- a/pkg/imports/isr.go Fri Oct 11 20:00:06 2019 +0200 +++ b/pkg/imports/isr.go Fri Oct 11 20:09:37 2019 +0200 @@ -184,7 +184,7 @@ } // Calculate and store the iso areas. - areas := tree.TraceAreas(hs, isoCellSize) + areas := octree.TraceAreas(hs, isoCellSize, tree.Min, tree.Max, tree.Value) for i, a := range areas { if len(a) == 0 { continue diff -r 4380f5483c03 -r fb09a43b062e pkg/imports/sr.go --- a/pkg/imports/sr.go Fri Oct 11 20:00:06 2019 +0200 +++ b/pkg/imports/sr.go Fri Oct 11 20:09:37 2019 +0200 @@ -881,7 +881,7 @@ time.Since(total)) }() - areas := tree.TraceAreas(heights, isoCellSize) + areas := octree.TraceAreas(heights, isoCellSize, tree.Min, tree.Max, tree.Value) return storeAreas( ctx, tx, feedback, diff -r 4380f5483c03 -r fb09a43b062e pkg/octree/areas.go --- a/pkg/octree/areas.go Fri Oct 11 20:00:06 2019 +0200 +++ b/pkg/octree/areas.go Fri Oct 11 20:09:37 2019 +0200 @@ -26,11 +26,12 @@ "gemma.intevation.de/gemma/pkg/wkb" ) -func (tree *Tree) TraceAreas( +func TraceAreas( heights []float64, cellSize float64, + min, max Vertex, + eval func(float64, float64) (float64, bool), ) []wkb.MultiPolygonGeom { - min, max := tree.Min, tree.Max width := max.X - min.X height := max.Y - min.Y @@ -73,19 +74,19 @@ var n int var sum float64 - if v, ok := tree.Value(px-quat, y1); ok { + if v, ok := eval(px-quat, y1); ok { sum = v n = 1 } - if v, ok := tree.Value(px-quat, y2); ok { + if v, ok := eval(px-quat, y2); ok { sum += v n++ } - if v, ok := tree.Value(px+quat, y1); ok { + if v, ok := eval(px+quat, y1); ok { sum += v n++ } - if v, ok := tree.Value(px+quat, y2); ok { + if v, ok := eval(px+quat, y2); ok { sum += v n++ }