Exemplo n.º 1
0
 def process(self):
     O, V = self.inputs
     Ov = self.outputs[0]
     Prop = self.formula
     objs = O.sv_get()
     if isinstance(objs[0], list):
         if V.is_linked:
             v = V.sv_get()
             if isinstance(v[0], list):
                 objs, v = safc(objs, v)
             else:
                 objs, v = safc(objs, [v])
             for OBL, VALL in zip(objs, v):
                 OBL, VALL = safc(OBL, VALL)
                 exec("for i, i2 in zip(OBL, VALL):\n    i." + Prop +
                      "= i2")
         elif Ov.is_linked:
             Ov.sv_set(
                 eval("[[i." + Prop + " for i in OBL] for OBL in objs]"))
         else:
             exec("for OL in objs:\n    for i in OL:\n        i." + Prop)
     else:
         if V.is_linked:
             v = V.sv_get()
             if isinstance(v[0], list):
                 v = v[0]
             objs, v = safc(objs, v)
             exec("for i, i2 in zip(objs, v):\n    i." + Prop + "= i2")
         elif Ov.is_linked:
             Ov.sv_set(eval("[i." + Prop + " for i in objs]"))
         else:
             exec("for i in objs:\n    i." + Prop)
Exemplo n.º 2
0
 def process(self):
     O, V = self.inputs
     Ov = self.outputs[0]
     Prop = self.formula
     objs = O.sv_get()
     if isinstance(objs[0], list):
         if V.is_linked:
             v = V.sv_get()
             if isinstance(v[0], list):
                 objs, v = safc(objs, v)
             else:
                 objs, v = safc(objs, [v])
             for OBL, VALL in zip(objs, v):
                 OBL, VALL = safc(OBL, VALL)
                 exec("for i, i2 in zip(OBL, VALL):\n    i."+Prop+"= i2")
         elif Ov.is_linked:
             Ov.sv_set(eval("[[i."+Prop+" for i in OBL] for OBL in objs]"))
         else:
             exec("for OL in objs:\n    for i in OL:\n        i."+Prop)
     else:
         if V.is_linked:
             v = V.sv_get()
             if isinstance(v[0], list):
                 v = v[0]
             objs, v = safc(objs, v)
             exec("for i, i2 in zip(objs, v):\n    i."+Prop+"= i2")
         elif Ov.is_linked:
             Ov.sv_set(eval("[i."+Prop+" for i in objs]"))
         else:
             exec("for i in objs:\n    i."+Prop)
Exemplo n.º 3
0
    def process(self):
        O, V, L, S = self.inputs
        outL, outV = self.outputs

        # this may not work in render mode.
        sv_depsgraph = get_sv_depsgraph()

        # listobj = [i.particle_systems.active.particles for i in O.sv_get() if i.particle_systems]
        listobj = []
        for obj in O.sv_get():
            if not obj.particle_systems:
                continue
            obj = sv_depsgraph.objects[obj.name]
            particle_systems = obj.evaluated_get(sv_depsgraph).particle_systems
            particles = particle_systems[0].particles
            listobj.append(particles)

        if V.is_linked:
            for i, i2 in zip(listobj, V.sv_get()):
                i.foreach_set('velocity', np.array(safc(i, i2)).flatten())
        if S.is_linked:
            for i, i2 in zip(listobj, S.sv_get()):
                i.foreach_set('size', safc(i, i2))
        if L.is_linked:
            for i, i2 in zip(listobj, L.sv_get()):
                i.foreach_set('location', np.array(safc(i, i2)).flatten())
        if outL.is_linked:
            if self.Filt_D:
                outL.sv_set([[i.location[:] for i in Plist if i.alive_state == 'ALIVE'] for Plist in listobj])
            else:
                outL.sv_set([[i.location[:] for i in Plist] for Plist in listobj])
        if outV.is_linked:
            outV.sv_set([[i.velocity[:] for i in Plist] for Plist in listobj])
