def intersect_tris(self, segment): def ray_intersect_octree_rec(node, ray, sc): ret = [] if node.bb.intersect(ray): if not node.childs: for t in node.faces: v1 = sc.points[t[0]] v2 = sc.points[t[1]] v3 = sc.points[t[2]] intersection = rayIntersectsTriangle(ray[0], ray[1], v1, v2, v3) # print_tri( v1, v2, v3 ) # print 'hit ?', intersection if intersection: ret.append( (t, intersection) ) for child in node.childs: ret.extend( ray_intersect_octree_rec(child, ray, sc) ) return ret ray = build_ray(segment) return ray_intersect_octree_rec(self.root, ray, self.root.sc)
def intersect_triangle(self, face, verts): return self.intersect( build_ray( (verts[face[0]], verts[face[1]]) ) ) or \ self.intersect( build_ray( (verts[face[1]], verts[face[2]]) ) ) or \ self.intersect( build_ray( (verts[face[2]], verts[face[0]]) ) )