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