From ca60ba9af41a184dcd24f6e0268643831cc130bb Mon Sep 17 00:00:00 2001 From: zeffii Date: Thu, 8 Jun 2017 11:04:37 +0200 Subject: [PATCH 01/11] add initial convexhull 3d2d version - just shell code --- nodes/modifier_make/convex_hull_mk2.py | 112 +++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 nodes/modifier_make/convex_hull_mk2.py diff --git a/nodes/modifier_make/convex_hull_mk2.py b/nodes/modifier_make/convex_hull_mk2.py new file mode 100644 index 000000000..f5e5808ab --- /dev/null +++ b/nodes/modifier_make/convex_hull_mk2.py @@ -0,0 +1,112 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +import bpy +import bmesh +import mathutils + +from bpy.props import EnumProperty, BoolProperty + +from sverchok.node_tree import SverchCustomTreeNode +from sverchok.data_structure import Vector_generate +from sverchok.utils.sv_bmesh_utils import pydata_from_bmesh, bmesh_from_pydata + + +def make_hull(vertices, params): + if not vertices: + return False + + if params.hull_mode == '3D': + + bm = bmesh_from_pydata(vertices, [], []) + res = bmesh.ops.convex_hull(bm, input=bm_verts, use_existing_faces=False) + + verts, _, faces = pydata_from_bmesh(bm) + bm.clear() + bm.free() + return (verts, faces) + + elif params.hull_mode == '2D': + if params.plane == 'Z': + vertices_2d = [(v[0], v[1]) for v in vertices] + elif params.plane == 'Y': + vertices_2d = [(v[0], v[2]) for v in vertices] + else: + vertices_2d = [(v[1], v[2]) for v in vertices] + + GG = mathutils.geometry.convex_hull_2d(vertices_2d) + faces_out.append([GG]) + + + + +class SvConvexHullNodeMK2(bpy.types.Node, SverchCustomTreeNode): + ''' cvh 2D/3D conv.hull''' + bl_idname = 'SvConvexHullNodeMK2' + bl_label = 'Convex Hull MK2' + # bl_icon = 'OUTLINER_OB_EMPTY' + + hull_mode_options = [(k, k, '', i) for i, k in enumerate(["3D", "2D"])] + hull_mode = EnumProperty( + description=" 3d or 2d?", default="3D", items=hull_mode_options, update=updateNode + ) + + plane_choices = [(k, k, '', i) for i, k in enumerate(["X", "Y", "Z"])] + plane = EnumProperty( + description="track 2D plane", default="X", items=plane_choices, update=updateNode + ) + + outer = BoolProperty(default=True, update=updateNode) + inner = BoolProperty(default=False, update=updateNode) + + + def sv_init(self, context): + self.inputs.new('VerticesSocket', 'Vertices') + + self.outputs.new('VerticesSocket', 'Vertices') + self.outputs.new('StringsSocket', 'Polygons') + + def draw_buttons(self, context, layout): + pass + + def process(self): + + if self.inputs['Vertices'].is_linked: + + verts = Vector_generate(self.inputs['Vertices'].sv_get()) + verts_out = [] + polys_out = [] + + for v_obj in verts: + res = make_hull(v_obj, self) + if not res: + return + + verts_out.append(res[0]) + polys_out.append(res[1]) + + self.outputs['Vertices'].sv_set(verts_out) + self.outputs['Polygons'].sv_set(polys_out) + + +def register(): + bpy.utils.register_class(SvConvexHullNodeMK2) + + +def unregister(): + bpy.utils.unregister_class(SvConvexHullNodeMK2) -- GitLab From 85c57b1473570832023a1b476aeea53adfa07f09 Mon Sep 17 00:00:00 2001 From: zeffii Date: Thu, 8 Jun 2017 11:46:21 +0200 Subject: [PATCH 02/11] add extr ops --- nodes/modifier_make/convex_hull_mk2.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/nodes/modifier_make/convex_hull_mk2.py b/nodes/modifier_make/convex_hull_mk2.py index f5e5808ab..9baf0d620 100644 --- a/nodes/modifier_make/convex_hull_mk2.py +++ b/nodes/modifier_make/convex_hull_mk2.py @@ -35,13 +35,14 @@ def make_hull(vertices, params): bm = bmesh_from_pydata(vertices, [], []) res = bmesh.ops.convex_hull(bm, input=bm_verts, use_existing_faces=False) - + print(res) verts, _, faces = pydata_from_bmesh(bm) bm.clear() bm.free() return (verts, faces) elif params.hull_mode == '2D': + if params.plane == 'Z': vertices_2d = [(v[0], v[1]) for v in vertices] elif params.plane == 'Y': @@ -50,9 +51,9 @@ def make_hull(vertices, params): vertices_2d = [(v[1], v[2]) for v in vertices] GG = mathutils.geometry.convex_hull_2d(vertices_2d) - faces_out.append([GG]) - + # unused_v_indices = set(GG) - set(range(len(vertices))) + # bmesh.ops.delete(bm, geom, context=0) class SvConvexHullNodeMK2(bpy.types.Node, SverchCustomTreeNode): -- GitLab From e88b1cb90cbabb490eae967b7ebe2d4e39e2fd6e Mon Sep 17 00:00:00 2001 From: zeffii Date: Thu, 8 Jun 2017 12:06:31 +0200 Subject: [PATCH 03/11] add inside removal --- nodes/modifier_make/convex_hull_mk2.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/nodes/modifier_make/convex_hull_mk2.py b/nodes/modifier_make/convex_hull_mk2.py index 9baf0d620..4d74dd882 100644 --- a/nodes/modifier_make/convex_hull_mk2.py +++ b/nodes/modifier_make/convex_hull_mk2.py @@ -31,15 +31,16 @@ def make_hull(vertices, params): if not vertices: return False + verts, faces = [], [] + bm = bmesh_from_pydata(vertices, [], []) + if params.hull_mode == '3D': - bm = bmesh_from_pydata(vertices, [], []) res = bmesh.ops.convex_hull(bm, input=bm_verts, use_existing_faces=False) print(res) verts, _, faces = pydata_from_bmesh(bm) bm.clear() bm.free() - return (verts, faces) elif params.hull_mode == '2D': @@ -51,10 +52,13 @@ def make_hull(vertices, params): vertices_2d = [(v[1], v[2]) for v in vertices] GG = mathutils.geometry.convex_hull_2d(vertices_2d) - # unused_v_indices = set(GG) - set(range(len(vertices))) - # bmesh.ops.delete(bm, geom, context=0) + if params.outside and not params.inside: + unused_v_indices = set(GG) - set(range(len(vertices))) + bmesh.ops.delete(bm, geom=[bm.verts[i] for i in unused_v_indices], context=0) + verts, _, faces = pydata_from_bmesh(bm) + return (verts, faces) class SvConvexHullNodeMK2(bpy.types.Node, SverchCustomTreeNode): ''' cvh 2D/3D conv.hull''' -- GitLab From b1f1ed64042f29622f47cd7079439d11020c1b9c Mon Sep 17 00:00:00 2001 From: zeffii Date: Thu, 8 Jun 2017 15:03:22 +0200 Subject: [PATCH 04/11] add more flow control to 3d and 2d mode --- nodes/modifier_make/convex_hull_mk2.py | 50 ++++++++++++++++++-------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/nodes/modifier_make/convex_hull_mk2.py b/nodes/modifier_make/convex_hull_mk2.py index 4d74dd882..169566796 100644 --- a/nodes/modifier_make/convex_hull_mk2.py +++ b/nodes/modifier_make/convex_hull_mk2.py @@ -27,6 +27,15 @@ from sverchok.data_structure import Vector_generate from sverchok.utils.sv_bmesh_utils import pydata_from_bmesh, bmesh_from_pydata +def get2d(plane, vertices): + if plane == 'Z': + return [(v[0], v[1]) for v in vertices] + elif plane == 'Y': + return [(v[0], v[2]) for v in vertices] + else: + return [(v[1], v[2]) for v in vertices] + + def make_hull(vertices, params): if not vertices: return False @@ -34,32 +43,43 @@ def make_hull(vertices, params): verts, faces = [], [] bm = bmesh_from_pydata(vertices, [], []) + # invoke the right convex hull function if params.hull_mode == '3D': - res = bmesh.ops.convex_hull(bm, input=bm_verts, use_existing_faces=False) - print(res) - verts, _, faces = pydata_from_bmesh(bm) - bm.clear() - bm.free() + unused_v_indices = [v.index for v in res["geom_unused"] if isinstance(v, bpy.types.BMVert)] elif params.hull_mode == '2D': - - if params.plane == 'Z': - vertices_2d = [(v[0], v[1]) for v in vertices] - elif params.plane == 'Y': - vertices_2d = [(v[0], v[2]) for v in vertices] - else: - vertices_2d = [(v[1], v[2]) for v in vertices] - + vertices_2d = get2d(params.plane, vertices) GG = mathutils.geometry.convex_hull_2d(vertices_2d) + unused_v_indices = set(GG) - set(range(len(vertices))) + + # returning inside / outside or both + if params.inside and params.outside: + verts, _, faces = pydata_from_bmesh(bm) + else: if params.outside and not params.inside: - unused_v_indices = set(GG) - set(range(len(vertices))) bmesh.ops.delete(bm, geom=[bm.verts[i] for i in unused_v_indices], context=0) + + if params.outside and params.hull_mode == '2D' and params.sort_edges: + # this means 2d convex hull, outside only and sort for something like profile. + # + # + # + ... + verts, _, faces = pydata_from_bmesh(bm) + elif not params.outside and params.inside: + if params.hull_mode == '3D': + verts = [v for idx, v in enumerate(vertices) if idx in unused_v_indices] + faces = [] + + bm.clear() + bm.free() return (verts, faces) + class SvConvexHullNodeMK2(bpy.types.Node, SverchCustomTreeNode): ''' cvh 2D/3D conv.hull''' bl_idname = 'SvConvexHullNodeMK2' @@ -78,7 +98,7 @@ class SvConvexHullNodeMK2(bpy.types.Node, SverchCustomTreeNode): outer = BoolProperty(default=True, update=updateNode) inner = BoolProperty(default=False, update=updateNode) - + sort_edges = BoolProperty(default=True, update=updateNode) def sv_init(self, context): self.inputs.new('VerticesSocket', 'Vertices') -- GitLab From 13e36da608226c298eb8d69c9e6a0d5d5666c3d1 Mon Sep 17 00:00:00 2001 From: zeffii Date: Thu, 8 Jun 2017 16:14:13 +0200 Subject: [PATCH 05/11] add more boilerplate code --- index.md | 1 + nodes/modifier_make/convex_hull_mk2.py | 27 +++++++++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/index.md b/index.md index 4c06d3056..48592be7e 100644 --- a/index.md +++ b/index.md @@ -100,6 +100,7 @@ LineConnectNodeMK2 SvLatheNode SvConvexHullNode + SvConvexHullNodeMK2 DelaunayTriangulation2DNode Voronoi2DNode SvWafelNode diff --git a/nodes/modifier_make/convex_hull_mk2.py b/nodes/modifier_make/convex_hull_mk2.py index 169566796..ce12fd993 100644 --- a/nodes/modifier_make/convex_hull_mk2.py +++ b/nodes/modifier_make/convex_hull_mk2.py @@ -23,7 +23,7 @@ import mathutils from bpy.props import EnumProperty, BoolProperty from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import Vector_generate +from sverchok.data_structure import Vector_generate, updateNode from sverchok.utils.sv_bmesh_utils import pydata_from_bmesh, bmesh_from_pydata @@ -45,8 +45,9 @@ def make_hull(vertices, params): # invoke the right convex hull function if params.hull_mode == '3D': + bm_verts = bm.verts[:] res = bmesh.ops.convex_hull(bm, input=bm_verts, use_existing_faces=False) - unused_v_indices = [v.index for v in res["geom_unused"] if isinstance(v, bpy.types.BMVert)] + unused_v_indices = [v.index for v in res["geom_unused"]] elif params.hull_mode == '2D': vertices_2d = get2d(params.plane, vertices) @@ -64,11 +65,9 @@ def make_hull(vertices, params): if params.outside and params.hull_mode == '2D' and params.sort_edges: # this means 2d convex hull, outside only and sort for something like profile. # - # - # ... - - verts, _, faces = pydata_from_bmesh(bm) + else: + verts, _, faces = pydata_from_bmesh(bm) elif not params.outside and params.inside: if params.hull_mode == '3D': @@ -96,8 +95,8 @@ class SvConvexHullNodeMK2(bpy.types.Node, SverchCustomTreeNode): description="track 2D plane", default="X", items=plane_choices, update=updateNode ) - outer = BoolProperty(default=True, update=updateNode) - inner = BoolProperty(default=False, update=updateNode) + outside = BoolProperty(default=True, update=updateNode) + inside = BoolProperty(default=False, update=updateNode) sort_edges = BoolProperty(default=True, update=updateNode) def sv_init(self, context): @@ -107,7 +106,17 @@ class SvConvexHullNodeMK2(bpy.types.Node, SverchCustomTreeNode): self.outputs.new('StringsSocket', 'Polygons') def draw_buttons(self, context, layout): - pass + col = layout.column(align=True) + col.row().prop(self, 'hull_mode', expand=True) + + frow = col.row() + frow.enabled = (self.hull_mode == '2D') + frow.prop(self, 'plane', expand=True) + + row = col.row(align=True) + row.prop(self, 'inside', toggle=True) + row.prop(self, 'outside', toggle=True) + col.row().prop(self, 'sort_edges', toggle=True) def process(self): -- GitLab From a52cca444ffd3f334171fed36a5d7aa413eac8a6 Mon Sep 17 00:00:00 2001 From: zeffii Date: Thu, 8 Jun 2017 18:19:31 +0200 Subject: [PATCH 06/11] add last bits off fluf code --- nodes/modifier_make/convex_hull_mk2.py | 57 +++++++++++++++++--------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/nodes/modifier_make/convex_hull_mk2.py b/nodes/modifier_make/convex_hull_mk2.py index ce12fd993..8c6eab86d 100644 --- a/nodes/modifier_make/convex_hull_mk2.py +++ b/nodes/modifier_make/convex_hull_mk2.py @@ -41,44 +41,63 @@ def make_hull(vertices, params): return False verts, faces = [], [] - bm = bmesh_from_pydata(vertices, [], []) # invoke the right convex hull function if params.hull_mode == '3D': - bm_verts = bm.verts[:] - res = bmesh.ops.convex_hull(bm, input=bm_verts, use_existing_faces=False) + bm = bmesh_from_pydata(vertices, [], []) + res = bmesh.ops.convex_hull(bm, input=bm.verts[:], use_existing_faces=False) unused_v_indices = [v.index for v in res["geom_unused"]] + # filter + # returning inside / outside or both + if params.inside and params.outside: + verts, _, faces = pydata_from_bmesh(bm) + + elif not params.inside and params.outside: + bmesh.ops.delete(bm, geom=[bm.verts[i] for i in unused_v_indices], context=1) + verts, _, faces = pydata_from_bmesh(bm) + + elif not params.outside and params.inside: + used_v_indices = set(range(len(vertices))) - set(unused_v_indices) + bmesh.ops.delete(bm, geom=[bm.verts[i] for i in used_v_indices], context=1) + verts = [v[:] for idx, v in enumerate(vertices) if idx in unused_v_indices] + faces = [] + else: + return ([], []) + elif params.hull_mode == '2D': vertices_2d = get2d(params.plane, vertices) - GG = mathutils.geometry.convex_hull_2d(vertices_2d) - unused_v_indices = set(GG) - set(range(len(vertices))) + used_v_indices = mathutils.geometry.convex_hull_2d(vertices_2d) + unused_v_indices = set(range(len(vertices))) - set(used_v_indices) - # returning inside / outside or both - if params.inside and params.outside: - verts, _, faces = pydata_from_bmesh(bm) + bm = bmesh_from_pydata(vertices, [], [used_v_indices]) - else: - if params.outside and not params.inside: - bmesh.ops.delete(bm, geom=[bm.verts[i] for i in unused_v_indices], context=0) + # filter + # returning inside / outside or both + if params.inside and params.outside: + verts, _, faces = pydata_from_bmesh(bm) - if params.outside and params.hull_mode == '2D' and params.sort_edges: - # this means 2d convex hull, outside only and sort for something like profile. - # + elif not params.inside and params.outside: + bmesh.ops.delete(bm, geom=[bm.verts[i] for i in unused_v_indices], context=1) + if params.sort_edges: ... - else: - verts, _, faces = pydata_from_bmesh(bm) + verts, _, faces = pydata_from_bmesh(bm) elif not params.outside and params.inside: - if params.hull_mode == '3D': - verts = [v for idx, v in enumerate(vertices) if idx in unused_v_indices] - faces = [] + bmesh.ops.delete(bm, geom=[bm.verts[i] for i in used_v_indices], context=1) + verts, _, faces = pydata_from_bmesh(bm) + + else: + return ([], []) + + bm.clear() bm.free() return (verts, faces) + class SvConvexHullNodeMK2(bpy.types.Node, SverchCustomTreeNode): ''' cvh 2D/3D conv.hull''' bl_idname = 'SvConvexHullNodeMK2' -- GitLab From a074ab0199549111bdc6f66620a7448b093f5130 Mon Sep 17 00:00:00 2001 From: zeffii Date: Thu, 8 Jun 2017 18:20:42 +0200 Subject: [PATCH 07/11] add last bits off fluf code 2 --- nodes/modifier_make/convex_hull_mk2.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/nodes/modifier_make/convex_hull_mk2.py b/nodes/modifier_make/convex_hull_mk2.py index 8c6eab86d..95d15507f 100644 --- a/nodes/modifier_make/convex_hull_mk2.py +++ b/nodes/modifier_make/convex_hull_mk2.py @@ -62,8 +62,7 @@ def make_hull(vertices, params): bmesh.ops.delete(bm, geom=[bm.verts[i] for i in used_v_indices], context=1) verts = [v[:] for idx, v in enumerate(vertices) if idx in unused_v_indices] faces = [] - else: - return ([], []) + elif params.hull_mode == '2D': vertices_2d = get2d(params.plane, vertices) @@ -87,10 +86,6 @@ def make_hull(vertices, params): bmesh.ops.delete(bm, geom=[bm.verts[i] for i in used_v_indices], context=1) verts, _, faces = pydata_from_bmesh(bm) - else: - return ([], []) - - bm.clear() bm.free() -- GitLab From 5c35d75b82ba962d65224314195e3e2b9202e6e1 Mon Sep 17 00:00:00 2001 From: zeffii Date: Thu, 8 Jun 2017 18:29:27 +0200 Subject: [PATCH 08/11] add last bits --- nodes/modifier_make/convex_hull_mk2.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/nodes/modifier_make/convex_hull_mk2.py b/nodes/modifier_make/convex_hull_mk2.py index 95d15507f..02602647b 100644 --- a/nodes/modifier_make/convex_hull_mk2.py +++ b/nodes/modifier_make/convex_hull_mk2.py @@ -40,7 +40,7 @@ def make_hull(vertices, params): if not vertices: return False - verts, faces = [], [] + verts, faces = [], [[]] # invoke the right convex hull function if params.hull_mode == '3D': @@ -61,7 +61,6 @@ def make_hull(vertices, params): used_v_indices = set(range(len(vertices))) - set(unused_v_indices) bmesh.ops.delete(bm, geom=[bm.verts[i] for i in used_v_indices], context=1) verts = [v[:] for idx, v in enumerate(vertices) if idx in unused_v_indices] - faces = [] elif params.hull_mode == '2D': @@ -84,7 +83,7 @@ def make_hull(vertices, params): elif not params.outside and params.inside: bmesh.ops.delete(bm, geom=[bm.verts[i] for i in used_v_indices], context=1) - verts, _, faces = pydata_from_bmesh(bm) + verts, _, _ = pydata_from_bmesh(bm) bm.clear() -- GitLab From ffc214c7a23231ade2bd2f2da2ec349d3c294da4 Mon Sep 17 00:00:00 2001 From: zeffii Date: Thu, 8 Jun 2017 21:43:40 +0200 Subject: [PATCH 09/11] reshuffle UI --- nodes/modifier_make/convex_hull_mk2.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/nodes/modifier_make/convex_hull_mk2.py b/nodes/modifier_make/convex_hull_mk2.py index 02602647b..177b0a968 100644 --- a/nodes/modifier_make/convex_hull_mk2.py +++ b/nodes/modifier_make/convex_hull_mk2.py @@ -48,8 +48,6 @@ def make_hull(vertices, params): res = bmesh.ops.convex_hull(bm, input=bm.verts[:], use_existing_faces=False) unused_v_indices = [v.index for v in res["geom_unused"]] - # filter - # returning inside / outside or both if params.inside and params.outside: verts, _, faces = pydata_from_bmesh(bm) @@ -70,8 +68,6 @@ def make_hull(vertices, params): bm = bmesh_from_pydata(vertices, [], [used_v_indices]) - # filter - # returning inside / outside or both if params.inside and params.outside: verts, _, faces = pydata_from_bmesh(bm) @@ -79,6 +75,9 @@ def make_hull(vertices, params): bmesh.ops.delete(bm, geom=[bm.verts[i] for i in unused_v_indices], context=1) if params.sort_edges: ... + verts = [] + addv = verts.append + verts, _, faces = pydata_from_bmesh(bm) elif not params.outside and params.inside: @@ -122,14 +121,20 @@ class SvConvexHullNodeMK2(bpy.types.Node, SverchCustomTreeNode): col = layout.column(align=True) col.row().prop(self, 'hull_mode', expand=True) - frow = col.row() - frow.enabled = (self.hull_mode == '2D') - frow.prop(self, 'plane', expand=True) - row = col.row(align=True) row.prop(self, 'inside', toggle=True) row.prop(self, 'outside', toggle=True) - col.row().prop(self, 'sort_edges', toggle=True) + + show_me = (self.hull_mode == '2D') + col.separator() + + frow = col.row() + frow.enabled = show_me + frow.prop(self, 'plane', expand=True) + + frow2 = col.row() + frow2.enabled = show_me + frow2.prop(self, 'sort_edges', text='Topo Sort', toggle=True) def process(self): -- GitLab From 7427877bf1e59add983b77ddbe11e6739da1277d Mon Sep 17 00:00:00 2001 From: zeffii Date: Thu, 8 Jun 2017 22:23:00 +0200 Subject: [PATCH 10/11] add toposort backend --- nodes/modifier_make/convex_hull_mk2.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/nodes/modifier_make/convex_hull_mk2.py b/nodes/modifier_make/convex_hull_mk2.py index 177b0a968..88762313d 100644 --- a/nodes/modifier_make/convex_hull_mk2.py +++ b/nodes/modifier_make/convex_hull_mk2.py @@ -23,7 +23,7 @@ import mathutils from bpy.props import EnumProperty, BoolProperty from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import Vector_generate, updateNode +from sverchok.data_structure import updateNode from sverchok.utils.sv_bmesh_utils import pydata_from_bmesh, bmesh_from_pydata @@ -74,11 +74,12 @@ def make_hull(vertices, params): elif not params.inside and params.outside: bmesh.ops.delete(bm, geom=[bm.verts[i] for i in unused_v_indices], context=1) if params.sort_edges: - ... - verts = [] + bm.faces.ensure_lookup_table() addv = verts.append - - verts, _, faces = pydata_from_bmesh(bm) + _ = [addv(v.co[:]) for v in bm.faces[0].verts[:]] + faces = [list(range(len(verts)))] + else: + verts, _, faces = pydata_from_bmesh(bm) elif not params.outside and params.inside: bmesh.ops.delete(bm, geom=[bm.verts[i] for i in used_v_indices], context=1) @@ -140,7 +141,7 @@ class SvConvexHullNodeMK2(bpy.types.Node, SverchCustomTreeNode): if self.inputs['Vertices'].is_linked: - verts = Vector_generate(self.inputs['Vertices'].sv_get()) + verts = self.inputs['Vertices'].sv_get() verts_out = [] polys_out = [] -- GitLab From f15dfc5664f839d56d18cd3a098cf09cd4b6849b Mon Sep 17 00:00:00 2001 From: zeffii Date: Thu, 8 Jun 2017 22:49:00 +0200 Subject: [PATCH 11/11] hide toposort during the retrn in inside verts --- nodes/modifier_make/convex_hull_mk2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nodes/modifier_make/convex_hull_mk2.py b/nodes/modifier_make/convex_hull_mk2.py index 88762313d..46e9d467b 100644 --- a/nodes/modifier_make/convex_hull_mk2.py +++ b/nodes/modifier_make/convex_hull_mk2.py @@ -134,7 +134,7 @@ class SvConvexHullNodeMK2(bpy.types.Node, SverchCustomTreeNode): frow.prop(self, 'plane', expand=True) frow2 = col.row() - frow2.enabled = show_me + frow2.enabled = show_me and not self.inside frow2.prop(self, 'sort_edges', text='Topo Sort', toggle=True) def process(self): -- GitLab