Esempio n. 1
0
        }         // 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:
        /// &lt;ul&gt;
        ///		&lt;li&gt;during an intersection when the boundaries of two areas touch in a line segment.
        ///		&lt;li&gt;OR as a result of a dimensional collapse.
        ///	&lt;/ul&gt;
        /// </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 )
Esempio n. 2
0
        }         // 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 )
Esempio n. 3
0
        }         // 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 )