using System.Collections;
using GeoAPI.Geometries;
namespace GisSharpBlog.NetTopologySuite.Noding
{
///
/// Nodes a set of s by
/// performing a brute-force comparison of every segment to every other one.
/// This has n^2 performance, so is too slow for use on large numbers of segments.
///
public class SimpleNoder : SinglePassNoder
{
private IList nodedSegStrings;
///
/// Initializes a new instance of the class.
///
public SimpleNoder() {}
///
/// Initializes a new instance of the class.
///
///
public SimpleNoder(ISegmentIntersector segInt)
: base(segInt) {}
///
/// Returns a of fully noded s.
/// The s have the same context as their parent.
///
///
public override IList GetNodedSubstrings()
{
return SegmentString.GetNodedSubstrings(nodedSegStrings);
}
///
/// Computes the noding for a collection of s.
/// Some Noders may add all these nodes to the input s;
/// others may only add some or none at all.
///
///
public override void ComputeNodes(IList inputSegStrings)
{
nodedSegStrings = inputSegStrings;
foreach (object obj0 in inputSegStrings)
{
SegmentString edge0 = (SegmentString) obj0;
foreach (object obj1 in inputSegStrings)
{
SegmentString edge1 = (SegmentString) obj1;
ComputeIntersects(edge0, edge1);
}
}
}
///
///
///
///
///
private void ComputeIntersects(SegmentString e0, SegmentString e1)
{
ICoordinate[] pts0 = e0.Coordinates;
ICoordinate[] pts1 = e1.Coordinates;
for (int i0 = 0; i0 < pts0.Length - 1; i0++)
{
for (int i1 = 0; i1 < pts1.Length - 1; i1++)
{
SegmentIntersector.ProcessIntersections(e0, i0, e1, i1);
}
}
}
}
}