Skip to main content

OctreeRegionUtils

Octree implementation utilities. Primarily this utility code should not be used directly and should be considered private to the library.

Use Octree instead of this library directly.

Types​

OctreeVector3​

type OctreeVector3 = {
[1]: number,
[2]: number,
[3]: number
}

A Vector3 equivalent for octrees. This type is primarily internal and used for faster access than a Vector3.

OctreeRegion<T>​

interface OctreeRegion<T> {
subRegions: {OctreeRegion<T>}
lowerBounds: OctreeVector3
upperBounds: OctreeVector3
position: OctreeVector3
parent: OctreeRegion<T>?
parentIndex: number
depth: number
nodes: {OctreeNode<T>}
node_count: number
}

An internal region which stores the data.

Functions​

visualize​

OctreeRegionUtils.visualize(region: OctreeRegion<T>) → MaidTask

Visualizes the octree region.

create​

OctreeRegionUtils.create(
px: number,
py: number,
pz: number,
sx: number,
sy: number,
sz: number,
parent: OctreeRegion<T>?,
parentIndex: number?
) → OctreeRegion<T>

Creates a new OctreeRegion

addNode​

OctreeRegionUtils.addNode(
lowestSubregion: OctreeRegion<T>,
node: OctreeNode
) → ()

Adds a node to the lowest subregion

moveNode​

OctreeRegionUtils.moveNode(
fromLowest: OctreeRegion<T>,
toLowest: OctreeRegion<T>,
node: OctreeNode
) → ()

Moves a node from one region to another

removeNode​

OctreeRegionUtils.removeNode(
lowestSubregion: OctreeRegion<T>,
node: OctreeNode
) → ()

Removes a node from the given region

getSearchRadiusSquared​

OctreeRegionUtils.getSearchRadiusSquared(
radius: number,
diameter: number,
epsilon: number
) → number

Retrieves the search radius for a given radius given the region diameter

getNeighborsWithinRadius​

OctreeRegionUtils.getNeighborsWithinRadius(
region: OctreeRegion<T>,
radius: number,
px: number,
py: number,
pz: number,
objectsFound: {T},
nodeDistances2: {number},
maxDepth: number
) → ()

getOrCreateSubRegionAtDepth​

OctreeRegionUtils.getOrCreateSubRegionAtDepth(
region: OctreeRegion<T>,--

Top level region

px: number,
py: number,
pz: number,
maxDepth: number
) → OctreeRegion<T>

Recursively ensures that a subregion exists at a given depth, and returns that region for usage.

createSubRegion​

OctreeRegionUtils.createSubRegion(
parentRegion: OctreeRegion<T>,
parentIndex: number
) → OctreeRegion<T>

Creates a subregion for an octree.

inRegionBounds​

OctreeRegionUtils.inRegionBounds(
region: OctreeRegion<T>,
px: number,
py: number,
pz: number
) → boolean

Computes whether a region is in bounds.

Consider regions to be range [px, y).

getSubRegionIndex​

OctreeRegionUtils.getSubRegionIndex(
region: OctreeRegion<T>,
px: number,
py: number,
pz: number
) → number

Gets a subregion's internal index.

getTopLevelRegionHash​

OctreeRegionUtils.getTopLevelRegionHash(
cx: number,
cy: number,
cz: number
) → number

This definitely collides fairly consistently

See: https://stackoverflow.com/questions/5928725/hashing-2d-3d-and-nd-vectors

getTopLevelRegionCellIndex​

OctreeRegionUtils.getTopLevelRegionCellIndex(
maxRegionSize: OctreeVector3,
px: number,
py: number,
pz: number
) → (
number,--

rpx

number,--

rpy

number--

rpz

)

Computes the index for a top level cell given a position

getTopLevelRegionPosition​

OctreeRegionUtils.getTopLevelRegionPosition(
maxRegionSize: OctreeVector3,
cx: number,
cy: number,
cz: number
) → (
number,
number,
number
)

Computes a top-level region's position

areEqualTopRegions​

OctreeRegionUtils.areEqualTopRegions(
region: OctreeRegion<T>,
rpx: number,
rpy: number,
rpz: number
) → boolean

Given a top-level region, returns if the region position are equal to this region

findRegion​

OctreeRegionUtils.findRegion(
regionHashMap: {[number]: {OctreeRegion<T>}},
maxRegionSize: OctreeVector3,
px: number,
py: number,
pz: number
) → OctreeRegion3?

Given a world space position, finds the current region in the hashmap

