# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: blickfeld/base/geometry/axis.proto, blickfeld/base/geometry/pose.proto, blickfeld/base/geometry/quaternion.proto, blickfeld/base/geometry/shape.proto, blickfeld/base/geometry/transform.proto, blickfeld/base/geometry/vector3.proto
# plugin: python-betterproto
from dataclasses import dataclass

import blickfeld_qb2.betterproto as betterproto
import blickfeld_qb2.betterproto.lib.google.protobuf as betterproto_lib_google_protobuf


class AxisType(betterproto.Enum):
    """Type of the axis."""

    TYPE_UNSPECIFIED = 0
    """The unspecified axis."""

    TYPE_X = 1
    """The x axix."""

    TYPE_Y = 2
    """The y axis."""

    TYPE_Z = 3
    """The z axis."""


@dataclass(eq=False, repr=False)
class Quaternion(betterproto.Message):
    """A quaternion for representing an orientation."""

    x: float = betterproto.float_field(1)
    """The X component."""

    y: float = betterproto.float_field(2)
    """The Y component."""

    z: float = betterproto.float_field(3)
    """The Z component."""

    w: float = betterproto.float_field(4)
    """The W component (real part)."""


@dataclass(eq=False, repr=False)
class Vector3(betterproto.Message):
    """A vector with three components to represent a 3D coordiante."""

    x: float = betterproto.float_field(1)
    """The X component."""

    y: float = betterproto.float_field(2)
    """The Y component."""

    z: float = betterproto.float_field(3)
    """The Z component."""


@dataclass(eq=False, repr=False)
class Pose(betterproto.Message):
    """A pose, consisting of a vector3 (3D coordinate) and a quaternion."""

    position: "Vector3" = betterproto.message_field(1)
    """A vector representing the position."""

    orientation: "Quaternion" = betterproto.message_field(2)
    """A quaternion representing the orientation."""


@dataclass(eq=False, repr=False)
class Shape(betterproto.Message):
    """A shape that represent a geometrical figure."""

    pose: "Pose" = betterproto.message_field(1)
    """
    Position and orientation of the center of the bounding box enclosing the
    shape.
    """

    box: "ShapeBox" = betterproto.message_field(2, group="shape_type")
    """Box shape"""


@dataclass(eq=False, repr=False)
class ShapeBox(betterproto.Message):
    """A 3 dimensional box."""

    dimensions: "Vector3" = betterproto.message_field(1)
    """The X, Y and Z dimension."""


@dataclass(eq=False, repr=False)
class Transform(betterproto.Message):
    """A rigid transformation"""

    translation: "Vector3" = betterproto.message_field(1)
    """A vector representing the position."""

    rotation: "Quaternion" = betterproto.message_field(2)
    """A quaternion representing the rotation."""


@dataclass(eq=False, repr=False)
class Axis(betterproto.Message):
    """Axis of a coordinate system."""

    type: "AxisType" = betterproto.enum_field(1)
    """The selected axis."""
