From c5a734a88a15425b9df07d16ba499f241ee4cf72 Mon Sep 17 00:00:00 2001 From: Kosvor Date: Tue, 15 Sep 2015 11:58:07 +0300 Subject: [PATCH 1/7] Update destructor.py --- nodes/matrix/destructor.py | 44 ++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/nodes/matrix/destructor.py b/nodes/matrix/destructor.py index 95a35136d..26204cfe1 100644 --- a/nodes/matrix/destructor.py +++ b/nodes/matrix/destructor.py @@ -20,9 +20,7 @@ from math import degrees import bpy from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import (Matrix_generate, - Matrix_location, Matrix_scale, Matrix_rotation, - SvGetSocketAnyType, SvSetSocketAnyType) +from sverchok.data_structure import (Matrix_generate, Matrix_location, Matrix_scale, Matrix_rotation) class MatrixOutNode(bpy.types.Node, SverchCustomTreeNode): @@ -32,39 +30,33 @@ class MatrixOutNode(bpy.types.Node, SverchCustomTreeNode): bl_icon = 'OUTLINER_OB_EMPTY' def sv_init(self, context): - self.outputs.new('VerticesSocket', "Location", "Location") - self.outputs.new('VerticesSocket', "Scale", "Scale") - self.outputs.new('VerticesSocket', "Rotation", "Rotation") - self.outputs.new('StringsSocket', "Angle", "Angle") - self.inputs.new('MatrixSocket', "Matrix", "Matrix") + self.outputs.new('VerticesSocket', "Location") + self.outputs.new('VerticesSocket', "Scale") + self.outputs.new('VerticesSocket', "Rotation") + self.outputs.new('StringsSocket', "Angle") + self.inputs.new('MatrixSocket', "Matrix") def process(self): - if 'Matrix' in self.inputs and self.inputs['Matrix'].is_linked: - matrixes_ = SvGetSocketAnyType(self, self.inputs['Matrix']) + L,S,R,A = self.outputs + M = self.inputs[0] + if M.is_linked: + matrixes_ = M.sv_get() matrixes = Matrix_generate(matrixes_) - - if 'Location' in self.outputs and self.outputs['Location'].is_linked: + if L.is_linked: locs = Matrix_location(matrixes, list=True) - SvSetSocketAnyType(self, 'Location', locs) - - if 'Scale' in self.outputs and self.outputs['Scale'].is_linked: + L.sv_set(locs) + if S.is_linked: locs = Matrix_scale(matrixes, list=True) - SvSetSocketAnyType(self, 'Scale', locs) - - if ('Rotation' in self.outputs and self.outputs['Rotation'].is_linked) \ - or ('Angle' in self.outputs and self.outputs['Angle'].is_linked): - + S.sv_set(locs) + if R.is_linked or A.is_linked: locs = Matrix_rotation(matrixes, list=True) - rots = [] - angles = [] + rots, angles = [],[] for lists in locs: rots.append([pair[0] for pair in lists]) for pair in lists: angles.append(degrees(pair[1])) - SvSetSocketAnyType(self, 'Rotation', rots) - SvSetSocketAnyType(self, 'Angle', [angles]) - else: - matrixes = [[]] + R.sv_set(rots) + A._sv_set([angles]) def update_socket(self, context): self.update() -- GitLab From 93dbd1cd8f2547597395b7f60f129f85a5e1f66a Mon Sep 17 00:00:00 2001 From: Kosvor Date: Tue, 15 Sep 2015 12:20:58 +0300 Subject: [PATCH 2/7] Update destructor.py --- nodes/matrix/destructor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nodes/matrix/destructor.py b/nodes/matrix/destructor.py index 26204cfe1..4f4a2260f 100644 --- a/nodes/matrix/destructor.py +++ b/nodes/matrix/destructor.py @@ -56,7 +56,7 @@ class MatrixOutNode(bpy.types.Node, SverchCustomTreeNode): for pair in lists: angles.append(degrees(pair[1])) R.sv_set(rots) - A._sv_set([angles]) + A.sv_set([angles]) def update_socket(self, context): self.update() -- GitLab From a3847ccd84118717df58bb2f8905563de32eb3d0 Mon Sep 17 00:00:00 2001 From: Kosvor Date: Tue, 15 Sep 2015 12:26:31 +0300 Subject: [PATCH 3/7] Update generator.py --- nodes/matrix/generator.py | 51 +++++++++++++++------------------------ 1 file changed, 19 insertions(+), 32 deletions(-) diff --git a/nodes/matrix/generator.py b/nodes/matrix/generator.py index 5c9bbc476..8dca5485e 100644 --- a/nodes/matrix/generator.py +++ b/nodes/matrix/generator.py @@ -18,11 +18,9 @@ import bpy import mathutils - -from sverchok.node_tree import SverchCustomTreeNode, StringsSocket, VerticesSocket +from sverchok.node_tree import SverchCustomTreeNode from sverchok.data_structure import (matrixdef, Matrix_listing, - Vector_generate, get_other_socket, - SvGetSocketAnyType, SvSetSocketAnyType) + Vector_generate, get_other_socket) class MatrixGenNode(bpy.types.Node, SverchCustomTreeNode): @@ -32,43 +30,33 @@ class MatrixGenNode(bpy.types.Node, SverchCustomTreeNode): bl_icon = 'OUTLINER_OB_EMPTY' def sv_init(self, context): - s = self.inputs.new('VerticesSocket', "Location", "Location") + s = self.inputs.new('VerticesSocket', "Location") s.use_prop = True - s = self.inputs.new('VerticesSocket', "Scale", "Scale") + s = self.inputs.new('VerticesSocket', "Scale") s.use_prop = True s.prop = (1, 1 , 1) - s = self.inputs.new('VerticesSocket', "Rotation", "Rotation") + s = self.inputs.new('VerticesSocket', "Rotation") s.use_prop = True s.prop = (0, 0, 1) - self.inputs.new('StringsSocket', "Angle", "Angle") - self.outputs.new('MatrixSocket', "Matrix", "Matrix") + self.inputs.new('StringsSocket', "Angle") + self.outputs.new('MatrixSocket', "Matrix") def process(self): - if not self.outputs['Matrix'].is_linked: + L,S,R,A = self.inputs + Ma = self.outputs[0] + if not Ma.is_linked: return - - loc_ = self.inputs['Location'].sv_get() - loc = Vector_generate(loc_) - - scale_ = self.inputs['Scale'].sv_get() - scale = Vector_generate(scale_) - - - rot_ = self.inputs['Rotation'].sv_get() - rot = Vector_generate(rot_) - - rotA = [[]] - angle = [[0.0]] - # it isn't a good idea to hide things like this - if self.inputs['Angle'].is_linked: - other = get_other_socket(self.inputs['Angle']) - + loc = Vector_generate(L.sv_get()) + scale = Vector_generate(S.sv_get()) + rot = Vector_generate(R.sv_get()) + rotA, angle = [[]], [[0.0]] + if A.is_linked: + other = get_other_socket(A) if isinstance(other, StringsSocket): - angle = self.inputs['Angle'].sv_get() + angle = A.sv_get() elif isinstance(other, VerticesSocket): - rotA_ = self.inputs['Angle'].sv_get() + rotA_ = A.sv_get() rotA = Vector_generate(rotA_) - max_l = max(len(loc[0]), len(scale[0]), len(rot[0]), len(angle[0]), len(rotA[0])) orig = [] for l in range(max_l): @@ -76,8 +64,7 @@ class MatrixGenNode(bpy.types.Node, SverchCustomTreeNode): orig.append(M) matrixes_ = matrixdef(orig, loc, scale, rot, angle, rotA) matrixes = Matrix_listing(matrixes_) - SvSetSocketAnyType(self, 'Matrix', matrixes) - + Ma.sv_set(matrixes) def register(): -- GitLab From 55f4a96f09b916e69cb229e363d8ebd189f9ddb9 Mon Sep 17 00:00:00 2001 From: Kosvor Date: Tue, 15 Sep 2015 12:59:28 +0300 Subject: [PATCH 4/7] Update deform.py --- nodes/matrix/deform.py | 79 ++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 53 deletions(-) diff --git a/nodes/matrix/deform.py b/nodes/matrix/deform.py index bd1dc9863..2ea592912 100644 --- a/nodes/matrix/deform.py +++ b/nodes/matrix/deform.py @@ -17,12 +17,9 @@ # ##### END GPL LICENSE BLOCK ##### import bpy - -from sverchok.node_tree import (SverchCustomTreeNode, VerticesSocket, - MatrixSocket, StringsSocket) +from sverchok.node_tree import (SverchCustomTreeNode) from sverchok.data_structure import (Vector_generate, matrixdef, Matrix_listing, - Matrix_generate, updateNode, - SvGetSocketAnyType, SvSetSocketAnyType) + Matrix_generate, updateNode) class MatrixDeformNode(bpy.types.Node, SverchCustomTreeNode): @@ -32,66 +29,42 @@ class MatrixDeformNode(bpy.types.Node, SverchCustomTreeNode): bl_icon = 'OUTLINER_OB_EMPTY' def sv_init(self, context): - self.inputs.new('MatrixSocket', "Original", "Original") - self.inputs.new('VerticesSocket', "Location", "Location") - self.inputs.new('VerticesSocket', "Scale", "Scale") - self.inputs.new('VerticesSocket', "Rotation", "Rotation") - self.inputs.new('StringsSocket', "Angle", "Angle") - self.outputs.new('MatrixSocket', "Matrix", "Matrix") + self.inputs.new('MatrixSocket', "Original") + self.inputs.new('VerticesSocket', "Location") + self.inputs.new('VerticesSocket', "Scale") + self.inputs.new('VerticesSocket', "Rotation") + self.inputs.new('StringsSocket', "Angle") + self.outputs.new('MatrixSocket', "Matrix") def process(self): - # inputs - if 'Matrix' in self.outputs and self.outputs['Matrix'].links: - if self.inputs['Original'].links and \ - type(self.inputs['Original'].links[0].from_socket) == MatrixSocket: - - orig_ = SvGetSocketAnyType(self, self.inputs['Original']) - orig = Matrix_generate(orig_) + O,L,S,R,A = self.inputs + Om = self.outputs[0] + if Om.is_linked: + if O.is_linked: + orig = Matrix_generate(O.sv_get()) else: return - - if 'Location' in self.inputs and self.inputs['Location'].links and \ - type(self.inputs['Location'].links[0].from_socket) == VerticesSocket: - - loc_ = SvGetSocketAnyType(self, self.inputs['Location']) - loc = Vector_generate(loc_) + if L.is_linked: + loc = Vector_generate(L.sv_get()) else: loc = [[]] - - if 'Scale' in self.inputs and self.inputs['Scale'].links and \ - type(self.inputs['Scale'].links[0].from_socket) == VerticesSocket: - - scale_ = SvGetSocketAnyType(self, self.inputs['Scale']) - scale = Vector_generate(scale_) + if S.is_linked: + scale = Vector_generate(S.sv_get()) else: scale = [[]] - - if 'Rotation' in self.inputs and self.inputs['Rotation'].links and \ - type(self.inputs['Rotation'].links[0].from_socket) == VerticesSocket: - - rot_ = SvGetSocketAnyType(self, self.inputs['Rotation']) - rot = Vector_generate(rot_) - #print ('matrix_def', str(rot_)) + if R.is_linked: + rot = Vector_generate(R.sv_get()) else: rot = [[]] - - rotA = [[]] - angle = [[0.0]] - if 'Angle' in self.inputs and self.inputs['Angle'].links: - - if type(self.inputs['Angle'].links[0].from_socket) == StringsSocket: - angle = SvGetSocketAnyType(self, self.inputs['Angle']) - - elif type(self.inputs['Angle'].links[0].from_socket) == VerticesSocket: - rotA_ = SvGetSocketAnyType(self, self.inputs['Angle']) - rotA = Vector_generate(rotA_) - - # outputs - #print(loc) + rotA, angle = [[]], [[0.0]] + if A.is_linked: + if type(A.links[0].from_socket) == "StringsSocket": + angle = A.sv_get() + elif type(A.links[0].from_socket) == "VerticesSocket": + rotA = Vector_generate(A.sv_get()) matrixes_ = matrixdef(orig, loc, scale, rot, angle, rotA) matrixes = Matrix_listing(matrixes_) - SvSetSocketAnyType(self, 'Matrix', matrixes) - #print ('matrix_def', str(matrixes)) + Om.sv_set(matrixes) def update_socket(self, context): updateNode(self, context) -- GitLab From a4e1ddf7a3b4cc8a00e9defa3a558b8659e50f94 Mon Sep 17 00:00:00 2001 From: Kosvor Date: Tue, 15 Sep 2015 21:13:51 +0300 Subject: [PATCH 5/7] Update bevel.py --- nodes/modifier_change/bevel.py | 85 ++++++++++++++-------------------- 1 file changed, 34 insertions(+), 51 deletions(-) diff --git a/nodes/modifier_change/bevel.py b/nodes/modifier_change/bevel.py index 7e35255bb..2660971e8 100644 --- a/nodes/modifier_change/bevel.py +++ b/nodes/modifier_change/bevel.py @@ -46,7 +46,7 @@ class SvBevelNode(bpy.types.Node, SverchCustomTreeNode): ("2", "Depth", "Amount is perpendicular distance from original edge to bevel face", 3), ("3", "Percent", "Amount is percent of adjacent edge length", 4) ] - + offsetType = EnumProperty(name='Amount Type', description="What distance Amount measures", items = offset_modes, @@ -56,12 +56,12 @@ class SvBevelNode(bpy.types.Node, SverchCustomTreeNode): description="Number of segments in bevel", default=1, min=1, update=updateNode) - + profile_ = FloatProperty(name="Profile", description="Profile shape; 0.5 - round", default=0.5, min=0.0, max=1.0, update=updateNode) - + vertexOnly = BoolProperty(name="Vertex only", description="Only bevel edges, not edges", default=False, @@ -73,18 +73,18 @@ class SvBevelNode(bpy.types.Node, SverchCustomTreeNode): # update=updateNode) def sv_init(self, context): - self.inputs.new('VerticesSocket', "Vertices", "Vertices") - self.inputs.new('StringsSocket', 'Edges', 'Edges') - self.inputs.new('StringsSocket', 'Polygons', 'Polygons') - self.inputs.new('StringsSocket', 'BevelEdges') - self.inputs.new('StringsSocket', "Offset").prop_name = "offset_" - self.inputs.new('StringsSocket', "Segments").prop_name = "segments_" - self.inputs.new('StringsSocket', "Profile").prop_name = "profile_" - - self.outputs.new('VerticesSocket', 'Vertices') - self.outputs.new('StringsSocket', 'Edges') - self.outputs.new('StringsSocket', 'Polygons') - self.outputs.new('StringsSocket', 'NewPolys') + si,so = self.inputs.new,self.outputs.new + si('VerticesSocket', "Vertices") + si('StringsSocket', 'Edges') + si('StringsSocket', 'Polygons') + si('StringsSocket', 'BevelEdges') + si('StringsSocket', "Offset").prop_name = "offset_" + si('StringsSocket', "Segments").prop_name = "segments_" + si('StringsSocket', "Profile").prop_name = "profile_" + so('VerticesSocket', 'Vertices') + so('StringsSocket', 'Edges') + so('StringsSocket', 'Polygons') + so('StringsSocket', 'NewPolys') def draw_buttons(self, context, layout): layout.prop(self, "offsetType") @@ -92,30 +92,23 @@ class SvBevelNode(bpy.types.Node, SverchCustomTreeNode): #layout.prop(self, "clampOverlap") def process(self): - if not (self.inputs['Vertices'].is_linked and self.inputs['Polygons'].is_linked): + InV,InE,InP,BE,O,S,Pr = self.inputs + oV,oE,oP,NP = self.outputs + if not (InV.is_linked and InP.is_linked): return if not (any(self.outputs[name].is_linked for name in ['Vertices', 'Edges', 'Polygons', 'NewPolys'])): return - - vertices_s = self.inputs['Vertices'].sv_get(default=[[]]) - edges_s = self.inputs['Edges'].sv_get(default=[[]]) - faces_s = self.inputs['Polygons'].sv_get(default=[[]]) - offsets_s = self.inputs['Offset'].sv_get()[0] - segments_s = self.inputs['Segments'].sv_get()[0] - profiles_s = self.inputs['Profile'].sv_get()[0] - bevel_edges_s = self.inputs['BevelEdges'].sv_get(default=[[]]) - - result_vertices = [] - result_edges = [] - result_faces = [] - result_bevel_faces = [] - + vertices_s = InV.sv_get(default=[[]]) + edges_s = InE.sv_get(default=[[]]) + faces_s = InP.sv_get(default=[[]]) + offsets_s = O.sv_get()[0] + segments_s = S.sv_get()[0] + profiles_s = Pr.sv_get()[0] + bevel_edges_s = BE.sv_get(default=[[]]) + out,result_bevel_faces = [],[] meshes = match_long_repeat([vertices_s, edges_s, faces_s, bevel_edges_s, offsets_s, segments_s, profiles_s]) - for vertices, edges, faces, bevel_edges, offset, segments, profile in zip(*meshes): - bm = bmesh_from_pydata(vertices, edges, faces) - if bevel_edges: b_edges = [] for edge in bevel_edges: @@ -123,7 +116,6 @@ class SvBevelNode(bpy.types.Node, SverchCustomTreeNode): b_edges.append(b_edge[0]) else: b_edges = bm.edges - geom = list(bm.verts) + list(b_edges) + list(bm.faces) bevel_faces = bmesh.ops.bevel(bm, geom=geom, offset=offset, offset_type=int(self.offsetType), segments=segments, @@ -131,21 +123,17 @@ class SvBevelNode(bpy.types.Node, SverchCustomTreeNode): #clamp_overlap=self.clampOverlap, material=-1)['faces'] new_bevel_faces = [[v.index for v in face.verts] for face in bevel_faces] - new_vertices, new_edges, new_faces = pydata_from_bmesh(bm) + out.append(pydata_from_bmesh(bm)) bm.free() - - result_vertices.append(new_vertices) - result_edges.append(new_edges) - result_faces.append(new_faces) result_bevel_faces.append(new_bevel_faces) + oV.sv_set([[i[0]] for i in out]) + if oE.is_linked: + oE.sv_set([[i[1]] for i in out]) + if oP.is_linked: + oP.sv_set([[i[2]] for i in out]) + if NP.is_linked: + NP.sv_set(result_bevel_faces) - self.outputs['Vertices'].sv_set(result_vertices) - if self.outputs['Edges'].is_linked: - self.outputs['Edges'].sv_set(result_edges) - if self.outputs['Polygons'].is_linked: - self.outputs['Polygons'].sv_set(result_faces) - if self.outputs['NewPolys'].is_linked: - self.outputs['NewPolys'].sv_set(result_bevel_faces) def register(): bpy.utils.register_class(SvBevelNode) @@ -153,8 +141,3 @@ def register(): def unregister(): bpy.utils.unregister_class(SvBevelNode) - -if __name__ == '__main__': - register() - - -- GitLab From 97ddfb90789131ccf2655744f7d6e8669a124b46 Mon Sep 17 00:00:00 2001 From: Kosvor Date: Fri, 18 Sep 2015 07:19:27 +0300 Subject: [PATCH 6/7] Update generator.py --- nodes/matrix/generator.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/nodes/matrix/generator.py b/nodes/matrix/generator.py index 8dca5485e..03cfd1111 100644 --- a/nodes/matrix/generator.py +++ b/nodes/matrix/generator.py @@ -19,8 +19,7 @@ import bpy import mathutils from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import (matrixdef, Matrix_listing, - Vector_generate, get_other_socket) +from sverchok.data_structure import (matrixdef, Matrix_listing, Vector_generate) class MatrixGenNode(bpy.types.Node, SverchCustomTreeNode): @@ -51,12 +50,7 @@ class MatrixGenNode(bpy.types.Node, SverchCustomTreeNode): rot = Vector_generate(R.sv_get()) rotA, angle = [[]], [[0.0]] if A.is_linked: - other = get_other_socket(A) - if isinstance(other, StringsSocket): - angle = A.sv_get() - elif isinstance(other, VerticesSocket): - rotA_ = A.sv_get() - rotA = Vector_generate(rotA_) + angle = A.sv_get() max_l = max(len(loc[0]), len(scale[0]), len(rot[0]), len(angle[0]), len(rotA[0])) orig = [] for l in range(max_l): -- GitLab From ab8aaf14e60c8516738a7517aff680a43cddc9f3 Mon Sep 17 00:00:00 2001 From: Kosvor Date: Fri, 18 Sep 2015 07:22:16 +0300 Subject: [PATCH 7/7] Update deform.py --- nodes/matrix/deform.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/nodes/matrix/deform.py b/nodes/matrix/deform.py index 2ea592912..06fb60d50 100644 --- a/nodes/matrix/deform.py +++ b/nodes/matrix/deform.py @@ -58,10 +58,7 @@ class MatrixDeformNode(bpy.types.Node, SverchCustomTreeNode): rot = [[]] rotA, angle = [[]], [[0.0]] if A.is_linked: - if type(A.links[0].from_socket) == "StringsSocket": - angle = A.sv_get() - elif type(A.links[0].from_socket) == "VerticesSocket": - rotA = Vector_generate(A.sv_get()) + angle = A.sv_get() matrixes_ = matrixdef(orig, loc, scale, rot, angle, rotA) matrixes = Matrix_listing(matrixes_) Om.sv_set(matrixes) -- GitLab