getOrCreateRegion​

OctreeRegionUtils.getOrCreateRegion(
regionHashMap: {[number]: {OctreeRegion<T>}},
maxRegionSize: OctreeVector3,
px: number,
py: number,
pz: number
) → OctreeRegion<T>

Gets the current region for a position, or creates a new one.

Show raw api
{
    "functions": [
        {
            "name": "visualize",
            "desc": "Visualizes the octree region.",
            "params": [
                {
                    "name": "region",
                    "desc": "",
                    "lua_type": "OctreeRegion<T>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "MaidTask"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 83,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "create",
            "desc": "Creates a new OctreeRegion<T>",
            "params": [
                {
                    "name": "px",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "py",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "pz",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "sx",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "sy",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "sz",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "parent",
                    "desc": "",
                    "lua_type": "OctreeRegion<T>?"
                },
                {
                    "name": "parentIndex",
                    "desc": "",
                    "lua_type": "number?"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "OctreeRegion<T>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 109,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "addNode",
            "desc": "Adds a node to the lowest subregion",
            "params": [
                {
                    "name": "lowestSubregion",
                    "desc": "",
                    "lua_type": "OctreeRegion<T>"
                },
                {
                    "name": "node",
                    "desc": "",
                    "lua_type": "OctreeNode"
                }
            ],
            "returns": [],
            "function_type": "static",
            "source": {
                "line": 155,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "moveNode",
            "desc": "Moves a node from one region to another",
            "params": [
                {
                    "name": "fromLowest",
                    "desc": "",
                    "lua_type": "OctreeRegion<T>"
                },
                {
                    "name": "toLowest",
                    "desc": "",
                    "lua_type": "OctreeRegion<T>"
                },
                {
                    "name": "node",
                    "desc": "",
                    "lua_type": "OctreeNode"
                }
            ],
            "returns": [],
            "function_type": "static",
            "source": {
                "line": 175,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "removeNode",
            "desc": "Removes a node from the given region",
            "params": [
                {
                    "name": "lowestSubregion",
                    "desc": "",
                    "lua_type": "OctreeRegion<T>"
                },
                {
                    "name": "node",
                    "desc": "",
                    "lua_type": "OctreeNode"
                }
            ],
            "returns": [],
            "function_type": "static",
            "source": {
                "line": 217,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "getSearchRadiusSquared",
            "desc": "Retrieves the search radius for a given radius given the region\ndiameter",
            "params": [
                {
                    "name": "radius",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "diameter",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "epsilon",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 249,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "getNeighborsWithinRadius",
            "desc": "Adds all octree nod values to objectsFound\n\nSee basic algorithm:\nhttps://github.com/PointCloudLibrary/pcl/blob/29f192af57a3e7bdde6ff490669b211d8148378f/octree/include/pcl/octree/impl/octree_search.hpp#L309",
            "params": [
                {
                    "name": "region",
                    "desc": "",
                    "lua_type": "OctreeRegion<T>"
                },
                {
                    "name": "radius",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "px",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "py",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "pz",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "objectsFound",
                    "desc": "",
                    "lua_type": "{ T }"
                },
                {
                    "name": "nodeDistances2",
                    "desc": "",
                    "lua_type": "{ number }"
                },
                {
                    "name": "maxDepth",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [],
            "function_type": "static",
            "source": {
                "line": 271,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "getOrCreateSubRegionAtDepth",
            "desc": "Recursively ensures that a subregion exists at a given depth, and returns\nthat region for usage.",
            "params": [
                {
                    "name": "region",
                    "desc": "Top level region",
                    "lua_type": "OctreeRegion<T>"
                },
                {
                    "name": "px",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "py",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "pz",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "maxDepth",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "OctreeRegion<T>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 336,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "createSubRegion",
            "desc": "Creates a subregion for an octree.",
            "params": [
                {
                    "name": "parentRegion",
                    "desc": "",
                    "lua_type": "OctreeRegion<T>"
                },
                {
                    "name": "parentIndex",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "OctreeRegion<T>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 366,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "inRegionBounds",
            "desc": "Computes whether a region is in bounds.\n\nConsider regions to be range [px, y).",
            "params": [
                {
                    "name": "region",
                    "desc": "",
                    "lua_type": "OctreeRegion<T>"
                },
                {
                    "name": "px",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "py",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "pz",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "boolean"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 390,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "getSubRegionIndex",
            "desc": "Gets a subregion's internal index.",
            "params": [
                {
                    "name": "region",
                    "desc": "",
                    "lua_type": "OctreeRegion<T>"
                },
                {
                    "name": "px",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "py",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "pz",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 412,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "getTopLevelRegionHash",
            "desc": "This definitely collides fairly consistently\n\nSee: https://stackoverflow.com/questions/5928725/hashing-2d-3d-and-nd-vectors",
            "params": [
                {
                    "name": "cx",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "cy",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "cz",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 434,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "getTopLevelRegionCellIndex",
            "desc": "Computes the index for a top level cell given a position",
            "params": [
                {
                    "name": "maxRegionSize",
                    "desc": "",
                    "lua_type": "OctreeVector3"
                },
                {
                    "name": "px",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "py",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "pz",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [
                {
                    "desc": "rpx",
                    "lua_type": "number"
                },
                {
                    "desc": "rpy",
                    "lua_type": "number"
                },
                {
                    "desc": "rpz",
                    "lua_type": "number"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 450,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "getTopLevelRegionPosition",
            "desc": "Computes a top-level region's position",
            "params": [
                {
                    "name": "maxRegionSize",
                    "desc": "",
                    "lua_type": "OctreeVector3"
                },
                {
                    "name": "cx",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "cy",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "cz",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 472,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "areEqualTopRegions",
            "desc": "Given a top-level region, returns if the region position are equal\nto this region",
            "params": [
                {
                    "name": "region",
                    "desc": "",
                    "lua_type": "OctreeRegion<T>"
                },
                {
                    "name": "rpx",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "rpy",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "rpz",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "boolean"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 491,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "findRegion",
            "desc": "Given a world space position, finds the current region in the hashmap",
            "params": [
                {
                    "name": "regionHashMap",
                    "desc": "",
                    "lua_type": "{ [number]: { OctreeRegion<T> } }"
                },
                {
                    "name": "maxRegionSize",
                    "desc": "",
                    "lua_type": "OctreeVector3"
                },
                {
                    "name": "px",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "py",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "pz",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "OctreeRegion3?"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 506,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "getOrCreateRegion",
            "desc": "Gets the current region for a position, or creates a new one.",
            "params": [
                {
                    "name": "regionHashMap",
                    "desc": "",
                    "lua_type": "{ [number]: { OctreeRegion<T> } }"
                },
                {
                    "name": "maxRegionSize",
                    "desc": "",
                    "lua_type": "OctreeVector3"
                },
                {
                    "name": "px",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "py",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "pz",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "OctreeRegion<T>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 541,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        }
    ],
    "properties": [],
    "types": [
        {
            "name": "OctreeVector3",
            "desc": "A Vector3 equivalent for octrees. This type is primarily internal and\nused for faster access than a Vector3.",
            "lua_type": "{ [1]: number, [2]: number, [3]: number }",
            "source": {
                "line": 39,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        },
        {
            "name": "OctreeRegion<T>",
            "desc": "An internal region which stores the data.",
            "fields": [
                {
                    "name": "subRegions",
                    "lua_type": "{ OctreeRegion<T> }",
                    "desc": ""
                },
                {
                    "name": "lowerBounds",
                    "lua_type": "OctreeVector3",
                    "desc": ""
                },
                {
                    "name": "upperBounds",
                    "lua_type": "OctreeVector3",
                    "desc": ""
                },
                {
                    "name": "position",
                    "lua_type": "OctreeVector3",
                    "desc": ""
                },
                {
                    "name": "size",
                    "lua_type": "OctreeVector3",
                    "desc": ""
                },
                {
                    "name": "parent",
                    "lua_type": "OctreeRegion<T>?",
                    "desc": ""
                },
                {
                    "name": "parentIndex",
                    "lua_type": "number",
                    "desc": ""
                },
                {
                    "name": "depth",
                    "lua_type": "number",
                    "desc": ""
                },
                {
                    "name": "nodes",
                    "lua_type": "{ OctreeNode<T> }",
                    "desc": ""
                },
                {
                    "name": "node_count",
                    "lua_type": "number",
                    "desc": ""
                }
            ],
            "source": {
                "line": 62,
                "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
            }
        }
    ],
    "name": "OctreeRegionUtils",
    "desc": "Octree implementation utilities. Primarily this utility code\nshould not be used directly and should be considered private to\nthe library.\n\nUse [Octree](/api/Octree) instead of this library directly.",
    "source": {
        "line": 12,
        "path": "src/octree/src/Shared/OctreeRegionUtils.lua"
    }
}