package org.osm2world.core.map_data.data;
import java.util.Collection;
import java.util.List;
import org.openstreetmap.josm.plugins.graphview.core.data.TagGroup;
import org.osm2world.core.map_data.data.overlaps.MapOverlap;
import org.osm2world.core.math.datastructures.IntersectionTestObject;
import org.osm2world.core.osm.data.OSMElement;
import org.osm2world.core.world.data.WorldObject;
public interface MapElement extends IntersectionTestObject {
public int getLayer();
/**
* returns the visual representations of this element.
*
* The order should match the order in which they were added,
* so that dependencies are preserved (elements that depend on
* another element should be placed after that element).
* The first element is considered the "primary" representation,
* and for some purposes - such as elevation calculation -, only this
* representation will be used.
*/
public List<? extends WorldObject> getRepresentations();
/**
* returns the primary representation, or null if the object doesn't have any.
* @see #getRepresentations()
*/
public WorldObject getPrimaryRepresentation();
/**
* returns all overlaps between this {@link MapElement}
* and other {@link MapElement}s.
*/
public Collection<MapOverlap<? extends MapElement, ? extends MapElement>> getOverlaps();
/**
* returns the tags of the underlying {@link OSMElement}
*/
TagGroup getTags();
}