void ExtractFilament(Point v0, Point v1, OrderedPointList heap) { int v0Index = graph.IndexOf(v0); if (graph.IsCycleEdge(v0, v1)) { if (graph.nodes[v0Index].NodeDegree() >= 3) { graph.RemoveEdge(v0, v1); v0 = v1; v0Index = graph.IndexOf(v0); if (graph.nodes[v0Index].NodeDegree() == 1) { v1 = graph.nodes[v0Index].edges[0].target; } } while (graph.nodes[v0Index].NodeDegree() == 1) { v1 = graph.nodes[v0Index].edges[0].target; if (graph.IsCycleEdge(v0, v1)) { heap.Remove(v0); graph.RemoveEdge(v0, v1); graph.RemoveNode(v0); v0 = v1; v0Index = graph.IndexOf(v0); } else { break; } } if (graph.nodes[v0Index].NodeDegree() == 0) { heap.Remove(v0); graph.RemoveNode(v0); } } else { Filament primitive = new Filament(); if (graph.nodes[v0Index].NodeDegree() >= 3) { primitive.Add(v0); graph.RemoveEdge(v0, v1); v0 = v1; v0Index = graph.IndexOf(v0); if (graph.nodes[v0Index].NodeDegree() == 1) { v1 = graph.nodes[v0Index].edges[0].target; } } while (graph.nodes[v0Index].NodeDegree() == 1) { primitive.Add(v0); v1 = graph.nodes[v0Index].edges[0].target; heap.Remove(v0); graph.RemoveEdge(v0, v1); graph.RemoveNode(v0); v0 = v1; } primitive.Add(v0); if (graph.nodes[v0Index].NodeDegree() == 0) { heap.Remove(v0); graph.RemoveEdge(v0, v1); graph.RemoveNode(v0); } primitives.Add(primitive); if (Utilities.ATOMIC_REGION_GEN_DEBUG) { Debug.WriteLine(primitive.ToString()); } } }
void ExtractFilament(Point v0, Point v1, OrderedPointList heap) { int v0Index = graph.IndexOf(v0); if (graph.IsCycleEdge(v0, v1)) { if (graph.nodes[v0Index].NodeDegree() >= 3) { graph.RemoveEdge(v0, v1); v0 = v1; v0Index = graph.IndexOf(v0); if (graph.nodes[v0Index].NodeDegree() == 1) { v1 = graph.nodes[v0Index].edges[0].target; } } while (graph.nodes[v0Index].NodeDegree() == 1) { v1 = graph.nodes[v0Index].edges[0].target; if (graph.IsCycleEdge(v0, v1)) { heap.Remove(v0); graph.RemoveEdge(v0, v1); graph.RemoveNode(v0); v0 = v1; v0Index = graph.IndexOf(v0); } else { break; } } if (graph.nodes[v0Index].NodeDegree() == 0) { heap.Remove(v0); graph.RemoveNode(v0); } } else { Filament primitive = new Filament(); if (graph.nodes[v0Index].NodeDegree() >= 3) { primitive.Add(v0); graph.RemoveEdge(v0,v1); v0 = v1; v0Index = graph.IndexOf(v0); if (graph.nodes[v0Index].NodeDegree() == 1) { v1 = graph.nodes[v0Index].edges[0].target; } } while (graph.nodes[v0Index].NodeDegree() == 1) { primitive.Add(v0); v1 = graph.nodes[v0Index].edges[0].target; heap.Remove(v0); graph.RemoveEdge(v0, v1); graph.RemoveNode(v0); v0 = v1; } primitive.Add(v0); if (graph.nodes[v0Index].NodeDegree() == 0) { heap.Remove(v0); graph.RemoveEdge(v0, v1); graph.RemoveNode(v0); } primitives.Add(primitive); if (Utilities.ATOMIC_REGION_GEN_DEBUG) { Debug.WriteLine(primitive.ToString()); } } }