updated to correctly rebuild groups when less than all points are in the bounds of the viewport