/// <summary> /// /// </summary> /// <param name="start"></param> /// <returns></returns> private EdgeString BuildEdgeStringStartingWith(LineMergeDirectedEdge start) { EdgeString edgeString = new EdgeString(factory); LineMergeDirectedEdge current = start; do { edgeString.Add(current); current.Edge.Marked = true; current = current.Next; }while (current != null && current != start); return(edgeString); }
/// <summary> /// /// </summary> /// <param name="node"></param> private void BuildEdgeStringsStartingAt(Node node) { IEnumerator i = node.OutEdges.GetEnumerator(); while (i.MoveNext()) { LineMergeDirectedEdge directedEdge = (LineMergeDirectedEdge)i.Current; if (directedEdge.Edge.IsMarked) { continue; } edgeStrings.Add(BuildEdgeStringStartingWith(directedEdge)); } }
/// <summary> /// Adds an Edge, DirectedEdges, and Nodes for the given LineString representation /// of an edge. /// </summary> public void AddEdge(ILineString lineString) { if (lineString.IsEmpty) return; ICoordinate[] coordinates = CoordinateArrays.RemoveRepeatedPoints(lineString.Coordinates); ICoordinate startCoordinate = coordinates[0]; ICoordinate endCoordinate = coordinates[coordinates.Length - 1]; Node startNode = GetNode(startCoordinate); Node endNode = GetNode(endCoordinate); DirectedEdge directedEdge0 = new LineMergeDirectedEdge(startNode, endNode, coordinates[1], true); DirectedEdge directedEdge1 = new LineMergeDirectedEdge(endNode, startNode, coordinates[coordinates.Length - 2], false); Edge edge = new LineMergeEdge(lineString); edge.SetDirectedEdges(directedEdge0, directedEdge1); Add(edge); }
/// <summary> /// Adds an Edge, DirectedEdges, and Nodes for the given LineString representation /// of an edge. /// </summary> public void AddEdge(ILineString lineString) { if (lineString.IsEmpty) { return; } ICoordinate[] coordinates = CoordinateArrays.RemoveRepeatedPoints(lineString.Coordinates); ICoordinate startCoordinate = coordinates[0]; ICoordinate endCoordinate = coordinates[coordinates.Length - 1]; Node startNode = GetNode(startCoordinate); Node endNode = GetNode(endCoordinate); DirectedEdge directedEdge0 = new LineMergeDirectedEdge(startNode, endNode, coordinates[1], true); DirectedEdge directedEdge1 = new LineMergeDirectedEdge(endNode, startNode, coordinates[coordinates.Length - 2], false); Edge edge = new LineMergeEdge(lineString); edge.SetDirectedEdges(directedEdge0, directedEdge1); Add(edge); }
/// <summary> /// /// </summary> /// <param name="start"></param> /// <returns></returns> private EdgeString BuildEdgeStringStartingWith(LineMergeDirectedEdge start) { EdgeString edgeString = new EdgeString(factory); LineMergeDirectedEdge current = start; do { edgeString.Add(current); current.Edge.Marked = true; current = current.Next; } while (current != null && current != start); return edgeString; }
/// <summary> /// Adds a directed edge which is known to form part of this line. /// </summary> /// <param name="directedEdge"></param> public void Add(LineMergeDirectedEdge directedEdge) { directedEdges.Add(directedEdge); }