コード例 #1
0
    def process(self):

        if not self.outputs[0].is_linked:
            return

        # if the user specifies a variable, they must also link a value into that socket, this will prevent Exception
        self.ui_message = ""
        if not self.all_inputs_connected():
            self.ui_message = "node not fully connected"
            return

        var_names = self.get_variables()
        inputs = self.get_input()
        results = []

        if var_names:
            input_values = [inputs.get(name) for name in var_names]
            parameters = match_long_repeat(input_values)

            for objects in zip(*parameters):
                object_results = []
                for values in zip_long_repeat(*objects):
                    variables = dict(zip(var_names, values))
                    vector = []
                    for formula in self.formulas():
                        if formula:
                            value = safe_eval(formula, variables)
                            vector.append(value)
                    if self.separate:
                        object_results.append(vector)
                    else:
                        object_results.extend(vector)
                results.append(object_results)

        else:

            def joined_formulas(f1, f2, f3, f4):
                built_string = ""
                if f1: built_string += f1
                if f2: built_string += f",{f2}"
                if f3: built_string += f",{f3}"
                if f4: built_string += f",{f4}"
                return list(ast.literal_eval(built_string))

            if self.use_ast:
                results = joined_formulas(*self.formulas())
            else:
                vector = []
                for formula in self.formulas():
                    if formula:
                        value = safe_eval(formula, dict())
                        vector.append(value)
                results.extend(vector)

        if self.wrapping == "+1":
            results = [results]
        elif self.wrapping == "-1":
            results = results[0] if len(results) else results

        self.outputs['Result'].sv_set(results)
コード例 #2
0
    def make_points(self, variables):
        control_points = []
        for item in self.control_points:
            x = safe_eval(item.x, variables)
            y = safe_eval(item.y, variables)
            control_points.append((x, y, 0))

        control_points.sort(key=lambda p: p[0])
        return control_points
コード例 #3
0
    def make_points(self, variables):
        control_points = []
        for item in self.control_points:
            x = safe_eval(item.x, variables)
            y = safe_eval(item.y, variables)
            sharp = item.sharp
            point = ControlPoint(x, y, sharp)
            control_points.append(point)

        control_points.sort(key=lambda p: p.x)
        return split_points(control_points)
コード例 #4
0
    def process(self):

        if not self.outputs[0].is_linked:
            return

        var_names = self.get_variables()
        inputs = self.get_input()

        results = []

        if var_names:
            input_values = [inputs.get(name, [[0]]) for name in var_names]
            parameters = match_long_repeat(input_values)
        else:
            parameters = [[[None]]]
        for objects in zip(*parameters):
            object_results = []
            for values in zip_long_repeat(*objects):
                variables = dict(zip(var_names, values))
                vector = []
                for formula in self.formulas():
                    if formula:
                        value = safe_eval(formula, variables)
                        vector.append(value)
                if self.separate:
                    object_results.append(vector)
                else:
                    object_results.extend(vector)
            results.append(object_results)

        if self.wrap:
            results = [results]

        self.outputs['Result'].sv_set(results)
コード例 #5
0
    def process(self):

        if not self.outputs[0].is_linked:
            return

        # if the user specifies a variable, they must also link a value into that socket, this will prevent Exception
        self.ui_message = ""
        if not self.all_inputs_connected():
            self.ui_message = "node not fully connected"
            return

        var_names = self.get_variables()
        inputs = self.get_input()
        results = []

        if var_names:
            input_values = [inputs.get(name) for name in var_names]
            matching_f = list_match_func[self.list_match]
            parameters = matching_f(input_values)
            desired_levels = [s.depth for s in self.inputs]
            ops = [
                self.formulas(), self.separate, var_names,
                [s.transform for s in self.inputs], self.as_list
            ]

            results = recurse_f_level_control(parameters, ops, formula_func,
                                              matching_f, desired_levels)

        else:

            def joined_formulas(f1, f2, f3, f4):
                built_string = ""
                if f1: built_string += f1
                if f2: built_string += f",{f2}"
                if f3: built_string += f",{f3}"
                if f4: built_string += f",{f4}"
                return list(ast.literal_eval(built_string))

            if self.use_ast:
                results = joined_formulas(*self.formulas())
            else:
                vector = []
                for formula in self.formulas():
                    if formula:
                        value = safe_eval(formula, dict())
                        vector.append(value)
                results.extend(vector)

        if self.wrapping == "+1":
            results = [results]
        elif self.wrapping == "-1":
            results = results[0] if len(results) else results

        self.outputs['Result'].sv_set(results)
コード例 #6
0
def formula_func(parameters, constant, matching_f):

    formulas, separate, var_names, transformations, as_list = constant

    object_results = []
    for values in zip(*matching_f(parameters)):
        vals = [transform_data(d, tr) for d, tr in zip(values, transformations)]
        variables = dict(zip(var_names, vals))
        vector = []
        for formula in formulas:
            if formula:
                value = safe_eval(formula, variables)
                if as_list:
                    vector.append(ensure_list(value))
                else:
                    vector.append(value)
        if separate:
            object_results.append(vector)
        else:
            object_results.extend(vector)


    return object_results