import numpy as np class Geometry: def __init__( self, color: np.ndarray = np.array([0.5, 0.5, 0.5, 1.0]), visual: bool = True, collision: bool = True, ): self.color: np.ndarray = color self.visual: bool = visual self.collision: bool = collision self.visual_properties: dict = {} self.collision_properties: dict = {} def is_type(self, what: str): if what == "visual": return self.visual elif what == "collision": return self.collision return False class Mesh(Geometry): def __init__( self, filename: str, color: np.ndarray = np.array([0.5, 0.5, 0.5, 1.0]), visual: bool = True, collision: bool = True, ): super().__init__(color, visual, collision) self.filename: str = filename class Shape(Geometry): def __init__( self, T_part_shape: np.ndarray, color: np.ndarray = np.array([0.5, 0.5, 0.5, 1.0]), visual: bool = True, collision: bool = True, ): super().__init__(color, visual, collision) self.T_part_shape: np.ndarray = T_part_shape class Box(Shape): def __init__( self, T_part_shape: np.ndarray, size: np.ndarray, color: np.ndarray = np.array([0.5, 0.5, 0.5, 1.0]), visual: bool = True, collision: bool = True, ): super().__init__(T_part_shape, color, visual, collision) self.size: np.ndarray = size class Cylinder(Shape): def __init__( self, T_part_shape: np.ndarray, length: float, radius: float, color: np.ndarray = np.array([0.5, 0.5, 0.5, 1.0]), visual: bool = True, collision: bool = True, ): super().__init__(T_part_shape, color, visual, collision) self.length: float = length self.radius: float = radius class Sphere(Shape): def __init__( self, T_part_shape: np.ndarray, radius: float, color: np.ndarray = np.array([0.5, 0.5, 0.5, 1.0]), visual: bool = True, collision: bool = True, ): super().__init__(T_part_shape, color, visual, collision) self.radius: float = radius