Adds an element to the tree.
Adds an element to the tree. If there is already an element stored at the point represented by the new element, it will be replaced.
Removes an element from the tree.
Removes an element from the tree. If the element is not found, this operation does nothing.
Adds an element to the tree (or replaces a given element with the same point location).
Adds an element to the tree (or replaces a given element with the same point location).
the element to add
true
if the element is new in the tree. If a previous entry with the
same point view is overwritten, this is true
if the elements were
not equal, false
if they were equal
Tests whether the tree contains an element.
Returns a string debug representation of the octree.
Queries the element at a given point.
Queries the element at a given point.
the point to look up.
Some
element if found, None
if the point was not present.
The base square of the tree.
The base square of the tree. No point can lie outside this square (or hyper-cube).
Queries whether an element is stored at a given point.
Queries whether an element is stored at a given point.
the point to query
true
if an element is associated with the query point, false
otherwise
Tests whether the tree is empty (true
) or whether it contains any elements (false
).
An Iterator
which iterates over the points stored
in the octree, using an in-order traversal directed
by the orthant indices of the nodes of the tree.
An Iterator
which iterates over the points stored
in the octree, using an in-order traversal directed
by the orthant indices of the nodes of the tree.
Great care has to be taken as the iterator might be corrupted if the tree is successively changed before the iterator is exhausted.
Reports the nearest neighbor entry with respect to a given point.
Reports the nearest neighbor entry with respect to a given point.
Note: There is a potential numeric overflow if the
squared distance of the query point towards the
furthest corner of the tree's root hyper-cube exceeds 63 bits.
For a root IntSquare(0x40000000, 0x40000000, 0x40000000)
, this
happens for example for any point going more towards north-west
than IntPoint2DLike(-1572067139, -1572067139)
.
the point of which the nearest neighbor is to be found
(description missing)
NoSuchElementException
if the tree is empty
Same as nearestNeighbor
but returning an Option
, thus not throwing an exception
if no neighbor is found.
Reports the number of decimation levels in the tree.
The number of orthants in each hyperCube.
The number of orthants in each hyperCube. This is equal
to 1 << numDimensions
and gives the upper bound
of the index to QNode.child()
.
A function which maps an element (possibly through transactional access) to a geometric point coordinate.
Removes an element from the tree
Removes an element from the tree
the element to remove
true
if the element had been found in the tree and thus been removed.
Removes the element stored under a given point view.
Removes the element stored under a given point view.
the location of the element to remove
the element removed, wrapped as Some
, or None
if no element was
found for the given point.
Queries the number of leaves in the tree.
Queries the number of leaves in the tree. This may be a very costly action, so it is recommended to only use it for debugging purposes.
The space (i.e., resolution and dimensionality) underlying the tree.
Converts the tree into a linearized indexed sequence.
Converts the tree into a linearized indexed sequence. This is not necessarily a very efficient method, and should usually just be used for debugging.
Converts the tree into a linearized list.
Converts the tree into a linearized list. This is not necessarily a very efficient method, and should usually just be used for debugging.
Converts the tree into a linearized sequence.
Converts the tree into a linearized sequence. This is not necessarily a
very efficient method, and should usually just be used for debugging.
To avoid surprises, this does not call iterator.toSeq
because that would
produce a Stream
and thus subject to further changes to the tree while
traversing. The returned seq instead is 'forced' and thus stable.
Converts the tree into a non-transactional set.
Converts the tree into a non-transactional set. This is not necessarily a very efficient method, and should usually just be used for debugging.
Looks up a point and applies a transformation to the entry associated with it.
Looks up a point and applies a transformation to the entry associated with it. This can be used to update an element in-place, or used for maintaining a spatial multi-map.
the location at which to perform the transformation
a function to transform the element found, or generate a new element. The argument is the
element previously stored with the point, or None
if no element is found. The result is
expected to be Some
new element to be stored, or None
if no element is to be stored
(in this case, if an element was previously stored, it is removed)
the previously stored element (if any)
Adds an element to the tree (or replaces a given element with the same point location).
Adds an element to the tree (or replaces a given element with the same point location).
the element to add to the tree
the old element stored for the same point view, if it existed
A
SkipOctree
is a multi-dimensional data structure that maps coordinates to values. It extends the interface of Scala's mutableMap
and adds further operations such as range requires and nearest neighbour search.