Skip to content

Commit

Permalink
- Append mask modes (one can select mask node - by mask or by indices)
Browse files Browse the repository at this point in the history
- append inversion of mask (output index of sites can by inverted)
  • Loading branch information
satabol committed Apr 5, 2024
1 parent 47b402d commit c340eab
Showing 1 changed file with 57 additions and 1 deletion.
58 changes: 57 additions & 1 deletion nodes/spatial/voronoi_on_mesh_mk2.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
from sverchok.utils.sv_bmesh_utils import recalc_normals
from sverchok.utils.sv_mesh_utils import mesh_join
from sverchok.utils.voronoi3d import voronoi_on_mesh
import numpy as np


class SvVoronoiOnMeshNodeMK3(SverchCustomTreeNode, bpy.types.Node):
Expand Down Expand Up @@ -80,6 +81,30 @@ def update_sockets(self, context):
default = 'FLAT',
update = updateNode)

def updateMaskMode(self, context):
if self.mask_mode=='MASK':
self.inputs["Mask"].label = "Mask of Sites"
elif self.mask_mode=='INDEXES':
self.inputs["Mask"].label = "Indexes of Sites"
updateNode(self, context)

mask_modes = [
('MASK', "Mask of sites", "Boolean value (0/1) to mask of sites", 0),
('INDEXES', "Index of sites", "Indexes of sites to mask", 1),
]
mask_mode : EnumProperty(
name = "Mask mode",
items = mask_modes,
default = 'MASK',
update = updateMaskMode)

mask_inversion : BoolProperty(
name = "Inversion",
default = False,
description="Invert mask of sites",
update = updateNode)


accuracy : IntProperty(
name = "Accuracy",
description = "Accuracy for mesh bisecting procedure",
Expand All @@ -92,7 +117,7 @@ def sv_init(self, context):
self.inputs.new('SvStringsSocket', 'Faces')
self.inputs.new('SvVerticesSocket', "Sites")
# self.inputs.new('SvStringsSocket', 'Thickness').prop_name = 'thickness'
self.inputs.new('SvStringsSocket', "Mask")
self.inputs.new('SvStringsSocket', "Mask").label = "Mask of Sites"
self.inputs.new('SvStringsSocket', 'Spacing').prop_name = 'spacing'
self.outputs.new('SvVerticesSocket', "Vertices")
self.outputs.new('SvStringsSocket', "Edges")
Expand All @@ -104,6 +129,9 @@ def sv_init(self, context):
def draw_buttons(self, context, layout):
layout.label(text="Mode:")
layout.prop(self, "mode", text='')
split = layout.column().split(factor=0.6)
split.column().prop(self, "mask_mode", text='')
split.column().prop(self, "mask_inversion", text='Invert')
if self.mode == 'VOLUME':
layout.prop(self, 'normals')
layout.label(text='Output nesting:')
Expand Down Expand Up @@ -155,6 +183,34 @@ def process(self):
new_sites_idx = []
new_sites_verts = []
for verts, faces, sites, spacing, mask in zip_long_repeat(*params):
# if mask is zero or not connected then do not mask any. Except of inversion,
if not mask:
np_mask = np.ones(len(sites), dtype=bool)
if self.mask_inversion==True:
np_mask = np.invert(np_mask)
mask = np_mask.tolist()
else:
if self.mask_mode=='MASK':
if self.mask_inversion==True:
mask = list( map( lambda v: False if v==0 else True, mask) )
mask = mask[:len(sites)]
np_mask = np.zeros(len(sites), dtype=bool)
np_mask[0:len(mask)]=mask
np_mask = np.invert(np_mask)
mask = np_mask.tolist()
pass
elif self.mask_mode=='INDEXES':
mask_len = len(sites)
mask_range = []
for x in mask:
if -mask_len<x<mask_len:
mask_range.append(x)
np_mask = np.ones(len(sites), dtype=bool)
np_mask[mask_range] = False
if self.mask_inversion==True:
np_mask = np.invert(np_mask)
mask = np_mask.tolist()

verts, edges, faces, used_sites_idx, used_sites_verts = voronoi_on_mesh(verts, faces, sites, thickness=0,
spacing = spacing,
#clip_inner = self.clip_inner, clip_outer = self.clip_outer,
Expand Down

0 comments on commit c340eab

Please sign in to comment.