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)
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)
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])
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])
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))
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()
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)
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)
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)
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)
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
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])
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)
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)
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): 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()
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)
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()
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)
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)
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)