'/// Ik2FkPlot: ver 1.0 for XSI 3.5+
'/// By Homam Bahnassi - In|Framez 2003
'--------------------------------------

set oSelection = CreateObject("XSI.Collection")
set oSelection = GetValue("SelectionList")

if oSelection.Count <> 0 then
	PickObjects oPickedObjects
	Ik2FkPlot oSelection,oPickedObjects
else
	logmessage "Ik2FkPlot: Invaled selection"
end if

sub Ik2FkPlot(oObjects2Plot, oAffectingObjects)

on error resume next
for each oAffectingObj in oAffectingObjects
set XPosSrcKeys = oAffectingObj.Kinematics.Local.Parameters( "PosX" ).Source.Keys

for each XPosSrcKey in XPosSrcKeys
	Frame = XSrcKey.Time
	setValue "PlayControl.Current", Frame
	for each oObj2Plot in oObjects2Plot
		CurrentRotXValue = GetValue (oObj2Plot & ".kine.local.ori.euler.rotx")
		CurrentRotYValue = GetValue (oObj2Plot & ".kine.local.ori.euler.roty")
		CurrentRotZValue = GetValue (oObj2Plot & ".kine.local.ori.euler.rotz")
		SaveKey oObj2Plot & ".kine.local.rotx",Frame ,CurrentRotXValue
		SaveKey oObj2Plot & ".kine.local.roty",Frame ,CurrentRotYValue
		SaveKey oObj2Plot & ".kine.local.rotz",Frame ,CurrentRotZValue
	next
next


set YPosSrcKeys = oAffectingObj.Kinematics.Local.Parameters( "PosY" ).Source.Keys

for each YPosSrcKey in YPosSrcKeys
	Frame = YPosSrcKey.Time
	setValue "PlayControl.Current", Frame
	for each oObj2Plot in oObjects2Plot
		CurrentRotXValue = GetValue (oObj2Plot & ".kine.local.ori.euler.rotx")
		CurrentRotYValue = GetValue (oObj2Plot & ".kine.local.ori.euler.roty")
		CurrentRotZValue = GetValue (oObj2Plot & ".kine.local.ori.euler.rotz")
		SaveKey oObj2Plot & ".kine.local.rotx",Frame ,CurrentRotXValue
		SaveKey oObj2Plot & ".kine.local.roty",Frame ,CurrentRotYValue
		SaveKey oObj2Plot & ".kine.local.rotz",Frame ,CurrentRotZValue
	next
next

set ZPosSrcKeys = oAffectingObj.Kinematics.Local.Parameters( "PosZ" ).Source.Keys

for each ZPosSrcKey in ZPosSrcKeys
	Frame = ZPosSrcKey.Time
	setValue "PlayControl.Current", Frame
	for each oObj2Plot in oObjects2Plot
		CurrentRotXValue = GetValue (oObj2Plot & ".kine.local.ori.euler.rotx")
		CurrentRotYValue = GetValue (oObj2Plot & ".kine.local.ori.euler.roty")
		CurrentRotZValue = GetValue (oObj2Plot & ".kine.local.ori.euler.rotz")
		SaveKey oObj2Plot & ".kine.local.rotx",Frame ,CurrentRotXValue
		SaveKey oObj2Plot & ".kine.local.roty",Frame ,CurrentRotYValue
		SaveKey oObj2Plot & ".kine.local.rotz",Frame ,CurrentRotZValue
	next
next

'-------------------------
set XRotSrcKeys = oAffectingObj.Kinematics.Local.Parameters( "RotX" ).Source.Keys

for each XRotSrcKey in XRotSrcKeys
	Frame = XRotSrcKey.Time
	setValue "PlayControl.Current", Frame
	for each oObj2Plot in oObjects2Plot
		CurrentRotXValue = GetValue (oObj2Plot & ".kine.local.ori.euler.rotx")
		CurrentRotYValue = GetValue (oObj2Plot & ".kine.local.ori.euler.roty")
		CurrentRotZValue = GetValue (oObj2Plot & ".kine.local.ori.euler.rotz")
		SaveKey oObj2Plot & ".kine.local.rotx",Frame ,CurrentRotXValue
		SaveKey oObj2Plot & ".kine.local.roty",Frame ,CurrentRotYValue
		SaveKey oObj2Plot & ".kine.local.rotz",Frame ,CurrentRotZValue
	next
next

set YRotSrcKeys = oAffectingObj.Kinematics.Local.Parameters( "RotY" ).Source.Keys

for each YRotSrcKey in YRotSrcKeys
	Frame = YRotSrcKey.Time
	setValue "PlayControl.Current", Frame
	for each oObj2Plot in oObjects2Plot
		CurrentRotXValue = GetValue (oObj2Plot & ".kine.local.ori.euler.rotx")
		CurrentRotYValue = GetValue (oObj2Plot & ".kine.local.ori.euler.roty")
		CurrentRotZValue = GetValue (oObj2Plot & ".kine.local.ori.euler.rotz")
		SaveKey oObj2Plot & ".kine.local.rotx",Frame ,CurrentRotXValue
		SaveKey oObj2Plot & ".kine.local.roty",Frame ,CurrentRotYValue
		SaveKey oObj2Plot & ".kine.local.rotz",Frame ,CurrentRotZValue
	next
next

set ZRotSrcKeys = oAffectingObj.Kinematics.Local.Parameters( "RotZ" ).Source.Keys

for each ZRotSrcKey in ZRotSrcKeys
	Frame = ZRotSrcKey.Time
	setValue "PlayControl.Current", Frame
	for each oObj2Plot in oObjects2Plot
		CurrentRotXValue = GetValue (oObj2Plot & ".kine.local.ori.euler.rotx")
		CurrentRotYValue = GetValue (oObj2Plot & ".kine.local.ori.euler.roty")
		CurrentRotZValue = GetValue (oObj2Plot & ".kine.local.ori.euler.rotz")
		SaveKey oObj2Plot & ".kine.local.rotx",Frame ,CurrentRotXValue
		SaveKey oObj2Plot & ".kine.local.roty",Frame ,CurrentRotYValue
		SaveKey oObj2Plot & ".kine.local.rotz",Frame ,CurrentRotZValue
	next
next

next
end sub

sub PickObjects(oReturnPickObjects)
	set oReturnPickObjects =  CreateObject("XSI.Collection")
	call PickElement( "object", "Select Source", "Select Source",PickedElement, ButtonPressed )
	oReturnPickObjects.Add PickedElement
	set oDisplayProp = PickedElement.Properties.item("display")
	SIMakeLocal oDisplayProp
	setValue oDisplayProp & ".wirecol", 15	
	logmessage PickedElement & " Added to list..."
	while ButtonPressed <> 0
		PickElement "object", "Select a Source", "Select a Source",PickedElement, ButtonPressed
		if ButtonPressed = 2 then
			oReturnPickObjects.Remove PickedElement
			set oDisplayProp = PickedElement.Properties.item("display")
			DeleteObj oDisplayProp
			logmessage PickedElement & " Removed from list..."
		elseif ButtonPressed = 1 then
			oReturnPickObjects.Add PickedElement
			set oDisplayProp = PickedElement.Properties.item("display")
			SIMakeLocal oDisplayProp
			setValue oDisplayProp & ".wirecol", 15
			logmessage PickedElement & " Added to list..."
		end if
	wend
	for each oPickedObject in oReturnPickObjects
		set oDisplayProp = oPickedObject.Properties.item("display")
		DeleteObj oDisplayProp
	next
end sub