Exemplo n.º 4
0
 def process(self):
     O, V, L, S = self.inputs
     outL, outV = self.outputs
     listobj = [
         i.particle_systems.active.particles for i in O.sv_get()
         if i.particle_systems
     ]
     if V.is_linked:
         for i, i2 in zip(listobj, V.sv_get()):
             i.foreach_set('velocity', np.array(safc(i, i2)).flatten())
     if S.is_linked:
         for i, i2 in zip(listobj, S.sv_get()):
             i.foreach_set('size', safc(i, i2))
     if L.is_linked:
         for i, i2 in zip(listobj, L.sv_get()):
             i.foreach_set('location', np.array(safc(i, i2)).flatten())
     if outL.is_linked:
         if self.Filt_D:
             outL.sv_set([[
                 i.location[:] for i in Plist if i.alive_state == 'ALIVE'
             ] for Plist in listobj])
         else:
             outL.sv_set([[i.location[:] for i in Plist]
                          for Plist in listobj])
     if outV.is_linked:
         outV.sv_set([[i.velocity[:] for i in Plist] for Plist in listobj])
Exemplo n.º 5
0
 def process(self):
     O, Vnorm = self.inputs
     objml = [ob.data for ob in O.sv_get()]
     if Vnorm.is_linked:
         if self.mode == 'per_Vert':
             for obm, norml in zip(objml, Vnorm.sv_get()):
                 obm.use_auto_smooth = True
                 obm.normals_split_custom_set_from_vertices(safc(obm.vertices[:], norml))
         else:   # per loop
             for obm, norml in zip(objml, Vnorm.sv_get()):
                 obm.use_auto_smooth = True
                 obm.normals_split_custom_set(safc(obm.loops[:], norml))
Exemplo n.º 6
0
 def process(self):
     Points, Colors = self.inputs
     obj = bpy.data.objects[self.object_ref]  # triangulate faces
     bvh = BVHTree.FromObject(obj,
                              bpy.context.scene,
                              deform=True,
                              render=False,
                              cage=False,
                              epsilon=0.0)
     point = Points.sv_get()[0]
     color = Colors.sv_get()[0]
     ran = range(3)
     image = bpy.data.images[self.image]
     width, height = image.size
     uvMap = obj.data.uv_layers[0].data
     pixels = np.array(image.pixels[:]).reshape(width, height, 4)
     for P, C in zip(point, safc(point, color)):
         loc, norm, ind, dist = bvh.find_nearest(P)
         found_poly = obj.data.polygons[ind]
         verticesIndices = found_poly.vertices
         p1, p2, p3 = [
             obj.data.vertices[verticesIndices[i]].co for i in ran
         ]
         uvMapIndices = found_poly.loop_indices
         uv1, uv2, uv3 = [uvMap[uvMapIndices[i]].uv.to_3d() for i in ran]
         V = barycentric_transform(loc, p1, p2, p3, uv1, uv2, uv3)
         Vx, Vy = int(V.x * (width - 1)), int(V.y * (height - 1))
         pixels[Vy, Vx] = C
     image.pixels = pixels.flatten().tolist()
Exemplo n.º 7
0
 def process(self):
     if not self.outputs['bmesh_list'].is_linked:
         return
     bml, val, e = self.inputs
     obj = bml.sv_get()
     v = safc(obj, val.sv_get([[1] * 12]))
     outp = []
     op = "bmesh.ops." + self.oper
     if e.is_linked:
         element = e.sv_get()
         for bm, v, e in zip(obj, v, element):
             exec(op)
             outp.append(bm.copy())
             bm.free()
     else:
         if "verts=e" in op:
             cur = "verts"
         elif "edges=e" in op:
             cur = "edges"
         elif "faces=e" in op:
             cur = "faces"
         for bm, v in zip(obj, v):
             e = getattr(bm, cur)
             exec(op)
             outp.append(bm.copy())
             bm.free()
     self.outputs['bmesh_list'].sv_set(outp)
