Mercurial > gemma
diff pkg/mesh/polygon.go @ 5399:47c2ca05e8ec
Merged extented-report branch back into default.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 07 Jul 2021 11:44:40 +0200 |
parents | 866eae1bd888 |
children | 5f47eeea988d |
line wrap: on
line diff
--- a/pkg/mesh/polygon.go Sun Jul 04 11:37:37 2021 +0200 +++ b/pkg/mesh/polygon.go Wed Jul 07 11:44:40 2021 +0200 @@ -44,7 +44,7 @@ IntersectionOverlaps ) -func (ls lineSegment) Rect(interface{}) ([]float64, []float64) { +func (ls lineSegment) Rect() ([2]float64, [2]float64) { var min, max [2]float64 @@ -64,14 +64,14 @@ max[1] = ls[1] } - return min[:], max[:] + return min, max } func (p *Polygon) Indexify() { indices := make([]*rtree.RTree, len(p.rings)) for i := range indices { - index := rtree.New(nil) + index := new(rtree.RTree) indices[i] = index rng := p.rings[i] @@ -83,7 +83,8 @@ } else { ls = []float64{rng[i], rng[i+1], rng[0], rng[1]} } - index.Insert(ls) + min, max := ls.Rect() + index.Insert(min, max, ls) } } @@ -217,9 +218,11 @@ return IntersectionOutSide } + min, max := box.Rect() + for _, index := range p.indices { var intersects bool - index.Search(box, func(item rtree.Item) bool { + index.Search(min, max, func(_, _ [2]float64, item interface{}) bool { if item.(lineSegment).intersects(box) { intersects = true return false @@ -252,9 +255,10 @@ func (p *Polygon) IntersectionWithTriangle(t *Triangle) IntersectionType { box := t.BBox() + min, max := box.Rect() for _, index := range p.indices { var intersects bool - index.Search(box, func(item rtree.Item) bool { + index.Search(min, max, func(_, _ [2]float64, item interface{}) bool { ls := item.(lineSegment) other := make(lineSegment, 4) for i := range t {