úÎ7942     Safe-./NIEnumerated type to indicate octants in 3D-space relative to given center.!Datatype for nodes within Octree.norm of a vectordistance between two vectors^Internal method that gives octant of a first vector relative to the second vector as a center.[Internal method that joins result of three coordinate comparisons and makes an octant name aThis function converts octant name to a function that steps down in an Octree towards this octant²Function that splits octant name into three boolean values, depending of sign of a relative coordinate in that octant. | (Coordinate is relative to a split point within Octree.)ØInternal function that finds a lower bound for a distance between a point of relative coordinates, | and octant of given name. It works only when coordinates of a given point are all positive. | It is used only by ÿ , which respectively changes octant name depending of signs of | relative coordinates. here we assume that a, b, c > 0 (otherwise we will take abs, and correspondingly invert results) same octant dp = difference between given point and the center of Octree nodeList of all octant names.*Internal function that makes code clearer.jFinds a minimum bounds for a distance between a given point | in relative coordinates and a given octant.]Toggles octant names depending on a signs of vector coordinates | for use in octantDistance.gGiven a point in relative coordinates, gives list of all octants and minimum distances from this point.œsplits a list of vectors and "payload" tuples | into a tuple with elements destined for different octants. FIXME: VERY IMPORTANT - add prop_splitBy vs cmpRComputes a center of mass for a given list of vectors - used to find a splitPoint..Helper function to map over an 8-element tuple7Maximum number of elements before Octree leaf is split.9Creates an Octree from a list of (index, payload) tuples.»Internal method, that splits a list into octants depending on coordinates, | and then applies a specified function to each of these sublists, | in order to create subnodes of the Octree [Internal method that prepends contents of the given subtree to a list | given as argument.bCreates an Octree from list, trying to keep split points near centers | of mass for each subtree.!\Finds a path to a Leaf where a given point should be, | and returns a list of octant names."uApplies a given function to a node specified by a path (list of octant names), | and then returns a modified Octree. ˆInserts a point into an Octree. | NOTE: insert accepts duplicate points, but lookup would not find them - use withinRange in such case.#¥Internal: finds candidates for nearest neighbour lazily for each octant; | they are returned in a list of (octant, min. bound for distance, Maybe candidate) tuples. *Finds a given point, if it is in the tree. *Finds nearest neighbour for a given point.$JInternal method that picks from a given list a point closest to argument, PReturns all points within Octree that are within a given distance from argument.6%&'()*+,-./012345678 !" # $9 : .%&'()*+,-./012345678 $ : "%&'()*+, -7./01234568 !" # $9 : SafeN   ;      !"#$%&'()*+,-./0123456789:;<=>?Octre_LdGSfHqNSZg12UV26su0Kt Data.OctreeData.Octree.InternalACVec_28GP9v21kog3qFBqtyTMnBData.Vector.V3v3zv3yv3xVector3OctreedistfromListtoListinsertlookupnearest withinRangedepthsizeODirnormcmpjoinStep octreeStep splitStepoctantDistance'octantDistance allOctantsxortoggleoctantDistancessplitBy massCentertmap leafLimitsplitBy'toList'pathTo applyByPath candidates' pickClosestSWDSEDNWDNEDSWUSEUNWUNEUNodesplitnwunwdneunedswuswdseusedLeafunLeaf pickClosersubnodes