예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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));
            }
        }
예제 #3
0
 /// <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);
 }
예제 #4
0
        /// <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);
        }
예제 #5
0
 /// <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;
 }
예제 #6
0
 /// <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);
 }
예제 #7
0
 /// <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);
 }