Source code for pyrobopath.collision_detection.collision_model

from __future__ import annotations
from typing import List
from abc import ABC, abstractmethod

from pyrobopath.tools.types import R3, R3x3
from pyrobopath.toolpath.path.transform import Transform


[docs] class CollisionModel(ABC): "A collision model is used by a collision checker" def __init__(self): self._transform = Transform() @property def translation(self) -> R3: return self._transform.t @translation.setter def translation(self, value: R3): self._transform.t = value @property def rotation(self) -> R3x3: return self._transform.R @rotation.setter def rotation(self, value: R3x3): self._transform.R = value @property def transform(self): return self._transform @transform.setter def transform(self, value: Transform): self._transform = value @abstractmethod def in_collision(self, other: CollisionModel) -> bool: raise NotImplementedError
[docs] class CollisionGroup(object): def __init__(self, models: List[CollisionModel]): self.models = models def in_collision(self) -> bool: for i in range(len(self.models) - 1): for j in range(i + 1, len(self.models)): col = self.models[i].in_collision(self.models[j]) if col: return True return False