Returns the set-theoretical union of all patterns, returned by {@link #lowerSurface(int)}{@link #upperSurface(int)} methods for all coordinates.In other words, the returned pattern contains full "boundary" of this pattern. The number of dimensions in the resulting pattern ( {@link #dimCount() dimCount()}) is the same as in this one.
Note: if this object is not {@link DirectPointSetPattern}and is not {@link RectangularPattern}, this method can work slowly for some large patterns: the required time can be O(N), where N is the number of points. In these cases, this method can also throw {@link TooManyPointsInPatternError}or OutOfMemoryError. The situation is like in {@link #points()} and {@link #roundedPoints()} method.However, this situation is possible only in custom implementation of this interface — all implementations, provided by this package, implement either {@link DirectPointSetPattern}or {@link RectangularPattern} interface.
@return the "boundary" of this pattern: new pattern consisting of all points of this pattern,which have no leftward or rightward neighbour along at least one coordinate.
@throws TooManyPointsInPatternError (impossible for implementations, provided by this package)if this pattern is not {@link DirectPointSetPattern} andnot {@link RectangularPattern} and if, at the same time, the numberof points is greater than Integer.MAX_VALUE or, in some rare situations, is near this limit (OutOfMemoryError can be also thrown instead of this exception).