private void HandleSiteEvent(SiteEvent siteEvent) { EventTree.TreeNode node = _eventTree.GetClosest(this, _eventTree.GetRoot(), siteEvent); if (node == null || node is EventTree.BreakpointNode) { return; } EventTree.LeafNode closest = (EventTree.LeafNode)node; if (closest.GetDisappearEvent() != null) { _eventQueue.Delete(closest.GetDisappearEvent().GetHandle()); closest.SetDisappearEvent(null); } List <CircleEvent> circleEvents2 = _eventTree.InsertNewSiteEvent(closest, new TreeItem(siteEvent.V())); foreach (var ce in circleEvents2) { IPriorityQueueHandle <IEvent> h = null; _eventQueue.Add(ref h, ce); ce.SetHandle(h); } }
public VoronoiGenerator(List <VectorNode> nodeList) { _nodeList = nodeList; _eventQueue = new IntervalHeap <IEvent>(new EventComparer()); RemoveDuplicatePoints(); foreach (var node in _nodeList) { var se = new SiteEvent(node); IPriorityQueueHandle <IEvent> h = null; _eventQueue.Add(ref h, se); se.SetHandle(h); } }
public void Rebuild() { System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); watch.Start(); _eventQueue = null; _eventTree = new EventTree(); _allCircleEvents.Clear(); _eventQueue = new IntervalHeap <IEvent>(new EventComparer()); RemoveDuplicatePoints(); foreach (var node in _nodeList) { node.halfEdge = null; var se = new SiteEvent(node); IPriorityQueueHandle <IEvent> h = null; _eventQueue.Add(ref h, se); se.SetHandle(h); } CreateDiagram(); watch.Stop(); }