using GeoAPI.Geometries;
using GisSharpBlog.NetTopologySuite.Utilities;
namespace GisSharpBlog.NetTopologySuite.GeometriesGraph
{
///
/// A GraphComponent is the parent class for the objects'
/// that form a graph. Each GraphComponent can carry a
/// Label.
///
abstract public class GraphComponent
{
///
///
///
protected Label label;
// isInResult indicates if this component has already been included in the result
private bool isInResult = false;
private bool isCovered = false;
private bool isCoveredSet = false;
private bool isVisited = false;
///
///
///
public GraphComponent() { }
///
///
///
///
public GraphComponent(Label label)
{
this.label = label;
}
///
///
///
public Label Label
{
get
{
return label;
}
set
{
label = value;
}
}
///
///
///
public bool InResult
{
get
{
return isInResult;
}
set
{
isInResult = value;
}
}
///
/// IsInResult indicates if this component has already been included in the result.
///
public bool IsInResult
{
get
{
return InResult;
}
}
///
///
///
public bool Covered
{
get
{
return this.isCovered;
}
set
{
isCovered = value;
isCoveredSet = true;
}
}
///
///
///
public bool IsCovered
{
get
{
return Covered;
}
}
///
///
///
public bool IsCoveredSet
{
get
{
return isCoveredSet;
}
}
///
///
///
public bool Visited
{
get
{
return isVisited;
}
set
{
isVisited = value;
}
}
///
///
///
public bool IsVisited
{
get
{
return isVisited;
}
}
///
///
///
///
/// A coordinate in this component (or null, if there are none).
///
abstract public ICoordinate Coordinate { get; }
///
/// Compute the contribution to an IM for this component.
///
abstract public void ComputeIM(IntersectionMatrix im);
///
/// An isolated component is one that does not intersect or touch any other
/// component. This is the case if the label has valid locations for
/// only a single Geometry.
///
/// true if this component is isolated.
abstract public bool IsIsolated { get; }
///
/// Update the IM with the contribution for this component.
/// A component only contributes if it has a labelling for both parent geometries.
///
///
public void UpdateIM(IntersectionMatrix im)
{
Assert.IsTrue(label.GeometryCount >= 2, "found partial label");
ComputeIM(im);
}
}
}