Exemplo n.º 8
0
    def process(self):
        bmL, V, P, mask, Iterate = self.inputs
        Val = bmL.sv_get([])

        o1, o2, o3, o4 = self.outputs
        if V.is_linked:
            for v, f in zip(V.sv_get(deepcopy=False),
                            P.sv_get(deepcopy=False)):
                Val.append(bmesh_from_pydata(v, [], f))
        if mask.is_linked:
            seleg = [
                np.array(bm.verts[:])[ma]
                for bm, ma in zip(Val, mask.sv_get(deepcopy=False))
            ]
        else:
            seleg = [bm.verts for bm in Val]
        for bm, se, itera in zip(Val, seleg,
                                 safc(Val,
                                      Iterate.sv_get(deepcopy=False)[0])):
            unsubdivide(bm, verts=se, iterations=itera)
        if o1.is_linked:
            o1.sv_set([[v.co[:] for v in bm.verts] for bm in Val])
        if o2.is_linked:
            o2.sv_set([[[i.index for i in e.verts] for e in bm.edges]
                       for bm in Val])
        if o3.is_linked:
            o3.sv_set([[[i.index for i in p.verts] for p in bm.faces]
                       for bm in Val])
        if o4.is_linked:
            o4.sv_set(Val)
Exemplo n.º 9
0
 def process(self):
     BML, Verts, Edges, Polys, vermask, edgmask, angllim = self.inputs
     o1,o2,o3,o4,o5 = self.outputs
     angle = angllim.sv_get()[0]
     ret = []
     bmlist = BML.sv_get([])
     if Verts.is_linked:
         bmlist.extend([bmesh_from_pydata(verts, edges, faces, normal_update=True) for verts, edges, faces in zip(*mlr([Verts.sv_get(), Edges.sv_get([[]]), Polys.sv_get([[]])]))])
     if vermask.is_linked:
         verm = [np.array(bm.verts[:])[ma] for bm,ma in zip(bmlist,vermask.sv_get())]
     else:
         verm = [bm.verts for bm in bmlist]
     if edgmask.is_linked:
         edgm = [np.array(bm.edges[:])[ma] for bm,ma in zip(bmlist,edgmask.sv_get())]
     else:
         edgm = [bm.edges for bm in bmlist]
     udb, dlm = self.use_dissolve_boundaries, self.delimit
     for bm, ang, vm, em in zip(bmlist, safc(bmlist, angle), verm, edgm):
         # it's a little undocumented..
         ret.append(dissolve_limit(bm, angle_limit=ang, use_dissolve_boundaries=udb, verts=vm, edges=em, delimit=dlm)['region'])
     if o1.is_linked:
         o1.sv_set([[v.co[:] for v in bm.verts]for bm in bmlist])
     if o2.is_linked:
         o2.sv_set([[[i.index for i in e.verts] for e in bm.edges]for bm in bmlist])
     if o3.is_linked:
         o3.sv_set([[[i.index for i in p.verts] for p in bm.faces]for bm in bmlist])
     if o4.is_linked:
         o4.sv_set(ret)
     if o5.is_linked:
         o5.sv_set(bmlist)
Exemplo n.º 10
0
 def process(self):
     if not self.outputs['bmesh_list'].is_linked:
         return
     bml, val, e = self.inputs
     obj, v = safc(bml.sv_get(), val.sv_get([[1]*12]))
     outp = []
     op = "bmesh.ops."+self.oper
     if e.is_linked:
         element = e.sv_get()
         for bm, v, e in zip(obj,v, element):
             exec(op)
             outp.append(bm.copy())
             bm.free()
     else:
         if "verts=e" in op:
             cur = "verts"
         elif "edges=e" in op:
             cur = "edges"
         elif "faces=e" in op:
             cur = "faces"
         for bm, v in zip(obj,v):
             e = getattr(bm, cur)
             exec(op)
             outp.append(bm.copy())
             bm.free()
     self.outputs['bmesh_list'].sv_set(outp)
Exemplo n.º 11
0
def matrix_normal(params, T, U):
    loc, nor = params
    out = []
    nor = safc(loc, nor)
    for V, N in zip(loc, nor):
        n = N.to_track_quat(T, U)
        m = Matrix.Translation(V) @ n.to_matrix().to_4x4()
        out.append(m)
    return out
