package org.squidy.nodes.optitrack.gestures; import java.util.ArrayList; import javax.vecmath.Vector3d; import javax.vecmath.Vector3f; import org.squidy.manager.data.impl.DataPosition3D; public class Octree { protected OctreeNode top; public Octree() { this(1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 20, OctreeNode.NO_MIN_SIZE); } public Octree(float xMax, float xMin, float yMax, float yMin, float zMax, float zMin, int maxItems) { this(xMax, xMin, yMax, yMin, zMax, zMin, maxItems, OctreeNode.NO_MIN_SIZE); } public Octree(int up, int left, int down, int right, int Front, int Back, int maxItems) { this((float)up, (float)left, (float)down, (float)right, (float)Front, (float)Back, maxItems, OctreeNode.DEFAULT_MIN_SIZE); } public Octree(float xMax, float xMin, float yMax, float yMin, float zMax, float zMin, int maxItems, float minSize) { top = new OctreeNode(xMax, xMin, yMax, yMin, zMax, zMin, maxItems, minSize); } /// <summary> Add a Object into the tree at a location. /// </summary> /// <param name="x">up-down location in Octree Grid</param> /// <param name="y">left-right location in Octree Grid</param> /// <param name="z">front-back location in Octree Grid</param> /// <returns> true if the insertion worked. </returns> public boolean AddNode(float x, float y, float z, Object obj, String name) { return top.AddNode(x, y, z, obj, name); } public boolean AddNode(float x, float y, float z, int obj, String name) { return top.AddNode(x, y, z, obj, name); } /*public boolean AddNode(float x, float y, float z, uint obj) { return top.AddNode(x, y, z, obj); }*/ public boolean AddNode(float x, float y, float z, short obj, String name) { return top.AddNode(x, y, z, obj, name); } public boolean AddNode(float x, float y, float z, long obj, String name) { return top.AddNode(x, y, z, obj, name); } public boolean AddNode(float x, float y, float z, float obj, String name) { return top.AddNode(x, y, z, obj, name); } public boolean AddNode(float x, float y, float z, double obj, String name) { return top.AddNode(x, y, z, obj, name); } public boolean AddNode(float x, float y, float z, boolean obj, String name) { return top.AddNode(x, y, z, obj, name); } public boolean AddNode(Vector3f vector, Object obj, String name) { return top.AddNode(vector.x, vector.y, vector.z, obj, name); } public boolean AddNode(Vector3f vector, int obj, String name) { return top.AddNode(vector.x, vector.y, vector.z, obj, name); } /*public boolean AddNode(Vector3f vector, uint obj) { return top.AddNode(vector.x, vector.y, vector.z, obj); }*/ public boolean AddNode(Vector3f vector, short obj, String name) { return top.AddNode(vector.x, vector.y, vector.z, obj, name); } public boolean AddNode(Vector3f vector, long obj, String name) { return top.AddNode(vector.x, vector.y, vector.z, obj, name); } public boolean AddNode(Vector3f vector, float obj, String name) { return top.AddNode(vector.x, vector.y, vector.z, obj, name); } public boolean AddNode(Vector3f vector, double obj, String name) { return top.AddNode(vector.x, vector.y, vector.z, obj, name); } public boolean AddNode(Vector3f vector, boolean obj, String name) { return top.AddNode(vector.x, vector.y, vector.z, obj, name); } /*public boolean AddNode(double x, double y, double z, Object obj) { return top.AddNode(x, y, z, obj); }*/ public boolean AddNode(double x, double y, double z, StaticGesture staticGesture, int index, String gestureName, String handSide) { return top.AddNode(x, y, z, staticGesture, index,gestureName, handSide); } /*public boolean AddNode(double x, double y, double z, uint obj) { return top.AddNode(x, y, z, obj); }*/ public boolean AddNode(double x, double y, double z, short obj, String name) { return top.AddNode(x, y, z, obj, name); } public boolean AddNode(double x, double y, double z, long obj, String name) { return top.AddNode(x, y, z, obj, name); } public boolean AddNode(double x, double y, double z, float obj, String name) { return top.AddNode(x, y, z, obj, name); } public boolean AddNode(double x, double y, double z, double obj, String name) { return top.AddNode(x, y, z, obj, name); } public boolean AddNode(double x, double y, double z, boolean obj, String name) { return top.AddNode(x, y, z, obj, name); } public boolean AddNode(Vector3d vector, Object obj, String name) { return top.AddNode(vector.x, vector.y, vector.z, obj, name); } public boolean AddNode(Vector3d vector, int obj, String name) { return top.AddNode(vector.x, vector.y, vector.z, obj, name); } /*public boolean AddNode(Vector3d vector, uint obj) { return top.AddNode(vector.x, vector.y, vector.z, obj); }*/ public boolean AddNode(Vector3d vector, short obj, String name) { return top.AddNode(vector.x, vector.y, vector.z, obj, name); } public boolean AddNode(Vector3d vector, long obj, String name) { return top.AddNode(vector.x, vector.y, vector.z, obj, name); } public boolean AddNode(Vector3d vector, float obj, String name) { return top.AddNode(vector.x, vector.y, vector.z, obj, name); } public boolean AddNode(Vector3d vector, double obj, String name) { return top.AddNode(vector.x, vector.y, vector.z, obj, name); } public boolean AddNode(Vector3d vector, boolean obj, String name) { return top.AddNode(vector.x, vector.y, vector.z, obj, name); } /// <summary> Remove a Object out of the tree at a location. </summary> /// <param name="x">up-down location in Octree Grid (x, y)</param> /// <param name="y">left-right location in Octree Grid (y, x)</param> /// <returns> the Object removed, null if the Object not found. /// </returns> public Object RemoveNode(float x, float y, float z, Object obj) { return top.RemoveNode(x, y, z, obj); } public Object RemoveNode(float x, float y, float z, int obj) { return top.RemoveNode(x, y, z, obj); } /*public Object RemoveNode(float x, float y, float z, uint obj) { return top.RemoveNode(x, y, z, obj); }*/ public Object RemoveNode(float x, float y, float z, short obj) { return top.RemoveNode(x, y, z, obj); } public Object RemoveNode(float x, float y, float z, long obj) { return top.RemoveNode(x, y, z, obj); } public Object RemoveNode(float x, float y, float z, float obj) { return top.RemoveNode(x, y, z, obj); } public Object RemoveNode(float x, float y, float z, double obj) { return top.RemoveNode(x, y, z, obj); } public Object RemoveNode(float x, float y, float z, boolean obj) { return top.RemoveNode(x, y, z, obj); } public Object RemoveNode(Vector3f vector, Object obj) { return top.RemoveNode(vector.x, vector.y, vector.z, obj); } public Object RemoveNode(Vector3f vector, int obj) { return top.RemoveNode(vector.x, vector.y, vector.z, obj); } /*public Object RemoveNode(Vector3f vector, uint obj) { return top.RemoveNode(vector.x, vector.y, vector.z, obj); }*/ public Object RemoveNode(Vector3f vector, short obj) { return top.RemoveNode(vector.x, vector.y, vector.z, obj); } public Object RemoveNode(Vector3f vector, long obj) { return top.RemoveNode(vector.x, vector.y, vector.z, obj); } public Object RemoveNode(Vector3f vector, float obj) { return top.RemoveNode(vector.x, vector.y, vector.z, obj); } public Object RemoveNode(Vector3f vector, double obj) { return top.RemoveNode(vector.x, vector.y, vector.z, obj); } public Object RemoveNode(Vector3f vector, boolean obj) { return top.RemoveNode(vector.x, vector.y, vector.z, obj); } public Object RemoveNode(double x, double y, double z, Object obj) { return top.RemoveNode(x, y, z, obj); } public Object RemoveNode(double x, double y, double z, int obj) { return top.RemoveNode(x, y, z, obj); } /*public Object RemoveNode(double x, double y, double z, uint obj) { return top.RemoveNode(x, y, z, obj); }*/ public Object RemoveNode(double x, double y, double z, short obj) { return top.RemoveNode(x, y, z, obj); } public Object RemoveNode(double x, double y, double z, long obj) { return top.RemoveNode(x, y, z, obj); } public Object RemoveNode(double x, double y, double z, float obj) { return top.RemoveNode(x, y, z, obj); } public Object RemoveNode(double x, double y, double z, double obj) { return top.RemoveNode(x, y, z, obj); } public Object RemoveNode(double x, double y, double z, boolean obj) { return top.RemoveNode(x, y, z, obj); } public Object RemoveNode(Vector3d vector, Object obj) { return top.RemoveNode(vector.x, vector.y, vector.z, obj); } public Object RemoveNode(Vector3d vector, int obj) { return top.RemoveNode(vector.x, vector.y, vector.z, obj); } /*public Object RemoveNode(Vector3d vector, uint obj) { return top.RemoveNode(vector.x, vector.y, vector.z, obj); }*/ public Object RemoveNode(Vector3d vector, short obj) { return top.RemoveNode(vector.x, vector.y, vector.z, obj); } public Object RemoveNode(Vector3d vector, long obj) { return top.RemoveNode(vector.x, vector.y, vector.z, obj); } public Object RemoveNode(Vector3d vector, float obj) { return top.RemoveNode(vector.x, vector.y, vector.z, obj); } public Object RemoveNode(Vector3d vector, double obj) { return top.RemoveNode(vector.x, vector.y, vector.z, obj); } public Object RemoveNode(Vector3d vector, boolean obj) { return top.RemoveNode(vector.x, vector.y, vector.z, obj); } /// <summary> Get an Object closest to a x/y. </summary> /// <param name="x">up-down location in Octree Grid (x, y)</param> /// <param name="y">left-right location in Octree Grid (y, x)</param> /// <returns> the Object that was found.</returns> public Object GetNode(float x, float y, float z) { return top.GetNode(x, y, z); } public Object GetNode(Vector3f vector) { return top.GetNode(vector.x, vector.y, vector.z); } public Object GetNode(DataPosition3D d3d) { return top.GetNode(d3d.getX(), d3d.getY(), d3d.getZ()); } public Object GetNode(double x, double y, double z) { return top.GetNode(x, y, z); } public Object GetNode(Vector3d vector) { return top.GetNode(vector.x, vector.y, vector.z); } /// <summary> Get an Object closest to a x/y, within a maximum distance. /// /// </summary> /// <param name="x">up-down location in Octree Grid (x, y) /// </param> /// <param name="y">left-right location in Octree Grid (y, x) /// </param> /// <param name="withinDistance">the maximum distance to get a hit, in /// decimal degrees. /// </param> /// <returns> the Object that was found, null if nothing is within /// the maximum distance. /// </returns> public Object GetNode(float x, float y, float z, double withinDistance) { return top.GetNode(x, y, z, withinDistance); } public Object GetNode(Vector3f vector, double withinDistance) { return top.GetNode(vector.x, vector.y, vector.z, withinDistance); } public Object GetNode(double x, double y, double z, double withinDistance) { return top.GetNode(x, y, z, withinDistance); } public Object GetNode(Vector3d vector, double withinDistance) { return top.GetNode(vector.x, vector.y, vector.z, withinDistance); } /// <summary> Get all the Objects within a bounding box. /// /// </summary> /// <param name="Top">top location in Octree Grid (x, y) /// </param> /// <param name="Left">left location in Octree Grid (y, x) /// </param> /// <param name="Bottom">lower location in Octree Grid (x, y) /// </param> /// <param name="Right">right location in Octree Grid (y, x) /// </param> /// <returns> ArrayList of Objects. /// </returns> public ArrayList GetNode(float xMax, float xMin, float yMax, float yMin, float zMax, float zMin) { return GetNode(xMax, xMin, yMax, yMin, zMax, zMin, new ArrayList(100)); } public ArrayList GetNode(double xMax, double xMin, double yMax, double yMin, double zMax, double zMin) { return GetNode(xMax, xMin, yMax, yMin, zMax, zMin, new ArrayList()); } /// <summary> Get all the Objects within a bounding box, and return the /// Objects within a given Vector. /// /// </summary> /// <param name="Top">top location in Octree Grid (x, y) /// </param> /// <param name="Left">left location in Octree Grid (y, x) /// </param> /// <param name="Bottom">lower location in Octree Grid (x, y) /// </param> /// <param name="Right">right location in Octree Grid (y, x) /// </param> /// <param name="vector">a vector to add Objects to. /// </param> /// <returns> ArrayList of Objects. /// </returns> public ArrayList GetNode(float xMax, float xMin, float yMax, float yMin, float zMax, float zMin, ArrayList nodes) { if (nodes == null) nodes = new ArrayList(10); if (xMin > xMax || (Math.abs(xMin - xMax) < 1e-6)) return top.GetNode(xMax, xMin, yMax, yMin, zMax, zMin, top.GetNode(xMax, 0, yMax, yMin, zMax, zMin, nodes)); else return top.GetNode(xMax, xMin, yMax, yMin, zMax, zMin, nodes); } /// <summary> /// /// </summary> /// <param name="xMax"></param> /// <param name="xMin"></param> /// <param name="yMax"></param> /// <param name="yMin"></param> /// <param name="zMax"></param> /// <param name="zMin"></param> /// <param name="nodes"></param> /// <returns></returns> public ArrayList GetNode(double xMax, double xMin, double yMax, double yMin, double zMax, double zMin, ArrayList nodes) { if (nodes == null) nodes = new ArrayList(10); if (xMin > xMax || (Math.abs(xMin - xMax) < 1e-6)) return top.GetNode(xMax, xMin, yMax, yMin, zMax, zMin, top.GetNode(xMax, 0, yMax, yMin, zMax, zMin, nodes)); else return top.GetNode(xMax, xMin, yMax, yMin, zMax, zMin, nodes); } /// <summary> Get an Object closest to a x/y, within a maximum distance. /// /// </summary> /// <param name="x">up-down location in Octree Grid (x, y) /// </param> /// <param name="y">left-right location in Octree Grid (y, x) /// </param> /// <param name="withinDistance">the maximum distance to get a hit, in /// decimal degrees. /// </param> /// <returns> the Objects that were found within the maximum radius. /// </returns> public ArrayList GetNodes(float x, float y, float z, double radius) { return top.GetNodes(x, y, z, radius); } public ArrayList GetNodes(Vector3f vector, double radius) { return top.GetNodes(vector.x, vector.y, vector.z, radius); } public ArrayList GetNodes(double x, double y, double z, double radius) { return top.GetNodes(x, y, z, radius); } public ArrayList GetNodes(Vector3d vector, double radius) { return top.GetNodes(vector.x, vector.y, vector.z, radius); } /// <summary> Get an Object closest to a x/y, within a maximum distance./// </summary> /// <param name="x">up-down location in Octree Grid (x, y)</param> /// <param name="y">left-right location in Octree Grid (y, x)</param> /// <param name="withinDistance">the maximum distance to get a hit, in /// decimal degrees.</param> /// <returns> the Objects that were found within the maximum radius.</returns> public ArrayList GetNodes(float x, float y, float z, double MinRadius, double MaxRadius) { return top.GetNodes(x, y, z, MinRadius, MaxRadius); } public ArrayList GetNodes(Vector3f vector, double MinRadius, double MaxRadius) { return top.GetNodes(vector.x, vector.y, vector.z, MinRadius, MaxRadius); } public ArrayList GetNodes(double x, double y, double z, double MinRadius, double MaxRadius) { return top.GetNodes(x, y, z, MinRadius, MaxRadius); } public ArrayList GetNodes(Vector3d vector, double MinRadius, double MaxRadius) { return top.GetNodes(vector.x, vector.y, vector.z, MinRadius, MaxRadius); } /// <summary>Clear the tree. </summary> public void Clear() { top.Clear(); } }