package org.osm2world.core.map_elevation.creation;
import java.util.List;
import org.osm2world.core.map_elevation.data.EleConnector;
public interface EleConstraintEnforcer {
/** whether a constraint requires a minimum, maximum or exact value */
public static enum ConstraintType {
MIN, MAX, EXACT
}
/**
* makes connectors known to this enforcer. Only these connectors can be
* used in constraints later on, and only they will be affected by
* {@link #enforceConstraints()}.
*
* @param connectors connectors with elevation values initially set to
* terrain elevation at their xz position
*/
void addConnectors(Iterable<EleConnector> connectors);
/**
* requires two connectors to be at the same elevation
*/
public void requireSameEle(EleConnector c1, EleConnector c2);
/**
* requires a number of connectors to be at the same elevation
*/
public void requireSameEle(Iterable<EleConnector> cs);
/**
* requires two connectors' elevations to differ by a given distance
*/
void requireVerticalDistance(ConstraintType type, double distance,
EleConnector upper, EleConnector lower);
/**
* requires a connector to be a give distance above a line segment
* defined by two other connectors.
*
* @param distance distance, may be negative if 'upper' is actually below
*/
void requireVerticalDistance(ConstraintType type, double distance,
EleConnector upper, EleConnector base1, EleConnector base2);
/**
* requires an incline along a sequence of connectors.
*
* @param incline incline value,
* negative values are inclines in opposite direction
*/
void requireIncline(ConstraintType type, double incline,
List<EleConnector> cs);
/**
* requires that there is a "smooth" transition between two line segments
*/
void requireSmoothness(EleConnector from, EleConnector via, EleConnector to);
/**
* tries to enforce the previously added constraints
* on elevations of connectors that have been added using
* {@link #addConnectors(Iterable)}
*/
void enforceConstraints();
}