Get information from a mesh node?

Forum for OctaneRender Lua scripting examples, discussion and support.
User avatar
stratified
OctaneRender Team
Posts: 945
Joined: Wed Aug 15, 2012 6:32 am
Location: Auckland, New Zealand

If you go via the vertices, it gives you the same dimensions as the original OBJ file... So if you scale it, you have to recalculate the scaling yourself.
AndreasBergmann
Licensed Customer
Posts: 16
Joined: Fri May 20, 2016 7:49 am

Hi,
I like this script, thanks!
Do you think it is posssible to get not only position but also rotation of a plane?

Best,
Andreas
jitendra
Licensed Customer
Posts: 143
Joined: Sat Oct 16, 2010 6:09 am

Hey Jason,
This script is still working well.
But can you help with converting this to a Scripted Nodegraph?
I want to use the output bounding box values in dynamically positioning other object (e.g. ground floor).
Happy to pay for the task as well.
Thanks.
grimm wrote: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
Best Regards, Jitendra
User avatar
grimm
Licensed Customer
Posts: 1332
Joined: Wed Jan 27, 2010 8:11 pm
Location: Spokane, Washington, USA

jitendra wrote:Hey Jason,
This script is still working well.
But can you help with converting this to a Scripted Nodegraph?
I want to use the output bounding box values in dynamically positioning other object (e.g. ground floor).
Happy to pay for the task as well.
Thanks.
Hi jitendra,

Sorry for not getting back to you sooner, I didn't see your message until today. If you still need my help with converting the function over that is no problem.

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
Post Reply

Return to “Lua Scripting”