Source code for mm.util
import mmapi;
from frame import *;
[docs]def get_selected_bounding_box(remote):
"""return the axis-aligned bounding box of the selected objects as two 3-tuples (min, max)"""
cmd = mmapi.StoredCommands()
key1 = cmd.AppendQueryCommand_GetBoundingBox()
remote.runCommand(cmd)
fMin = mmapi.floatArray(3)
fMax = mmapi.floatArray(3)
bOK = cmd.GetQueryResult_GetBoundingBox(key1, fMin, fMax)
return ( (fMin[0],fMin[1],fMin[2]), (fMax[0],fMax[1],fMax[2]) )
[docs]def get_face_selection_bounding_box(remote):
"""return the axis-aligned bounding box of the selected faces as two 3-tuples (min, max). Requires active face selection."""
cmd = mmapi.StoredCommands()
key1 = cmd.AppendQueryCommand_GetSelectedFacesBoundingBox()
remote.runCommand(cmd)
fMin = mmapi.floatArray(3)
fMax = mmapi.floatArray(3)
bOK = cmd.GetQueryResult_GetSelectedFacesBoundingBox(key1, fMin, fMax)
if bOK:
return ( (fMin[0],fMin[1],fMin[2]), (fMax[0],fMax[1],fMax[2]) )
else:
return ( (0,0,0), (0,0,0) )
[docs]def get_face_selection_centroid(remote):
"""return the geometric centroid of the selected faces as a 3-tuple. Requires active face selection."""
cmd = mmapi.StoredCommands()
key1 = cmd.AppendQueryCommand_GetSelectedFacesCentroid()
remote.runCommand(cmd)
vCentroid = mmapi.floatArray(3)
bOK = cmd.GetQueryResult_GetSelectedFacesCentroid(key1, vCentroid)
if bOK:
return ( vCentroid[0], vCentroid[1], vCentroid[2] )
else:
return ( 0,0,0 )
[docs]def find_nearest(remote, position):
"""Find the nearest point on the 3D surface to the input 3-tuple. Returns a tuple (bOK, hitFrame), where bOK is a boolean indicating if a nereast point was found, and hitFrame is an mmFrame at the hit point, with Z axis oriented to the surface normal"""
cmd = mmapi.StoredCommands()
v = mmapi.vec3f()
key = cmd.AppendQueryCommand_FindNearestPoint(position[0], position[1], position[2]);
remote.runCommand(cmd)
frame = mmapi.frame3f()
bOK = cmd.GetQueryResult_FindNearestPoint(key, frame)
hitFrame = mmFrame()
hitFrame.setFromMM(frame)
return (bOK, hitFrame)
[docs]def find_ray_hit(remote, ray_origin, ray_direction):
"""Find the intersection of a ray (specified by 3-tuples for origin and direction) and the 3D surface. Returns a tuple (bOK, hitFrame), where bOK is a boolean indicating if a hit was found, and hitFrame is an mmFrame at the hit point, with Z axis oriented to the surface normal"""
cmd = mmapi.StoredCommands()
o = mmapi.vec3f()
o.x = ray_origin[0]; o.y = ray_origin[1]; o.z = ray_origin[2]
d = mmapi.vec3f()
d.x = ray_direction[0]; d.y = ray_direction[1]; d.z = ray_direction[2]
key = cmd.AppendQueryCommand_FindRayIntersection(o,d)
remote.runCommand(cmd)
frame = mmapi.frame3f()
bOK = cmd.GetQueryResult_FindRayIntersection(key, frame)
hitFrame = mmFrame()
hitFrame.setFromMM(frame)
return (bOK, hitFrame)