protected void GenerateNewDisplayZoom(Item query, int layerId, int nResults) { Display.Clear(); Item[] zoomItems = Mles.SearchKNN(query, query.ClusterItems, nResults, HasItemDroppedOut); List <Item> displayItems = new List <Item>(zoomItems); LoopAddLayerItems(query, layerId, nResults, displayItems); IncrementDisplayedCount(displayItems); Display = displayItems; }
protected Item SelectRandomItem() { Item[] nearestItems = Mles.SearchKNN(SearchedItem, Display.ToArray(), BrowsingCoherence, item => false); if (nearestItems.Length == 1) { return(nearestItems[0]); } else { return(nearestItems[random.Next(nearestItems.Length - 1)]); } }
protected void LoopAddLayerItems(Item query, int layerId, int nResults, List <Item> displayItems) { int loopWatchdog = 0; while (displayItems.Count < nResults) { // not enough items in zoomed cluster, add additional files from outside the cluster but from the same layer int nAdditionalResults = nResults - displayItems.Count; Item[] additionalItems = Mles.SearchKNN(query, layerId, nAdditionalResults, HasItemDroppedOut, displayItems); displayItems.AddRange(additionalItems); if (loopWatchdog++ > 10) { throw new NotImplementedException("Trouble filling whole display..."); } } }