package com.revolsys.geometry.model.segment; import java.util.Iterator; import com.revolsys.geometry.model.Geometry; import com.revolsys.geometry.model.GeometryComponent; import com.revolsys.geometry.model.Point; import com.revolsys.geometry.model.vertex.Vertex; public interface Segment extends LineSegment, Iterator<Segment>, Iterable<Segment>, GeometryComponent { @Override Segment clone(); <V extends Geometry> V getGeometry(); Vertex getGeometryVertex(int index); default int getPartIndex() { return -1; } default int getRingIndex() { return -1; } int[] getSegmentId(); default int getSegmentIndex() { final int[] vertexId = getSegmentId(); return vertexId[vertexId.length - 1]; } @Override default boolean isEmpty() { return false; } default boolean isEndIntersection(final Point point) { if (isLineStart()) { return equalsVertex(2, 0, point); } else if (isLineEnd()) { return equalsVertex(2, 1, point); } else { return false; } } boolean isLineClosed(); boolean isLineEnd(); boolean isLineStart(); @Override default Iterator<Segment> iterator() { return this; } void setSegmentId(int... segmentId); }