/// <summary> /// Query the Octa-Tree for items that are in the given area /// </summary> /// <param name="queryArea"></pasram> /// <returns></returns> public List<IOctTreeElement> Query(Cube queryVolume) { // create a list of the items that are found List<IOctTreeElement> results = new List<IOctTreeElement>(); // this quad contains items that are not entirely contained by // it's four sub-quads. Iterate through the items in this quad // to see if they intersect. foreach (IOctTreeElement item in this.Items) { if (item.isOverlapWith(queryVolume)) results.Add(item); } foreach (OctTreeNode node in childNode) { //if (node.IsEmpty) // continue; // Case 1: search area completely contained by sub-quad // if a node completely contains the query area, go down that branch // and skip the remaining nodes (break this loop) if (node.Contains(queryVolume)) { results.AddRange(node.Query(queryVolume)); break; } // Case 2: Sub-quad completely contained by search area // if the query area completely contains a sub-quad, // just add all the contents of that quad and it's children // to the result set. You need to continue the loop to test // the other quads if (queryVolume.Contains(node)) { results.AddRange(node.AllItems); continue; } // Case 3: search area overlap with sub-octa // traverse into this octa-node, continue the loop to search other // octa-node if (node.isOverlapWith(queryVolume)) { results.AddRange(node.Query(queryVolume)); } } return results; }
public bool isInside(Cube cube) { if (cube.Contains(new Cube(offset, 1,1,1))) return true; return false; }
public bool isInside(Cube cube) { if (cube.Contains(this)) return true; return false; }