Home
/
Packages
/
@hatch:spatial
@hatch:spatial
v0.1.0
Spatial acceleration structures — uniform cluster grid and adaptive octree for 3D worlds. Insert millions of points, then query by radius or AABB in single-digit microseconds. Pure Wren, no plugin; composes with @hatch:gpu's Frustum + Lod for cull and LOD pipelines, and with @hatch:noise for procedural density sampling.
$
hatch add @hatch:spatial
copy
MOD
spatial
CL
ClusterGrid
NEW
ClusterGrid.new(minX, minY, minZ, maxX, maxY, maxZ, cellSize)
GET
ClusterGrid.count → Num
GET
ClusterGrid.cellsX → Num
GET
ClusterGrid.cellsY → Num
GET
ClusterGrid.cellsZ → Num
FN
ClusterGrid.cellIndex_(x, y, z)
FN
ClusterGrid.insert(id: Num, x: Num, y: Num, z: Num)
FN
ClusterGrid.move(id: Num, x: Num, y: Num, z: Num)
FN
ClusterGrid.remove(id: Num)
FN
ClusterGrid.removeFromBucket_(ci, id)
FN
ClusterGrid.queryRadius(cx: Num, cy: Num, cz: Num, radius: Num, cb: Fn)
FN
ClusterGrid.queryAabb(minX: Num, minY: Num, minZ: Num, maxX: Num, maxY: Num, maxZ: Num, cb: Fn)
FN
ClusterGrid.clear()
CL
Octree
NEW
Octree.new(minX: Num, minY: Num, minZ: Num, maxX: Num, maxY: Num, maxZ: Num, maxPerLeaf: Num)
GET
Octree.count → Num
FN
Octree.insert(id: Num, x: Num, y: Num, z: Num)
FN
Octree.remove(id: Num)
FN
Octree.queryRadius(cx: Num, cy: Num, cz: Num, radius: Num, cb: Fn)
FN
Octree.queryAabb(minX, minY, minZ, maxX, maxY, maxZ, cb)
FN
Octree.clear()
CL
OctreeNode_
NEW
OctreeNode_.new_(minX, minY, minZ, maxX, maxY, maxZ)
GET
OctreeNode_.entries
GET
OctreeNode_.children
FN
OctreeNode_.insert_(id, x, y, z, maxPerLeaf)
FN
OctreeNode_.subdivide_(maxPerLeaf)
FN
OctreeNode_.childFor_(x, y, z)
FN
OctreeNode_.descendForId_(id, x, y, z)
FN
OctreeNode_.removeEntry_(id)
FN
OctreeNode_.queryRadius_(cx, cy, cz, r2, r, cb)
FN
OctreeNode_.queryAabb_(minX, minY, minZ, maxX, maxY, maxZ, cb)
FN
OctreeNode_.intersectsSphere_(cx, cy, cz, r)
FN
OctreeNode_.clear_()