From 3f13dc790caeda7ca8f5e429f6f94458bda5826c Mon Sep 17 00:00:00 2001 From: kwolekr Date: Fri, 28 Jun 2013 10:28:15 -0400 Subject: Add voxelarea.lua helper to builtin --- builtin/voxelarea.lua | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 builtin/voxelarea.lua (limited to 'builtin/voxelarea.lua') diff --git a/builtin/voxelarea.lua b/builtin/voxelarea.lua new file mode 100644 index 000000000..9426c3acf --- /dev/null +++ b/builtin/voxelarea.lua @@ -0,0 +1,46 @@ +VoxelArea = { + MinEdge = {x=1, y=1, z=1}, + MaxEdge = {x=0, y=0, z=0}, + ystride = 0, + zstride = 0, +} + +function VoxelArea:new(o) + o = o or {} + setmetatable(o, self) + self.__index = self + + local e = o:getExtent() + o.ystride = e.x + o.zstride = e.x * e.y + + return o +end + +function VoxelArea:getExtent() + return { + x = self.MaxEdge.x - self.MinEdge.x + 1, + y = self.MaxEdge.y - self.MinEdge.y + 1, + z = self.MaxEdge.z - self.MinEdge.z + 1, + } +end + +function VoxelArea:getVolume() + local e = self:getExtent() + return e.x * e.y * e.z +end + +function VoxelArea:index(x, y, z) + local i = (z - self.MinEdge.z) * self.zstride + + (y - self.MinEdge.y) * self.ystride + + (x - self.MinEdge.x) + 1 + return math.floor(i) +end + +function VoxelArea:indexp(p) + local i = (p.z - self.MinEdge.z) * self.zstride + + (p.y - self.MinEdge.y) * self.ystride + + (p.x - self.MinEdge.x) + 1 + return math.floor(i) +end + -- cgit v1.2.3