def make_curve(self, control_points): curves = [] for series in control_points: xs = [p.x for p in series] min_x = xs[0] max_x = xs[-1] series = np.array([p.to_tuple() for p in series]) xs = np.array(xs) if self.mode == 'SPL': spline = CubicSpline(series, tknots=xs, is_cyclic=False) else: spline = LinearSpline(series, tknots=xs, is_cyclic=False) curve = SvSplineCurve(spline) curve.u_bounds = (series[0][0], series[-1][0]) curves.append(curve) if len(curves) == 1: return curves[0] else: return SvConcatCurve(curves)
def process(self): if not any(socket.is_linked for socket in self.outputs): return x_s = self.inputs['x'].sv_get() var_names = self.get_variables() inputs = self.get_input() input_values = [inputs.get(name, [[0]]) for name in var_names] if var_names: parameters = match_long_repeat([x_s] + input_values) else: parameters = [x_s] y_out = [] curve_out = [] ct_points_out = [] for xs_in, *objects in zip(*parameters): if var_names: var_values_s = zip_long_repeat(*objects) else: var_values_s = [[]] for var_values in var_values_s: variables = dict(zip(var_names, var_values)) control_points = self.make_points(variables) spline = self.make_spline(control_points) ys = self.eval_spline(spline, xs_in) curve = SvSplineCurve(spline) curve.u_bounds = (control_points[0][0], control_points[-1][0]) y_out.append(ys) curve_out.append(curve) ct_points_out.append(control_points) self.outputs['Result'].sv_set(y_out) self.outputs['Curve'].sv_set(curve_out) self.outputs['ControlPoints'].sv_set(ct_points_out)