} // public OverlayOp( Geometry g0, Geometry g1 ) : base( g0, g1 ) #endregion #region Static Methods /// <summary> /// Initializes a new instance of the OverlayOp class. /// </summary> public static Geometry Overlay(Geometry geom0, Geometry geom1, int opCode) { OverlayOp gov = new OverlayOp(geom0, geom1); Geometry geomOv = gov.GetResultGeometry(opCode); return(geomOv); } // public static Geometry Overlay( Geometry geom0, Geometry geom1, int opCode )
} // 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 )
} // public OverlayOp( Geometry g0, Geometry g1 ) : base( g0, g1 ) #endregion #region Static Methods /// <summary> /// Initializes a new instance of the OverlayOp class. /// </summary> public static Geometry Overlay( Geometry geom0, Geometry geom1, int opCode ) { OverlayOp gov = new OverlayOp( geom0, geom1 ); Geometry geomOv = gov.GetResultGeometry( opCode ); return geomOv; } // public static Geometry Overlay( Geometry geom0, Geometry geom1, int opCode )
/// <summary> /// /// </summary> /// <param name="op"></param> /// <param name="geometryFactory"></param> /// <param name="ptLocator"></param> public LineBuilder( OverlayOp op, GeometryFactory geometryFactory, PointLocator ptLocator ) { _op = op; _geometryFactory = geometryFactory; _ptLocator = ptLocator; } // public LineBuilder( OverlayOp op, GeometryFactory geometryFactory, PointLocator ptLocator )
/// <summary> /// Initializes a new instance of the PointBuilder class. /// </summary> public PointBuilder(OverlayOp op, GeometryFactory geometryFactory, PointLocator ptLocator) { _op = op; _geometryFactory = geometryFactory; _ptLocator = ptLocator; }