def process(self): self.pre_setup() if not all([s.is_linked for s in self.inputs if s.is_mandatory]): return if not any([s.is_linked for s in self.outputs]): return params = [] input_nesting = [] for s in self.inputs: input_nesting.append(s.nesting_level) default = DEFAULT_TYPES[s.default_mode] if s.pre_processing == 'ONE_ITEM': p = one_item_list( ensure_min_nesting( s.sv_get(deepcopy=False, default=default), 2)) else: p = ensure_min_nesting( s.sv_get(deepcopy=False, default=default), s.nesting_level) params.append(p) one_output = len(self.outputs) == 1 if self.build_bmesh: params, input_nesting = self.update_params_to_bmesh( params, input_nesting) result = process_matched(params, self.process_data, self.list_match, input_nesting, len(self.outputs)) if one_output: self.outputs[0].sv_set(result) else: for s, r in zip(self.outputs, result): if s.is_linked: s.sv_set(r)
def process(self): if not any(socket.is_linked for socket in self.outputs): return verts_in = self.inputs['Vertices'].sv_get(deepcopy=False) faces_in = self.inputs['Faces'].sv_get(deepcopy=False) sites_in = self.inputs['Sites'].sv_get(deepcopy=False) #thickness_in = self.inputs['Thickness'].sv_get() spacing_in = self.inputs['Spacing'].sv_get(deepcopy=False) verts_in = ensure_nesting_level(verts_in, 4) input_level = get_data_nesting_level(sites_in) sites_in = ensure_nesting_level(sites_in, 4) faces_in = ensure_nesting_level(faces_in, 4) #thickness_in = ensure_nesting_level(thickness_in, 2) spacing_in = ensure_min_nesting(spacing_in, 2) nested_output = input_level > 3 precision = 10 ** (-self.accuracy) verts_out = [] edges_out = [] faces_out = [] sites_out = [] for params in zip_long_repeat(verts_in, faces_in, sites_in, spacing_in): new_verts = [] new_edges = [] new_faces = [] new_sites = [] for verts, faces, sites, spacing in zip_long_repeat(*params): verts, edges, faces, sites = voronoi_on_mesh(verts, faces, sites, thickness=0, spacing = spacing, #clip_inner = self.clip_inner, clip_outer = self.clip_outer, do_clip=True, clipping=None, mode = self.mode, precision = precision) if self.mode == 'VOLUME' and self.normals: verts, edges, faces = recalc_normals(verts, edges, faces, loop=True) if self.join_mode == 'FLAT': new_verts.extend(verts) new_edges.extend(edges) new_faces.extend(faces) new_sites.extend(sites) elif self.join_mode == 'SEPARATE': new_verts.append(verts) new_edges.append(edges) new_faces.append(faces) new_sites.append(sites) else: # JOIN verts, edges, faces = mesh_join(verts, edges, faces) new_verts.append(verts) new_edges.append(edges) new_faces.append(faces) new_sites.append(sites) if nested_output: verts_out.append(new_verts) edges_out.append(new_edges) faces_out.append(new_faces) sites_out.append(new_sites) else: verts_out.extend(new_verts) edges_out.extend(new_edges) faces_out.extend(new_faces) sites_out.extend(new_sites) self.outputs['Vertices'].sv_set(verts_out) self.outputs['Edges'].sv_set(edges_out) self.outputs['Faces'].sv_set(faces_out)
def process(self): if not any(socket.is_linked for socket in self.outputs): return solid_in = self.inputs['Solid'].sv_get() sites_in = self.inputs['Sites'].sv_get() inset_in = self.inputs['Inset'].sv_get() solid_in = ensure_nesting_level(solid_in, 2, data_types=(Part.Shape,)) input_level = get_data_nesting_level(sites_in) sites_in = ensure_nesting_level(sites_in, 4) inset_in = ensure_min_nesting(inset_in, 2) nested_output = input_level > 3 need_inner = self.outputs['InnerSolid'].is_linked need_outer = self.outputs['OuterSolid'].is_linked precision = 10 ** (-self.accuracy) inner_fragments_out = [] outer_fragments_out = [] for params in zip_long_repeat(solid_in, sites_in, inset_in): new_inner_fragments = [] new_outer_fragments = [] for solid, sites, inset in zip_long_repeat(*params): verts, edges, faces = voronoi_on_solid(solid, sites, do_clip=True, clipping=None) if isinstance(inset, list): inset = repeat_last_for_length(inset, len(sites)) else: inset = [inset for i in range(len(sites))] verts = self.scale_cells(verts, sites, inset, precision) fragments = [svmesh_to_solid(vs, fs, precision, method=BMESH, remove_splitter=False) for vs, fs in zip(verts, faces)] if self.mode == 'SURFACE': if solid.Shells: shell = solid.Shells[0] else: shell = Part.Shell(solid.Faces) src = shell else: # VOLUME src = solid if need_inner: inner = [src.common(fragment) for fragment in fragments] if self.flat_output: new_inner_fragments.extend(inner) else: new_inner_fragments.append(inner) if need_outer: outer = [src.cut(fragments)] if self.flat_output: new_outer_fragments.extend(outer) else: new_outer_fragments.append(outer) if nested_output: inner_fragments_out.append(new_inner_fragments) outer_fragments_out.append(new_outer_fragments) else: inner_fragments_out.extend(new_inner_fragments) outer_fragments_out.extend(new_outer_fragments) self.outputs['InnerSolid'].sv_set(inner_fragments_out) self.outputs['OuterSolid'].sv_set(outer_fragments_out)