class PolylineGeometry extends AbstractColorGeometry {

    protected final void setVertices(List<? extends Position> vertices) throws IllegalArgumentException
    {
        if (vertices.size() < 2)
        {
            throw new IllegalArgumentException(getClass().getSimpleName() + " must have at least two vertices.");
        }
        if (vertices.contains(null))
        {
            throw new IllegalArgumentException(getClass().getSimpleName() + " may not have null vertices.");
        }

        final Position firstPosition = vertices.get(0);
        final Class<? extends Position> type = firstPosition.getClass();
        for (int i = 1; i < vertices.size(); i++)
        {
            if (type != vertices.get(i).getClass())
            {
                throw new IllegalArgumentException("Position type must be consistent across " + getClass().getSimpleName());
            }
        }
        if (GeographicPosition.class.isAssignableFrom(type))
        {
            LatLonAlt firstLla = ((GeographicPosition)firstPosition).getLatLonAlt();
            final Altitude.ReferenceLevel altRef = firstLla.getAltitudeReference();
            for (int i = 1; i < vertices.size(); i++)
            {
                LatLonAlt lla = ((GeographicPosition)vertices.get(i)).getLatLonAlt();
                if (altRef != lla.getAltitudeReference())
                {
                    throw new IllegalArgumentException(
                            "Altitude reference system must be consistent across " + getClass().getSimpleName());
                }
            }
        }

        if (myVertices != null)
        {
            throw new IllegalStateException("Vertices cannot be set more than once.");
        }

        myVertices = Collections.unmodifiableList(new ArrayList<Position>(vertices));
    }

    public  PolylineGeometry(PolylineGeometry.Builder<?> builder, PolylineRenderProperties renderProperties,
            Constraints constraints);
    protected  PolylineGeometry(AbstractGeometry.Builder builder, PolylineRenderProperties renderProperties,
            Constraints constraints, boolean smooth, LineType type);

}