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