Exemplo n.º 12
0
 def process(self):
     O, V, L, S = self.inputs
     outL, outV = self.outputs
     listobj = [i.particle_systems.active.particles for i in O.sv_get() if i.particle_systems]
     if V.is_linked:
         for i, i2 in zip(listobj, V.sv_get()):
             i.foreach_set('velocity', np.array(safc(i, i2)).flatten())
     if S.is_linked:
         for i, i2 in zip(listobj, S.sv_get()):
             i.foreach_set('size', safc(i, i2))
     if L.is_linked:
         for i, i2 in zip(listobj, L.sv_get()):
             i.foreach_set('location', np.array(safc(i, i2)).flatten())
     if outL.is_linked:
         if self.Filt_D:
             outL.sv_set([[i.location[:] for i in Plist if i.alive_state == 'ALIVE'] for Plist in listobj])
         else:
             outL.sv_set([[i.location[:] for i in Plist] for Plist in listobj])
     if outV.is_linked:
         outV.sv_set([[i.velocity[:] for i in Plist] for Plist in listobj])
Exemplo n.º 13
0
 def process(self):
     Inds, MaSi, Dat = self.inputs
     OM = self.outputs[0]
     if OM.is_linked:
         out = []
         I = Inds.sv_get()
         if not self.data_to_mask:
             for Ind, Size in zip(I, safc(I, MaSi.sv_get()[0])):
                 Ma = np.zeros(Size, dtype=np.bool)
                 Ma[Ind] = 1
                 out.append(Ma.tolist())
         else:
             Ma = np.zeros_like(Dat.sv_get(), dtype=np.bool)
             if not self.complex_data:
                 for m, i in zip(Ma, safc(Ma, I)):
                     m[i] = 1
                     out.append(m.tolist())
             else:
                 for m, i in zip(Ma, safc(Ma, I)):
                     m[i] = 1
                     out.append(m[:, 0].tolist())
         OM.sv_set(out)
Exemplo n.º 14
0
 def process(self):
     Inds, MaSi, Dat = self.inputs
     OM = self.outputs[0]
     if OM.is_linked:
         out = []
         I = Inds.sv_get()
         if not self.data_to_mask:
             for Ind, Size in zip(I, safc(I, MaSi.sv_get()[0])):
                 Ma = np.zeros(Size, dtype= np.bool)
                 Ma[Ind] = 1
                 out.append(Ma.tolist())
         else:
             Ma = np.zeros_like(Dat.sv_get(), dtype= np.bool)
             if not self.complex_data:
                 for m, i in zip(Ma, safc(Ma, I)):
                     m[i] = 1
                     out.append(m.tolist())
             else:
                 for m, i in zip(Ma, safc(Ma, I)):
                     m[i] = 1
                     out.append(m[:, 0].tolist())
         OM.sv_set(out)
Exemplo n.º 15
0
 def process(self):
     Ma = self.outputs[0]
     if not Ma.is_linked:
         return
     L, N = self.inputs
     out = []
     loc = L.sv_get()[0]
     nor = [Vector(i) for i in N.sv_get()[0]]
     nor = safc(loc, nor)
     T, U = self.track, self.up
     for V, N in zip(loc, nor):
         n = N.to_track_quat(T, U)
         m = Matrix.Translation(V) @ n.to_matrix().to_4x4()
         out.append(m)
     Ma.sv_set(out)
Exemplo n.º 16
0
 def process(self):
     Ma = self.outputs[0]
     if not Ma.is_linked:
         return
     L, N = self.inputs
     out = []
     loc = L.sv_get()[0]
     nor = [Vector(i) for i in N.sv_get()[0]]
     nor = safc(loc, nor)
     T, U = self.track, self.up
     for V, N in zip(loc, nor):
         n = N.to_track_quat(T, U)
         m = Matrix.Translation(V) * n.to_matrix().to_4x4()
         out.append(m)
     Ma.sv_set(out)
 def process(self):
     Objs, W = self.inputs
     MW = np.clip(W.sv_get()[0], 0, 1)
     bm = bmesh.new()
     for obj in Objs.sv_get():
         Om = obj.data
         bm.from_mesh(Om)
         if not bm.verts.layers.paint_mask:
             m = bm.verts.layers.paint_mask.new()
         else:
             m = bm.verts.layers.paint_mask[0]
         for i, i2 in zip(bm.verts, safc(bm.verts, MW)):
             i[m] = i2
         bm.to_mesh(Om)
         bm.clear()
         Om.update()
