by grimm » Tue Jan 21, 2014 12:03 am
grimm
Tue Jan 21, 2014 12:03 am
Thanks Thomas, that's good to know. Here is my function if anyone is interested, any ideas to make it better will be greatly appreciated.
- Code: Select all
-- calculate the statistics of a mesh and return a table of those values
function getMeshStats(verts)
local meshStats = {}
local minX = 0
local maxX = 0
local minY = 0
local maxY = 0
local minZ = 0
local maxZ = 0
local lengthX = 0
local lengthY = 0
local lengthZ = 0
local x, y, z
-- find the bounding box
for k,v in pairs(verts) do
x = v[1]
if x > maxX then maxX = x end
if x < minX then minX = x end
y = v[2]
if y > maxY then maxY = y end
if y < minY then minY = y end
z = v[3]
if z > maxZ then maxZ = z end
if z < minZ then minZ = z end
end
meshStats["min_x"] = minX
meshStats["max_x"] = maxX
meshStats["min_y"] = minY
meshStats["max_y"] = maxY
meshStats["min_z"] = minZ
meshStats["max_z"] = maxZ
-- find the mesh's length for each axis
lengthX = maxX - minX
lengthY = maxY - minY
lengthZ = maxZ - minZ
meshStats["x_len"] = lengthX
meshStats["y_len"] = lengthY
meshStats["z_len"] = lengthZ
-- find the mesh's position
local posX = lengthX/2.0 + minX
local posY = lengthY/2.0 + minY
local posZ = lengthZ/2.0 + minZ
meshStats["pos_x"] = posX
meshStats["pos_y"] = posY
meshStats["pos_z"] = posZ
return meshStats
end
selectedMesh = octane.project.getSelection()[1]
verts = selectedMesh:getAttribute(octane.A_VERTICES)
meshStats = getMeshStats(verts)
print "X info"
print(meshStats["pos_x"])
print(meshStats["min_x"])
print(meshStats["max_x"])
print "Y info"
print(meshStats["pos_y"])
print(meshStats["min_y"])
print(meshStats["max_y"])
print "Z info"
print(meshStats["pos_z"])
print(meshStats["min_z"])
print(meshStats["max_z"])
If you do run the script, just make sure to select a mesh node first. Otherwise it will not work.
Jason
Linux Mint 21.3 x64 | Nvidia GTX 980 4GB (displays) RTX 2070 8GB| Intel I7 5820K 3.8 Ghz | 32Gb Memory | Nvidia Driver 535.171