コード例 #1
0
    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)
コード例 #2
0
 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)
コード例 #3
0
ファイル: noise_mk3.py プロジェクト: Durman/sverchok
 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)
コード例 #4
0
    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)
コード例 #5
0
 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)
コード例 #6
0
        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'