Exemplo n.º 18
0
 def process(self):
     Objs, W = self.inputs
     MW = np.clip(W.sv_get()[0], 0, 1)
     bm = bmesh.new()
     for obj in Objs.sv_get():
         Om = obj.data
         bm.from_mesh(Om)
         if not bm.verts.layers.paint_mask:
             m = bm.verts.layers.paint_mask.new()
         else:
             m = bm.verts.layers.paint_mask[0]
         for i, i2 in zip(bm.verts, safc(bm.verts, MW)):
             i[m] = i2
         bm.to_mesh(Om)
         bm.clear()
         Om.update()
Exemplo n.º 19
0
 def process(self):
     O, V = self.inputs
     Ov = self.outputs[0]
     Prop = self.formula
     Objects_out = self.outputs['Objects']
     Objects_out.sv_set(self.inputs['Objects'].sv_get(default=[]))
     objs = O.sv_get()
     if isinstance(objs[0], list):
         if V.is_linked:
             v = V.sv_get()
             if "matrix" in Prop:
                 v = [Matrix(i) for i in v]
                 v = safc(objs, [v])
                 for OBL, VALL in zip(objs, v):
                     VALL = safc(OBL, VALL)
                     exec("for i, i2 in zip(OBL, VALL):\n    i."+Prop+"= i2")
             else:
                 if isinstance(v[0], list):
                     v = safc(objs, v)
                 else:
                     v = safc(objs, [v])
                 for OBL, VALL in zip(objs, v):
                     VALL = safc(OBL, VALL)
                     exec("for i, i2 in zip(OBL, VALL):\n    i."+Prop+"= i2")
         elif Ov.is_linked:
             Ov.sv_set(eval("[[i."+Prop+" for i in OBL] for OBL in objs]"))
         else:
             exec("for OL in objs:\n    for i in OL:\n        i."+Prop)
     else:
         if V.is_linked:
             v = V.sv_get()
             if "matrix" in Prop:
                 v = [Matrix(i) for i in v]
                 v = safc(objs, v)
                 exec("for i, i2 in zip(objs, v):\n    i."+Prop+"= i2")
             else:
                 if isinstance(v[0], list):
                     v = v[0]
                 v = safc(objs, v)
                 exec("for i, i2 in zip(objs, v):\n    i."+Prop+"= i2")
         elif Ov.is_linked:
             Ov.sv_set(eval("[i."+Prop+" for i in objs]"))
         else:
             exec("for i in objs:\n    i."+Prop)
Exemplo n.º 20
0
 def process(self):
     Points, Colors = self.inputs
     obj = bpy.data.objects[self.object_ref]  # triangulate faces
     bvh = BVHTree.FromObject(obj, bpy.context.scene, deform=True, render=False, cage=False, epsilon=0.0)
     point = Points.sv_get()[0]
     color = Colors.sv_get()[0]
     ran = range(3)
     image = bpy.data.images[self.image]
     width, height = image.size
     uvMap = obj.data.uv_layers[0].data
     pixels = np.array(image.pixels[:]).reshape(width,height,4)
     for P, C in zip(point, safc(point, color)):
         loc, norm, ind, dist = bvh.find_nearest(P)
         found_poly = obj.data.polygons[ind]
         verticesIndices = found_poly.vertices
         p1, p2, p3 = [obj.data.vertices[verticesIndices[i]].co for i in ran]
         uvMapIndices = found_poly.loop_indices
         uv1, uv2, uv3 = [uvMap[uvMapIndices[i]].uv.to_3d() for i in ran]
         V = barycentric_transform(loc, p1, p2, p3, uv1, uv2, uv3)
         Vx, Vy = int(V.x*(width-1)), int(V.y*(height-1))
         pixels[Vy, Vx] = C
     image.pixels = pixels.flatten().tolist()
