Exemple #1
0
    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])
Exemple #2
0
 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)
Exemple #3
0
    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])
Exemple #4
0
 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])
Exemple #5
0
    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])    
Exemple #6
0
 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)