def process(self): L, N, I, D, S = self.outputs RL = [] if not any([s.is_linked for s in self.outputs]): return vert_in, face_in, start_in, direction_in = C( [sock.sv_get(deepcopy=False) for sock in self.inputs]) for bvh, st, di in zip(*[ self.svmesh_to_bvh_lists(vert_in, face_in, self.all_triangles, self.safe_check), start_in, direction_in ]): st, di = C([st, di]) RL.append([bvh.ray_cast(i, i2) for i, i2 in zip(st, di)]) if L.is_linked: L.sv_set([[r[0][:] if r[0] else (0, 0, 0) for r in L] for L in RL]) if N.is_linked: N.sv_set([[r[1][:] if r[1] else (0, 0, 0) for r in L] for L in RL]) if I.is_linked: I.sv_set([[r[2] if r[2] else -1 for r in L] for L in RL]) if D.is_linked: D.sv_set([[r[3] if r[3] else 0 for r in L] for L in RL]) if S.is_linked: S.sv_set([[r[2] != None for r in L] for L in RL])
def svmesh_to_bvh_lists(v, f, all_tris, safe_check): for vertices, polygons in zip(*C([v, f])): yield bvh_tree_from_polygons(vertices, polygons, all_triangles=all_tris, epsilon=0.0, safe_check=safe_check)
def process(self): L, N, I, D, S = self.outputs RL = [] # 添加max_distance-md-m vert_in, face_in, max_distance, start_in, direction_in = C( [sock.sv_get() for sock in self.inputs]) for bvh, st, di, md in zip(*[ self.svmesh_to_bvh_lists(vert_in, face_in), start_in, direction_in, max_distance ]): st, di, md = C([st, di, md]) RL.append([bvh.ray_cast(i, i2, m) for i, i2, m in zip(st, di, md)]) if L.is_linked: L.sv_set([[r[0][:] if r[0] else (0, 0, 0) for r in L] for L in RL]) if N.is_linked: N.sv_set([[r[1][:] if r[1] else (0, 0, 0) for r in L] for L in RL]) if I.is_linked: I.sv_set([[r[2] if r[2] else -1 for r in L] for L in RL]) if D.is_linked: D.sv_set([[r[3] if r[3] else 0 for r in L] for L in RL]) if S.is_linked: S.sv_set([[r[2] != None for r in L] for L in RL])
def process(self): L,N,I,D = self.outputs bvhl, st, di = self.inputs RL = [] st,di = C([st.sv_get()[0], di.sv_get()[0]]) for bvh in bvhl.sv_get(): RL.append([bvh.ray_cast(i, i2) for i, i2 in zip(st,di)]) if L.is_linked: L.sv_set([[r[0][:] if r[0] != None else (0,0,0) for r in L] for L in RL]) if N.is_linked: N.sv_set([[r[1][:] if r[1] != None else (0,0,0) for r in L] for L in RL]) if I.is_linked: I.sv_set([[r[2] if r[2] != None else -1 for r in L] for L in RL]) if D.is_linked: D.sv_set([[r[3] if r[3] != None else 0 for r in L] for L in RL])
def process(self): vert_sock, face_sock, start_sock, direction_sock = self.inputs L, N, I, D, S = self.outputs RL = [] st, di = C([start_sock.sv_get()[0], direction_sock.sv_get()[0]]) for bvh in self.svmesh_to_bvh_lists(vert_sock, face_sock): RL.append([bvh.ray_cast(i, i2) for i, i2 in zip(st, di)]) if L.is_linked: L.sv_set([[r[0][:] if r[0] else (0, 0, 0) for r in L] for L in RL]) if N.is_linked: N.sv_set([[r[1][:] if r[1] else (0, 0, 0) for r in L] for L in RL]) if I.is_linked: I.sv_set([[r[2] if r[2] else -1 for r in L] for L in RL]) if D.is_linked: D.sv_set([[r[3] if r[3] else 0 for r in L] for L in RL]) if S.is_linked: S.sv_set([[r[2] != None for r in L] for L in RL])
def svmesh_to_bvh_lists(vsock, fsock): for vertices, polygons in zip(*C([vsock.sv_get(), fsock.sv_get()])): yield BVHTree.FromPolygons(vertices, polygons, all_triangles=False, epsilon=0.0)
def svmesh_to_bvh_lists(v, f): for vertices, polygons in zip(*C([v, f])): yield BVHTree.FromPolygons(vertices, polygons, all_triangles=False, epsilon=0.0)