Exemplo n.º 21
0
 def process(self):
     bmL, V, P, mask, Iterate = self.inputs
     Val = bmL.sv_get([])
     out2 = []
     o1,o2,o3,o4 = self.outputs
     if V.is_linked:
         for v, f in zip(V.sv_get(), P.sv_get()):
             Val.append(bmesh_from_pydata(v, [], f))
     if mask.is_linked:
         seleg = [np.array(bm.verts[:])[ma] for bm,ma in zip(Val,mask.sv_get())]
     else:
         seleg = [bm.verts for bm in Val]
     for bm,se,itera in zip(Val, seleg, safc(Val, Iterate.sv_get()[0])):
         unsubdivide(bm, verts=se, iterations=itera)
     if o1.is_linked:
         o1.sv_set([[v.co[:] for v in bm.verts]for bm in Val])
     if o2.is_linked:
         o2.sv_set([[[i.index for i in e.verts] for e in bm.edges]for bm in Val])
     if o3.is_linked:
         o3.sv_set([[[i.index for i in p.verts] for p in bm.faces]for bm in Val])
     if o4.is_linked:
         o4.sv_set(Val)
Exemplo n.º 22
0
 def process(self):
     O, Vind, Vmask, edpo, FtoB = self.inputs
     Osvi, Osvmas, OObj = self.outputs
     Prop = self.formula
     objsl = O.sv_get()
     elements = [getattr(ob.data, self.mode) for ob in objsl]
     if self.deselect_all:
         for ob in objsl:  # unfortunately we cant just deselect verts
             for p in ob.data.polygons:
                 p.select = False
             for e in ob.data.edges:
                 e.select = False
             for v in ob.data.vertices:
                 v.select = False
     if Vind.is_linked:
         for omv, ind in zip(elements, Vind.sv_get()):
             for i in ind:
                 omv[i].select = True
     if Vmask.is_linked:
         for obel, ma in zip(elements, Vmask.sv_get()):
             obel.foreach_set('select', safc(obel[:], ma))
     if edpo.is_linked:
         for obj, ind in zip(objsl, edpo.sv_get()):
             omv = obj.data.vertices
             for i in np.unique(ind):
                 omv[i].select = True
     if FtoB.is_linked:
         str = "for val, elem in zip(floats, omv):\n    elem.select=" + self.formula
         for omv, floats in zip(elements, FtoB.sv_get()):
             exec(str)
     if Osvi.is_linked:
         Osvi.sv_set([[v.index for v in elem if v.select]
                      for elem in elements])
     if Osvmas.is_linked:
         Osvmas.sv_set([[v.select for v in elem] for elem in elements])
     if OObj.is_linked:
         OObj.sv_set(objsl)
Exemplo n.º 23
0
 def process(self):
     O, Vind, Vmask, edpo, FtoB = self.inputs
     Osvi, Osvmas, OObj = self.outputs
     Prop = self.formula
     objsl = O.sv_get()
     elements = [getattr(ob.data, self.mode) for ob in objsl]
     if self.deselect_all:
         for ob in objsl:    # unfortunately we cant just deselect verts
             for p in ob.data.polygons:
                 p.select = False
             for e in ob.data.edges:
                 e.select = False
             for v in ob.data.vertices:
                 v.select = False
     if Vind.is_linked:
         for omv, ind in zip(elements, Vind.sv_get()):
             for i in ind:
                 omv[i].select = True
     if Vmask.is_linked:
         for obel, ma in zip(elements, Vmask.sv_get()):
             obel.foreach_set('select', safc(obel[:], ma))
     if edpo.is_linked:
         for obj, ind in zip(objsl, edpo.sv_get()):
             omv = obj.data.vertices
             for i in np.unique(ind):
                 omv[i].select = True
     if FtoB.is_linked:
         str = "for val, elem in zip(floats, omv):\n    elem.select="+self.formula
         for omv, floats in zip(elements, FtoB.sv_get()):
             exec(str)
     if Osvi.is_linked:
         Osvi.sv_set([[v.index for v in elem if v.select] for elem in elements])
     if Osvmas.is_linked:
         Osvmas.sv_set([[v.select for v in elem] for elem in elements])
     if OObj.is_linked:
         OObj.sv_set(objsl)