| /* |
| * 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); |
| |
| } |