blob: 97a5d13a232aad0432239a3d16a836cde02e8a36 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.lucene.spatial3d.geom;
/**
* An interface for accumulating bounds information.
* The bounds object is initially empty. Bounding points
* are then applied by supplying (x,y,z) tuples. It is also
* possible to indicate the following edge cases:
* (1) No longitude bound possible
* (2) No upper latitude bound possible
* (3) No lower latitude bound possible
* When any of these have been applied, further application of
* points cannot override that decision.
*
* @lucene.experimental
*/
public interface Bounds {
/** Add a general plane to the bounds description.
*@param planetModel is the planet model.
*@param plane is the plane.
*@param bounds are the membership bounds for points along the arc.
*/
public Bounds addPlane(final PlanetModel planetModel, final Plane plane, final Membership... bounds);
/** Add a horizontal plane to the bounds description.
* This method should EITHER use the supplied latitude, OR use the supplied
* plane, depending on what is most efficient.
*@param planetModel is the planet model.
*@param latitude is the latitude.
*@param horizontalPlane is the plane.
*@param bounds are the constraints on the plane.
*@return updated Bounds object.
*/
public Bounds addHorizontalPlane(final PlanetModel planetModel,
final double latitude,
final Plane horizontalPlane,
final Membership... bounds);
/** Add a vertical plane to the bounds description.
* This method should EITHER use the supplied longitude, OR use the supplied
* plane, depending on what is most efficient.
*@param planetModel is the planet model.
*@param longitude is the longitude.
*@param verticalPlane is the plane.
*@param bounds are the constraints on the plane.
*@return updated Bounds object.
*/
public Bounds addVerticalPlane(final PlanetModel planetModel,
final double longitude,
final Plane verticalPlane,
final Membership... bounds);
/** Add the intersection between two planes to the bounds description.
* Where the shape has intersecting planes, it is better to use this method
* than just adding the point, since this method takes each plane's error envelope into
* account.
*@param planetModel is the planet model.
*@param plane1 is the first plane.
*@param plane2 is the second plane.
*@param bounds are the membership bounds for the intersection.
*/
public Bounds addIntersection(final PlanetModel planetModel, final Plane plane1, final Plane plane2, final Membership... bounds);
/** Add a single point.
*@param point is the point.
*@return the updated Bounds object.
*/
public Bounds addPoint(final GeoPoint point);
/** Add an X value.
*@param point is the point to take the x value from.
*@return the updated object.
*/
public Bounds addXValue(final GeoPoint point);
/** Add a Y value.
*@param point is the point to take the y value from.
*@return the updated object.
*/
public Bounds addYValue(final GeoPoint point);
/** Add a Z value.
*@param point is the point to take the z value from.
*@return the updated object.
*/
public Bounds addZValue(final GeoPoint point);
/** Signal that the shape exceeds Math.PI in longitude.
*@return the updated Bounds object.
*/
public Bounds isWide();
/** Signal that there is no longitude bound.
*@return the updated Bounds object.
*/
public Bounds noLongitudeBound();
/** Signal that there is no top latitude bound.
*@return the updated Bounds object.
*/
public Bounds noTopLatitudeBound();
/** Signal that there is no bottom latitude bound.
*@return the updated Bounds object.
*/
public Bounds noBottomLatitudeBound();
/** Signal that there is no bound whatsoever.
* The bound is limited only by the constraints of the
* planet.
*@return the updated Bounds object.,
*/
public Bounds noBound(final PlanetModel planetModel);
}