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