Source code for brom_drake.file_manipulation.urdf.shapes.box

from dataclasses import dataclass
import numpy as np
from typing import Union
import xml.etree.ElementTree as ET

# Internal Import
from .shape_definition import ShapeDefinition, ShapeEnum

[docs] @dataclass class BoxDefinition(ShapeDefinition): """ *Description* Defines a box shape as per URDF specifications. *Attributes* size: Union[float, list, tuple, np.ndarray] The size of the box along the x, y, and z axes. If this is a float, it is assumed to be a cube with equal sides. """ size: Union[float, list, tuple, np.ndarray]
[docs] def add_geometry_to_element(self, target_element: ET.Element) -> ET.Element: """ *Description* Adds the box geometry as a sub-element to the given target element. This method is an implementation of the abstract method defined in the ShapeDefinition base class. *Parameters* target_element: xml.etree.ElementTree.Element The target XML element to which the box geometry will be added. *Returns* xml.etree.ElementTree.Element The element `target_element` with the box geometry added as a sub-element. """ # Setup # Convert the size to a numpy array if isinstance(self.size, (list, tuple, np.ndarray)): self.size = np.array(self.size) elif isinstance(self.size, float): self.size = np.array([self.size, self.size, self.size]) else: raise ValueError(f"Size {self.size} (type \"{type(self.size)}\") not supported.") # Return the element return ET.SubElement( target_element, "box", {"size": f"{self.size[0]} {self.size[1]} {self.size[2]}"}, )
@property def type(self) -> ShapeEnum: """ *Description* Always returns ShapeEnum.kBox to indicate this is a box shape. This method is an implementation of the abstract method defined in the ShapeDefinition base class. *Returns* ShapeEnum The shape type, which is always ShapeEnum.kBox for this class. """ return ShapeEnum.kBox