Rotation of one object relative to another
Hello . I'm trying to rotate one object relative to another. But it's not like it doesn't work so that when the slider changes, it's smooth.
In 1 case, I managed to make it rotate, but there it constantly adds value when the slider changes.
In 2 cases, I managed to make a smooth rotation, but for some reason it rotates relative to 0 coordinates.
Help solve the problem.
try (destroydialog Transformer) catch() rollout Transformer "Transformer" width:200 ( local nodeRoot local originTM = #() local nodeArray = #() group "Position: " ( dotNetControl pos_x "System.Windows.Forms.TrackBar" pos:[6,26] width:188 height:25 dotNetControl pos_y "System.Windows.Forms.TrackBar" pos:[6,53] width:188 height:25 dotNetControl pos_z "System.Windows.Forms.TrackBar" pos:[6,80] width:188 height:25 ) group "Position: " ( dotNetControl rot_x "System.Windows.Forms.TrackBar" pos:[6,138] width:188 height:25 dotNetControl rot_y "System.Windows.Forms.TrackBar" pos:[6,165] width:188 height:25 dotNetControl rot_z "System.Windows.Forms.TrackBar" pos:[6,192] width:188 height:25 ) button hold_tm_bt "Hold Transform" width:190 button reset_tm_bt "Zero Offset" width:190 fn transform_Relatively nodeArray node_root rot_x:0 rot_y:0 rot_z:0 = ( local obj_Trans = #() if nodeArr.count > 0 do ( for i = 1 to nodeArr.count do ( offset_rot = (eulerangles rot_x rot_y rot_z) node_trans = nodeArray[i].transform in coordsys (transmatrix node_root.transform.pos) nodeArray[i].rotation *= offset_rot ) ) ) on rot_z MouseUp do ( print "UP" ) on rot_z ValueChanged val do ( nodeArray = selection as array Transform_Relatively nodeArray nodeRoot rot_x:rot_x.value rot_y:rot_y.value rot_z:rot_z.value ) on hold_tm_bt pressed do if isvalidnode (node = selection[1]) do ( nodeArray = selection as array Transform_Relatively nodeArray nodeRoot rot_x:rot_x.value rot_y:rot_y.value rot_z:rot_y.value ) on reset_tm_bt pressed do ( nodeRoot = selection[1] ) ) createdialog Transformer !REG3XP1!> try (destroydialog Transformer) catch() struct ANIM_DATA (bone_name, bone_transform) rollout Transformer "Transformer" width:200 ( local nodeRoot local originTM = #() local nodeArray = #() group "Position: " ( dotNetControl pos_x "System.Windows.Forms.TrackBar" pos:[6,26] width:188 height:25 dotNetControl pos_y "System.Windows.Forms.TrackBar" pos:[6,53] width:188 height:25 dotNetControl pos_z "System.Windows.Forms.TrackBar" pos:[6,80] width:188 height:25 ) group "Position: " ( dotNetControl rot_x "System.Windows.Forms.TrackBar" pos:[6,138] width:188 height:25 dotNetControl rot_y "System.Windows.Forms.TrackBar" pos:[6,165] width:188 height:25 dotNetControl rot_z "System.Windows.Forms.TrackBar" pos:[6,192] width:188 height:25 ) button hold_tm_bt "Hold Transform" width:190 button reset_tm_bt "Zero Offset" width:190 fn transform_Relatively nodeArray originTM node_root rot_x:0 rot_y:0 rot_z:0 = ( local obj_Trans = #() if nodeArray.count > 0 do ( for i = 1 to nodeArray.count do ( offset_rot = (eulerangles rot_x rot_y rot_z) as matrix3 node_trans = originTM[i] in coordsys (transmatrix node_root.transform.pos) node_trans *= offset_rot --in coordsys node_root ( node_trans *= offset_rot ) append obj_Trans ( ANIM_DATA nodeArray[i].name node_trans ) ) ) for data in obj_Trans do ( obj = getNodeByName data.bone_name if obj == undefined do continue --add world transform obj.transform = data.bone_transform ) ) on rot_z MouseDown do ( originTM = #() if isvalidnode (node = selection[1]) do ( nodeArray = mcBiped.sort_NodeByHeirarchy() for i = 1 to nodeArr.count do ( append originTM nodeArray[i].transform ) ) ) on rot_z MouseUp do ( originTM = #() nodeArray = mcBiped.sort_NodeByHeirarchy() for i = 1 to nodeArr.count do ( append originTM nodeArray[i].transform ) rot_z.value = 0 ) on rot_z ValueChanged val do ( Transform_Relatively nodeArray originTM nodeRoot rot_x:rot_x.value rot_y:rot_y.value rot_z:rot_z.value ) on hold_tm_bt pressed do if isvalidnode (node = selection[1]) do ( nodeArray = mcBiped.sort_NodeByHeirarchy() originTM = #() nodeArray = mcBiped.sort_NodeByHeirarchy() for i = 1 to nodeArr.count do ( append originTM nodeArray[i].transform ) Transform_Relatively nodeArray originTM nodeRoot rot_x:rot_x.value rot_y:rot_y.value rot_z:45 ) on reset_tm_bt pressed do ( nodeRoot = selection[1] ) ) createdialog Transformer [geshifilter-code]
[/geshifilter-code]