def process(self): inputs, outputs = self.inputs, self.outputs if not outputs[0].is_linked: return result = [] params = [si.sv_get(default=[[]], deepcopy=False) for si in inputs[:4]] params.append(inputs[4].sv_get(default=[Matrix()], deepcopy=False)) matching_f = list_match_func[self.list_match] desired_levels = [3, 3, 2, 3, 2] if self.noise_type in noise_numpy_types.keys(): main_func = noise_displace_numpy noise_function = noise_func_numpy[self.out_mode] else: main_func = noise_displace noise_function = noise_func[self.out_mode] ops = [ noise_function, self.noise_type, self.smooth, self.interpolate, self.list_match, self.output_numpy ] result = recurse_f_level_control(params, ops, main_func, matching_f, desired_levels) self.outputs[0].sv_set(result)
def draw_buttons(self, context, layout): layout.prop(self, 'out_mode', expand=True) layout.prop(self, 'noise_type', text="Type") if self.noise_type in noise_numpy_types.keys(): row = layout.row(align=True) row.prop(self, 'smooth', toggle=True) row.prop(self, 'interpolate', toggle=True)
def rclick_menu(self, context, layout): layout.prop_menu_enum(self, "out_mode") layout.prop_menu_enum(self, "noise_type") if self.noise_type in noise_numpy_types.keys(): layout.prop(self, 'smooth', toggle=True) layout.prop(self, 'interpolate', toggle=True) layout.prop(self, "output_numpy", toggle=True)
def process(self): inputs, outputs = self.inputs, self.outputs if not (outputs[0].is_linked and inputs[0].is_linked): return out = [] verts = inputs['Vertices'].sv_get(deepcopy=False) noise_matrix = inputs['Noise Matrix'].sv_get(deepcopy=False, default=[]) seeds = inputs['Seed'].sv_get()[0] noise_type = self.noise_type numpy_mode = noise_type in noise_numpy_types.keys() if noise_matrix: verts = preprocess_verts(noise_matrix, verts, numpy_mode) max_len = max(map(len, (seeds, verts))) out_mode = self.out_mode output_numpy = self.output_numpy if numpy_mode: noise_function = noise_numpy_types[noise_type][self.interpolate] smooth = self.smooth for i in range(max_len): seed = seeds[min(i, len(seeds) - 1)] obj_id = min(i, len(verts) - 1) numpy_noise(verts[obj_id], out, out_mode, seed, noise_function, smooth, output_numpy) else: noise_function = noise.noise_vector for i in range(max_len): seed = seeds[min(i, len(seeds) - 1)] obj_id = min(i, len(verts) - 1) # 0 unsets the seed and generates unreproducable output based on system time seed_val = int(round(seed)) or 140230 noise.seed_set(seed_val) mathulis_noise(verts[obj_id], out, out_mode, noise_type, noise_function, output_numpy) outputs[0].sv_set(out)
def rclick_menu(self, context, layout): if self.noise_type in noise_numpy_types.keys(): layout.prop(self, 'smooth', toggle=True) layout.prop(self, 'interpolate', toggle=True) layout.prop_menu_enum(self, "list_match", text="List Match") layout.prop(self, "output_numpy", toggle=True)
np_scale = local_match(np.array(scale_out), len(verts)) if type(matrix) == list: matrix = matrix[0].inverted() else: matrix = matrix.inverted() n_props = [np_scale, seed_val[0], matrix, smooth, interpolate] noise_function(verts, pols, noise_type, n_props, result, output_numpy) return result avail_noise = [(t[0], t[0].title(), t[0].title(), '', t[1]) for t in noise_options] for idx, new_type in enumerate(noise_numpy_types.keys()): avail_noise.append((new_type, new_type.title().replace('_', ' '), new_type.title(), '', 100 + idx)) noise_func = {'NORMAL': v_normal, 'VECTOR': v_noise} noise_func_numpy = {'NORMAL': v_normal_numpy, 'VECTOR': v_noise_numpy} class SvNoiseDisplaceNode(bpy.types.Node, SverchCustomTreeNode): """ Triggers: Add Noise to verts Tooltip: Move input verts/mesh with a noise values. """ bl_idname = 'SvNoiseDisplaceNode'