@@ -494,34 +494,34 @@ internal void GetObjectsFromLine(GeoPoint start, GeoVector dir, double maxdist,
494494 }
495495 }
496496 }
497- internal void GetObjectsFromRect ( Projection projection , BoundingRect rect , bool onlyInside , Set < TT > addToList )
497+ internal void GetObjectsFromRect ( Projection projection , BoundingRect rect , bool onlyInside , Set < TT > addToList , HashSet < TT > alreadyTested )
498498 {
499499 if ( cube . Interferes ( projection , rect ) )
500500 {
501501 if ( list != null )
502502 {
503503 foreach ( TT item in list )
504504 {
505- if ( ! addToList . Contains ( item ) && item . HitTest ( projection , rect , onlyInside ) )
505+ if ( alreadyTested . Add ( item ) && item . HitTest ( projection , rect , onlyInside ) )
506506 {
507507 addToList . Add ( item ) ;
508508 }
509509 }
510510 }
511511 else if ( ppp != null )
512512 {
513- ppp . GetObjectsFromRect ( projection , rect , onlyInside , addToList ) ;
514- mpp . GetObjectsFromRect ( projection , rect , onlyInside , addToList ) ;
515- pmp . GetObjectsFromRect ( projection , rect , onlyInside , addToList ) ;
516- mmp . GetObjectsFromRect ( projection , rect , onlyInside , addToList ) ;
517- ppm . GetObjectsFromRect ( projection , rect , onlyInside , addToList ) ;
518- mpm . GetObjectsFromRect ( projection , rect , onlyInside , addToList ) ;
519- pmm . GetObjectsFromRect ( projection , rect , onlyInside , addToList ) ;
520- mmm . GetObjectsFromRect ( projection , rect , onlyInside , addToList ) ;
513+ ppp . GetObjectsFromRect ( projection , rect , onlyInside , addToList , alreadyTested ) ;
514+ mpp . GetObjectsFromRect ( projection , rect , onlyInside , addToList , alreadyTested ) ;
515+ pmp . GetObjectsFromRect ( projection , rect , onlyInside , addToList , alreadyTested ) ;
516+ mmp . GetObjectsFromRect ( projection , rect , onlyInside , addToList , alreadyTested ) ;
517+ ppm . GetObjectsFromRect ( projection , rect , onlyInside , addToList , alreadyTested ) ;
518+ mpm . GetObjectsFromRect ( projection , rect , onlyInside , addToList , alreadyTested ) ;
519+ pmm . GetObjectsFromRect ( projection , rect , onlyInside , addToList , alreadyTested ) ;
520+ mmm . GetObjectsFromRect ( projection , rect , onlyInside , addToList , alreadyTested ) ;
521521 }
522522 }
523523 }
524- internal void GetObjectsFromRect ( Projection . PickArea area , bool onlyInside , Set < TT > addToList )
524+ internal void GetObjectsFromRect ( Projection . PickArea area , bool onlyInside , Set < TT > addToList , HashSet < TT > alreadyTested )
525525 {
526526 if ( area == null ) return ;
527527 if ( cube . Interferes ( area ) )
@@ -530,22 +530,22 @@ internal void GetObjectsFromRect(Projection.PickArea area, bool onlyInside, Set<
530530 {
531531 foreach ( TT item in list )
532532 {
533- if ( ! addToList . Contains ( item ) && item . HitTest ( area , onlyInside ) )
533+ if ( alreadyTested . Add ( item ) && item . HitTest ( area , onlyInside ) )
534534 {
535535 addToList . Add ( item ) ;
536536 }
537537 }
538538 }
539539 else if ( ppp != null )
540540 {
541- ppp . GetObjectsFromRect ( area , onlyInside , addToList ) ;
542- mpp . GetObjectsFromRect ( area , onlyInside , addToList ) ;
543- pmp . GetObjectsFromRect ( area , onlyInside , addToList ) ;
544- mmp . GetObjectsFromRect ( area , onlyInside , addToList ) ;
545- ppm . GetObjectsFromRect ( area , onlyInside , addToList ) ;
546- mpm . GetObjectsFromRect ( area , onlyInside , addToList ) ;
547- pmm . GetObjectsFromRect ( area , onlyInside , addToList ) ;
548- mmm . GetObjectsFromRect ( area , onlyInside , addToList ) ;
541+ ppp . GetObjectsFromRect ( area , onlyInside , addToList , alreadyTested ) ;
542+ mpp . GetObjectsFromRect ( area , onlyInside , addToList , alreadyTested ) ;
543+ pmp . GetObjectsFromRect ( area , onlyInside , addToList , alreadyTested ) ;
544+ mmp . GetObjectsFromRect ( area , onlyInside , addToList , alreadyTested ) ;
545+ ppm . GetObjectsFromRect ( area , onlyInside , addToList , alreadyTested ) ;
546+ mpm . GetObjectsFromRect ( area , onlyInside , addToList , alreadyTested ) ;
547+ pmm . GetObjectsFromRect ( area , onlyInside , addToList , alreadyTested ) ;
548+ mmm . GetObjectsFromRect ( area , onlyInside , addToList , alreadyTested ) ;
549549 }
550550 }
551551 }
@@ -1205,7 +1205,7 @@ public T[] GetObjectsFromRect(Projection projection, BoundingRect rect, bool onl
12051205 {
12061206 //GeoObjectList dbg = DebugCheck(delegate(IOctTreeInsertable[] theList, BoundingCube bc) { return bc.Interferes(projection, rect); });
12071207 Set < T > addToList = new Set < T > ( ) ;
1208- node . GetObjectsFromRect ( projection , rect , onlyInside , addToList ) ;
1208+ node . GetObjectsFromRect ( projection , rect , onlyInside , addToList , new HashSet < T > ( ) ) ;
12091209 return addToList . ToArray ( ) ;
12101210 }
12111211 /// <summary>
@@ -1220,7 +1220,7 @@ public T[] GetObjectsFromRect(Projection.PickArea area, bool onlyInside)
12201220 {
12211221 //GeoObjectList dbg = DebugCheck(delegate(IOctTreeInsertable[] theList, BoundingCube bc) { return bc.Interferes(projection, rect); });
12221222 Set < T > addToList = new Set < T > ( ) ;
1223- node . GetObjectsFromRect ( area , onlyInside , addToList ) ;
1223+ node . GetObjectsFromRect ( area , onlyInside , addToList , new HashSet < T > ( ) ) ;
12241224 return addToList . ToArray ( ) ;
12251225 }
12261226 /// <summary>
0 commit comments