Rotating Target
This example provides information on how to rotate a target around different axes by a specified angle using the SetRelativeTransform(Matrix4, Matrix4) method. To use this example, you need to pass an RsTarget object, a RotateAxis object, and a double value (the angle in degrees).
Solution
Based on the RotateAxis and angleInDegree parameter values, create a Vector3 object.
// Create a Vector3 object to represent the rotation vector // The rotation vector is determined based on the RotateAxis and angleInDegree parameters Vector3 rotationVector = new Vector3(); switch (Convert.ToInt32(value)) { // Set rotation around the X axis case 0: rotationVector = new Vector3(agnleInRad, 0, 0); break; // Set rotation around the Y axis case 1: rotationVector = new Vector3(0, agnleInRad, 0); break; // Set rotation around the Z axis case 2: rotationVector = new Vector3(0, 0, agnleInRad); break; }
Create a Matrix4 object that has zero translation (x = y = z = 0) and uses the rotationVector for rotation.
Note
This object value will be used to rotate the target without transforming it.
// Create a Matrix4 object for the new rotation matrix // This matrix has zero translation (x=y=z=0) and applies the rotation specified by the rotationVector Matrix4 newRotationMatrix = new Matrix4(new Vector3(), rotationVector);
Use the SetRelativeTransform method to set the target's transformation to the new rotation matrix, relative to its own local matrix.
// Set target transformation to newRotationMatrix relative to its own local matrix. target.Transform.SetRelativeTransform(target.Transform.Matrix, newRotationMatrix);
Example
This example provides information on rotating target around different axis by an angle.
enum RotateAxis : int
{ X = 0,
Y = 1,
Z = 2
};
private static void RotateTargetRelativeToAxis(RsTarget target, RotateAxis value, double angleInDegree)
{
Project.UndoContext.BeginUndoStep("Rotate Target");
try
{
// Convert the angle from degrees to radians
double agnleInRad = Globals.DegToRad(angleInDegree);
// Create a Vector3 object to represent the rotation vector
// The rotation vector is determined based on the RotateAxis and angleInDegree parameters
Vector3 rotationVector = new Vector3();
switch (Convert.ToInt32(value))
{
// Set rotation around the X axis
case 0:
rotationVector = new Vector3(agnleInRad, 0, 0);
break;
// Set rotation around the Y axis
case 1:
rotationVector = new Vector3(0, agnleInRad, 0);
break;
// Set rotation around the Z axis
case 2:
rotationVector = new Vector3(0, 0, agnleInRad);
break;
}
// Create a Matrix4 object for the new rotation matrix
// This matrix has zero translation (x=y=z=0) and applies the rotation specified by the rotationVector
Matrix4 newRotationMatrix = new Matrix4(new Vector3(), rotationVector);
// Set target transformation to newRotationMatrix relative to its own local matrix.
target.Transform.SetRelativeTransform(target.Transform.Matrix, newRotationMatrix);
}
catch
{
Project.UndoContext.CancelUndoStep(CancelUndoStepType.Rollback);
throw;
}
finally
{
Project.UndoContext.EndUndoStep();
}
}
Required Namespaces
ABB.Robotics.RobotStudio.Stations