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); } } }