diff --git a/nodes/vector/math_mk3.py b/nodes/vector/math_mk3.py index a69dc06390fa1dabe6a0590973c33ba089c27c39..ef814a3b30b4487b66258aea9f7ba71294c559f9 100644 --- a/nodes/vector/math_mk3.py +++ b/nodes/vector/math_mk3.py @@ -44,8 +44,7 @@ def recurse_fx_numpy(l, func, level, out_numpy): t = [rfx(i, func, level-1, out_numpy) for i in l] return t -def recurse_fxy_numpy(l1, l2, func, level, out_numpy): - +def recurse_fxy_numpy(l1, l2, func, level, min_l2_level, out_numpy): if level == 1: nl1 = np.array(l1) nl2 = np.array(l2) @@ -55,10 +54,14 @@ def recurse_fxy_numpy(l1, l2, func, level, out_numpy): else: res = [] res_append = res.append + if levels_of_list_or_np([l1]) < 4: + l1 = [l1] + if levels_of_list_or_np([l2]) < min_l2_level+1: + l2 = [l2] # will only be used if lists are of unequal length fl = l2[-1] if len(l1) > len(l2) else l1[-1] for u, v in zip_longest(l1, l2, fillvalue=fl): - res_append(recurse_fxy_numpy(u, v, func, level-1, out_numpy)) + res_append(recurse_fxy_numpy(u, v, func, level-1, min_l2_level, out_numpy)) return res def recurse_fx(l, func, level): @@ -69,12 +72,13 @@ def recurse_fx(l, func, level): t = [rfx(i, func, level-1) for i in l] return t -def recurse_fxy(l1, l2, func, level): +def recurse_fxy(l1, l2, func, level, min_l2_level): res = [] res_append = res.append - if levelsOflist(l1) < 2: + + if levelsOflist([l1]) < 3: l1 = [l1] - if levelsOflist(l2) < 2: + if levelsOflist([l2]) < min_l2_level: l2 = [l2] # will only be used if lists are of unequal length fl = l2[-1] if len(l1) > len(l2) else l1[-1] @@ -83,7 +87,7 @@ def recurse_fxy(l1, l2, func, level): res_append(func(u, v)) else: for u, v in zip_longest(l1, l2, fillvalue=fl): - res_append(recurse_fxy(u, v, func, level-1)) + res_append(recurse_fxy(u, v, func, level-1, min_l2_level)) return res @@ -188,7 +192,7 @@ class SvVectorMathNodeMK3(bpy.types.Node, SverchCustomTreeNode): # get either input data, or socket default input_one = inputs[0].sv_get(deepcopy=True) - # level = levelsOflist(input_one) - 1 + level = levels_of_list_or_np(input_one) - 1 if num_inputs == 1: recurse_func = self.implementation_func_dict[self.implementation][1] @@ -197,7 +201,8 @@ class SvVectorMathNodeMK3(bpy.types.Node, SverchCustomTreeNode): else: input_two = inputs[1].sv_get(deepcopy=True) level = max(level, levels_of_list_or_np(input_two) - 1) - params = [input_one, input_two, func, level] + min_l2_level = 3 if inputs[1].bl_idname == "SvVerticesSocket" else 2 + params = [input_one, input_two, func, level, min_l2_level] recurse_func = self.implementation_func_dict[self.implementation][2] if self.implementation == 'NumPy': diff --git a/utils/modules/vector_math_utils.py b/utils/modules/vector_math_utils.py index 77853a872111474fb27ab546a855ea467b4f1684..313d86f04eba4ab89583c3eadd333a2ee6154f9e 100644 --- a/utils/modules/vector_math_utils.py +++ b/utils/modules/vector_math_utils.py @@ -74,7 +74,7 @@ def reflect(v1, v2): return v1 - (dot2[:, np.newaxis] * mirror) def scale_two_axis(v1, s, axis1, axis2): - v1[:,[axis1, axis2]] *= s + v1[:,[axis1, axis2]] *= s[:,np.newaxis] return v1 def scalar_to_axis(v1, s, axis):