Files
2025-09-29 00:52:08 +02:00

422 lines
11 KiB
Plaintext
Executable File

--tool to parse all expression style controllers in a scene
--and output metrics for them
--Matt Rennie
--Nov 2013
posExpressionControllers = #()
posSpringControllers = #()
rotExpressionControllers = #()
rotSpringControllers = #()
rotLookAtControllers = #()
scaleExpressionControllers = #()
scaleSpringControllers = #()
fn RSTA_posXYZ obj =
(
if classof obj.position.controller as string == RsSpring do
(
appendIfUnique posSpringControllers[1] obj
arrIndex = finditem posSpringControllers[1] obj
append posSpringControllers[2][arrIndex] obj
)
if classof obj.position.controller as string == Position_XYZ do
(
appendIfUnique posExpressionControllers[1] obj
cont = Float_Expression
if classof obj.position.controller.X_Position.controller == cont do
(
--now we need to do a finditem to find obj in the controller array
arrIndex = finditem posExpressionControllers[1] obj
append posExpressionControllers[2][arrIndex] obj
)
if classof obj.position.controller.Y_Position.controller == cont do
(
arrIndex = finditem posExpressionControllers[1] obj
append posExpressionControllers[2][arrIndex] obj
)
if classof obj.position.controller.Z_Position.controller == cont do
(
arrIndex = finditem posExpressionControllers[1] obj
append posExpressionControllers[2][arrIndex] obj
)
)
)
fn RSTA_posList obj =
(
expArr = #(obj,#())
sprArr = #(obj,#())
for i = 1 to obj.position.controller.count do
(
if classof obj.position.controller[i].controller == RsSpring do
(
-- appendIfUnique sprArr[1] obj
-- arrIndex = finditem posSpringControllers[1] obj
append sprArr[2] obj
)
if classof obj.position.controller[i].controller == Position_XYZ do
(
-- appendIfUnique posExpressionControllers[1] obj
cont = Float_Expression
if classof obj.position.controller[i].X_Position.controller == cont do
(
append expArr[2] obj
)
if classof obj.position.controller[i].Y_Position.controller == cont do
(
append expArr[2] obj
)
if classof obj.position.controller[i].Z_Position.controller == cont do
(
append expArr[2] obj
)
)
)
if expArr[2].count > 0 do
(
append posExpressionControllers expArr
)
if sprArr[2].count > 0 do
(
append posSpringControllers sprArr
)
)
fn RSTA_rotEulerXYZ obj =
(
/**
FUNCTION TO TEST IF obj HAS A STANDARD EULER XYZ
ROTATION CONTROLLER AND THEN SEND THAT TO BE PARSED
**/
expArr = #(obj,#())
sprArr = #(obj,#())
laArr = #(obj,#())
if classof obj.rotation.controller == RsSpringRotationController do
(
append sprArr[2] obj
)
if classof obj.rotation.controller == LookAt_Constraint do
(
append laArr[2] obj
)
if classof obj.rotation.controller == Euler_XYZ do
(
-- appendIfUnique rotExpressionControllers[1] obj
cont = Float_Expression
if classof obj.Rotation.controller.X_Rotation.controller == cont do
(
append expArr[2] obj
)
if classof obj.Rotation.controller.Y_Rotation.controller == cont do
(
append expArr[2] obj
)
if classof obj.Rotation.controller.Z_Rotation.controller == cont do
(
append expArr[2] obj
)
)
if expArr[2].count > 0 do
(
append rotExpressionControllers expArr
)
if sprArr[2].count > 0 do
(
append rotSpringControllers sprArr
)
if laArr[2].count > 0 do
(
append rotLookAtControllers laArr
)
)
fn RSTA_rotList obj =
(
/**
FUNCTION TO TEST IF obj HAS A ROTATION LIST
ROTATION CONTROLLER AND THEN SEND THAT TO BE PARSED
**/
expArr = #(obj,#())
sprArr = #(obj,#())
laArr = #(obj,#())
for i = 1 to obj.rotation.controller.count do --skip 1st controller as thats the frozen one
(
if classof obj.rotation.controller[i].controller == RsSpringRotationController do
(
appendSprArr[2] obj
)
if classof obj.rotation.controller[i].controller == LookAt_Constraint do
(
append laArr[2] obj
)
if classof obj.rotation.controller[i].controller == Euler_XYZ do
(
-- appendIfUnique rotExpressionControllers[1] obj
cont = Float_Expression
if classof obj.rotation.controller[i].X_rotation.controller == cont do
(
append expArr[2] obj
)
if classof obj.rotation.controller[i].Y_rotation.controller == cont do
(
append expArr[2] obj
)
if classof obj.rotation.controller[i].Z_rotation.controller == cont do
(
append expArr[2] obj
)
)
)
if expArr[2].count > 0 do
(
append rotExpressionControllers expArr
)
if sprArr[2].count > 0 do
(
append rotSpringControllers sprArr
)
if laArr[2].count > 0 do
(
append rotLookAtControllers laArr
)
)
fn RSTA_sclXYZ obj =
(
/**
FUNCTION TO TEST IF obj HAS A STANDARD SCALE XYZ
CONTROLLER AND THEN SEND THAT TO BE PARSED
**/
expArr = #(obj,#())
sprArr = #(obj,#())
if classof obj.scale.controller == RsSpring do
(
append sprArr obj
)
if classof obj.scale.controller == ScaleXYZ do
(
cont = Float_Expression
if classof obj.Scale.controller.X_Scale.controller == cont do
(
append expArr[2] obj
)
if classof obj.Scale.controller.Y_Scale.controller == cont do
(
append expArr[2] obj
)
if classof obj.Scale.controller.Z_Scale.controller == cont do
(
append expArr[2] obj
)
)
if expArr[2].count > 0 do
(
append scaleExpressionControllers expArr
)
if sprArr[2].count > 0 do
(
append scaleSpringControllers sprArr
)
)
fn RSTA_sclList obj =
(
/**
FUNCTION TO TEST IF obj HAS A SCALE LIST
CONTROLLER AND THEN SEND THAT TO BE PARSED
**/
expArr = #(obj,#())
sprArr = #(obj,#())
for i = 1 to obj.scale.controller.count do --skip 1st controller as thats the frozen one
(
if classof obj.scale.controller[i].controller == RsSpring do
(
append sprArr[2] obj
)
if classof obj.scale.controller[i].controller == ScaleXYZ do
(
cont = Float_Expression
if classof obj.scale.controller[i].X_scale.controller == cont do
(
append expArr[2] obj
)
if classof obj.scale.controller[i].Y_scale.controller == cont do
(
append expArr[2] obj
)
if classof obj.scale.controller[i].Z_scale.controller == cont do
(
append expArr[2] obj
)
)
)
if expArr[2].count > 0 do
(
append scaleExpressionControllers expArr
)
if sprArr[2].count > 0 do
(
append scaleSpringControllers sprArr
)
)
fn RSTA_queryControllerType obj =
(
--format ("Querying controllers on "+obj.name+"\n")
if classof obj.position.controller == position_list then
(
RSTA_posList obj
)
else
(
if classof obj.position.controller == Position_XYZ do
(
RSTA_posXYZ obj
)
)
if classof obj.rotation.controller == rotation_list then
(
--format ("Rotation List found on "+obj.name+"\n")
RSTA_rotList obj
)
else
(
if classof obj.rotation.controller == Euler_XYZ do
(
--Format ("Euler XYZ found on "+obj.name+"\n")
RSTA_rotEulerXYZ obj
)
)
if classof obj.scale.controller == scale_list then
(
debugPrint ("Scale List found on "+obj.name)
RSTA_sclList obj
)
else
(
if classof obj.scale.controller == ScaleXYZ do
(
debugPrint ("Scale XYZ found on "+obj.name)
RSTA_sclXYZ obj
)
)
)
fn RSTA_expressionCostQuery =
(
for obj in objects do
(
RSTA_queryControllerType obj
)
--
-- RSTA_queryControllerType $MH_BreatheBone
totalPosExpressionCount = 0
totalPosSpringCount = 0
totalRotExpressionCount = 0
totalRotSpringCount = 0
totalRotLookAtCount = 0
totalScaleExpressionCount = 0
totalScaleSpringCount = 0
if posExpressionControllers[1] != undefined do
(
for obj = 1 to posExpressionControllers.count do
(
format (posExpressionControllers[obj][1].name+" has "+(posExpressionControllers[obj][2].count as string)+" position Expression controllers.\n")
totalPosExpressionCount = totalPosExpressionCount + posExpressionControllers[obj][2].count
)
)
if posSpringControllers[1] != undefined do
(
for obj = 1 to posSpringControllers.count do
(
format (posSpringControllers[obj][1].name+" has "+(posSpringControllers[obj][2].count as string)+" position Spring controllers.\n")
totalPosSpringCount = totalPosSpringCount + posSpringControllers[obj][2].count
)
)
-----
if rotExpressionControllers[1] != undefined do
(
for obj = 1 to rotExpressionControllers.count do
(
format (rotExpressionControllers[obj][1].name+" has "+(rotExpressionControllers[obj][2].count as string)+" rotation Expression controllers.\n")
totalRotExpressionCount = totalRotExpressionCount + rotExpressionControllers[obj][2].count
)
)
if rotSpringControllers[1] != undefined do
(
for obj = 1 to rotSpringControllers.count do
(
format (rotSpringControllers[obj][1].name+" has "+(rotSpringControllers[obj][2].count as string)+" rotation Spring controllers.\n")
totalRotSpringCount = totalRotSpringCount + rotSpringControllers[obj][2].count
)
)
if rotLookAtControllers[1] != undefined do
(
for obj = 1 to rotLookAtControllers.count do
(
format (rotLookAtControllers[obj][1].name+" has "+(rotLookAtControllers[obj][2].count as string)+" rotation LookAt controllers.\n")
totalRotLookAtCount = totalRotLookAtCount + rotLookAtControllers[obj][2].count
)
)
------
if scaleExpressionControllers[1] != undefined do
(
for obj = 1 to scaleExpressionControllers.count do
(
format (scaleExpressionControllers[obj][1].name+" has "+(scaleExpressionControllers[obj][2].count as string)+" scale Expression controllers.\n")
totalScaleExpressionCount = totalScaleExpressionCount + scaleExpressionControllers[obj][2].count
)
)
if scaleSpringControllers[1] != undefined do
(
for obj = 1 to scaleSpringControllers.count do
(
format (scaleSpringControllers[obj][1].name+" has "+(scaleSpringControllers[obj][2].count as string)+" scale Spring controllers.\n")
totalScaleSpringCount = totalScaleSpringCount + scaleSpringControllers[obj][2].count
)
)
format "------------------------------\n"
thisName = maxfileName
format (thisName+"\n")
format ("total Position Expression Count = "+(totalPosExpressionCount as string)+"\n")
format ("total Position Spring Count = "+(totalPosSpringCount as string)+"\n")
format ("total Rotation Expression Count = "+(totalRotExpressionCount as string)+"\n")
format ("total Rotation Spring Count = "+(totalRotSpringCount as string)+"\n")
format ("total Rotation LookAt Count = "+(totalRotLookAtCount as string)+"\n")
format ("total Scale Expression Count = "+(totalScaleExpressionCount as string)+"\n")
format ("total Scale Spring Count = "+(totalScaleSpringCount as string)+"\n")
)
RSTA_expressionCostQuery()