} // public void CollectLineEdge( DirectedEdge de, int opCode, ArrayList edges ) /// <summary> /// Collect edges from Area input which should be in the result by which have not been included /// in a result area. This happens ONLY: /// <ul> /// <li>during an intersection when the boundaries of two areas touch in a line segment. /// <li>OR as a result of a dimensional collapse. /// </ul> /// </summary> /// <param name="de"></param> /// <param name="opCode"></param> /// <param name="edges"></param> public void CollectBoundaryTouchEdge(DirectedEdge de, int opCode, ArrayList edges) { Label label = de.Label; // this smells like a bit of a hack, but it seems to work... if (!de.IsLineEdge && !de.IsInteriorAreaEdge && // added to handle dimensional collapses !de.Edge.IsInResult && !de.Visited && OverlayOp.IsResultOfOp(label, opCode) && opCode == OverlayOp.Intersection) { edges.Add(de.Edge); de.SetVisitedEdge(true); } } // public void CollectBoundaryTouchEdge( DirectedEdge de, int opCode, ArrayList edges )
} // private void CollectLines( int opCode ) /// <summary> /// /// </summary> /// <param name="de"></param> /// <param name="opCode"></param> /// <param name="edges"></param> public void CollectLineEdge(DirectedEdge de, int opCode, ArrayList edges) { Label label = de.Label; Edge e = de.Edge; // include L edges which are in the result if (de.IsLineEdge) { if (!de.Visited && OverlayOp.IsResultOfOp(label, opCode) && !e.IsCovered) { //Trace.WriteLine("de: " + de.Label.ToString() ); //Trace.WriteLine("edge: " + e.Label.ToString() ); edges.Add(e); de.SetVisitedEdge(true); } // if ( !de.Visited && OverlayOp.IsResultOfOp( label, opCode ) && !e.IsCovered ) } // if ( de.IsLineEdge ) } // public void CollectLineEdge( DirectedEdge de, int opCode, ArrayList edges )
} // public ArrayList Build( int opCode ) private ArrayList CollectNodes(int opCode) { ArrayList resultNodeList = new ArrayList(); // add nodes from edge intersections which have not already been included in the result foreach (DictionaryEntry obj in _op.Graph.Nodes) { Node n = (Node)obj.Value; if (!n.IsInResult) { Label label = n.Label; if (OverlayOp.IsResultOfOp(label, opCode)) { resultNodeList.Add(n); } } // if ( !n.IsInResult ) } // foreach ( object obj in _op.Graph.Nodes ) return(resultNodeList); } // private ArrayList CollectNodes( int opCode )