private static Vector3 GetZDir(ObjectAnnotation objectAnnotation, bool isXReversed, bool isYReversed, bool isInverted) { var points = objectAnnotation.Keypoints; var v1 = GetDirection(points[2].Point3D, points[1].Point3D, isXReversed, isYReversed, isInverted).normalized; var v2 = GetDirection(points[4].Point3D, points[3].Point3D, isXReversed, isYReversed, isInverted).normalized; var v3 = GetDirection(points[6].Point3D, points[5].Point3D, isXReversed, isYReversed, isInverted).normalized; var v4 = GetDirection(points[8].Point3D, points[7].Point3D, isXReversed, isYReversed, isInverted).normalized; return((v1 + v2 + v3 + v4) / 4); }
public static Quaternion GetApproximateQuaternion(ObjectAnnotation objectAnnotation, RotationAngle imageRotation = RotationAngle.Rotation0, bool isMirrored = false) { var isInverted = IsInverted(imageRotation); var isXReversed = IsXReversed(imageRotation, isMirrored); var isYReversed = IsYReversed(imageRotation, isMirrored); var forward = GetZDir(objectAnnotation, isXReversed, isYReversed, isInverted); var upward = GetYDir(objectAnnotation, isXReversed, isYReversed, isInverted); return(Quaternion.LookRotation(forward, upward)); }
public static (Vector3, Vector3, Vector3) GetDirections(ObjectAnnotation objectAnnotation, RotationAngle imageRotation = RotationAngle.Rotation0, bool isMirrored = false) { var isInverted = IsInverted(imageRotation); var isXReversed = IsXReversed(imageRotation, isMirrored); var isYReversed = IsYReversed(imageRotation, isMirrored); var scale = objectAnnotation.Scale; var xDir = scale[0] * GetXDir(objectAnnotation, isXReversed, isYReversed, isInverted); var yDir = scale[1] * GetYDir(objectAnnotation, isXReversed, isYReversed, isInverted); var zDir = scale[2] * GetZDir(objectAnnotation, isXReversed, isYReversed, isInverted); return(xDir, yDir, zDir); }
public void Draw(ObjectAnnotation target, Vector3 position, float arrowLengthScale = 1.0f, bool visualizeZ = true) { origin = position; var isInverted = CameraCoordinate.IsInverted(rotationAngle); var(xScale, yScale) = isInverted ? (target.Scale[1], target.Scale[0]) : (target.Scale[0], target.Scale[1]); var zScale = target.Scale[2]; // convert from right-handed to left-handed var isXReversed = CameraCoordinate.IsXReversed(rotationAngle, isMirrored); var isYReversed = CameraCoordinate.IsYReversed(rotationAngle, isMirrored); var rotation = target.Rotation; var xDir = GetDirection(rotation[0], rotation[3], rotation[6], isXReversed, isYReversed, isInverted); var yDir = GetDirection(rotation[1], rotation[4], rotation[7], isXReversed, isYReversed, isInverted); var zDir = GetDirection(rotation[2], rotation[5], rotation[8], isXReversed, isYReversed, isInverted); DrawArrow(xArrow, xDir, (isMirrored ? -1 : 1) * arrowLengthScale * xScale, visualizeZ); DrawArrow(yArrow, yDir, arrowLengthScale * yScale, visualizeZ); DrawArrow(zArrow, zDir, -arrowLengthScale * zScale, visualizeZ); }