Hi,
You mentioned that you are having a problem with the rotation operation and that you have looked at similar problems on forums but have not been able to find a solution. I am here to help you solve your problem.
Problem:
You want the actor to rotate around its own axis in a desired way.
Attempted Methods:
- Transformation:
- You have used the RotateX, RotateY, and RotateZ functions with values of 45, 60, and 90 degrees, respectively.
- When you set the Y, Z, and X values to 0 in sequence, the actor does not return to its original state.
cur_angles = actor.get_rotate_angles()
transform = vtkTransform()
if axis == "x":
transform.RotateX(-cur_angles[0])
transform.RotateX(angle)
cur_angles[0] = angle
if axis == "y":
transform.RotateY(-cur_angles[1])
transform.RotateY(angle)
cur_angles[1] = angle
if axis == "z":
transform.RotateZ(-cur_angles[2])
transform.RotateZ(angle)
cur_angles[2] = angle
actor.set_rotate_angles(angles=cur_angles)
- Orientation:
- In this method, the rotations made in sequence affect each other.
current_orientation = actor.GetOrientation()
if axis == "x":
actor.SetOrientation(angle, current_orientation[1], current_orientation[2])
if axis == "y":
actor.SetOrientation(current_orientation[0], angle, current_orientation[2])
if axis == "z":
actor.SetOrientation(current_orientation[0], current_orientation[1], angle)
- Quaternion:
- Here, I can perform the rotation as desired. However, I can’t revert it back to its original state. When I try to rotate it by 45 degrees, it rotates by around 2-3 degrees instead.
transform = vtkTransform()
quat = vtkQuaterniond()
radian_angle = np.deg2rad(angle)
if axis == "x":
quat.SetRotationAngleAndAxis(radian_angle, [1, 0, 0])
if axis == "y":
quat.SetRotationAngleAndAxis(radian_angle, [0, 1, 0])
if axis == "z":
quat.SetRotationAngleAndAxis(radian_angle, [0, 0, 1])
transform.RotateWXYZ(quat.GetW(), quat.GetX(), quat.GetY(), quat.GetZ())
i want to make this video rotate operation