void RemoveEdge(AxisEdge edge)
        {
            var containerNode = GetAxisEdgesContainerNode(edge.Source.Point);

            containerNode.Item.RemoveAxis(edge);
            if (containerNode.Item.IsEmpty())
            {
                edgeContainersTree.DeleteNodeInternal(containerNode);
            }
        }
Пример #2
0
        CdtSite LeftCase(CdtSite pi, RBNode <CdtFrontElement> hittedFrontElementNode, out CdtSite rightSite)
        {
            //left case
            //                if(db)ShowFrontWithSite(pi, new LineSegment(pi.Point, hittedFrontElementNode.Item.Edge.upperSite.Point), new LineSegment(pi.Point, hittedFrontElementNode.Item.Edge.lowerSite.Point));
            Debug.Assert(ApproximateComparer.Close(pi.Point.X, hittedFrontElementNode.Item.X));
            var hittedFrontElement = hittedFrontElementNode.Item;

            InsertAndLegalizeTriangle(pi, hittedFrontElement);
            var prevToHitted = front.Previous(hittedFrontElementNode);
            var leftSite     = prevToHitted.Item.LeftSite;

            rightSite = hittedFrontElementNode.Item.RightSite;
            //                if(db)ShowFrontWithSite(pi, new LineSegment(pi.Point, leftSite.Point), new LineSegment(pi.Point, prevToHitted.Item.RightSite.Point));
            InsertAndLegalizeTriangle(pi, prevToHitted.Item);
            front.DeleteNodeInternal(prevToHitted);
            var d = front.Remove(hittedFrontElement);

            Debug.Assert(d != null);
            return(leftSite);
        }
Пример #3
0
        internal bool RemoveExact(BasicReflectionEvent initialSite)
        {
            RBNode <BasicReflectionEvent> node = eventTree.Find(initialSite);

            if (null != node)
            {
                if (node.Item.Site == initialSite.Site)
                {
                    eventTree.DeleteNodeInternal(node);
                    return(true);
                }
            }
            return(false);
        }