import numpy as np class Solid(object): def __init__(self, id, mesh, rotation=np.identity(3), displacement=(0,0,0), material1=None, material2=None, surface1=None, surface2=None, color=0xffffffff): self.id = id self.mesh = mesh if rotation.shape != (3,3): raise ValueError('shape mismatch') self.rotation = rotation.astype(np.float32) displacement = np.asarray(displacement, dtype=np.float32) if displacement.shape != (3,): raise ValueError('shape mismatch') self.displacement = displacement if np.iterable(material1): if len(material1) != len(mesh): raise ValueError('shape mismatch') self.material1 = np.array(material1, dtype=np.object) else: self.material1 = np.tile(material1, len(self.mesh)) if np.iterable(material2): if len(material2) != len(mesh): raise ValueError('shape mismatch') self.material2 = np.array(material2, dtype=np.object) else: self.material2 = np.tile(material2, len(self.mesh)) if np.iterable(surface1): if len(surface1) != len(mesh): raise ValueError('shape mismatch') self.surface1 = np.array(surface1, dtype=np.object) else: self.surface1 = np.tile(surface1, len(self.mesh)) if np.iterable(surface2): if len(surface2) != len(mesh): raise ValueError('shape mismatch') self.surface2 = np.array(surface2, dtype=np.object) else: self.surface2 = np.tile(surface2, len(self.mesh)) if np.iterable(color): if len(color) != len(mesh): raise ValueError('shape mismatch') self.color = np.array(color, dtype=np.uint32) else: self.color = np.tile(color, len(self.mesh)) def __len__(self): return len(self.mesh)