/*
GeoGebra - Dynamic Mathematics for Everyone
http://www.geogebra.org
This file is part of GeoGebra.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation.
*/
package org.geogebra.common.kernel.geos;
import org.geogebra.common.kernel.Path;
import org.geogebra.common.kernel.Transform;
/**
* Represents geos with endpoints (segment, ray, arc, etc.)
*
*/
public interface LimitedPath extends Path {
/**
* Returns whether intersection points with this path are allowed that lie
* on the extension of this path.
*
* @return true iff outlying intersection should be allowed
*/
public boolean allowOutlyingIntersections();
/**
* Sets whether intersection points with this path are allowed that lie on
* the extension of this path.
*
* @param flag
* true iff outlying intersection should be allowed
*/
public void setAllowOutlyingIntersections(boolean flag);
/**
* Returns true iff the intersection point P lies on this limited path.
*
* @param P
* intersection point
* @param eps
* epsilon precision for testing
* @return true iff the intersection point P lies on this limited path.
*
*/
public boolean isIntersectionPointIncident(GeoPoint P, double eps);
/**
* Returns whether a geometric transform of this path should yield an object
* of the same kind (i.e. segment becomes segment).
*
* @return true iff the geo keeps type on transform
*/
public boolean keepsTypeOnGeometricTransform();
/**
* Sets whether a geometric transform of this path should yield an object of
* the same kind (i.e. segment becomes segment).
*
* @param flag
* true when a geometric transform of this path should yield an
* object of the same kind
*/
public void setKeepTypeOnGeometricTransform(boolean flag);
/**
* Creates a new object using the geometrical transform of the given type.
*
* @param t
* transform
* @param label
* label for new object
* @return array of elements generated by transform
*/
public GeoElement[] createTransformedObject(Transform t, String label);
/**
* Returns true iff all endpoints are labeled
*
* @return true iff all endpoints are labeled
*/
public boolean isAllEndpointsLabelsSet();
}