def intersection(self, ray_origin, ray_dir): v = [Point(*self.matrix.transform(v)).numpy() for v in self.m] I = zpr.ray_triangle(ray_origin, ray_dir, (v[0], v[1], v[2])) if (I is None) and (len(v) > 3): I = zpr.ray_triangle(ray_origin, ray_dir, (v[2], v[3], v[0])) if I is None: return () return ((Point(*I), self),)
def pick(self, ray): for triangle in self.triangles: I = zpr.ray_triangle(ray[0], ray[1], triangle) if I is not None: x, y, z = I assert z == 0 return Point(x, y)