changeset 4741:5164b4450c42

Removed redundant code in stacking iso polygons correctly.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 18 Oct 2019 12:11:45 +0200
parents 2440d2f86f4e
children b88ab93dcb2c
files pkg/octree/areas.go
diffstat 1 files changed, 7 insertions(+), 52 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/octree/areas.go	Fri Oct 18 12:04:04 2019 +0200
+++ b/pkg/octree/areas.go	Fri Oct 18 12:11:45 2019 +0200
@@ -228,10 +228,6 @@
 	children []*bboxNode
 }
 
-type bboxForest struct {
-	roots []*bboxNode
-}
-
 func (cnt contour) contains(o contour) bool {
 	return contains(cnt, o[0].X, o[0].Y) ||
 		contains(cnt, o[len(o)/2].X, o[len(o)/2].Y)
@@ -313,49 +309,8 @@
 	bn.children = append(bn.children, nr)
 }
 
-func (bf *bboxForest) insert(cnt contour) {
-	box := cnt.bbox()
-
-	// check if roots are inside new
-	var nr *bboxNode
-
-	for i, r := range bf.roots {
-		if r.box.Inside(box) && cnt.contains(r.cnt) {
-			if nr == nil {
-				nr = &bboxNode{box: box, cnt: cnt}
-			}
-			nr.children = append(nr.children, r)
-			bf.roots[i] = nil
-		}
-	}
-
-	// we have a new root
-	if nr != nil {
-		// compact the list
-		for i := len(bf.roots) - 1; i >= 0; i-- {
-			if bf.roots[i] == nil {
-				if i < len(bf.roots)-1 {
-					copy(bf.roots[i:], bf.roots[i+1:])
-				}
-				bf.roots[len(bf.roots)-1] = nil
-				bf.roots = bf.roots[:len(bf.roots)-1]
-			}
-		}
-		bf.roots = append(bf.roots, nr)
-		return
-	}
-
-	// check if new is inside an old
-	for _, r := range bf.roots {
-		if box.Inside(r.box) && r.cnt.contains(cnt) {
-			r.insert(cnt, box)
-			return
-		}
-	}
-
-	// its a new root node.
-	nr = &bboxNode{box: box, cnt: cnt}
-	bf.roots = append(bf.roots, nr)
+func (bn *bboxNode) insertRoot(cnt contour) {
+	bn.insert(cnt, cnt.bbox())
 }
 
 type bboxOutFunc func(contour, []contour)
@@ -378,8 +333,8 @@
 	}
 }
 
-func (bf *bboxForest) generate(out bboxOutFunc) {
-	for _, r := range bf.roots {
+func (bn *bboxNode) generateRoot(out bboxOutFunc) {
+	for _, r := range bn.children {
 		r.generate(out)
 	}
 }
@@ -389,10 +344,10 @@
 	reprojX, reprojY func(float64) float64,
 ) wkb.MultiPolygonGeom {
 
-	var bf bboxForest
+	var forest bboxNode
 
 	for _, cnt := range cnts {
-		bf.insert(contour(cnt))
+		forest.insertRoot(contour(cnt))
 	}
 
 	//log.Printf("cnts: %d roots: %d\n", len(cnts), len(bf.roots))
@@ -434,7 +389,7 @@
 		mp = append(mp, polygon)
 	}
 
-	bf.generate(out)
+	forest.generateRoot(out)
 
 	return mp
 }