コード例 #1
0
        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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }