From a0e6361c199107c90cf475bb85c58ebc179fd3d7 Mon Sep 17 00:00:00 2001 From: Durman Date: Sun, 28 Feb 2021 11:21:29 +0400 Subject: [PATCH 01/35] add main logic --- index.md | 2 + nodes/object_nodes/set_loop_normals.py | 58 ++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 nodes/object_nodes/set_loop_normals.py diff --git a/index.md b/index.md index 583143a34a..1f61b800a6 100644 --- a/index.md +++ b/index.md @@ -623,6 +623,8 @@ SvPointOnMeshNodeMK2 SvOBJRayCastNodeMK2 SvSCNRayCastNodeMK2 + SvSetLoopNormalsNode + SvSetCollection ## Scene SvObjectsNodeMK3 diff --git a/nodes/object_nodes/set_loop_normals.py b/nodes/object_nodes/set_loop_normals.py new file mode 100644 index 0000000000..0045b7bfdf --- /dev/null +++ b/nodes/object_nodes/set_loop_normals.py @@ -0,0 +1,58 @@ +# This file is part of project Sverchok. It's copyrighted by the contributors +# recorded in the version control history of the file, available from +# its original location https://github.com/nortikin/sverchok/commit/master +# +# SPDX-License-Identifier: GPL3 +# License-Filename: LICENSE + + +import bpy + +from sverchok.node_tree import SverchCustomTreeNode +from sverchok.data_structure import updateNode, repeat_last, fixed_iter + + +class SvSetLoopNormalsNode(SverchCustomTreeNode, bpy.types.Node): + """ + Triggers: # todo + + + """ + bl_idname = 'SvSetLoopNormalsNode' + bl_label = 'Set loop normals' + bl_icon = 'NORMALS_VERTEX' + + mode: bpy.props.EnumProperty(items=[(i, i, '') for i in ['vertex', 'face']], update=updateNode) + + def draw_buttons(self, context, layout): + layout.prop(self, 'mode', expand=True) + + def sv_init(self, context): + self.inputs.new('SvObjectSocket', 'Object') + self.inputs.new('SvVerticesSocket', 'Normals') + self.outputs.new('SvObjectSocket', "Object") + + def process(self): + if not self.inputs['Object'].is_linked: + return + + objects = self.inputs['Object'].sv_get(deepcopy=False) + normals = self.inputs['Normals'].sv_get(deepcopy=False, default=[]) + + for obj, norms in zip(objects, repeat_last(normals)): + + if self.mode == 'face': + n_per_loop = [(0, 0, 0) for _ in range(len(obj.data.loops))] + for p, n in zip(obj.data.polygons, repeat_last(norms)): + for i in range(p.loop_start, p.loop_start + p.loop_total): + n_per_loop[i] = n + obj.data.normals_split_custom_set(n_per_loop) + else: + obj.data.normals_split_custom_set_from_vertices(list(fixed_iter(norms, len(obj.data.vertices)))) + + obj.data.update() + + self.outputs['Object'].sv_set(objects) + + +register, unregister = bpy.utils.register_classes_factory([SvSetLoopNormalsNode]) From 3dd1fd109dc396e7cc02b01801cd32a438dff70e Mon Sep 17 00:00:00 2001 From: Durman Date: Sun, 28 Feb 2021 13:25:26 +0400 Subject: [PATCH 02/35] use another input format --- index.md | 1 - nodes/object_nodes/set_loop_normals.py | 37 +++++++++++++------------- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/index.md b/index.md index 1f61b800a6..5c57984250 100644 --- a/index.md +++ b/index.md @@ -624,7 +624,6 @@ SvOBJRayCastNodeMK2 SvSCNRayCastNodeMK2 SvSetLoopNormalsNode - SvSetCollection ## Scene SvObjectsNodeMK3 diff --git a/nodes/object_nodes/set_loop_normals.py b/nodes/object_nodes/set_loop_normals.py index 0045b7bfdf..8637ecc8a5 100644 --- a/nodes/object_nodes/set_loop_normals.py +++ b/nodes/object_nodes/set_loop_normals.py @@ -7,9 +7,10 @@ import bpy +from mathutils import Vector from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode, repeat_last, fixed_iter +from sverchok.data_structure import updateNode, repeat_last class SvSetLoopNormalsNode(SverchCustomTreeNode, bpy.types.Node): @@ -22,35 +23,33 @@ class SvSetLoopNormalsNode(SverchCustomTreeNode, bpy.types.Node): bl_label = 'Set loop normals' bl_icon = 'NORMALS_VERTEX' - mode: bpy.props.EnumProperty(items=[(i, i, '') for i in ['vertex', 'face']], update=updateNode) + normalize: bpy.props.BoolProperty(name="Normalize", default=True, description="Normalize input normals", + update=updateNode) def draw_buttons(self, context, layout): - layout.prop(self, 'mode', expand=True) + layout.prop(self, 'normalize') def sv_init(self, context): self.inputs.new('SvObjectSocket', 'Object') - self.inputs.new('SvVerticesSocket', 'Normals') self.outputs.new('SvObjectSocket', "Object") + self.inputs.new('SvVerticesSocket', "Vert normals") + self.inputs.new('SvStringsSocket', "Faces") def process(self): - if not self.inputs['Object'].is_linked: - return + objects = self.inputs['Object'].sv_get(deepcopy=False, default=[]) - objects = self.inputs['Object'].sv_get(deepcopy=False) - normals = self.inputs['Normals'].sv_get(deepcopy=False, default=[]) + v_normals = self.inputs['Vert normals'].sv_get(deepcopy=False, default=[]) + faces = self.inputs['Faces'].sv_get(deepcopy=False, default=[]) - for obj, norms in zip(objects, repeat_last(normals)): + for obj, v_ns, fs in zip(objects, repeat_last(v_normals), repeat_last(faces)): + obj.data.use_auto_smooth = True - if self.mode == 'face': - n_per_loop = [(0, 0, 0) for _ in range(len(obj.data.loops))] - for p, n in zip(obj.data.polygons, repeat_last(norms)): - for i in range(p.loop_start, p.loop_start + p.loop_total): - n_per_loop[i] = n - obj.data.normals_split_custom_set(n_per_loop) - else: - obj.data.normals_split_custom_set_from_vertices(list(fixed_iter(norms, len(obj.data.vertices)))) - - obj.data.update() + n_per_loop = [(0, 0, 0) for _ in range(len(obj.data.loops))] + for me_p, f in zip(obj.data.polygons, fs): + for l_i, f_i in zip(range(me_p.loop_start, me_p.loop_start + me_p.loop_total), repeat_last(f)): + normal = v_ns[f_i] + n_per_loop[l_i] = Vector(normal).normalized() if self.normalize else normal + obj.data.normals_split_custom_set(n_per_loop) self.outputs['Object'].sv_set(objects) From 49bf48951b6af2b32658dd61a198922e07a93f85 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Sun, 7 Mar 2021 14:08:40 +0100 Subject: [PATCH 03/35] Add menu fix (#3959) * add menu fix * Almost perfect * seems done * Deleting Monkey Patch * remove unnecesary import * cleaning * cleaning 2 --- __init__.py | 4 +- menu.py | 15 +++----- ui/nodeview_add_menu.py | 63 ------------------------------- ui/nodeview_space_menu.py | 79 +++++++++++++++++++++++++++++++++++---- 4 files changed, 79 insertions(+), 82 deletions(-) delete mode 100644 ui/nodeview_add_menu.py diff --git a/__init__.py b/__init__.py index 04554282dd..7e8abf0fba 100755 --- a/__init__.py +++ b/__init__.py @@ -69,7 +69,7 @@ from sverchok.core import reload_event, handle_reload_event from sverchok.utils import utils_modules from sverchok.ui import ui_modules -from sverchok.ui.nodeview_add_menu import perform_menu_monkey_patch + from sverchok.utils.profile import profiling_startup imported_modules = init_architecture(__name__, utils_modules, ui_modules) @@ -92,7 +92,7 @@ def register(): if reload_event: data_structure.RELOAD_EVENT = True menu.reload_menu() - # perform_menu_monkey_patch() <-- this hijacks other custom node trees + def unregister(): sverchok.utils.clear_node_classes() diff --git a/menu.py b/menu.py index e512084c97..e2b49530e6 100644 --- a/menu.py +++ b/menu.py @@ -485,7 +485,7 @@ def make_categories(): items=node_items)) node_count += len(nodes) node_categories.append(SverchNodeCategory("SVERCHOK_MONAD", "Monad", items=sv_group_items)) - + SverchNodeItem.new('SvMonadInfoNode') return node_categories, node_count, original_categories def register_node_panels(identifier, std_menu): @@ -593,11 +593,10 @@ def unregister_node_panels(): def reload_menu(): menu, node_count, original_categories = make_categories() - if 'SVERCHOK' in nodeitems_utils._node_categories: + if hasattr(bpy.types, "SV_PT_NodesTPanel"): unregister_node_panels() - nodeitems_utils.unregister_node_categories("SVERCHOK") unregister_node_add_operators() - nodeitems_utils.register_node_categories("SVERCHOK", menu) + register_node_panels("SVERCHOK", menu) register_node_add_operators() @@ -632,10 +631,8 @@ def register(): global logger logger = getLogger("menu") menu, node_count, original_categories = make_categories() - if 'SVERCHOK' in nodeitems_utils._node_categories: + if hasattr(bpy.types, "SV_PT_NodesTPanel"): unregister_node_panels() - nodeitems_utils.unregister_node_categories("SVERCHOK") - nodeitems_utils.register_node_categories("SVERCHOK", menu) categories = [(category.identifier, category.name, category.name, i) for i, category in enumerate(menu)] bpy.types.Scene.sv_selected_category = bpy.props.EnumProperty( @@ -656,9 +653,7 @@ def register(): print(f"sv: {node_count} nodes.") def unregister(): - if 'SVERCHOK' in nodeitems_utils._node_categories: - unregister_node_panels() - nodeitems_utils.unregister_node_categories("SVERCHOK") + unregister_node_panels() unregister_node_add_operators() bpy.utils.unregister_class(SvResetNodeSearchOperator) del bpy.types.Scene.sv_selected_category diff --git a/ui/nodeview_add_menu.py b/ui/nodeview_add_menu.py deleted file mode 100644 index 1277801c53..0000000000 --- a/ui/nodeview_add_menu.py +++ /dev/null @@ -1,63 +0,0 @@ -# -*- coding: utf-8 -*- -# ##### 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 ##### - -''' -zeffii 2020. -''' - -import bpy -import nodeitems_utils -from bpy.app.translations import contexts as i18n_contexts - -def is_sverchok_editor(context): - sv_tree_types = {'SverchCustomTreeType', 'SverchGroupTreeType'} - tree_type = context.space_data.tree_type - if tree_type in sv_tree_types: - return True - -class SVNODE_MT_add(bpy.types.Menu): - bl_space_type = 'NODE_EDITOR' - bl_label = "Add" - bl_translation_context = i18n_contexts.operator_default - - def draw(self, context): - layout = self.layout - - if is_sverchok_editor(context): - layout.operator_context = 'INVOKE_REGION_WIN' - layout.operator("node.sv_extra_search", text="Search", icon='OUTLINER_DATA_FONT') - else: - layout.operator_context = 'INVOKE_DEFAULT' - props = layout.operator("node.add_search", text="Search...", icon='VIEWZOOM') - props.use_transform = True - - layout.separator() - - # actual node submenus are defined by draw functions from node categories - nodeitems_utils.draw_node_categories_menu(self, context) - -def perform_menu_monkey_patch(): - # replace the default Add menu, and update it with sverchok specific search - bpy.types.NODE_MT_add.draw = SVNODE_MT_add.draw - - # replace the default Node Categories menu with our implementation - NC = nodeitems_utils._node_categories - SV = NC['SVERCHOK'] - SVcatlist, sv_draw, SvCats = SV - NC['SVERCHOK'] = (SVcatlist, bpy.types.NODEVIEW_MT_Dynamic_Menu.draw, SvCats) diff --git a/ui/nodeview_space_menu.py b/ui/nodeview_space_menu.py index f797fe31ab..d14798dcdf 100644 --- a/ui/nodeview_space_menu.py +++ b/ui/nodeview_space_menu.py @@ -26,11 +26,19 @@ import bpy -from sverchok.menu import make_node_cats, draw_add_node_operator, is_submenu_call, get_submenu_call_name, compose_submenu_name +from sverchok.menu import ( + make_node_cats, + draw_add_node_operator, + is_submenu_call, + get_submenu_call_name, + compose_submenu_name, + draw_node_ops as monad_node_ops) + from sverchok.utils import get_node_class_reference from sverchok.utils.extra_categories import get_extra_categories from sverchok.ui.sv_icons import node_icon, icon, get_icon_switch, custom_icon from sverchok.ui import presets +import nodeitems_utils # from nodeitems_utils import _node_categories sv_tree_types = {'SverchCustomTreeType', 'SverchGroupTreeType'} @@ -75,7 +83,7 @@ def category_has_nodes(cat_name): ["NODEVIEW_MT_AddScene", 'SCENE_DATA'], ["NODEVIEW_MT_AddExchange", 'SCENE_DATA'], ["NODEVIEW_MT_AddLayout", 'NODETREE'], - ["NODE_MT_category_SVERCHOK_BPY_Data", "BLENDER"], + ["NODEVIEW_MT_AddBPYData", "BLENDER"], ["separator"], ["NODEVIEW_MT_AddScript", "WORDWRAP_ON"], ["NODEVIEW_MT_AddNetwork", "SYSTEM"], @@ -163,8 +171,8 @@ def draw(self, context): layout = self.layout layout.operator_context = 'INVOKE_REGION_WIN' - if self.bl_idname == 'NODEVIEW_MT_Dynamic_Menu': - layout.operator("node.sv_extra_search", text="Search", icon='OUTLINER_DATA_FONT') + # if self.bl_idname == 'NODEVIEW_MT_Dynamic_Menu': + layout.operator("node.sv_extra_search", text="Search", icon='OUTLINER_DATA_FONT') for item in menu_structure: if item[0] == 'separator': @@ -211,6 +219,14 @@ def draw(self, context): layout_draw_categories(self.layout, self.bl_label, node_cats[self.bl_label]) layout.menu("NODEVIEW_MT_AddGeneratorsExt", **icon('PLUGIN')) +class NODEVIEW_MT_AddBPYData(bpy.types.Menu): + bl_label = "BPY Data" + + def draw(self, context): + layout = self.layout + layout_draw_categories(self.layout, self.bl_label, node_cats['BPY Data']) + layout_draw_categories(self.layout, self.bl_label, node_cats['Objects']) + class NODEVIEW_MT_AddModifiers(bpy.types.Menu): bl_label = "Modifiers" @@ -276,6 +292,41 @@ def draw(self, context): layout.operator('node.add_node_output_input', text="Group output").node_type = 'output' layout.operator('node.add_group_tree_from_selected') +class NODE_MT_category_SVERCHOK_MONAD(bpy.types.Menu): + bl_label = "Monad" + label = 'Monad' + + def draw(self, context): + + if context is None: + return + space = context.space_data + if not space: + return + ntree = space.edit_tree + if not ntree: + return + layout = self.layout + + monad_node_ops(self, layout, context) + + if ntree.bl_idname == "SverchGroupTreeType": + draw_add_node_operator(layout, "SvMonadInfoNode") + layout.separator() + + for monad in context.blend_data.node_groups: + if monad.bl_idname != "SverchGroupTreeType": + continue + if monad.name == ntree.name: + continue + # make sure class exists + cls_ref = get_node_class_reference(monad.cls_bl_idname) + + if cls_ref and monad.cls_bl_idname and monad.cls_bl_idname: + op = layout.operator('node.add_node', text=monad.name) + op.type = monad.cls_bl_idname + op.use_transform = True + extra_category_menu_classes = dict() @@ -308,8 +359,10 @@ def draw(self, context): NODEVIEW_MT_AddListOps, NODEVIEW_MT_AddModifiers, NODEVIEW_MT_AddGenerators, + NODEVIEW_MT_AddBPYData, NODEVIEW_MT_AddPresetOps, NODE_MT_category_SVERCHOK_GROUP, + NODE_MT_category_SVERCHOK_MONAD, # like magic. # make | NODEVIEW_MT_Add + class name , menu name make_class('GeneratorsExt', "Generators Extended"), @@ -351,15 +404,27 @@ def draw(self, context): make_class('Alphas', "Alpha Nodes"), # NODEVIEW_MT_Solids_Special_Menu ] +def sv_draw_menu(self, context): + + tree_type = context.space_data.tree_type + if not tree_type in sv_tree_types: + return + layout = self.layout + layout.operator_context = "INVOKE_DEFAULT" + + if not any([(g.bl_idname in sv_tree_types) for g in bpy.data.node_groups]): + layout.operator("node.new_node_tree", text="New Sverchok Node Tree", icon="RNA_ADD") + return + + NODEVIEW_MT_Dynamic_Menu.draw(self, context) def register(): - #global menu_class_by_title - #menu_class_by_title = dict() for category in presets.get_category_names(): make_preset_category_menu(category) for class_name in classes: bpy.utils.register_class(class_name) + bpy.types.NODE_MT_add.append(sv_draw_menu) def unregister(): global menu_class_by_title @@ -369,5 +434,5 @@ def unregister(): for category in presets.get_category_names(): if category in preset_category_menus: bpy.utils.unregister_class(preset_category_menus[category]) - + bpy.types.NODE_MT_add.remove(sv_draw_menu) menu_class_by_title = dict() From b777472dc56d2ba7ef48690d23b34052a79d2337 Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Wed, 10 Mar 2021 17:03:42 +0100 Subject: [PATCH 04/35] resolve Python changes to AST module (#3965) * resolve changed ast API * do not print globals * don't throw error immediately after init * remove dangling debug code * add nodes alias * keep pr small * end early! * comment nodes logic --- nodes/object_nodes/getsetprop_mk2.py | 35 +++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/nodes/object_nodes/getsetprop_mk2.py b/nodes/object_nodes/getsetprop_mk2.py index 20f4e0cb62..12f44d8334 100644 --- a/nodes/object_nodes/getsetprop_mk2.py +++ b/nodes/object_nodes/getsetprop_mk2.py @@ -47,14 +47,22 @@ def parse_to_path(p): ''' if isinstance(p, ast.Attribute): - return parse_to_path(p.value)+[("attr", p.attr)] + return parse_to_path(p.value) + [("attr", p.attr)] + elif isinstance(p, ast.Subscript): + if isinstance(p.slice.value, ast.Num): - return parse_to_path(p.value) + [("key", p.slice.value.n)] + return parse_to_path(p.value) + [("key", p.slice.value.n)] + elif isinstance(p.slice.value, (float, int)): + return parse_to_path(p.value) + [("key", p.slice.value)] elif isinstance(p.slice.value, ast.Str): return parse_to_path(p.value) + [("key", p.slice.value.s)] + elif isinstance(p.slice.value, str): + return parse_to_path(p.value) + [("key", p.slice.value)] + elif isinstance(p, ast.Name): return [("name", p.id)] + else: raise NameError @@ -71,16 +79,25 @@ def get_object(path): curr_object = curr_object[value] return curr_object -def apply_alias(eval_str): +def apply_alias(eval_str, nodetree=None): ''' - apply standard aliases - will raise error if it isn't an bpy path ''' if not eval_str.startswith("bpy."): + + # special case for the nodes alias, end early + if eval_str.startswith("nodes") and nodetree: + string_path_to_current_tree = f'bpy.data.node_groups["{nodetree.name}"].nodes' + eval_str = eval_str.replace("nodes", string_path_to_current_tree, 1) + return eval_str + + # all other aliases for alias, expanded in aliases.items(): if eval_str.startswith(alias): eval_str = eval_str.replace(alias, expanded, 1) break + if not eval_str.startswith("bpy."): raise NameError return eval_str @@ -141,7 +158,9 @@ def assign_data(obj, data): "mats": "bpy.data.materials", "M": "bpy.data.materials", "meshes": "bpy.data.meshes", - "texts": "bpy.data.texts" + "texts": "bpy.data.texts", + "ng": "bpy.data.node_groups" + # "nodes": None , this is directly handled in the apply_alias function } types = { @@ -159,7 +178,7 @@ class SvPropNodeMixin(): @property def obj(self): - eval_str = apply_alias(self.prop_name) + eval_str = apply_alias(self.prop_name, nodetree=self.id_data) ast_path = ast.parse(eval_str) path = parse_to_path(ast_path.body[0].value) return get_object(path) @@ -270,8 +289,11 @@ def draw_buttons(self, context, layout): def process(self): + if len(self.inputs) == 0: + return + data = self.inputs[0].sv_get() - eval_str = apply_alias(self.prop_name) + eval_str = apply_alias(self.prop_name, nodetree=self.id_data) ast_path = ast.parse(eval_str) path = parse_to_path(ast_path.body[0].value) obj = get_object(path) @@ -281,6 +303,7 @@ def process(self): try: if isinstance(obj, (int, float, bpy_prop_array)): + obj = get_object(path[:-1]) p_type, value = path[-1] if p_type == "attr": From 971e4b0236c88fe279ff500ab1985a3757d14d29 Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Wed, 10 Mar 2021 21:12:06 +0100 Subject: [PATCH 05/35] small clarification of new aliases --- docs/nodes/object_nodes/getsetprop_mk2.rst | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/nodes/object_nodes/getsetprop_mk2.rst b/docs/nodes/object_nodes/getsetprop_mk2.rst index f97a5b1322..25ee403769 100644 --- a/docs/nodes/object_nodes/getsetprop_mk2.rst +++ b/docs/nodes/object_nodes/getsetprop_mk2.rst @@ -22,19 +22,33 @@ There are also convenience aliases. Instead of writing ``bpy.data.objects['Cube' "mats": "bpy.data.materials", "M": "bpy.data.materials", "meshes": "bpy.data.meshes", - "texts": "bpy.data.texts" + "texts": "bpy.data.texts", + "nodes": node_tree.nodes, + "ng": "bpy.data.node_groups" } useful info for path lookups: Many properties can be right-clicked and have the option to "copy data path" (to your clipboard for pasting), this can help reduce some console probing / documentation reading. -Usually, however, you will need to provide the start of the path yourself. For example: if you copy the path to one of the Color properties in a ColorRamp of a shader, then following will be be copied to the clipboard: +Usually, however, you will need to provide the start of the path yourself. You must provide an explicit path to a distinct node tree. For example: if you copy the path to one of the Color properties in a ColorRamp of a shader, then following will be be copied to the clipboard: ``node_tree.nodes["ColorRamp"].color_ramp.elements[0].color`` , this is not the full path, you will need to add the path to the ``node_tree``, something like: ``bpy.data.materials['Material'].node_tree.nodes["ColorRamp"].color_ramp.elements[0].color``, then the node will know what your intention is. +Alias ``nodes`` +--------------- + +The alias ``nodes`` allows you to reference nodes in the current node tree (ie, a sverchok node tree) by writing:: + + nodes["your node"].inputs[0].default_int_property + +Alias ``ng`` +------------ + +If you are referencing a different sverchok nodetree, you write ``ng["NodeTreeName"].nodes["NodeName]..etc`` + Input ----- From 75a07373be004999d1ca9607b5035786205f1c65 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Thu, 11 Mar 2021 09:15:33 +0100 Subject: [PATCH 06/35] Unique Items Matrix and Quaternion bugfix (#3962) --- nodes/list_mutators/unique_items.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nodes/list_mutators/unique_items.py b/nodes/list_mutators/unique_items.py index b76bee29e9..814123d896 100644 --- a/nodes/list_mutators/unique_items.py +++ b/nodes/list_mutators/unique_items.py @@ -18,6 +18,7 @@ import bpy import numpy as np +from mathutils import Matrix, Quaternion from sverchok.node_tree import SverchCustomTreeNode from sverchok.data_structure import updateNode, changable_sockets @@ -31,7 +32,7 @@ def recursive_unique_items(data, level, linked_outputs, output_numpy): iterable = isinstance(data[0], (list, tuple, np.ndarray)) if not level or not iterable: np_data = np.array(data) - if np_data.dtype == object: + if np_data.dtype == object or isinstance(data[0], (Matrix, Quaternion)): unique, unique_indices, unique_inverse, unique_count = python_unique(data) else: unique, unique_indices, unique_inverse, unique_count = numpy_unique(data, linked_outputs, output_numpy) From 91b748ea72e05824c83f8446645cd4effdd9680e Mon Sep 17 00:00:00 2001 From: Durman Date: Sat, 13 Mar 2021 12:02:10 +0400 Subject: [PATCH 07/35] fixing vectorization --- nodes/object_nodes/set_loop_normals.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nodes/object_nodes/set_loop_normals.py b/nodes/object_nodes/set_loop_normals.py index 8637ecc8a5..b463d7db97 100644 --- a/nodes/object_nodes/set_loop_normals.py +++ b/nodes/object_nodes/set_loop_normals.py @@ -47,7 +47,10 @@ def process(self): n_per_loop = [(0, 0, 0) for _ in range(len(obj.data.loops))] for me_p, f in zip(obj.data.polygons, fs): for l_i, f_i in zip(range(me_p.loop_start, me_p.loop_start + me_p.loop_total), repeat_last(f)): - normal = v_ns[f_i] + try: + normal = v_ns[f_i] + except IndexError: + normal = v_ns[-1] n_per_loop[l_i] = Vector(normal).normalized() if self.normalize else normal obj.data.normals_split_custom_set(n_per_loop) From 3f1ff156dcab76e9e54979c821fbd8fae9d1b40a Mon Sep 17 00:00:00 2001 From: DolphinDream Date: Fri, 12 Mar 2021 23:15:09 -0500 Subject: [PATCH 08/35] Statistics node overhaul fixing bugs + adding new features --- docs/nodes/list_main/statistics.rst | 77 +++-- nodes/list_main/statistics.py | 454 ++++++++++++++++++++++---- ui/fonts/DataLatin.ttf | Bin 0 -> 20992 bytes ui/fonts/DroidSansMono.ttf | Bin 0 -> 119380 bytes ui/fonts/Envy Code R.ttf | Bin 0 -> 89924 bytes ui/fonts/FiraCode-VF.ttf | Bin 0 -> 274516 bytes ui/fonts/Hack-Regular.ttf | Bin 0 -> 309408 bytes ui/fonts/Monoid-Retina.ttf | Bin 0 -> 81928 bytes ui/fonts/OCR-A.ttf | Bin 0 -> 23952 bytes ui/fonts/SaxMono.ttf | Bin 0 -> 103740 bytes ui/fonts/ShareTechMono-Regular.ttf | Bin 0 -> 23976 bytes ui/fonts/digital-7 (mono).ttf | Bin 0 -> 34404 bytes ui/fonts/larabiefont rg.ttf | Bin 0 -> 66632 bytes ui/fonts/monof55.ttf | Bin 0 -> 169452 bytes utils/modules/statistics_functions.py | 41 ++- utils/sv_path_utils.py | 41 +++ utils/sv_stethoscope_helper.py | 12 +- 17 files changed, 520 insertions(+), 105 deletions(-) create mode 100644 ui/fonts/DataLatin.ttf create mode 100644 ui/fonts/DroidSansMono.ttf create mode 100644 ui/fonts/Envy Code R.ttf create mode 100644 ui/fonts/FiraCode-VF.ttf create mode 100644 ui/fonts/Hack-Regular.ttf create mode 100644 ui/fonts/Monoid-Retina.ttf create mode 100644 ui/fonts/OCR-A.ttf create mode 100644 ui/fonts/SaxMono.ttf create mode 100644 ui/fonts/ShareTechMono-Regular.ttf create mode 100644 ui/fonts/digital-7 (mono).ttf create mode 100644 ui/fonts/larabiefont rg.ttf create mode 100644 ui/fonts/monof55.ttf create mode 100644 utils/sv_path_utils.py diff --git a/docs/nodes/list_main/statistics.rst b/docs/nodes/list_main/statistics.rst index c63a29f195..236fd5fd15 100644 --- a/docs/nodes/list_main/statistics.rst +++ b/docs/nodes/list_main/statistics.rst @@ -4,7 +4,7 @@ List Statistics Functionality ------------- -List Statistics node computes various statistical quantities for the values in a list. +List Statistics node computes various statistical quantities for the input values. Inputs ------ @@ -17,42 +17,55 @@ Parameters The **Function** parameter allows to select the statistical function to compute the corresponding statistical quantity for the input values. -+----------------+---------------------+---------+------------------------------------------+ -| Param | Type | Default | Description | -+================+=====================+=========+==========================================+ -| **Function** | Enum | Average | The statistical function applied to | -| | All Statistics | | the input values. | -| | Sum | | | -| | Sum Of Squares | | For "All Statistics" selection the node | -| | Product | | computes and outputs the statistical | -| | Average | | quantities for all the statistical | -| | Geometric Mean | | functions along with their corresponding | -| | Harmonic Mean | | names. | -| | Standard Deviation | | | -| | Root Mean Square | | | -| | Skewness | | | -| | Kurtosis | | | -| | Minimum | | | -| | Maximum | | | -| | Median | | | -| | Percentile | | | -| | Histogram | | | -+----------------+---------------------+---------+------------------------------------------+ -| **Percentage** | Float | 0.75 | The percentage value for the | -| | | | percentile function. [1] | -+----------------+---------------------+---------+------------------------------------------+ -| **Normalize** | Boolean | False | Flag to normalize the histogram bins | -| | | | to the given normalize size. [2] | -+----------------+---------------------+---------+------------------------------------------+ -| **Bins** | Int | 10 | The number of bins in the histogram. [2] | -+----------------+---------------------+---------+------------------------------------------+ -| **Size** | Float | 10.00 | The normalized size of the histogram.[2] | -+----------------+---------------------+---------+------------------------------------------+ ++----------------+----------------------+---------+-------------------------------------------+ +| Param | Type | Default | Description | ++================+======================+=========+===========================================+ +| **Function** | Enum | Average | The statistical function applied to | +| | All Statistics | | the input values. | +| | Selected Statistics | | | +| | | | | +| | Sum | | | +| | Sum Of Squares | | | +| | Sum Of Inverse | | For "All Statistics" selection the node | +| | Product | | computes and outputs the statistical | +| | Average | | quantities for all the statistical | +| | Geometric Mean | | functions along with their corresponding | +| | Harmonic Mean | | names. | +| | Variance | | | +| | Standard Deviation | | | +| | Standard Error | | | +| | Root Mean Square | | For "Selected Statistics" selection the | +| | Skewness | | node computes and outputs the statistical | +| | Kurtosis | | quantities for the selected statistical | +| | Minimum | | functions along with their corresponding | +| | Maximum | | names. | +| | Range | | | +| | Median | | | +| | Percentile | | | +| | Histogram | | | +| | Count | | | ++----------------+----------------------+---------+-------------------------------------------+ +| **Percentage** | Float | 0.75 | The percentage value for the | +| | | | percentile function. [1] | ++----------------+----------------------+---------+-------------------------------------------+ +| **Normalize** | Boolean | False | Flag to normalize the histogram bins | +| | | | to the given normalize size. [2] | ++----------------+----------------------+---------+-------------------------------------------+ +| **Bins** | Int | 10 | The number of bins in the histogram. [2] | ++----------------+----------------------+---------+-------------------------------------------+ +| **Size** | Float | 10.00 | The normalized size of the histogram.[2] | ++----------------+----------------------+---------+-------------------------------------------+ Notes: [1] : The **Percentage** input socket is available only for the **Percentile** function. [2] : The **Normalize** setting and the **Bins** and **Size** input sockets are available only for the **Histogram** function. +Extra Parameters +---------------- +The Property Panel contains additional settings to configure the statistics drawn in the node editor: font, text color, text scale and floating point presicion of the displayed statistics, the x/y offsest of the displayed statistics relative to the node and a setting for toggling the statistics names between full names and abreviations. + +The fonts used for this node are monospace fonts for best text alignment. + Outputs ------- **Name(s)** diff --git a/nodes/list_main/statistics.py b/nodes/list_main/statistics.py index 821d08e822..7056459f9d 100644 --- a/nodes/list_main/statistics.py +++ b/nodes/list_main/statistics.py @@ -17,38 +17,126 @@ # ##### END GPL LICENSE BLOCK ##### import bpy -from bpy.props import EnumProperty, IntProperty, FloatProperty, BoolProperty +import blf +import os + +from bpy.props import (BoolProperty, + BoolVectorProperty, + EnumProperty, + FloatProperty, + FloatVectorProperty, + IntProperty, + StringProperty) from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode, match_long_repeat +from sverchok.data_structure import node_id, updateNode, match_long_repeat from sverchok.utils.modules.statistics_functions import * - -functions = { - "ALL_STATISTICS": (0, 0), - "SUM": (10, get_sum), - "SUM_OF_SQUARES": (11, get_sum_of_squares), - "SUM_OF_INVERSIONS": (12, get_sum_of_inversions), - "PRODUCT": (13, get_product), - "AVERAGE": (14, get_average), - "GEOMETRIC_MEAN": (15, get_geometric_mean), - "HARMONIC_MEAN": (16, get_harmonic_mean), - "STANDARD_DEVIATION": (17, get_standard_deviation), - "ROOT_MEAN_SQUARE": (18, get_root_mean_square), - "SKEWNESS": (19, get_skewness), - "KURTOSIS": (20, get_kurtosis), - "MINIMUM": (21, get_minimum), - "MAXIMUM": (22, get_maximum), - "MEDIAN": (23, get_median), - "PERCENTILE": (24, get_percentile), - "HISTOGRAM": (25, get_histogram) +from sverchok.utils.sv_path_utils import get_fonts_path +from sverchok.settings import get_dpi_factor +from sverchok.ui import bgl_callback_nodeview as nvBGL +from mathutils import Vector +from math import ceil +from pprint import pprint + +selectors = { # Selectors of Statistical Functions + "ALL_STATISTICS": (0, "ALL", 0), # select ALL statistical quantities + "SELECTED_STATISTICS": (1, "SEL", 0) # select SOME statistical quantities } +functions = { # Statistical Functions > name : (index, abreviation, function) + "SUM": (10, "SUM", get_sum), + "SUM_OF_SQUARES": (11, "SOS", get_sum_of_squares), + "SUM_OF_INVERSIONS": (12, "SOI", get_sum_of_inversions), + "PRODUCT": (13, "PRD", get_product), + "AVERAGE": (14, "AVG", get_average), + "GEOMETRIC_MEAN": (15, "GEM", get_geometric_mean), + "HARMONIC_MEAN": (16, "HAM", get_harmonic_mean), + "VARIANCE": (17, "VAR", get_variance), + "STANDARD_DEVIATION": (18, "STD", get_standard_deviation), + "STANDARD_ERROR": (19, "STE", get_standard_error), + "ROOT_MEAN_SQUARE": (20, "RMS", get_root_mean_square), + "SKEWNESS": (21, "SKW", get_skewness), + "KURTOSIS": (22, "KUR", get_kurtosis), + "MINIMUM": (23, "MIN", get_minimum), + "MAXIMUM": (24, "MAX", get_maximum), + "RANGE": (25, "RNG", get_range), + "MEDIAN": (26, "MED", get_median), + "PERCENTILE": (27, "PER", get_percentile), + "HISTOGRAM": (28, "HIS", get_histogram), + "COUNT": (29, "CNT", get_count) +} -modeItems = [ +mode_items = [ ("INT", "Int", "", "", 0), ("FLOAT", "Float", "", "", 1)] -functionItems = [(k, k.replace("_", " ").title(), "", "", s[0]) for k, s in sorted(functions.items(), key=lambda k: k[1][0])] +function_items = [(k, k.replace("_", " ").title(), "", "", s[0]) for k, s in sorted({**selectors, **functions}.items(), key=lambda k: k[1][0])] + +# cache these for faster abreviation->index and index->abreviation access +# aTi: SUM->0 , SOS->1 ... CNT->19 and iTa: 0->SUM , 1->SOS ... 19->CNT +aTi = {v[1]: i for i, v in enumerate(sorted(functions.values(), key=lambda v: v[0]))} +iTa = {i: v[1] for i, v in enumerate(sorted(functions.values(), key=lambda v: v[0]))} +abreviations = [(i, name) for i, name in sorted(iTa.items(), key=lambda i: i)] + +loaded_fonts = {} + +font_names = { + "OCR-A": "OCR-A.ttf", + "LARABIE": "larabiefont rg.ttf", + "SHARE_TECH_MONO": "ShareTechMono-Regular.ttf", + "DATA_LATIN": "DataLatin.ttf", + "DIGITAL_7": "digital-7 (mono).ttf", + "DROID_SANS_MONO": "DroidSansMono.ttf", + "ENVY_CODE": "Envy Code R.ttf", + "FIRA_CODE": "FiraCode-VF.ttf", + "HACK": "Hack-Regular.ttf", + "MONOF55": "monof55.ttf", + "MONOID_RETINA": "Monoid-Retina.ttf", + "SAX_MONO": "SaxMono.ttf", +} + +font_items = [(k, k.replace("_", " ").title(), "", "", i) for i, k in enumerate(font_names.keys())] + + +def load_fonts(): + ''' Load fonts ''' + loaded_fonts["main"] = {} + + fonts_path = get_fonts_path() + + # load fonts and create dictionary of Font Name : Font ID + for font_name, font_filename in font_names.items(): + font_filepath = os.path.join(fonts_path, font_filename) + font_id = blf.load(font_filepath) + if font_id >= 0: + loaded_fonts["main"][font_name] = font_id + else: # font not found or could not load? => use blender default font + loaded_fonts["main"][font_name] = 0 + + +def get_text_drawing_location(node): + ''' Get the text drawing location relative to the node location ''' + location = Vector((node.absolute_location)) + location = location + Vector((node.width + 20, -20)) # shift right of the node + location = location + Vector((10*node.text_offset_x, # apply user offset + 10*node.text_offset_y)) + + location = location * get_dpi_factor() # dpi scale adjustment + + return list(location) + + +class SvStatisticsCallback(bpy.types.Operator): + bl_label = "Statistics Callback" + bl_idname = "sv.statistics_callback" + bl_description = "Callback wrapper class used for operator callbacks" + + function_name: StringProperty() # name of the function to call + + def execute(self, context): + n = context.node + getattr(n, self.function_name)(context) + return {"FINISHED"} class SvListStatisticsNode(bpy.types.Node, SverchCustomTreeNode): @@ -58,16 +146,26 @@ class SvListStatisticsNode(bpy.types.Node, SverchCustomTreeNode): ''' bl_idname = 'SvListStatisticsNode' bl_label = 'List Statistics' - bl_icon = 'OUTLINER_OB_EMPTY' + bl_icon = 'SEQ_HISTOGRAM' sv_icon = 'SV_LIST_STADISTICS' def update_function(self, context): - if self.function == "ALL STATISTICS": + ''' Update sockets and such when the function selection changes ''' + if self.function == "ALL_STATISTICS": self.inputs["Percentage"].hide_safe = False self.inputs["Bins"].hide_safe = False self.inputs["Size"].hide_safe = not self.normalize self.outputs[0].name = "Names" self.outputs[1].name = "Values" + + elif self.function == "SELECTED_STATISTICS": + for name in ["Percentage", "Bins", "Size"]: + self.inputs[name].hide_safe = True + if self["selected_quantities"][aTi["PER"]]: # PERCENTILE + self.inputs["Percentage"].hide_safe = False + if self["selected_quantities"][aTi["HIS"]]: # HISTOGRAM + self.inputs["Bins"].hide_safe = False + self.inputs["Size"].hide_safe = not self.normalize else: for name in ["Percentage", "Bins", "Size"]: self.inputs[name].hide_safe = True @@ -80,44 +178,146 @@ def update_function(self, context): self.outputs[0].name = "Name" self.outputs[1].name = "Value" + self.label = self.function.replace("_", " ").title() updateNode(self, context) def update_normalize(self, context): - socket = self.inputs["Size"] - socket.hide_safe = not self.normalize + self.inputs["Size"].hide_safe = not self.normalize + updateNode(self, context) + def update_show_statistics(self, context): + nvBGL.callback_disable(node_id(self)) # clear draw updateNode(self, context) - mode : EnumProperty( - name="Mode", items=modeItems, default="FLOAT", update=updateNode) + show_statistics: BoolProperty( + name="Show Statistics", default=False, update=update_show_statistics) + + text_color: FloatVectorProperty( + name="Text Color", description='Text color', subtype='COLOR', + size=3, min=0.0, max=1.0, default=(0.5, 0.3, 1.0), update=updateNode) + + text_scale: FloatProperty( + name="Text Scale", description='Scale the text size', + default=1.0, min=0.1, update=updateNode) + + text_offset_x: FloatProperty( + name="Offset X", description='Offset text along x (10x pixel units)', + default=0.0, update=updateNode) + + text_offset_y: FloatProperty( + name="Offset Y", description='Offset text along y (10x pixel units)', + default=0.0, update=updateNode) + + selected_font: EnumProperty( + name="Font", items=font_items, default="HACK", update=updateNode) + + precision: IntProperty( + name="Precision", + description="Floating point precision of the displayed statistics values", + min=0, default=2, update=updateNode) - function : EnumProperty( - name="Function", items=functionItems, update=update_function) + mode: EnumProperty( + name="Mode", items=mode_items, default="FLOAT", update=updateNode) - percentage : FloatProperty( + function: EnumProperty( + name="Function", description="Selected statistical function(s)", + items=function_items, update=update_function) + + percentage: FloatProperty( name="Percentage", + description="Percentage value for the percentile statistics", default=0.75, min=0.0, max=1.0, update=updateNode) - bins : IntProperty( - name="Bins", + bins: IntProperty( + name="Bins", description="Number of bins in the histogram", default=10, min=1, update=updateNode) - normalize : BoolProperty( + normalize: BoolProperty( name="Normalize", description="Normalize the bins to a normalize size", default=False, update=update_normalize) - normalized_size : FloatProperty( + normalized_size: FloatProperty( name="Size", description="The normalized size of the bins", default=10.0, update=updateNode) + abreviate_names: BoolProperty( + name="Abreviate Names", description="Abreviate the statistics quantity names", + default=False, update=updateNode) + + def toggle_all(self, context): + self["selected_quantities"] = [self.toggled] * len(functions) + self.toggled = not self.toggled + + toggled: BoolProperty( + name="Toggled", description="Statistics toggled", + default=False, update=update_function) + + def get_array(self): + return self["selected_quantities"] + + def set_array(self, values): + self["selected_quantities"] = values + + selected_quantities: BoolVectorProperty( + name="Selected Quantities", description="Toggle statistic quantities on/off", + size=len(functions), get=get_array, set=set_array, update=update_function) + + quantities_expanded: BoolProperty( + name="Expand Quantities", description="Expand the list of statistical quantities", + default=True) + def draw_buttons(self, context, layout): layout.prop(self, "mode", expand=True) - layout.prop(self, "function", text="") - if self.function in ["HISTOGRAM", "ALL STATISTICS"]: + + col = layout.column(align=True) + row = col.row(align=True) + row.prop(self, "function", text="") + row.prop(self, 'show_statistics', text='', icon='ALIGN_FLUSH') + + if self.function == "SELECTED_STATISTICS": + box = col.box() + split = box.split(factor=0.8, align=True) + + c1 = split.column(align=True) + toggle_button = c1.operator(SvStatisticsCallback.bl_idname, text="Toggle All") + toggle_button.function_name = "toggle_all" + + c2 = split.column(align=True) + if self.quantities_expanded: + c2.prop(self, "quantities_expanded", icon='TRIA_UP', text='') + # draw the toggle buttons for the selected quantities + N = int(ceil(len(abreviations)/4)) # break list into 4 columns + col = box.column(align=True) + split = col.split(factor=1/4, align=True) + for i, name in abreviations: + if i % N == 0: + col = split.column(align=True) + col.prop(self, "selected_quantities", toggle=True, index=i, text=name) + else: + c2.prop(self, "quantities_expanded", icon='TRIA_DOWN', text="") + # histogram selected? => show the normalize button + if self.function in ["HISTOGRAM", "ALL_STATISTICS"] or \ + self.function == "SELECTED_STATISTICS" and self["selected_quantities"][aTi["HIS"]]: layout.prop(self, "normalize", toggle=True) + def draw_buttons_ext(self, context, layout): + box = layout.box() + # font/text settings + box.label(text="Font & Text Settings") + box.prop(self, "selected_font", text="Font") + box.prop(self, "text_color") + box.prop(self, "text_scale") + box.prop(self, "abreviate_names") + col = box.column(align=True) + col.prop(self, "text_offset_x") + col.prop(self, "text_offset_y") + layout.prop(self, "precision") + + def selected_font_id(self): + return loaded_fonts["main"][self.selected_font] + def sv_init(self, context): - self.width = 150 + self.width = 160 self.inputs.new('SvStringsSocket', "Data") self.inputs.new('SvStringsSocket', "Percentage").prop_name = "percentage" self.inputs.new('SvStringsSocket', "Bins").prop_name = "bins" @@ -126,17 +326,127 @@ def sv_init(self, context): self.outputs.new('SvStringsSocket', "Values") self.function = "AVERAGE" + self["selected_quantities"] = [True] * len(functions) + def get_statistics_function(self): - return functions[self.function][1] + return functions[self.function][2] # (0=index, 1=abreviation, 2=function) + + def draw_statistics(self, names, values): + """ Draw the statistics in the node editor + + The statistics data can be either single or vectorized. + * single: + [ [sum], [avg], ... [[b1, b2, .. bN]] ] + * vectorized: + [ [sum1... sumM], [avg1... avgM], ... [[b11... b1N]... [bM1... bMN]] ] + + Q: how can we tell statistics are simple or vectorized? + A: if the values[0] is a list with length > 1 then it's vectorized + """ + nvBGL.callback_disable(node_id(self)) # clear drawing + + if len(values) == 0: + return + + if self.show_statistics: + max_width = max(len(name) for name in names) # used for text alignment + + info = [] + + # for now let's treat single and vectorized separately (optimize later) + is_vectorized = len(values[0]) > 1 + + if is_vectorized: + for n, v in zip(names, values): + if n in ["Histogram", "HIS"]: + line_format = "{0:>{x}} : [{1}]" + histogram_lines = [] + for a in v: # for each histogram set + if self.mode == "FLOAT": + value_format = "{:.{p}f}" + else: + value_format = "{}" + histogram_values = ", ".join([value_format.format(aa, p=self.precision) for aa in a]) + histogram_lines.append("[{}]".format(histogram_values)) + line = line_format.format(n, ", ".join(histogram_lines), x=max_width) + info.append(line) + + else: + line_format = "{0:>{x}} : [{1}]" + if n in ["Count", "CNT"]: + value_format = "{}" + else: + if self.mode == "FLOAT": + value_format = "{:.{p}f}" + else: + value_format = "{}" + + value_line = ", ".join([value_format.format(vv, p=self.precision) for vv in v]) + line = line_format.format(n, value_line, x=max_width) + + info.append(line) + else: # single values + for n, v in zip(names, values): + if n in ["Histogram", "HIS"]: + # print("drawing histogram") + line_format = "{0:>{x}} : [{1}]" + if self.normalize: + value_format = "{:.{p}f}" + else: + value_format = "{}" + histogram_values = ", ".join([value_format.format(a, p=self.precision) for a in v[0]]) + line = line_format.format(n, histogram_values, x=max_width) + info.append(line) + else: + if n in ["Count", "CNT"]: + line_format = "{0:>{x}} : {1}" + else: + if self.mode == "FLOAT": + line_format = "{0:>{x}} : {1:.{p}f}" + else: + line_format = "{0:>{x}} : {1}" + + line = line_format.format(n, v[0], x=max_width, p=self.precision) + + info.append(line) + + draw_data = { + 'tree_name': self.id_data.name[:], + 'node_name': self.name[:], + 'content': info, + 'location': get_text_drawing_location, + 'color': self.text_color[:], + 'scale': self.text_scale * get_dpi_factor(), + 'font_id': int(self.selected_font_id()) + } + + nvBGL.callback_enable(node_id(self), draw_data) + + def sv_free(self): + nvBGL.callback_disable(node_id(self)) def process(self): + inputs = self.inputs outputs = self.outputs - # return if no outputs are connected - if not any(s.is_linked for s in outputs): + + # no inputs are connected ? => return + if not any(s.is_linked for s in inputs): + nvBGL.callback_disable(node_id(self)) # clear drawing return - inputs = self.inputs - input_D = inputs["Data"].sv_get() + # no outputs are connected or statistics are not shown? => return + if not self.show_statistics: + if not any(s.is_linked for s in outputs): + nvBGL.callback_disable(node_id(self)) # clear drawing + return + + input_D = inputs["Data"].sv_get(default=[[]]) + + if len(input_D) == 0 or any([len(d) == 0 for d in input_D]): + outputs[0].sv_set([[]]) + outputs[1].sv_set([[]]) + raise Exception("Input data contains empty lists") + input_P = inputs["Percentage"].sv_get()[0] input_B = inputs["Bins"].sv_get()[0] input_S = inputs["Size"].sv_get()[0] @@ -148,42 +458,66 @@ def process(self): if self.mode == "INT": input_P = list(map(lambda x: int(x), input_P)) + # determine the list of functions to generate statistics for if self.function == "ALL_STATISTICS": - functionNames = [fn[0] for fn in functionItems[1:]] - else: - functionNames = [self.function] + function_names = list(functions.keys()) + + elif self.function == "SELECTED_STATISTICS": + function_names = [] + for i, f in enumerate(functions.keys()): + if self["selected_quantities"][i]: + function_names.append(f) + + else: # one statistical quantity + function_names = [self.function] params = match_long_repeat([input_D, input_P, input_B, input_S]) - allNames = [] - allValues = [] - for functionName in functionNames: - statistics_function = functions[functionName][1] - quantityList = [] + all_names = [] + all_values = [] + for function_name in function_names: + statistics_function = functions[function_name][2] # (0=index, 1=abreviation, 2=function) + quantity_list = [] for d, p, b, s in zip(*params): - if functionName == "PERCENTILE": + if function_name == "PERCENTILE": quantity = statistics_function(d, p) - elif functionName == "HISTOGRAM": + elif function_name == "HISTOGRAM": quantity = statistics_function(d, b, self.normalize, s) else: quantity = statistics_function(d) - if functionName != "HISTOGRAM": + if function_name != "HISTOGRAM": if self.mode == "INT": quantity = int(quantity) - quantityList.append(quantity) + quantity_list.append(quantity) + + if self.abreviate_names: + name = functions[function_name][1] # (0=index, 1=abreviation, 2=function) + else: + name = function_name.replace("_", " ").title() - allNames.append(functionName) - allValues.append(quantityList) + all_names.append(name) + all_values.append(quantity_list) - outputs[0].sv_set(allNames) - outputs[1].sv_set(allValues) + if outputs[0].is_linked: + outputs[0].sv_set(all_names) + if outputs[1].is_linked: + outputs[1].sv_set(all_values) + + self.draw_statistics(all_names, all_values) def register(): + bpy.utils.register_class(SvStatisticsCallback) bpy.utils.register_class(SvListStatisticsNode) + load_fonts() def unregister(): bpy.utils.unregister_class(SvListStatisticsNode) + bpy.utils.unregister_class(SvStatisticsCallback) + + +if __name__ == '__main__': + register() diff --git a/ui/fonts/DataLatin.ttf b/ui/fonts/DataLatin.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9194efc2920212904da956c4a405ebcad4b84be2 GIT binary patch literal 20992 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 literal 0 HcmV?d00001 diff --git a/ui/fonts/DroidSansMono.ttf b/ui/fonts/DroidSansMono.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a007071944f7c90020e798eea53b10065e2b45a5 GIT binary patch literal 119380 zcmeFad3;P){|A1SJ9oBZ_L*$ROhytBBr+nR$k>tyCDukX5=2B7TePTpLRE>S_NAq$ zDvB~xBetTtKAu{tx~rs{YN>QnCAs;%&z+>z=Xt)rzkdJxUaw~+cjn%6=brO9pYz#2 zpL;_nA;d&x6HbZ-3{Fbfe0uc>LTD*ki^e=WYSMis-$+7q9}r@Gf6Sv(-MyZ>cM2gf z$%HUV$)s@)mtF7%2npXoh*mRhRM{jV5iOzbXXE;iaSzQXS@q1Z<%A^mBlL-nOUI5X z{;_z=K%BdVtz#(~j3d|@jMoy!ElVGsI{lCPem#lfchH~Vp^0NgRqh?u9;f``_~B90 zCuy#;X*e(XcTX7g@YtEZe%Xr9J-A-}*QAMMQ^zgtKakJ^wS+VuI%&$-N!^cq`UD}- zfRX)!h`C}r*Q~#z(A?!WV$`95kdtp;9U{KpUGeZi<(>MA8n3PlhkC+9D_*!p`>@iS z5a~VTorawnui8`aT=0{M7XBnzMr>pd(cnr8Nh0~U^lLf>xTSrzDIv4)OGZ-hSwc6E3)Dj< zHq_EB_|-=AU4cPw;J{hr zVZb*Tqg9ca_{BUT;p*L3p&<1U%t1mAgK+IloDu8Lw2AeoYPgN}HToLf@6y*m8CSu@ zwd5N*lk`VlwU7eK>2lIQcG9kZeHyMQB0BJ11mMfTk&PHhIB5o`a=^bifGLb*LS6^u zgMhF--dD(c`Xl`c?{peVbMZNmwx{Xnk~tsx0`SCIXX&Rwxe8zBz`r+lP>y$CBLxJqpI;2nmwXyT;@NVz(S=&c0U z2~z(cP-78(=fLmQHEuf^ZZ%vK8>mUVg!Gdz>!zN>FDGMd1qBBwOz?}43PTz+C{_loacppGcav}r?+G!fKLgnq?*1WaNR)GAiXi+RKYE8;an#oA;*oIti= z3;|ga9Kr9Q|91SBL~Hupze}*;q@N0ZQ+t!tx*O&k(9+$<|84)jNt&j%CVY$U3i2ML z+);9gdO>;O?WJ$i{d7N8W|2Bej!&^QBUBvAKjR2{x;i4sAEMzYSUfV`|Dfe`1$~|d zz!?oJiXCNdvv=7g_6w(+b3He6FJH(P^XK^){yzUudP-w&L0e?BnAhTu=zHBpx6|Fi z9pjF3C%b*_&h9SmUhZ=DR`+)IZjZ)e_qaSUo;XiC&&U`SBgdFyY%!5BEn*U5vSW&3 z#>W2hj-)g+)HgH$9ycg|1>H>d0*>1(9B{k^I6ej(mR2AmbW()t{?BTYskhJ>?0dTwwO=ysyK*dW?{-Lci=$bED?R zn(H;+*VNQh*L+s z@fLZTyaPV}Cv?caz&B^eS#pk?C+|bbeLyaf4fL zHTi~o3t9giw8;152WWxoSf=0qlXa?=nf<{v}_0SmV5jN zv8w@pK1$iSDGkplx2Jd%$}Ex(`z16?%ZaN-OC> z*vyCMVS0ofrN^L8kJA(MBz>KpqHoYQ>06LE??A`?lb)vkqVLf&^ejC`&(rtm1^NNK zNI#?>(U0jT^i%p7{hVH+U%>9Eh6ef)I`eD#4gD6@>v!}jdw_mVf1uasb?DO@;QpWJ z&-54iEB%c{L*+cAMHi1oKlh|Z7g_W_X>=E`To5rTI8SF7OlReI6v45~~Hk-|1 zPq4Y{Nj8r?#pbgGtb#3Mi`ZheggwocvSn;JTftVcRctj|!`8BO>>2hfy+!|E>)8hO z9NWk?vCZsxwuQaGwz3!5HnyGZU@x(qY!};ra@eaJq7 zeEWob%06SCL*jnHF0*P@!@gu+v9H-T>|1t)eaEh{@7WLR8oSPZWH(qX`-%O`eqq0| z-`Gv|JG;gHV7J*FR>$g@!WtkeDQA$E64!8-#e4Hip2f3yAD+Ye@_zhY-k%TPxqKiW#0T>s zd?+8r@8fxVIM3%J`2Dzl<`50cz$MOd z$$Sbg<5T$~tQqUTQdt2TNn~aaatkU>)pt$OOl@lNVw=A2I{CNV;FTN}fd-mU3#(8M zE6YeiNGL35Gdx-=EH^tW2PgckFj$EZBoa1AGt!*2fED3}-4Fv?qa}$Yaj-X9!NO<_ z%cBjfn|83bl3|IY5FhCP+oU5&Bb{Kmb%vGI1(sMhSZ;pO9d=+(SU0_4!)1|d(g!v} zU)UD+!gd`1`(+?>|6o`VL&-35AFR9Ku--?&4lICuR|tD&6y_u3Z3SfQN=Vg>kfB>3 zMYlnYZifur1t}_I=w3)sAwyq*{5${&S_K(;6y6Y|CkusS7jl0*GefRF4_W^pb3@8M zz>*=ypJi=H8Eel{pcSUEc-ERF&?T%LG{fV}137&dl79@Dz}nCrEQz&(zL>=#BXlE>&^I*|7JpM3*6>wosm-x&Muga6q#|FduYXW#tKzWM)| zeM9`chvy9)GI-Fy+yVXX?bkP_Pj*&j?_NE7boXa;>)Pd>&gq@fI;OTyPHNY-O{@60 z*p}WHPjtA$YB8HajRw6=D{CaqC~4E%n_1)z#1#dkIB#}#TXF0ig@#dgH53KhXv+Ni zZvt*{-6)*;+b{k2Wy!z&(jWY#|Ic4ii@OWy(zcDex7Qtbub0b=A)|{DLyEn{qwdcO@KLySA@99#;rxI#F_7Tx6-apO z>u}(4Y@m&|SMNZg=(X>lKga3&*N`-ziM4p$3x7jIw8(q?8s>3V%c#Z{Io9$U5hpXT zQVSPmdfk}|ix!TmYM4FR>$Z3o?h6T7IH@-MFlb!4-Z(1N@?fD$z~4f z8?X-?kr!aGneNh2m_Gh8yq-=`9xEoGA|w;n|M$}bhyXf(Q;$bXd{LF3jK)D=_Q1U0 zv73yJ+E4sRiNgb|NSry*bjCSUoSEHp=FiKEyjab?gYy;!q}V>i-rm6RqEUg_qd`v( zh^6pa0;Zc$9`8b%)t#OM81Y*-fbLT~-W|}y1!Qs6-4}og#U%^zfkiOg41QgY!T@nr zn>*c$ZbU!5y}gSX{~j$3$B6E>Z35Ye!KELP7x4E2HvFR+$)fkZS`d5hg@U#O2%<0Vz`R4m z*HFE$gFEUK;Rg)wh30^(C+I4!_rkp5l0bA(R53WM#GM!A3HXO&froqZ#ts*R1`H)s zV>rAptpMveB(LvaZ{LCWd017?aP^EhA-a=dd;eQE-n^(_Hz2uyE>`ExV^MrKerQ31 zI}z-po;6w*?%n^7F!de!t-5Qo*(hy?u%o zdI#rqQGX2yGArsaF}98LrG1C=Xxj$Dtj9htT`+K;pDq}jpLfVYhT1BJyiCY|qo(ADSr~W?bke`s*>RCx`P>;t{QKGg5e}pzl##FIj zo2BV@3~f@d&9Al%#|x_zUJ8PQVDIfN7VGo)@Y01v!v&2K7chc9gqXbDfE{nQeU!-| z0fTpJkATtJL$qgz_KaY=EZVi+9s$J1+O~OYp{2L?xA3+Eb93I}4beYMjEqjYG4Tfb z_G@4CH(y6Y18Tp;*D&<5@6ymOe0*r2;amf&YB=F9ZO~gY$tCxtNtgH~%7=cAt3SNx zi@xxFMD+aksq%V6w0zig_}jxb4@>6#(fgD3bN_y`J#+g$x_59y^q!X^qIc&+MDN-e z5&aS_-S}KYbo6s{(uUa^mTfqg3h_)w5SGTfKR;ylO>6^h$JZUP0$&MMS@OjG}0OY{O?I)$V6} z_F?QUqgwwC_UI!K(Nl9HqRX&N%#MhjfZs>b@Szd*hG?zS5G@0$QAH8aV~c2UA#J!r zZ``3X?$C@o1MaZ!+qUq`0k;cpPrS`P81eN8HX`2=ot{r+{MmiBp&B4W0=CS&oZsNQ zx}ILHrvovNx$bz~*}BVh68G1ISTg%$Mno57(|fY0+$^dg+U0W&wNmp?i_bh1HpNhy zMTS;U+210{7QM-Q+04$GZSSncvo$W#-w2CgPV&5ul1N4(VcSL|L z2*eH+pZrw~x}NhtFHGg!E|MH;^(oFHqEcc;7%VcKl*zHg+t{_qj-q z;bmoIQxk(PT3A+=m{?dw648hz^%#3NLZ(`@pe-?x;HwNjMG6*eRGd|Rr2Zs$o~nJ| zT=2(7pmvhBWAP|k^Q0n z^_Sz31z1K-&5#9Lz?5*KT z;BpNjJ>TH70#S5=Xm|*3PM%>oWIC%v{AUNw;>BhlN`FA?(R{>}%8?}yuZIzp`uEpj z_1qKa@6VT}vhI6gZTJDB1Yc!{aZUg8^ijH#51~6*bKp}{j)<4~OHHM66p^&uh_L@g z=kn$azW~RNAlrXS4%%p1)AGAov`)-3BAwvM)mwhgw!wkvj*y{&zKeXIQ^M;pguj(43_ z=O*VRSA?s;b;xxk?B1}a!cK%+!VAM!hkqH-KB6?@SmYCtH>2*0S{`-1nWkA$v(l_qCWAEk$>Ze%R77}TK$k9B}63@BwR@NzBOwd*}7xvA*~;3eZ6%1~#_d9lrFZS`%-+pcN5yY1_3KW$svu6w)T?IyRI-)>X8 zSKFOwcRfi;ic0E|G$?6&QhCyvq}@qxBvmJUm)t+OB>C~=mB}w9pGf{N`TJz0y|aB{ z`yTCwx1ZX6QTr|JtJOt$zOlZ?eLH;LcIew- zbcY!omUY;kDy23{^`+*dj!Jzbby4c3)Po&u9Ut$wvg1n~PjvjK;TK}{iX+L(- zbc*Wa>(r;y=uVGyI+xxjeN_6i^rzGJq`#GZDgD>ZhR&YOX`ORA7j}NM^Wx4gbUxJi zT<34^Nxo<0Jv;9?anHy1{MbeA(yU8rm;PPGbt&(%qRXx>uXp*ROKn%VYjoF+UHf$% z({)DIWnH&*{is_~x6*DKy1mlv-EP(0Zf1mJcr)(HSd?)nv}}?=+t9ikJ29HJ=XNt)#H^OM|ynMb7IeFJPPyG?6>`1>E5h+m)`qM|JMC44Dby>_31Yq=~pJhxqL zR_@;1w+7k=Mh)~1>@u*|z@vk7g9-*s9kgiB8-xBeSU=c0IAZYZ!3%~shfE#v=8#K6 z(}pe?x_anyLth;F^3Yd@9vk}RupYy5h7B4vf7sFc=zRtEZMyG9UYoqf^S&FNHGIJE zZTXt~w)ugiG2MjJ-EN6#2NXLQBrEu(jii5xR&%=9r&kJ&ori(*T0=i))d zT{Lc@Jd*IT8xetE*(13>x4?q0yBM+Z?SecMIVZwy%6K+p@eBzEt zbW+r$>`D74eK)!L;FePouqfC>kFG~=-u%V%t#aeT%{GwL22{Md6dBWA9eS^xO($6uahofR?5 zGb>@%L$emo+B)m#tP8Wg|HnVdS^2Q?-Ls=+FPJ0GS^vbqCw`babndw)2R`}byw{%E z^3=|!_RkNUKYacx3v3J8Ea<)9YQ?gJ%@(d-^yK1UOCpzi_H^5)r$7D2(uAe?OBXIZ zx~zD4=<@k1Tq{afoLHH>^5n{2SH-QGwd&&P&a2n1-nshtnus-pYu;X)xOU;%pVnop zTe$AbGtOs*KC}3lZ=TJ0_P6yr*T1&@{D#mC85^=TY<#ZebE`J$HZI!u#wM~UYtxEN zS2t&Fp0)YJ^Ie`lw58{ke{K0-%MUNm7fN4vdu#00Nn77|(fMM*i<@5jVOy7NpKt%i z_NTUQ+>Ii+%8<<`ohm6t0U z4muAe9_(>2@8HCP^A2u2Sb6Z=!K+oQDzd6WRlll-tCm!4tvXzFuIfsaa>#Kg@lf|e z`G=+)T72lmL$4kB@X(FJ+QW&5`yL*B_>sd)4sSVp`0)9|R}U*koJZOm>2W0Q$iyS_ zjy!i{|B-(lsXlV+sQGBz(e$IaN5>tVb#&#?okvd`{pjfRWB)jI>NV$U<6ist_<-Z< zj@O*H_rz-_emdFgWY)>yCm(`BWTFOBGC-qq;$PE8S<6Q-94pTuXYiAgO^Wuzqe zXi|aC>cdC-WV^@eNyB!M_o+Kr%4XEh*HqrlDV4rO!tYAMSL_?LKO^bjZ-z2bc?~ld zLPC>7qK`QxDoa#auiL@UZAMK&fi*p;z-puENxqtt^z`=0$fEmriqqkZN$tS4&hTBH zTwY#IH%j4mdM#SK7{xM-Hs{-Tpb_SF{$|oyE#0i81GF%~-AH*Z!HW?*@ zeWydBBti<;?37(CnrkIFY*%=+)8O#4T*fR0haApWxa=@kl;7&e_DAJLv8V)%#yx?AEDPBjaxO#)32RYij`Qlno4aN1 zw3!Pn6D{QyZn2onN#+c5p;jcsS&j2^MUSCQrahjKAK*!PH$>Ve5%W5jf+d|&@nC5=X8Z>*96*>jymIbUQSA+LoHunRb}C>45&#akjO#?KW;Zz*|+eIM}i> zJR(eXhKHbV$5JV4Nk+}DH5uUDUu$SmO~J1<1(pvIYYJ4FO)N+Rs)2U2wog`lIN`>{ z2sHXqTuz4^pOV_a8{>3P3Nra`?cTYYH&)Eq^4x+&iO*##4FOtN9tH1G^t?_Ys2^1Mc zAc3?ks~T$k$tG*Iza{O^lD5pUx3J)7Knr?L3o5tBig4SL?d(Lvxd>*Dut%6?pim=A z64+{{w`EI`R-2TNZSor|*``bx<-)@#OQSSO#1zturfhW(ohR3or>A*wv{QUuJWD`X zkd+3(aG6oOF#t}y#JNjqGtlVLIfXdPP=#Swx=M*EcPC<(CMDKD^!o4>L~}ubrKYf; zAkhN(nFtZ!vx2xG+-S!%pRBce<7Kak+O$9MuIUJRjq}EUb}1DE>`P(!G$PAWl{)MD zPv-9V@z^KjyI(l|%8o-y@l#{Q47_g)U8x*9{Zzqbu2Z(oSpNM>%B5|GKRhz`RLP00 zt9I{NeY*RAX*oIf4g> z5|~~3Q}Bwb;+3O(E3VQD4J2zcXfpEJXkEE(sgCR9KTxifks%mYAOX~cPJF~_p^xjR~FMzERw-}r!)aQZ)@tA*IIOwbhFW=&WLleMiymYqG!>m z&}}v7S#%og{wivc75@o(OgT!+Py!*-Y0BFA@9V!t&tx8(CS@bGU?MI3&R?N=GW79O8olc}nqLg_zUkN;S=x3#(Ih~&< zJCtb?Pc~By7ts>s*&>?R?Bql^>=%v#Onuc7mlnQKG|B&Ai#Wp1OQnl!^75g{kYSLHus zNnS^vnIz4Y&Pml$t)x+j-K-B0#IEBTqva%c!X&BSx~i-b3+e@j(=eHPZE2iY(ks^W z^HMpyS~*X93Jjq#?mQ152Ed8iZ<~#BF1$2u6xE=t=MX&xF@hx(SVuRh9w%+iR?_o3 zcHqjh4K++bm9>^M_nX<;WI2GLWu2aEkamEMQ~(ODVEP4-pOp#g1s4FYm5>_gkQ#ba40ZI|LMNWn zQC*mQB0(jVo1;KWNPrN?OKvICXboj3C<4=BB8ejlYM@j=K$;k4wRlo&R!gk-U|w-- zW5wTGqvyZ7t|YEpxNzn2`STs9BcH%(m08Nldh>de6Lv*8V1#m2Ii84hZqhD5kZDD#3*U?GU}N!GTuv9(ShNGx@({8@mf2i$y#kZ^|6})UHqVx zqiFdWzWlKpiJ3EIA|{5OH^Rzkt2qsAGt}RFS=i>VKo}1TlP5MnJo(M`Y-_|t*Eg=; zTpZftJAW8xz!gFe@MWltH0sMtTIQNcF?dZ%Mh$EgEMrPaVu9t0L;(br)8j#vV^H2` z;~V9^mO4FB+q%hg18aC4=V&P!QKMY0-snX)#~&m)z~053#e1FIwX&(^4(ZG7)>ev20p8# zWR?g%k<-+N!19lcs4`plD%_^BTW7e9t zUR;PE9z(SlkxDe;P68Vl<`36e^yX}%mQTR_T7HW?8x}2Nc85)h;KyJQ7*ndd{FmhnMK+{sM)oTUXLEIi|2fJ6+QmN!(p#FZg z?&w8jW~jbpM`bL{7RK8q{!v{rEe=pp(!YMQ!1Qhv)0Lp7LH_oket-}fN;DHUIrci3 zBhq9x8}$ZM>n%f&E`VY?y|xS(=4CW2!Zg(gAyNYr1EDplk02~67y!UA08DJ3oCZ5e zAT>rCZ--pspa;q6ki0Rwmwilgl^w&M&QD|e>#xN>Sn@vQ%C$Sy_v|i0aco>oZ0!~nXi>UP}SCf=huZS->{{0-KBuQFe13p zJ>X@TWcib4$Q3fnlJ7%7og5~|%N)vr>1a5rhB?*f2&zu2Q8_9x4V#K{V(A6M1(q`@ zs>KQpD=6>?QSYR*Kl9a__-@<-XxX;>_Ggf`8-S>v*+F1T_Yo{aL4q+M=4`Da%)!#5hewZ(o)Imzj;7HDf;EdM zGi$wNnxN2w$pPCWQCKICeP;j~ToX$TtQOTVQ9Ti?v}%f2V(+pVK@|^5(0retz~ar3+SEe*V~NTfR*j zw|DFV4~)&9_0f!f)y{n+e^JiA(@6hAgn}9zDw%|UK8}Mvye>EvG(?bz9g_|LndtRq z{s?s-VPh7yZ6hrUCJT!6lpq~zK*uRIaF%LX*?cL2L}IwGq#8{ts_QvMkVw%7uY*KB zr?h^~cq&L_^Ss$lvkjtRJZ0y#b6-=PvQs%3leYdS z16yNCmW!bIs^wZ(Dze3@TOYDRT92aEjO$H0(05%ZvPLav|5F>nVHPi`WD#C|o03c!@CX_QZBqRO*Heao zgE=4(!5XBXAQn~jU=7JvH-c&x93QfJ zwNkPMsffGhTK!pjiS#_?n_Ls-}mU7qb2v$arD5!8`sB zO)tw%r?!zc==uB0o*2CP$vtm&KmW;xcOG2&Xpd}=3Edbwea)azQ;Y8}%YSCnsjc(2 zJ#^ng`L?Z%5groVkR$DZyljV>>!tpDR|neR0*ue_PPEenld*-VnM^-0(IOL#Fj2`w zWs_`bskc-6`>i|65j5icme!6JQ3BuoqCNv|)>3|!U*?)*yt%79W(<1G+fB49w_)mlCj(E+s;t8Pt4dqE1~2f|ow6aml`VH{I+_)?n8JmO19 zbIM*fL<8|aKscaDI5Z37oG-=Bqote;(-*(Kv0|EwWfy;O^vin6Z@l{A#@Ce(m3^p+ zcHg22v!~4N*RlQZ!t%K$y8OWTz?u3ar6?|18^C>EF4{$zt?X0YQFis8Hwd?gOrcBY zS!KHN@)hMOt8^Y&Sw}lzwLM^$-I}AIZWGzzH!u^|QF0I@CEU}|aC5U{8Yjbc2a%ys z1EqsTSR4r&8m^&wG#HIip15h9wkA{$vSCE4wcN*P7N@bC%D5SUafuZgEeP5eE%11o z8>vxaGHJL3BPSyTjx4w_F%hP*PjIU6+{Cvny=!nMu|Pde6b>!^U^I%j9Bz@JJT6{_ zqjYVV;#~0>{pu9`MwvM;KFkrhjJ~Pdqd9uJ7j8k>@p#FYAqv8E9Na{t$)FVz?AaEu zU{dTO9NLyzrj;a9vk?ZjIU=8!C^1<~wLpYP8(y@@OiRtwY$g#!CRR}I_HA1=mEN{w;>iz;w86S&hs>$LGlhK|r!4f(3P zwcws9jvFe9C^r;|B~{%Vff`_@eKLH^AeD2gYTeC;yy;3uDJzuiQ;L{FvBMjGN_kmX ztIXDf-Kk(bSqITA?n#Cms)Q%&_s8mV5cz(aE1QJMhWuJcSV&oYVW}WXgQk#iL!ofm zRQ|-wh3$@YIg^+I3yf;5l{}|@5*uH?mMzm%ZdJN$slSEse#LlQF`k~> z=XYVe%bcEo3W3p@5A6cU&QS((!taJh7aTcBE|hP`4e*Bj7H2lxcmao)z7P_y2m~0g z3jl^1xlV2me@g|y>7jcL^FH;H1q^_ozHTeVe*`O>i4}$o=Z_^?SAGbKw2dGL7laok z;SLanBAD=OLLBD8P=n+sl*CfQ0#U~jGX}O(a0IF2vHmGo)CE_)%rv<9o9VVwHOg(} z6WWV5JMnDxil2wB}Yl3X;OHUf9BB7B-pa2C1;Cz50tUf98 zNd3VhM_8XDY-jy2gx1%wQZZT$81uy1hV15g0zLh0uIN7gqKpW zW##jS4=Y!$e-gi~+oqNLx4O`e8_+kR4623-A@3fH3+Wh=8Ny*z*7_^3p0^D26T?*l zd&fWz8R!lJtuRo7F2s^O1JOV|jnGqr9{dP{L$JIK_V#x$$1O%zb{4)v2v&kDu#6-lIE`E3L5D& zsguB7QYYd2K&=Tg35I*32rdc}zVXZBrCN0*(;&R0Jr|U2iw_^3LEk)I|2sQ8rM?R5 z8M_1i##}&h74weJx5tLmJTreEKF;|Z; z$er7@+XQt?Mql@%FFUF9hx~4*m3F$;zTM930->>?*6esY%AZ_zcGdWYkr~~guI$c6 zsy9X$6O8;@-Ax@+gW>n0Jyl0#ol6&|<6wU{0P9eUg17T(?G3c_&ZWaXW`kE1{k{h=m1t5#dY7;IczR zk2&`T5%ty&)sNNl4tna;$LbmKDTsQ6XXikOKS23C6y8K@%Fs$pcg$A3e1~YOwY6HV zHT7Y`5o*)%Ov5k(GiV#9lHn_8nn-XOjT1@4sy9N9kP*mU>h)3mQJrn~Mb<+$?U4>E zKP;}h0;v1Zq_NyBtjQseYBSX+nH|wjN9YKx(>5X+w~rwYRwzk^Laby^UkLdHmePm- zfT}OzgE282v(ox&%mtZmRjxI>{QL_qDTp@w!hTd{KxwR1roTXAaQkc$ZC-z%e!mzM zj{dy9TNQ()1R+K2wLY)G|W$+g;hRD?}hx z1a3DY7J>L$QAh}N0J8?6mEjctw=kL-nIlomLx>o-1uA8MFB*|;(NHf{(T#YDmp*cY zj%7OKGF|eSvgMntyS8lJzlq&nj|6}+N~swS4SN5^CzmaGTyVw`P+A7`XEatk+G5e< z2ck|OLFjSj8wnvWIh`64FKS`87n+2tqFV9*2<{*VPdICh@h5~F;zcg6C2V$BOKy?D zLoyEn-o50)X*zPrN9SIpwECMP{*&94&*r{&^F`%{2Icqm`-jz*PP(_x=`DNS?7y}D z`I5)8@{X)L@fjd10d9+dTP^A0ZwWggpP!?+S(~ne0sAz3&oLAV4F(2-P$`5rshSYN zf@{)cZ~gSTuwp=tP-Gr<>WDIuD@vipwsotR`7F#lS5pP6Hs0?F&9BCd){I*8`NA_a z!cGY0wi`(aQx&9*V6)o_@d{qETczB(UzO&EA<5%4nyR{fN}Y0zHRF5g?nhc+9v9Y0 z&`%H%=4brj<52GjWvl~PCvY0hsh-n=P)EXNxCf1KjE2EuWq8sS{SH68f^#~Zl#RPu z*`H1VLep8A`!p;Tx6x}{!mEd5uJxOYh{z$-1Vs-GuTl@(*n-5MbI|A;1YHB48r^D= zO`stkh{s1=VI9->H*YIpN0f*+XnaCabhlvCzHU_c+2yAM#vn?O@v9^ebc}yULPUB5 z(?x_wuy`kRI+60CBBmAZ;Bl6Y7M5U0H?USRjgYAhz7Xrkn3jbxmTfJy?yy!_r37ob zm07P?ez&lk%-?KH8PNVa&M&ehC5#Xg) z#Y4e9CTu78kUc}_bksdU72y;K{myX9z}_`{VqixMbb(=qfsHrJFt8B@ngd=Or{AtW zsONF|j`~bEt5VCb4q>apwuVWP3|FO<1TTg@$okE7+12pjHm&3D@bksFF5(=#)i@{w^&B!S32*>( zAWcaRT<^uGBvgwaEaI(39r7v$loC)RW(CWJrDTMO93Fz&YTgKm4tyi43(9lKieqqJ^WVlT(EX1q`D|wWJUj*9aQ%6fRF7xPsl2!o zGuM$<4-p+8Zy9RI7IqyA)6r5oog!UJ;U6Z@bjre!GsPX?3{OwG^$K_sOm@qkBZ9bl zwGCP}T%;p|#-#`(bPU2qhvynFuGNa);1PFBlHj}-B1@_ZI)FhhK;*Yn%1u&L z46H8XJJcY!M=GvkJfg0SU#z>r+b);Nw=KUj2ffh^$p7wErL@oQmel_B@=xV(ijL#y z7ni9>HB-%R?3Vl+{iDfdQS;2A&Ivx3>f0f_j`AR78_ida%C}eFZVx#BmStq<1jv(^ zO~exZ%rc5D1QpCDvth;v=fsH>l<`zOVLLNIf0O@U zziDnYfh8sn*Avzhz(ShWLp=a!o2XsdqdB|!4;fHRWU1U;vSASN7HI0RiqwG09sSVMq2k?ts=HCvQr%IhqaZ>TF~m+PS_XhW@X zRQjwzRR7qJE!9wZn2{tnP5?|GE7c=?cE>6Gpd3Z{H+=C#Z$r#^PFEp1oEyu45`MkJa6~W%dh)sB-$(m9J*JapbGh2e!Pi^_`V_*Ny7C zdp+%E(e}PJsG?}kiFyl*(CQwXu>XZsfOI1u?S*;(Q4!VI9}}K^!_;76rWVjI_AJ5! zAaLr+wYqeXxkd}h>jad4MRigTTU3>JtXC^sX@^#%qJrsTkzx>5VT??Ngv8FP)af4l z=-qF=edlc1qIJ}w{J8$9MT<~7uwdZwt;$8^SLJ8r0=ws{lXzmx#-oDbMRpHV0h>J0 z4`X&I+#9DRn;-zj2U43wuN@fT0*ygQ1OpCd3R1*!3Ns0#rrZ_Klw!NBc~n_K$3M6A zsZ&aW@-^&D?S9F-FJkV`(S5S`y0yYl#fbT6OsrYCPe0WhPk+saa89FsOBAcj5 z4KACBF)UYap;5UUnxk>qQq)Qhfeo=@u_D+i66i48d~w1l_i~XxQbFs;=jbM%7q~bx zH6)~RrFYRf1);Td^Hy%hvv)%9*8DucmJN(pi3|C- zHuh|d85SlZC`-#G@VDWLyWwZjT(d3O#Gi!74mim%&d? z@D!cg<6YXUxD2ryPD&JqR03?Z#B)(PlG*;G4pu8`sc$Al$7j+)>9TY~YJg?Z$ru?K zot)ts;3`DnfGaU`cJ#97&CxtsNVev(K0CUZ6cam0t8JGs0Jgxu(9jr5N`HG4gWHRE zu_%3llP03D!jn*=Y?#MM%;6-60YNa7IVGLMY@AvVjrGRF3zii{Wnc}M_M+A)O|91x zarveyGf`^haf4!{k~g|vd@U`y`1vDys_IXF`c-Ywyx}Dm-yG(D_Hs=P?S1rHBzYDU zOF5IHhR%NexZLU9AniD|Lo(SD`*mQAwFn|2DWhW!Vm8Vm%(m%5aAek$kcV7K07a zzL|-IX2Ig)!;s~)Iqadf{uZacztOB23{MFuLpVpskfF}DAS@U~6L~|RF|~sop){+; z2?}8|9>_?1(5(D|M@ALZt)O|bX-enxvMKeuoipoti@+Mjov%3fFpR5(R8IH1Ejrnh z#g^GOBVJ>V2p1V;W3Jv6W$te?OX}F)U~E;ks3i*++$!RkO$nmLXq$jRfWxjl_}~MI z;i>hH%vJ7Z`Cp#d3K+`Drrb(+Hh#)jDcw2qPWJ<J@#88AdiIGTJqGbk+ z6VK5BH-QMPK2;Wp3S70+BFQIQby7fK^a%G>gvlWCf-y5r%jeTYUnn+axTp-9bKn5H zjCHg^iLGBwZw*rNWk-ES1vyRJuS6sidm$#>)*r5svUIdSPX~xv1>E;9^_QJ^k}Ov2 zuk}*Hp1{~&%j8ggRaa;^&C|?tK6ZPix-{tfe)L@iUUicP{kFA?6I#x%A>1diR z3(7KUk)A##hO&~ZW$w-H6Yg_v$?T@?7>6axZ_NeaMmnrgNN%$*iw#jFm0UruSTvO> zo8n->T#0J?3AJj4L`ISe1Z-*i_Js)rrhd4bR(?LU+kFF`pEV?VOL>%`=Tk4F$o-bi zp2|+Gn6m9u{T4yrn{L#JOMTUkz6n8o&YwlebEP>T+E z`~SvPe{q$7<4>kq8TB`&5`(HN#Yh?SLLNpGmAEl}n<-oGw87e;+>$F>LUN%k#Hv8- z!=Mm$Sfi*H0zY0TBy4Q-$I4Y|{`OPqQhuza9g(X$?Es-jc&J>m@=qwu-<30K@kF=H zN|ACuxM?G#YcGsx!!xP6`Qsw8&8BGB4bcuNWf2(XZp}H3q}7lxVLL>@c96|d)LpiN zkRlKxlL1ex7pR5|QL)}=JBUh80h($&Kt)FBCVX(W@vv^*qB$NVQSJyNG#L-Y(3Qe^ zK)?-p9PlMI!q>$gOLcax$yz3DhFK;wxv5%Y)l331mlQ<-rA1{Q7+_5aD`@gC5DE3A zsiD!dzcjl2E=@i|7qzl7BqXTLg=rJi(d#$-smc*R2fce$8fov3 zS_YyaHlsEx3F%HDhO{tn%y781LOp_pg9&U^FN!=aESwpblY+Mnl%eAQqL0FjS@*hRQV-8EcJ_8jQ-NEnN0o zs|jTqLLmorSz|!zKjTq?M+6v6@hAwu()`{;dFXIy^stzBIzE3S>Lys+r|4{x>K zHf&4!5dVG4$1GT%vpRcT*FN3vUH#CSU4U$nfJ`$HR6E?C7GlZL=rwM*fZ8NYhNfJz zRC88yS%XX#3M(8=lSz0#dy)8Z%I5w?;V|2B2@e`JYB4-TZYw28mDPV*5{>yrWIR)2 z5#bhI5zJ*?_rzn$8s#@?ymvgURB}!ftXb%$d2H6m_B2}gtfGGIDZ$5p4);_-MA7q{pF3nKD$bsfc`G?v&XY@JNh8KEi19Qu4s;<7TVqH>4TyRP z5qLw|#Fni?xjb@EW)?vltBhNX2aMb(G;A`0-Rm8@97i17;l{p^IULN$wPBWU8m`ki z@R)o$1eU2$4#Nr)Xf+Xr5?WORoDfg}@){#h!J7u)-ikk1Lr|@vN&Kms`XvrTvxg(# zgg+5}@^wr@!lm(>^R{z)$=&B4yS!y|Oqd)UJMUz9Vz?aLykuhy8$xrG{eqS2YYv}1 z^fK#F|Jtb+eqPI>u@n>;D%6X7PPeAVa>C<0c5(V-%QCKd`L;N2Ko68^fED$2C8 z@Ws4ml}G4vXP{=@J{JrE}nO9zH%TqtDsVZ5tmUs~Frqf{P*GRU4_k=UO5pBpx)TTan~tvh3- zro1rX*^O$8JXX^3&EB2IvIR}9Hfw}q{$U&0gXXRv2x@m>`x>dp(S)gW3Ua@P@L zv_Hc^ehP8vgCQGPZz<%|kEM>P*4OG;G$_EO|LumM!N5K-P_rS)u-9KRZ50~-rA1rig^mR6LNq`Fg4LheLh0?`1c%gL@zTBhVE zd*~oqxopzatCoR%*%}$op6!2Z{V{qkjh0ulz5|s5XA?pa&H`?f|2tR!b|(JM0BV4C z4gj3^4+XF+RijoYWO0wc>eaI27FsF!3iG_C&a=qhO%w4`C@;4!6-K@OhPlDaEC?7x zIdg-iDkh{hej>_flFWO}$8i^y+2H!k`G@{DLoj5e+K7MFTnFnV3WBqw9nw12A3Iv?6^U_ZKAM%BtIn60v3sgc*9 z4N$LRIjH5!hjvNwN9yfjBE)8SSiMmDC#4~dP&q}!rfL~EG(s3{tD;H2R}!Pd+=BZ%HEFRc1E5psxr6UxgtPSV>8Ha zg^~XLaAL}Ix~<8u!L4?-6hKF4vk8Lw!hyD-LdCAhB~GVHYt;`lnao0CqvRSN!nX>R z;Hs3Q(h-;qc7?F~L;y#N8`@feno@o2%9ag{L7ZoHJhrbw=}-4pXySP%#BfF{4|d&j z4}a%OZ#?Js$DG}OZyNY*nC4yF4>`!+UN%g0*>pCYnS?fXi1?A-@raz{EOeGTmpb=4 zk2^0rwN7UUFQbuKOUP6+ieA8V!IEnLC8U}fZA4XF5JuJV5yk{igwNEDsi`Qvw{{S= zSbUEqb1%~w%KXLbTAk;ex8C~X)f1W-%d&4OpHy6UqyM&N+y8K}g7(_+E^O32w7C>5 zEdrGBWTf8^yNg5yBC8{Lq#Ala{VyUDyH14A0U?DU6H%v;&}e zg*ert7d{FfouX`9Ts(H^(ABRq~+&IBuIf1(=*|-pD0cnMVg=@`KRC~Z= zFv<_?z1~v2QZbWRu^-%=T#eCObFTO?GOuxhRVKMMfZ44+$-;2A9N#8c;xf2n(8$ z4zm#+a*~k!5O6}*Cn5X<)rCqEp|5aTs(7o>C`5}>(SmG2{&A(eR(YScQ{LaNT%c{0 z3*RgAPKew=J*n7Oq1>i2zBptQyGy2NiN|kY@=h*p`-M*Ca!|I3F$JXwVJak?h!_ef zC*&Lwq7ik!2(RYXhMW8o#Mt6V3Yq0k6h@8%RD5Ls4JbYqua(SNzGk_7AqY2@2G@n4anMsI`%4)QU$0i)=+GtQ_Cq$~e>ZdF1O`TW2C`BBJLxpnK-x#ync zJ?~lQaQJM}3fD-$qUS1Wm1mW`i25O$fMxzxWD)ROA_Hy4bh0~QI~(ik>)Ap4V>vWw z^5jYMmm-Sji=(^=t>=W^J4@4)mcJ*v zS9U|%+_YtBvO6s!jn`*S&z_epa|B$01W3!4TyLoX|62e>k$2t++NB66{RNsAU|!?f zz7n{}%m6Nme_62v=Ut#DB{)Pz)uj10)DWBwJ_-Ep7wRwRpX&e6cd+wW)^Wt*+KwOB zf!$^Qx&D^jfBR_Xyx*O7)1|ZSIyKSqwmwCFQvZ`ajXlh+V3)JiCzrCzzySXnb{W9u z`|;mKcH@HLpa18*pN7sI_|(Jt%e3}ERF^G91#l4f)yjBYCbJ*e6<|eyxpexb9P#$I zG{OJKJZ872dR(9RK4Gb!$>7g=4oy+Ir8*$>wDUyZoRMN8cy?!^17|GWrjh0-m9w&^ ztp8-=&N-{5FYI&gqb&F5Tke=Lb&i}dbHO{ePF5|Bg(Wwg^PN77mGc1?*WNTPNW12B zX@;W8Zz8+o#ytBvzP5hjL^`1!c8^yE*?wG+cz<3m@FFhDcQ*E2Oi~@P{Jj)K8a4IX zVwB>iKxk5vl#!WGOu3%`i^u^h%QHT_&Ps3l?z`Lcx3PYuw|)C9J_BF%V>SAEeSHmk zB<=L4q#H$DB$$UR(pg*NjSyYo%Iu1}p%ls9ei~UQP-deJ6QaOKnTxoMfTffwB@eZo zlrxfFviU39+dHZiQR1jU(O;L)FGHS6=jgk!7BM!%?p{fi2+YC;Ur?55Ze$|3(ceN7W|mbMFgCDFcLr zjmhXF5Glf=r<}@hzjXx6DY?Ovf%+1@SSeb-hxbc-Vu2UAI}W>wemm(xqxw#1c(RE3FL< z3~@ZN((F*z>Ro+~{0Q%?;MGrx>Jm1dH^~i_*AbJrBwi8;#-te#D0^ALYTl1cNWR5@&)xj*5-&)CO?Pec(6tU+-Rd^Q6xg_($&j?VNbpzqdf zxgq)O_J;EsMqOHS+k%;QRm^W>*Yl=HZ_d1~Y{rPOlkb>v!9DZu!G0Udm&rAlRi<=z ze59lWjzlt8Mh4e3tLuoDXYrA|4!s|ip?8B7n46Ro$y#rn4%DLLJ$6!KUux`0jWuY@ zsih&>t2rVx=Sb+Y)K46r5tQf!d}*^B#xYw6WlxhQQ^WM8$hE^m;Ctprh@6=#GLF(* zs_g8N_zm*MnjiZ8f-yHucxXjc#q6spYcFV+d*eLiyn+?C&MW@y`HSaFncGk?cEXJl z!8_6;qpe!ev;xH>`~fd8<7R0zl+004lZ8TjnBBQ--NeL))0<`~|5^BC=;=k!SuOCv zqwruu(s^;sVX0h(KxM=$`71jteX6Jk_)!3saEI;4(1@r28PW#uT%?T1w&{q7~2 zska=*=|Xl*9#FhFmSPK{6+z05IM^CVbHp9qDu=_1`eQ!I16?Z>AzMdlOd1smRrq-V zm>`N!a|x&J(*~AgD}!deJL|m5^a+Q)hQ#p%jI*RjD4xcCKVBCu}pvu0QnZ5ix3NJR6|M%29=NnmYu^kWfwiXY1|!UP5Q?< zdd3av_~8Z3Gx8eW!JQj$%Drc40d_7s?sYi$5#T?ZF8;Af13_- zR;o|c|8ncM-`>gwa*uvp4f-LDuhFkgJN+p-N`;{{0WjwU(ro=tc%%8~F(IKE@LX1w zyb=-j0-5`P5<2c@NBnG_pUw3%4Vg|LW!MpkHA`qH!Qyz+KA{du%@3tgd1)y|hxefD zF-L#U7=0&3mu_XX$*X`y>c_Pdeq3WmG`3G;yMXS~5dH+1;aN9Z2B5fko38huTbQ?* zK)1nNLb%I2me=tNx9K~LyObKwP=jX}9PcIbe0qj_b|jz8%V!$=3HG0C_E|Q2KbyUl z&6G}YrV*YqrPwKbB!==5FEscv0%C_0mm4bJObMIPsdsM~etz4VRB-HMCBQYoy zn-uhq>K|c|R06&;BSHbb5Rw|wnr1SDB2cu0k0IVjf@DT4sNRW;MR*{CBBotTr$Q-T zhYeV8<;?kG9=iL5mxq4%_MsEkFT4GGGpdny`$J={y7jsVH`gwow)=@isOr1EHh`7E z9#uA3XYhQW2x#3eY=0h|Kte6tYstrX{(K8^#nwDlSSsQFGh9Ct9Xm%$fw+^0@C%c? z{$IPAU5tAeSJUuP=uBgmcFcv1hV|EFE_#a=J;UgQ9oM6;7L6Wlm3hFDFJt!YEg|za zX!>2|ub981LOADu4J%dV->0&}sVtGo;;Af_$~5DR8Kd}9jQf_FLJavT#k2j0$*akAwr}&Jhco2uMCY<>QE@S42_xE5ocviCu;R9HYuc_ zpht7pIo4`>fxLGx&7nCw0ehV)d+I=IC8{7P#Y=cls^La}o?h9BpM=a)y4meiIulPtkKJ9mGCvyS;6iDB3eCve+B^Nxa?pI0I4lhSkZ( zTB_2W3BdkZS?_R;>J&nNYec1(kQiWKgv1~w2#H}XOFl5RO)Xv*le$Pu&+BJO<%SF} zKYpRW<^8p*Au+k;)ik`*f2OfX0*tv#L(XQj6p15-uR*|=gb0b4OXvGP3ODylG5fR3 z*+1BI_A7hNzUTGm(bi@5cl4NjkE>71yI367WA?_?G<#z%({S2!ojvb9dsE`5D$oW0 zygGiCCWXe?qaJ^)0%0UY3|wHyDN8U6{T1(cN7IF}tcF^kian=+1P zS&CqarUg=iN;soVl3jMi%6x%vodW?V5o|+>jA-yMLjrn|&Y~|7cPuQ-qrfc1z(u@P zM0#XKVeueiINAKZ0jzZV;#s%x@V4KMUp!|9Dv@5kfy;?|^k?~^y9-<*1W!z z)${MBuBzGdlHNk4N$e4M*u-SZ`#imE*I0%!rT6H}5)~Ul&IX%uwq3{>!yyEXwH;@i z+Ep%lUO!VBVMqeQ8OKI={l9i~mpxCz%aUeKA?>`bu~{^7Ax=9y2tW|<1x7HP z*x_Z14vf2c_OB6TZ(qK70vYy^)$;+{YJKoM2 zuAVtY!f6F;04`7Du$eh|;&Pa+hPBmWbapXdHFP}N-vie+Bn0uCS7nm_!?_)XC@q5xVmn7xJK_!sygDy+-X7S#ve{a^W_vzp4 zluu)hjUB(s67V5$0?Tw$naA=9jTJDihofM6|dg4DJG^mG-MtkHn70c&x84A?4=U(t`aH;b=4?T;PxsE{lz@Je1%lho6WK zFqe(PO#sWmBT4o%z9Uk8ozVqK6ZwI&4U-8?p=E=VPs_{87D*yt&V_kBu#`KNTtB63 z!Tm3tQ?qXICS8-~O>MaI`bD2ioch{~rKtHhpPf6Za#(H46^G)3Mo-}@1^#^VX8m6u z-Mnkdh;`M+jy=7GaOq3eKdOIc_3gW~?vD>Z3g8GA|Uubz3cmPo#G)6Zi z)TnK!P;IS~mI9;jbb&*M9VXe&S#Mvwyq(4;EX~ z2)-NTAAekZ%Yw@M*%dYS-h7+>vEC20w68Je=U*}9LA^=e^yX{x$?9*ynbA*ZjZyTb z*l5*Qdmq-`;!m@BySyiX#1wJ~5u>;IcOjQSA(w|>vB~ydxq2r23Gx+FarvlVjRbdV`+r+f&FedL)GFx& zBE_5F)l<~x()ge_p+-=^?D4A!LX?1(X;T)Wi))dGb3H3*ac#P`Tx-&rwc`}uwJFa^ zwx{jLa2);UsP+~-dow2FE1_sEVH`U$afm2e%+L9?fK%%myChSqX<5m?0ZD+9C;*9sj?YYe*BD78?pEx|?i7p(AWI9JOrLhy`PoFvr*P zZonst^?!dke-2xDLG9!B@iIUdCOm#$_U&U9JjQG&tLRsTPaoBFFrK{6dh_MEd*5qe zJCZZ9_rJHEWD=)DKOtub!jYUkFZQ@!XpiSxLVi{2B4<6XCjAFFV|c@Cv_JG~*NQWh zuBD-EDQ6g0=ni8R)8J zQWN-M#CnMhZb-aWYSs6ab{Nz#r!NpvJe88S*$W(@&l;cujI;%zi#u?|D8xaDl2MwpYN6cPi7Q@9Kx3Pv4}4Hx(}^&~ zI}lGJp5AzxX~Oz|Zw-ylnJpvRc%IIuCrfpc`U>`$h$XR0um-}P^9g^hy~V3_i{A*# z!P0>1h3&*H`PtaRy)b-APHs2LNsMiccaB}to;1cr5CMBQ*%Is?OESj(u5;{~AC0l| zFm|}0yH%F0mnl0eFLjPRiY)^T=95d=LUaCCNJWg77tqs0kMGq-|QFc-hk z3zdEI`m*VLS$$s?>&vvhOrrn$cKoXO+k#z4So9QSu>vIWgXv$S!=nF7IBEu43>#1& zk%UZJ26HmfMO6$!hfk)1Mo1XH^C$SvE)$}AP8)=R# zc4=z(3?oxq(inM!w5H3*w`3XcwpjfF@$N>n|BR74 z;{qSIq-auC%VcExHz z#NdSd(*yX_sJnX`;}GvP(BPUX0pP8qRYpR~qfJpBEy(UHze~|Zh5$8lWhErAKg3XJ z4*Xm$YVlGH9|%@0m3^4TE~V^?ivi`Qv~!QLJYac%<_VRAka9j#dEUNTTrPbfo89{8 zqa8(h4=)0GI|gvI!gAOCF88s;t*whs6|yf1{=QYeNxyvqt+$BjiJjhCtl=e+L#!e5 z;I(gU|DnZ&{6rV26n3WA>B4qomjsR77{zW3L{hrhvPQg+cDgZkjg(=&dGdEHzU~n~ zV`SRr#>h3M1xpr&H@&+BYmA)QIr2!v7E6VkP;|=a2N&5d=1kIRj64z=fNU31evyo5 z_c=o!fIX{otZQku5J`-aAj7M5FbV~0rL4}#%@$W_aEgTh@`%ov;AoH2HdbT!6C`v69IP0M6bCYzRN+~Kso z5%;jr8#L}w12Y}>I7i&$-!12!=^mtUjC+ifZZzkgfqTr%O8e#fg~l<)9*J#?z-Dj^4Ax1EBWR;hdiECL}uz;N(P51B)~MMAHg5keH|?=1auH;gc1w} zXb=&*VgXnRK!J2B5g&mBb4v*b(MW7!jg7=B)+jGYZc%ps8-G@w+D{B)O23u*lEW0F zROpGI_XJWEaJ9*(=FiPrajh8DZTOu6h^pB4#Nn3HqSx4OL-|rMgImQ?b{e zUaW?y*nluG5v~;efen1R0yE=ujjX(_vp5!eh1i#g;SlI2>4JD~UdtS{&MbwkMUOae zIuMT!NH##PiK;@Mwcg?Zf0e-wLjYuPbNChFC!RwRr=(d#;CcL^`U$Kzr zBqC4rV`+-#l&&Mpt4J@wF8~uN1lk9Y?uETt%!8ExWov1bF=q^V5gkD!q>ICuu~=p} zq~zsC6Or7s^csJrHx%+%F114r%8QSQiq9_7A&iZg0~7%Saw`$hDjh&bPw@$501fzr zuK++M`X(!&Vq*Ro{hM3~EK1=Olhz+(OE*3|+bk;rD(Nep`#`i-5 zgIgAI@*9#SUIySWWZw$~ytVz67Pr<-Qy#?Cs4~XYB=xu&z8S9eiLtk|c>Rt}d4^OS z#A{drsq#p-{~v3Tt%~IrMagc-ULlF1WK@nzRFdo@aWu3j6;Dz0oFGorybBSRQ z3I(+hBO6a4raw1O=K~#}??a7}Y(t!Fv2C?YcGyyFeQokgzKE~nvW16u9{4crlG|%_ z)*`|J6bl3DA4D+#pi9gF3^rN=+YoY*ohHqqNU@02g}|L-w+g~oqXtWx)2O`mn%4N* zYuP?z#-Lizlmv-b=9yFd#&%X%qc`%|?3L&wi<;6ka1sxu&xMaK>;JBhi5Pz0X*M~9)ff-BA6zD zL2zl!hg2ND{*r%z!2tE~JTZROGQK!;XR_{wS!ld=Vx25OE zxVoRP)y2rX>@#t7K*;)MEj`EXK5I}88}SK-Skx3^sXq5f&>gQMnNQ!DE6!HcQS7P}=yy849_n^Z^4br`SYeH7HP{T8i{1<||S;#@0YayBi6nIKf1bVkzrm zkYPIf&%CvL;?PS*?LWfrz;a z@0sjUmEvl&A2#QGC)$a zd(6ED{(@a9d`FS%L%2ugHNh-n-klM_9@zqRDQ;q14@ZfQ4rUp1H?D_`7KC*{y}<(D zYO0R+0kTCy?+Y!csV*rqTC4i%ra;)AL)j8ABWV(SE*&hGZGooGv;M9XY9(@mto7uu;f*Q zJ5!p4Ih6v@n*xGQi!afqPg;Q^E8((f22|%v>h2Ln4)#p9ji&@`zCAhL18|a>eEcTASBAb>*1H7Oc^$=EGX1kB zH`dmSEZ8;|dQQ(tkX1GsutDRnN?3YuLtj|F-`<9$;tddr4{qYpKx8 zbYzlcL6I3m&eDWzecTdC;hhm~$Q?`xC0BUKmyz5`GtHE?dEpslMO-v(_9MpVcl zjSbx_d@2rNNSt6V_ZV5)j;p~gfvag`E3yknLrM9FG?03(^D!{JWdU~QLr1MYLsg4g zbp$zo`6STR|1h2eK@i+;T}wvj*PcXZYuFN`thcs*+!BRb+vQ9W+^Axm2Ab$1;3{LTcOo7n?6mfuJ1@fv#Faf~ zIzq}aXW9!h&FcN@GacbD)&Q9R=IC+lB)og@yJ8OTCP-2~5$Cc)oZ^RDY|d_e>=IlJ z1`b?(xp6g4NMTDrPV#~gtGmmam;`yfR=hVF*$Sy3{3%^crnaQnx{r+guL%p2MkcEj zR)uM`j%o>}m_w5|OJZc4;9f+2OF$=NvA}M0c|2U&=VI$zY=sN7k1o(Yx0w}-cIl?$-7d|W+MTDwoTw<}H`z*Xyo>rMI@miXOQ@t6(P@*mM1*cSsY}+aJ564~ zO7wS30+Unso-i3qPTYHHH_4fS)uPA^9BsU_(Gv34;+=_Tv1X#F%vg-b6N<=<$mg-q z@EPg-Qtpoh%xs={tr%IH(Z+S= zE(H=mT#w`rXCwU?J@0_X5?GeaJ0P-zSOCS-(>n2VfXpg4AOdcj^y2=?|~{G*S;U>5(gD7n|}zr=y$^Ih`xUwZ_PV8a$U~4WxS~ zQrJ!Fjk0iK?9TN*t;^06zcEuPGxr6>+|F@yk2P=B=ExM!^r42m>scs977=(cG8<{+X9#`si)(w#xr_d#ktM(5mm{B^bEgMI zBfGm^i<+Qo5#K!tM50?lS88kJNL!t4Cpr_h+blMlCkAEc1TkiHHUO5Ee6r8fJ8vJqrRBXjmbPW-^|uo$aL034GU*^9T|Zff4}EmJZ#XlI21XvM z#~RC!8r&X_mW5IkcP!g2-KJ$^*rPKdL92a+mH5I;E-K398Ll-{CERM^aTBOtlxLoH zdeHtNw-lAbn2o4R2VrDMh(Ege`I3qugU6S@`s(WEue!EqMZLp5G zM2;Dk=z29IKMh>Jo7HSs9)$=_Ic3?RKEz=Ko(H^txhC`+Y2m z%jK{?g#MI1m&g8q*HQ;y3+{vQMRnil`=FM|ihBu?VcbgI9L-sp`%3Q8A$N?Pf9I96 zR5c_2u@NI4yD)9w!g*A~%qs9a3&E%+OXtT^vOp9~^)%?xW|=O{Gn<=OL?q4!#vw=o zTjqs&jJr~Re3h`qTR;Tsv^;2E=9TL}C5)#;#U0({G&6|`?^7-ja8r4O zz3CqPpS~NdBd5IJuzWXnB@2x>dk#HWn?*w1;xS;(hQ|kdt}=BY|B$mioITCiV$Q(Y zbpZz?tlAR><{xuS#u+=c;?rA<;*dJMnGb?>i;#XyHc_jutY6dc-GPYP`D?Ov>cP z6207je17$$S+gcxH-GNrv&*L=38Eaj^_pvLomqGF?X2qD(womMEv18zJ%+3m;@F7t zqYp_x>v`5otmrO>%2SlBI`1AS%7In%>an@+i=l>sUY4kqrMD%b^(Zno$tKXRn{F-_ zRbP7h?{+NMIQIhmm760sPF#M&oSW-$FGw5?^=UfX-L za){Xm557e|Q3f-MOF!X`2e6k>k}X{r@9Xg{a*A5#xJ>PtWJlvjXPvVF>8!&}w2AXM z_yeBK3TTrLL=>h%KsBlg4VbmidFIETCMMpP-gGUScKPLRPH(!-ER9Z^xrGX(vATzq zL;M@u-;Tb~n$2#P7b=QVe!z>~LnLHy}pQH(EaSUlGNaW!+H)mw5vi`{LS z$KvWcadjh&&1RZoKVn>+L07K=WS1KUC|xc63;o1Ss4cjf1XX31y#cPV%`$l}wJm8` zMkY|y8wB3UK4&&`M?z$Jp-VA42{ z^ca1NJJ1C};pl}Riv}_X(-l$+zIRcC$wCB@P>PcCQ60MBXWZ=v}CQG*0p<6=v(Xui$rh;%G{B3rG#8#t&#bDMHyqY9?bdC78Fb^;hR)P~9 z4I}fF##1k|SGU)dBJbr8F?hr2um52E3;F2JZ1^WkiC>RRzD`0Amvqmom z#E8oCo69Em3eoA^i`hokMR}*ifATy0I!10bM#9J?V&nz*x(YvXg1`UrLH2|8FYG_t z74&_y+9P&8$a>KFh4p8vl25F`5dxq7o&S@c;7XMDK_@w&u+cn56~vZEzJv5cLKQHV zWNRH77;^=^qKxcFSvkEf?P!^xc_Nk~Pzh7Hl#yf;JGi8j5v(g4ZBRlBU`pL2&q<>7 zfIgX@Sj8vtycO${-zAOpIlWsEDaBKf^rA-&o(j4huOJO4Lkqm&5U}k9QcL_wY7&?q zknP^6w~rUifCRm%s)Ut%MGkXkZ9(YIF1E(SmLL#%3xc3=1VQUv@&Ff8K@gH^bNQ-L zYrQZj%hd*OVeAyGKy7NDT-pk~@YCE{UqQIuop2m+94D$^XCO1Hp4W$_hvuP@Fa*&C z*%Z}+p$vyUz+3=D3T#lQ05q`d*2NMDY-(>6qB1cw3eE*bBl0a&f>RPO%+W$&nubeC zcyL3}fuE9}MK`2;e(J{qMH{S-Y}w z9@xI=z4tb47sw98s;H+DRt>HVqzqo4=&_V0-4?G2S!(@%hDHwitCy%)6qQ*LXgkga zsKZpWrdFNNTCX5~ZGbCckup5B%biWmUCw<(cYV9R(a-($0I66~11_0ztVk>2QA^M) z*^p9^&NQDKhy;P6($rjl`+Q(nB2W`b2ngh4@H;Cj|M{tJgZBBcP4_;eZSXy`_-Xl| ze)Ob%0o!p34G%xnv%h#yu5H_}{0sIeJ6iX<{faNxcJ?3L1TRYSax5R%h`1f z6g?gyY_A8zwU;FkJ$?bUmoUG6Y{|}(Tofb)Wd{Al>lM!^GN*aqTFTL+^h)Pk>oVB> zgn*RhL^zZcv4UUDWfBF*|d3iwD(Kp%Z zH9FI5r8!fzP683cfRrzdivOl>76@&;M4)BQuJZX(D&^im>Q~VWD+{GM85yd_o)%67 z)o`x_VCAB28N@@#=TbSmz+`}sip&o}vBK#T9jtQ-u=^;qN8DJbgO5@B24cn{7Z~Yk z)b7vu@$cJiYyEED8{a&h{GxFU%iFPbV#R%rFM^XOpQrZMAAaXpdGbqjz(0Qc+m?G; zld}@6@PR+BTKT(~ck8f1!NQK`Af{-1# z_sR(1h(>P2K5ZrC3(cc>RIec6w&R=NaRMQl&@P22!lkgsY5w(S5m<$B=pf<4eYpeB z#Hxc5oPT=L&g=9+yMCzbrKVOLd%0Zyr~d6;7{Ei5&CfhAWhb9XYfcfv3aoh)wZbFg zXBV1%V%-%|D(5NLRo3tQ?NA@R(yOGDBPqvIWK?dX%9gA|DC|hsOv+D_fj|^VP(5&2 z8Ri4^-i6(hvgHxH0MJeLD%JAvnOJ(>Pj78{^VRA4{_QD5mynkACynOPt@9J;;q#yrzKfCp;YxP}?PqK;sq16`q6Ox_pUNM9d8iaxR$IJ~q9 z&vGORGt<$oD%=$2;ne{)JFq0cZw#>N02>lu{Q``zbNqT6tG2NrHrCI^0yfFLl|fac zL-m*`O_0ua{-K>wLd7gc3lT&hRtvC`XNM52?4V!GrHw$WtC|E1MD}61LcdjieZ#S* z9-g&v*5p@@y~i$KcN|=-f2szT>PPgM?b7P`1)0}1JhWlm)n(^r$JB4%7@))X~5s1mHT5Kmt%@;((xcy27Xk3S@Kz0{&;xSFo6Z z%Cm&@G5V(H4W}x}CRzb$F0<^0h3`YmV`RM8HN?-<-f&Z@?5WOzz#wpnq8}NP10(<9 z{L0B!Ia!gj9c>YuVK15>hda8QkkaUIS_mrz+Xb4?Vgf=?3COZJLP{$7ULnNf=hq(l z=Cg0V_%0dXCDw(@mMr9j$#>Md@4K%t2tJ~l*l*cQ`T~7LGJwv-@N!S;H|k&Mr(jrv z!;MY>=n5y06+s5=h5}eu1AI@nMW&KOp_fa#W=lF0F;;|M{mS&~Cfuz*qzrF6xjRJd zCuEgu#e=X6fW(E>b5dA6=V4u%5LL>OE{m7ASz3xG%_I4P{$75rVsWywtWpfVc9B#L zm5>#xN@HovEjzS?KNPkkkP{Nh6~rPFK*UGDTWXC-nG>>IVBez6YCghi)>6`|5n>lH zkTL~wJ_!1(phr1TnlrX~aR2j%-gjRGtH?V)BdhrQ(U+$;UKCY(U8?^_8PYVR%5}f5 zaerGMIwBI6vvvP-=e=8!FLg>0u?C`-8dw9D+nNvziwN4lX1q~W42{ z4LsPiVPC~^Ozt8S$od7TcV>_WDabs_&aSsJGUc+1R^6?h(p*sI1!9K#8yM)^un=hDA+-;k>Mrf<|tHS zD<9gk_t1zX&#xl|bj?fp@Q3d{xbns3DMNYNMThi5TV9iIU;M;FI=-Sfr zGlsF+Mf>}@hJ19($`aS=)lExooWd7kSx0FDvje#T!JmFj_xW`XqbYp0L;36~x_l#UqGd*?o3jDD2X# zj)dE54+T2W8c=G;$N-q-!e_Kn22djhy=BNLC>?~SrVXw%4Y=$d`i-rh z+^gjOt@bx7m!|@Sv!g8`HxEy&N!H9Ut)(G2_cSQa(s)+5$`z-yK!%S|@1$mAgM3mT z;SER8WKc9sqJj=#+7bM-kSqqHmYLcMn#Il7xTYDz#;9s*@`HCz{Cx1qo2NgueBNEl z^)D)(xk~?72_RtFUw;QJmCZ+Y(;(GTw=D> zDx0k?QTdH3t5(?%m7S%cIb@2;X9X7r`Sl&rcUBNwE;dPTc;cFKhoo1s7kKRu zF#cC>y5g9$5)23pC^ zX~4Ebr~}p{Od9|Ovm=IR(@JUz`U7p&+mC##^THuR-h6WPeM=rthOgQEmRy;{HjM`(Rp+@_5z_wn$_2z7oV}pk zU&ZPWv+#SlJE3{4P}DRx^d>JZqXVPZqz&wKCsF=OsQ7o%4f zVOq&`2ZN2dK#k8B4&wo*H&$f`=7a3Z^NtETBBA@@=x|eIM@dp{&|I7Kh5!8d+vJZ){Z;*M z*ppluj$?fRBq#)I>iGCM;jy7fAzq1^ooc6w^F5^kXhUD7y*eQ;2Pr5qbyh=;f?iiRk*U~I(mk|)I<<}hDxTqoZ(l9KF_cW3+ZPa z2Ykow>#RON$LH5rj9WF(0Is{|@2zyCBauFC16=)V8-^luvZz|Ud9{Y0t zCZ?(WlQYuUs*^0DfAe#4PpY2JKCr>HE#O(n@AX>EvW)goE%woE*hg8?#<(^%@Oj{; zfLs}11F2=XpVAB0c>Ps~r4RI1z|{&xPd}l}mZ?>HDF7eJz7kbR|CMBvzLa51fUodN zh%uM3YDAai>i(JW%tYq$%%;p;nfo%WMVTxU#WPWlB@syv`;84szC9jMJTp!oH1Wc# zHFpLc8`fOMH);DqnHg~@^3?!&#%f@zfB^%kcAvKUk5iUhc<~=bmM@vQVXA)kg<@y% z3;JP{RGrlK=?(Y&juq?g-gPg#pB2MQ*Y&?9|Gs%M@6CRL$cIceFL7QNkq>FwizZGD zP$iz>I&M%EOzDQ^ zH)1OkhcRL+V+xEo3<1!x{9$8c6R#-Vq=?z9#EV7b2mxloa8WGi>{zeNP#2_{$i9fU zl*ln+*1yV|iFX=-oS;!QwAY+gzoyND(2{vkjbj~T;I+$n-Ky$;y>7JiY; zwfNVs*Bf5hy!bT{dlh*;!t$`Iuv&y=@2DdutnWE0LX92kg{K#+8i;2{q+#&_YaAIA zoNYjvMJ0Khu0u4WE}$uvI;$ga8ro%Km_)r78CuXv2u7MsiDQUON``>| zmu&>UEx9nlcHQ;*1Mll^>nML?13!AAX3fJdos?_VB|kl9-4J#Uo62h0gJU19`7f+S zfwKl~TP55!zCMbhi0XDb@=W4u@uvT;F-uf<%KOC#{UFN-#^TL`{~6Xt49xLYFdO`T zc8A0+mnP$JZxmdXh8L_85S{Zt?a z2wgQ+r)i#OeZ()}<=d~aD#mibc)|OpJW6M05PJ3K3x>@PK#K_MBCx0eGEqtf;XwZ& zkn_W|qR4f?44ARogTcAe2ltNk$}Nqei~SD;Y{zGR-@Bn7bKUz$(Be;il-&Kg|9(%! zR{5&`Nv_f-?)%8%KXo5-ExH3wbOHRSW<0MSl^qwx^PGWN8@>}hGNvOdpk~llcsORS`?4$X;%NIZ?!tUj5@A+0YFI zAAb7T-}@Nzqw0A}YjPDbjjIm6z3-zYF)!>u%z}2HUz+-Y=9`Cen>OGOY(Sq+0-C&? zDr1hgj=Ok;Ypjb8B5N$5)>?vocb(T!*I$ZDO-MiOL$UzOBcQFK7&?K4s>^ck_YTFkxmsEH6I==23n z&*{B|t0`C1Y@Ldo_%dD12X-R336ZO2qCQ<`^E}M@k?&B5>^UKE5Z0bM^ zKt3oJ*nsyy%wQ$)4DUGE7P7c%CCMP*4b)jIE~Spit}djzA~OijhWe2ktt60#2r9XG z_&_1vMtOM>XecBm{(DM4fPBj6r`|XvQj#Q`kbs4=FcZ3SCsqMp3mrx~m2?j+vYp^P2_4q)UQ%nEXT z#0E|wR$1!`DW@!2okI?|)H+$RfJqoKLwQ6LDB+ooY9CQh(txP~2SAnaBsQX92YL<& z!5`=kV1@B1x=JXoKi9Ud`R4i0xOif>zTgMn6W7yP>vMU*H~g>cij&8cY5Gse>)*!H zbwdb{ZpG6R*M(1dJ3eBv{dRjJ+GqmqFwkCMAB&D!7E6VDtotXoJjjg*RR}t{c8YX| zbPoUxh#;3q)zXy^eMOn6Np%0R~WJPyAVlmS>5Dq=LlP6(JFOj1%bxMTwT#V5rS zlEU^9E;bYy!niPK3Oq=`=!PE;q02K^?B!WG{GYdmyDMqCuOsnk9bVQD|U?8c7Ae{frJN3`> zQ$O6l^-Xq-K66KN%bwrQ-1g*zSDEF#ub+pyjk+!MJ^bLD$#>40v+|8U zE+$~Cv>5M|a_gFO^^1}h?;?(R(o*k5UT)R!**VtXR_?Z2qt-rvhB;1&hK}~Be$^ZH z<|9L4AyGB9o`!s)+e!!ks-H8f@h50HVr*nOKtK_#Lfx(v?afH31#(&L;%BT@m0xgR zli!wn=^%(~kK8wXrP6Y8xE%dG3!SPUeI{loG}LBOLz$HzVC;qTw6}zPQfJiwo=E6F zJds1XD_(E0QX%XC>oMz(R@K2%d0+kk|B9dFY60S@R-7r4Qm;%`<|&HO$9Bl}rR~2q zwE5KR_CD+o`;z?^QQ3Wz)SpXx0FWf99?5JC4bg2DSux=mWq5UiNvO~+hGY&;4Dk{H z^lTwkLc)}1K1^=gwv7*bH~BWn4o(@8C>(e|H?@B$-hx+Zh-bUW!g<=we(V0d`%$-C z>z?N3{oLodFLBFGcbc1ek{pj~&>%_*{=pM?G{gf)iGiWY^W()c{Qr zmK|vfdIMjR-V{G)H;JD&cYIA44E)@*?(qBh;_FHHxq(Fjx&dn= zPAI(3h_o(lx4BcGT7V=1LiTwq6Mc+d34g~Lv<5x@jIip+l@UHT!umv5YJ}NAxC4*i z3oonij`i|EUX~A6&&yPFY0UDB^wfD8Jc`GYa$S%O41ONuc|nH3Wyw)zvjjXsmdPka zbQ?i!kzNz4MhIqdknjg8=e(j6z|Rov77E4Fv6uq~L9HN+87V=V^Jaa_h&wj_Zp!e> zCfqb@VDh`avbips&CUzhU`y+%lUts;I`hSTlkZf@+YUy<(cq183RcF%ao~iRAy%d* zVu4O$>VV)x^gBmB1$V!8F5n2f$000}YOoo3ovJ zwrxlr>Ntey9hmPBf{$*Z9>|v;N4@ADC957+oq{I4R)fo$l-bdabDr!kqwfurEV+u{ zR)Bzgx%cx^V}op!wx4bC zY|9c0x7AW#>e^i}q=@>1o)usqrm_Ak&Jq9tH^DP-s2nT`bqs<}k892bDweEUdTGM+ zz*%7Yr;KgO-SFdvpEejq2N@nTlk>2;bmDoXx$!HnbFr~5Hpo@!`q?GVwlA@Ba6Q?P zzC9)J5 zW6TpqARX%+lkI#(9TQI5+}sw!gn!!5xFCM z>|qX|9;_rcRW`c2T1h0}#`z=CBCwoGAr~sZ za7FwTyi>!)5LO(S_9utqKBf*5^E)@LxyOC4wj;Y9z(nZPlP=W=d@A{AJ~SPg%~5b+ znI#OyWX?2==50I06h7EPQvfWh%l$F*FxcB8gfBZhUO3mcjJn!71KPNDxMfk6OZ4l9tUHHitosBfIhU@+{0KSZN0joW zcwzb}G$}6vmrWf&ip#)(L7410I18P%y?QsDSq>5~qSvm0OAj`ZPR<>I0Ge ziX|I1EcZXVW!ILiuk3i9-8`+Xe(DVqCvsmxBBDy z`XBIIWspd}&?^CS`Ob1GX$pFIwajM5f-n& zN9?`yfPp|56(~3%>ivG^uD8k#(lUsd(ry)nClphM6(Hbk#Dai;1Mm(oED8QZCbprHHzFznMa$M_yffG4y7i-N2Tp$c;mM&>?){6t z8#INE<8{xexlI?If9P);_5U72(&rO4g_Xb0V$IXa+FnThhuzL@m`k~L+HGS*4kd`_ z{kRuImvneN`{HLKG!0N$h0__WkTX4DWdE02n}7gNtWqek6Xbgyb_aRZVRypj1vdzI zK_EmV^`^y48xaeRZ;|5zBoBG`P+eGK<`YQ}1<6vDx9FBb z`b%u6e%Cx+Va+}K(31#Je*HR&>j$gGEY*kVPqvIlNR{Pc_8!dMLe-1BGD~id=gP}u zMI5yNY)i;uCloKo)UdurIuDa0_nl5w#glxym47WawYC zp5h7UH-c~iSu~~CM_{2rCUKsf`w5PUV26`cpxUX@C^M0r0I*oRHFmGhsU|?3rpTB; zckfV~@TPkRlLc`cLm272$4-+vJVRNT(wvMoj|BjoCmzvs$g1)f$-WyWQ95lW8$qXbll2J^q5GHRAXY z-_okwu#}I-{T`3s?n0MQiFuqLf`b9m-G?Ld)+E4f?XJyp)HMU(;W>1O1Zw#b106tJ;BE zilH{A#Osd5Y;uL$onGP3u}P8o$n?m(h!Tlpd$STdV{CDZ-4SE4m?ISgCSgkT5m7a~ zVG(7aUD9z}&^E#T7w9F*zMXDlX$^_Mm~nW3y$%eMCpX=Ha?!KpO@Djm<6WQr>&Vx0 zTeh(@ea}kXIP&r}RVzk3^!sgP&hz&^yy>D1V_RNajafHA7WzRJoYLK*zT$brKahVq z5(k*D%3=@Mp=$9hIfgGCGJ1Y3v9YPPSvGz*XOs9$;HmGC;bSmatq|st#ocIUli)jZ zsX}r#<6N}KPOr)xBXJHPCAuDHB zU;w%vGH(Z1jxj}cIk*Z9cpR}0I%_;&lDAqM93@$uSda)@O`I^u)4vPuFXXw2?#qN! z2>F8!>Fd$F+ucC`7Jul^>=z+-%gR?CZ8-0ye{|lE^Yt=X9ZEhKw8A@+x z?8P_8&3ZsDaxGBVhwMMN8N4f{7Auh=ZI7p=*s5$iVy(3DuWTm)CbFRiO)J?8xpff7x9W!d7x8%gHs%(BPLghN8;Zw+*@yQp zJ|#R5DJ2T}O_)HQ7FGY`0$D}s9cWJ~AP$r$wGZ2(VfTT?1GaM?-hVLK-_qaV{BW;4 zKkeGf@{_Z8WAtd-TnNSVOLn?97v%5ZE&+&Ta$-danzQvH&3;)FZGDngFW##9rw3Nec~wq zb}3CTfb1PyVb%mXB$8lsLJR1?r58^}F1WztrMQbS{8X#lOfd$*_Akz@ONA#b7|X@i zI8yPnhz|)$V=a>`90g~VYL8PzY_*zd zr=z~=glONq%f8QUDYBOXzUqTLN!t74Dmd`%okzYOw?H$83Jw z4@QFnxJVZ&pjAT@J1yN#IV7AqPG^cppw8LHYTkM3&#kR5yw$V~;yCG<8SDTFlzj^KD&>$%_h8!zsETR{_DO$B+>)@+ zcClI{Tf!1TG{UegC^-d_L2O{^ElO@ITzfM&=1fp%;QF^ z>{dLnSGqA?ZLL;SrE@ZFx80l!A(HqmSTSNgzQL{&$OTqwX#GuaG;04%IaOD}j;vY8 z<1l9=xGv0DeFT+)uIe-`3O}1u>j(~En*7NV>t;UQHumuo>oCE#1Ukfs3RoSfWQunE{s@lBOa&WKhFepD{n=`Q!&m_5Q3A@*oP_czgdtRg+jjqX* zw_^x6kiSGR2o%AP{mzH4W=;Bd^qO16vliSNxIwy z2?d)!C;kIY%oq>N=VW<=HiNjPaAW63ZP z!{I@{(~wxPvQ{81I@YUm3V07FYN1|O@FSoc)2_`@wH)Dy z6qNkUBh465M-^FjTKQrtyMywuUU?L_lUbE_OVz8q{&g&v{Ck{_G8FhOT~|fpb*af#6m$0?;x#Fr9j%tAie<0$Fq}seu~)m|b{{~G>R=S?ab7Lr6Pfsy%o00Qwpe9% zkRM{#;2nnv2()J-%SJr4Q(vw> z$1a^bVf?fyu+GE@htuvu{qH&~u!naa{osvVM?QX&-ac6#4!nJ6bVUApaT{!)KAfd+ zSiK-8SKN+DqhcX+xpX_Cu(BlbWwB@J)Exxjt&|ix8fArBU5P+I@+Kf3=D|oI2_I#Z zj#5?`i3y1rVNvLHrooak9iD7okrOo__i z#FgC51mj3#r$udv^oVyPSSO`)Ej^Yl<6q6~m&h7IzMN1gf^r)u*>cbh;Jp}p^w3;z zb+HQwnNTWX7nD0Emb25u^agDxUkH9sgPp#W&DIy%9Me8SNBECN>HUZ&bQtT-Qm;3( z?a(&^og^Xw0^{?Jc*ITIG^?f>2z$joGNGUr?0?_Hkvc@fL>15c>2 zb5uS%MWsz}*jd_P5!Fj7ev^vbNg9Wq_LEgV%xJkS4dn)qMNUE?m5-Ev!nO+kfM^l3 zYPK(wo=)Sv-5)zy+s=LKPfCA7X|gag9udQUxW4j)w7+I=UzUmL$bOcIS(TX(Wu2&1 z){$Pt+9Y;)HL=U%_wvt#wMtf$>%m%q@#%*ux#2H}f4o)xgrU$8AUI%gkdEMnZ*fJu z>9@K+>b`}$ja2BBu=6OjMW+Rx1y-Wdik<3oaVhoc4uCw>F16X;@Ro29qA^HmJDwH} zHbRTbVrvGPF(oMxDau8w9?Qb|8*=y4YJs9bo)2<=V9dxqk^`v}5r-b209hzV-gC;F zjgriK=VYk&gpQgtw?D6>FwDM)-H@NK9 z%WkH%O?e^M)63upC;S?bY+7z*bI0E*+-b0vNtY#iS+876xs3YMTe#D(_o2Tfy#fQ{ z1!Ub?;oT#DjS89wOX~F|==Hk8&}@-0%eClSihhElBua?H9)vEPaaoFnC~JzcF(K_a zE90cqb z1(tf8f;W3XhcrG9oe;i*6$E2QIDM^FY-F{x!>~hcWyeD`c%>pUBPh;^>(3tz{8N5B zZUD$jz>ui$<2{6{Z{x@N{--bFh9_}B#9lhw7x-t~dt8sKBlgmnzQ7NBGUeI!!FnKm zJmOQ9`32J`Ggk;^DxclMkEbyE$+CpvEjU3y97ddnX^Je7js`Q8JM{d8lH)G3e^tx( z7;ya|+ylKOa=#PTw;VP8Q+_{gz~l1R5WU}t>mV?>eU+YI?}$!*1wJS01TC{TWCK z6=}}+7B62li2p_3CpJqHH>2(B7s6@5s3J!5{J77p&Q^b-{zfgTcZfR|u$N%kFpXBd zTlfjM%oR?&zsPECPProrSNAzf`KsMD*}`e}ubJ&Sw%VryJs!IYE&wh>|K%ZfZFUwz zZKE844UJKDo3c%x05T<-b{KYY+DqCiu#dDBvq`;MPoqzyQF6m^FDP)g&O%6;41S+7 z8QrUHpOoa(+}?@_@qXli`^@xrx}$by#L!8xM)9^Gr77ZH65m2edoeDy$Wx~hMT=Q4 z>^9M)-Dp%>8^#lhot_}plwl1eM>kKIMt=SGrn6^OdG2e>>ihDnnxG-YsbxI1s+PR| za+`QsK>wsYdrWWNKF$A4(~>jZ)3kJD;`v49=;~V*fCq&8@;U(6hZ8P9TQ!h}LC5jG z(5jvio`*;mj3!R?l0hwjMv;`!Z;%DAOb|RRaz1>PBkWL>sf4JIC0vk>R(ucxiFqvc zK?NHkTu8qr3fIz)rm-JM?P-uNALBls;yx}e7Eg6pdGQw(6va@vJr3hbcGJriC9PW9&M)Af=Y=?=jRBFc$T=WZ z+uF|2%$Lgam`Dodr+?l#Z^2!{SJHQDHf~r8u?{KLbp0bl%D#g%v%t^Q9`D=R&a#ks zYj;C6+U|Cnd-E)dhY|r?0>53Y?yYB8#HizjMZW!#`3e*!bBfo>X`e)St%KzG$51Py zPBIUk3Otg-0#7Byu_WPM57k)D^SRE>PCkVmymXY9@37i4s1Y{?L|xSw)A?|#cIX1Ful zLf@m73RY3?Nl6h*M=jcPxP%-irIy*{i|2QhrTg686wgBM8t*CZCGQol>Uqygo-aMu zJ)+m+^{9${UOixVT`CO@o%i5yP;4Fa4d%{!SOCytf%$w7YAr?iVDTp}z!mha72lW* zIJS_RfwZceTWnJm%VGb`Z+`H4CN94F>qVVk)#gX~R7DE-V0T>}e^UB-@#_D)<=vJg ztG`~@`PbUKUe(o+Uc!VQKg!B~^q6#Z&eWNAj2gRe=G0Zv<;g5`t)=G|v!^M)m^Pc< z+4rb)7Vj(`J!a9&X|S%Y2nYBJGL8)DBz_JEaMa5`<8;O9+{!Hxs)S$S9Dqk!_%rvp z_$7ax=TGtMDJ)HXA$W}Wb}S-oT&?p26A-;T#cgwM9UR1LLpX_&|I==gW6*4n&b|@qSb=B{S))=b-&X9D+IrKGLf;A zut?}4KPiTR3W=sW^vGvJ zH5(Ce?^>w{ybR4X1%d~<5ko=uK3O$VMR`LhczFC08eQg}FgWq?9K!dbz* zw=zChJlVQva~sK0=XM6V&hpheRP0yaa*!T_FG zCj0~@rYr`=N-C5JC;gQ@=h(}i{J*?BmMMMRPw0wIzp!LUzt(r&SyY3{6u*R;HS)sO zkFYWpzB+w%5P1EmbODLT&y zra9_1x&=R8!~>~ZswFi&HImw%`c&%0RJA+Roodc%4~ph?_|p{c^bMy|a`h=EFo|KB zLz(OnQw3$ia0{{oi*NUYA32$JVE4KGrIc<|A~^!)Al2l9pdqyA$dm)qlXlLulD%wQ*> zhTKlK(=sc2XZBCBh3uoDLXL{wDnSF4Zn|o_>Ht8CM=iNsX~#3WQoJ5D22s;xJT4$< z7l&2!^4D<1VG(?diND--1}@XzB+2{;6^kMJnl!`$e37$?+>E6P2ZX$!Rq#nUZlRsc zfjfgP;+?_a17CZ2MnmJ=U5AhEo5Bz4&e_d>5W4r70}rfwX8-0VpWLI`H7E3^k3(~^ zp8xT)hYck0zU%+O?jId{@yR_W=Kkr^PyYlx{3GO3eTvoKg#|e~UgLAmR~ywjojP@) zgImaI$>q;#9Zxx)cf8~fgN&&iC`F(aGQv8IYnf5+^QELMv#L{;Qryam&cZ_=FZUij zq^B&QoP7Z~EUysA%P73t*=1#F5MRWSq(X?nq3f(%5v9V?#dhiI%}=z>Nvznke*WFk zb6X#lF1|IREXsyRdyoJ0({$eoM=tx~fv29nPuhJ_diMgqc?ApneApb!z86b?vcfFL zlA>CySK=6Vjuf(bu!pe`n!<0+N}@}Rusxad$hEDnn%pO#8~8h&{+r5AEP=&BNp zzsnlxa#^hDNZxQ+UFO03cpSlCGEVSXVSO%Z&7GdRELX^#ltVm6M00$q3%^973&G|n zczvm@t(KmXzB+QikgWL4wD1mT>9%d;o#8(gcVW~u82>r(+7z4fjKiWco-w^-VroS0 zSvt-Of0yu@z&|NGEAT6Y`(ZY4XK)O|!}Pic%)THxOat2HWvQLyGiHiCE~bv~TIfg=da zZ>}5^ddkq)#O2q{tU4q;R6ps%$FBe<7`^x@>-EPKN1wfmw@bTL{V8wPDmL)1OoduU zzq$(N_wuFEXVg~v^>4&3S#w$?{TQu9?dR8_Kk;$a+C76C8IJ*3>P*4I6(?Kc1i2>T zKwZb4HL*ucY^sTkG_is3v%{uimr!Ml1MNMF?)s&2*V(x15U}M7e6D=gTn488HMz{1%eY*Y%f1e=_d@JUh#d{FM?);co#Gf} zj^KW`-3*-hH|~}q-woO!-&cD5AMVx??~S`<$al+Nhcnok3}($>960&e*M9b%pPliu zqki@%ho`brh&%H#p(a7YSUIhxGQv9CrRs_DKgt?GV*ZT>sEN9r0iOFDJzb5=?_ zfp*3^>~G=-e*G9K>o^hy;C8z3d>l$Q!G8vtYzcTYJ!G+>kR@YUyrKBwki_;WuKFXr zspX7B^qMe^G4lCFrZajGj&BEY6kY@~eP+BIzpgioHt<;nrZ%|YiD}_FFo9Rd8b#Sk zm0fGKr6k5{QD(1F+n^N!06H)d8YBXV9~eU;zs8}XypZ8QczHuo5*Vt0vQVH66DzC` zYGl87k)68wOMZD(Mq$Bs{DDQPLEpWwKzO2S&+8kyMJ$|Mh}DgeWn4+z!i~EmqtSGf zCM6Rv#|>z=OuQ@-m4*zzk=^Brk)SxYg+1LTP70{HtG@PkQM2#ciTGUN@7RjZH9-3u z{(og!O_HpF{W)H3%lFcsbuNAK_sBHO-+qZM*r3VqN zF7;lZ4~oE4%K=!e)#_EK$SfR!6AiI))O!FeA4RBu-XlXkS@J=J^QF`) zYXK%E&-<(@+kHsS@klocrXI4_@>}?e(CLY}{W6R@ax=(|1@b5$(J85@L4+sy>||pP z`g#TtcMvlZL_EG_GN258^0FtEKla%219R_qdf6k7FM9Ua@Ok}OS_aJgL+hM=EhFPI z_<83KJ-Ff6hv%Q$vhD@e|HPc;VbhMhFt4e321e_1#0M|K1Lg$A%f-~s7$Ih?R+n2i z#2lRYkWq(eCFq5Ws+QY}L&k+>xNcTtL8LcSDqODU^W2fWO|j~VqpWd^n&0O8?7R05 z9dm3;`An6=CSz~!V5`Kan1y_lFqequrRuWmG+|t3#!vmOBWc#3>VzYjpK`U7x9$C@ z{bCwx0bvH8M*ia{OdC9OmtMBwI|*v|H7sriM3GWPz=Z+ILCb`HcxT7t$0l#@Y@D}j z(&JONt!Y@eWXhvcAHAo3?(!**P2IMxZm!_mH!mJrv2Si|tosW*R?y1|G;IgBUyQ0m z%=r9xKa|7eL97By>8 zGYc-Eeke1pJm2U=j|~bfBx=J0hL~0&A_oqS29a}$Eeknp%imbv6;dO+x?$6-@1)bK z*hz_7yNR9L&cw%!6+%&K=s+X%bs)Zzsdzoqj;unx5 zIzWIJGw|@N3+hW8yC@&bwKOI8F9t#3!z00$ibTLzrpCj0V~4FJ(_E6_1ur0_$RY-w z1yd04VyH-B^x8Dx$?h`#4SK%7UYX8b*^BI#XQXx5ptrYeO1x$!enRN3fKJQr{if@cS9Ttu@=5Ut@o!j& z>Z8AU{5S7exx66=?^t<)ep4oY8S*A7VxL274os#gVU}sZdKn0uN}(P z+()<-!pBZ&%PY_6pV5w7{<2N&kzRiE zndzfm#HY)+3iRGW*_c`m;9PJ|Ba~yc(Y=KhX7+2E^Z*@_?1Y*?sf2`vAb}-|Zn-!# z$@GmIo?N<4n!u0yf4|;O#pV}JQ>x7$eFdMyz7Wsx7ttXd=Z@=ih};>pj|d=0qB=L2 zW;FL^oslnmKHbrgeLKWY=iJfcG{4r4zyC<8;y=5-4yU0%ZqjP8iZzc|_;eVE==jYK zxlya+qZ;>-jsa7o)(3v%biX;AJ^?jPJ_9?Y{0TtcYUNKLFYj%iphmGIFa$>V&uX1N z8{aTlt={>l%XW4wT&0!3rEi1(lQI!A;&$VuV(3v?>m|YbiR$RTN@Q~;CxGlo z%B#03rCgDQHua(1tl+UHq<41hdK@L!FS1uZ|3HeZV|8qx^mFMX?vceG6grdKqOI}X zwssWWfdtVJ0Rqoaz5~Z!GHB9eV1QtEi0ltGwOM1(`2l%Asq^3SXobuLVh3aItwAM_ z?$FUgI|wxBA=G!UMbXum8nU5tk19;`Z0zL{ySVSj+TT`wsMOs7YsF zgSCbGF59+!>s|cmwF9?3V#{Hx=bu*JGq3ZZ8*_9XzDYmO!)b#15;PavrD9kYI*Z`= zgM7qs-cO7d8TWfx=|p?rVkB8ZjZtKbN0hVJl$&D~ne4G9eWhFo6iUZ?>-#>iaNW}z zKo5LwTjS)m!2?IA&d;0w{)C-t)*pOvH+x*Fer|NUbm8cfJ1Hp#FsNb&URs1Ky@3;%(0wq(0IPQVe!JsglpDxB;VP(>CK2v%FDZ;x~ zOzm!hFfZY^2pw20C^-yY?CSUkeX23z67S@A-zB5_lHG`ZS_|LFzXUanPrH;3+$^u1 z)J~w9dY|`dSSNSe6Lox75 zHrFMC%JT=JW7C?k&Kws5h&$X^XY#z#ZnQ%$RhC!KLB!%c4Fu7c1J<6RfU4QXoEoH& zXzTA@dH>#Z5B)@%Qe%3oVba*414r?R)gD$g`LVm#KXdM6_uu#_`$t!_tU`TXI~SAI zg6sba%t4kM>l@4sLxtKlZW1?*o5jroig+n<0#R=bj6ASeNt51H!&_M~HpYQ^FeNavC z56dBnlbq!eGIE%dxkZZ*0Le?=F|{~+Y)v*`!uSww75ggOj0e6%!;cL~Zq*SOLI zO1TWf@g1fYIKRs1{Gzx8CqDza4Z{HlQ(Pd}$ji?FO$nC?1kJR`XldFkIAh7V)$=UB z#`^*aLCABRlY9>Id%eAz%FCOhUT?Iyyu7KmchjaZW3s~bbdP!T;HNJ#ePYa@^a7(X zCnb@LEO2>Pr%mx}F)uHFQ7LOF?I`6-OY=RR z&U}`i&!<^HZc&(*S6C?ckv7hGBTx!4ZL%`PZu|t{O*4#%CLyI0R5Y8h8iCOD8D?JN zDOaR7UYb$1Lqo!|22);ysaNyU`DxuxcJJYLXq@3x6y>n**ceXK^-Jv^n_gH}YDmdW zO)v19T>VO2c|nIGnCB|(r*>Xzy*66-$!7(gj8KLrR9RDBbk}`mZ^*tkJ+Ca^mz$ZD zk{T_q%8Y%}ua7w`63mDMOcmt$BOT`_gh%9K5WnDN`y0m@x)5fwa(bB>4iVxcjtO!Y zb~R2~J-kdu)CKU~Gy_u-)7A|b;Nz<5hbrXa)?t=m&ky6Hbzsc()igIZaZMRbd0d_~ zk8jFr%BxT{C0Iq1OCfQUx701+Mg{6ZXERPhNTnh{Hipx96%q8{u zvZj`o4(jE=&#vO8KKu9c{GqS556BtTIdA>7@Yulv4{KoQhR?3P!HBNr;olguKuyA|lA2_XJt+`Sk1Q{MdAs&cUym2fwO+ z+}mkvUmDw%h637YD4?B&0@~o3n=;!f&k>alTvr(98Uf1_lE&jAH=kN#R%sv@$W7uM+|-cbE-H`bWfa(q zA!BMy*cj>4zqZ2hqU8M*|KZ?+dpGsU?VID&X}5w4w%Rpf{@VLCRCj;GM}&>ETI^UY z$cjXtwRB>IiiCSga(+N_5WE zX(cT_4oe334EVxIDb0bDB*JKr#!ax4O6c9Hq~t^}ka(O)WRf@~3UoEY_R0xizsc(a z+YNYiW#h3`&GQGP>)m1R{taU4lPO`3K7G*q=7|e@2HyhqjouSZ>Hf?ccI&O--kF)@ zVH-F%Gkb@v&Vg%=Ego>k{Kfr23EhA3{5u9LKDK7y=<(x6vp?4?Ubt+)fMp98*Nk5~ zJUcHjx$=!S?zumE_*(2a%AJ{@SqdCyF%|`}GEQY9WfU+0P^Us8kV}aq883nT6_?0} zVG8yGF^pV)LJY&@&+ZOo+R}R%9P!Da?(;H>TQ)QvT#F!)%Okdsa8m$JD)1#9T%X!2L+hqb@3~%j{rcxBBUmePP%&yNwH-tXPeLXX z62hWD5crNLYl*UWlm(-Vivj|gauf^bp($dxrM z_$dM@>?3zD-tn!|2WU+ro}36gKxtn=6e>NXQmH&dj_yIJO;k9Ni)<#Jv6kg2zj=ac zlygy0P!r*rktL z;^n=Zc|KntPel27QPf_fVm0Nt@B(n4wQB*Y?l4uqRhwbr|Ihnu`1|Lo2L<6DdQEI! z-#|kNVz#64RL^*C!T2;gR~{Olu8$z#n^xTJv0KFKc9jgKi2hnOlz^`z19li9pxLfe|AaJZ=x&n=n!g`Y@&dTs99*O=#-XPE2EoN=v=-n9+6?%q>IH>QsN zY}2L>cMco2^TSQ||HtFQhCTitw0Z<-xe({xqYX*Jy5W2bO^a`#5oCKl`)O$Pb`>mbVF0ay)P`7 z^lbm^0+;GFizUBua7lLlwfA>F!OC|(`NWfa&ZhHQhYZS?I0M^vFdJyT#4x+1ZF4lOJmzG8IYl&6-=ePT+{$&~W3 z{RXs_I8eLTI93t2;ah_W)kWKYlWFiIPB%%C?{-⪚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

^+&gN`@{CqAGRN^KkR2M`uS&SS>>V% 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 literal 0 HcmV?d00001 diff --git a/ui/fonts/FiraCode-VF.ttf b/ui/fonts/FiraCode-VF.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4694e50d1b597422fc48484fa0fd6e50430bcd39 GIT binary patch literal 274516 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 literal 0 HcmV?d00001 diff --git a/ui/fonts/Hack-Regular.ttf b/ui/fonts/Hack-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..92a90cb06e0535afa79f6cba26ceece15a7f7959 GIT binary patch literal 309408 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

lipX z89%t)L1Zn7w#;-}USgg#E*&nk6g|(G1Qmus3tNsjIhevgp16@5CCac&oFQ%eMM}nZ z{mnz>s34v3aMz*q^t7z0vk!G1GW!Jt2ASxcw2bWTp8MFWsimbQCDW&tl$Dk-0g1n8B}ozJZoF0r$e^J`a*sp<@okRTsO%H2(}g3TTkA_r zY_P>jVzWUR3KUay?+f%NC1?ezWXd19?3;y;D2) z=Jd@SxaBCD7@yRdoI1@I*B<-wy!p$P-g4A5y{O1h(7URyq%^-^5%4=S<)}GLXGT&? zP*KLzTkhzZ9`LuniN0E|5dVh^Rxh7GQJxUnGxL_)=k$BaC)IDL^7E%p&b9}+_DF?A zGiGGlx&2!bzLjrRQ-8rQ!6d{9w;c=hLS+CVTojp^4u~Lz7RS90h8bLbuiryo}eM%KoVvP^fjleHU^+=q5A;2uIP{IMn8hjx?CUO%x=LY*K$e zUzje{LKq99L~=Fia#OW;19`##VP1~Mrtvh>B0Gh6=r^B#@tfaImET5%z7r=71y6sR z1)+KIKbbhmHDqK(Opkw#A(lJ1ckkf2b32FbV2>ybjO9me1|^F}-I933OjHUpo!ybB za2SP5ev0ZSLtRNH0zA}Iy~GRPK;d0)CZZjOFGZkHpcnj=aBX`konu{0C@R1fXWJ6u zt>zd5de9(qgvu{hvPyqiP=X*?9QK49o6V7vmy2IXc%isb1#ifGsWofO;PWB)4-5)1 z;7{NZNdd%*kTmtr&*fqJ!&%FTzlevj)`WLeZu_9MsiDqXpU^aM&*aJB?87X%2GSC~ z2D0Q+hRKs}Y;8)eG1oRU8MQ2k#V^zZ`IMHcL&f>K|5&>xBqaImm<(OqoH=jI_YU>b z>SAO4B%e^+h{dN=?PS~(gl+~lg! zO4x6Syg#q!XWP@GGQ%@7XD^FdKFsu40i{{Jdo!~$as#PyNTj_fx=|f«q(At`*`NbkV(;WAZRz)Jn7&p-cM>U1p@ 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
*Yv)>p;) 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 W*x>J#*~#xqcN$KMqWAV2?)!goVczio literal 0 HcmV?d00001 diff --git a/ui/fonts/OCR-A.ttf b/ui/fonts/OCR-A.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0ddaa227c06260bb3fbc5383b72c31d221c51d4a GIT binary patch literal 23952 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 literal 0 HcmV?d00001 diff --git a/ui/fonts/SaxMono.ttf b/ui/fonts/SaxMono.ttf new file mode 100644 index 0000000000000000000000000000000000000000..76c77d6411749741383ddb3d6d95ecb43835b4ae GIT binary patch literal 103740 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̫a4HfJEnEAo2AhAn|(;Na;KZB))$Fr2PC8NWVW0 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 literal 0 HcmV?d00001 diff --git a/ui/fonts/ShareTechMono-Regular.ttf b/ui/fonts/ShareTechMono-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8e6e84bfbd3d14d816383f6f954083f3bc89bae5 GIT binary patch literal 23976 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

^oSWD#DvbmoMX!Qq#N{I?Nv!A zp%zpbTDVSRtLVW)QI*(bkd(su3qeKSx1y*t1K=t3DmO!9zseo93w z9`#h1SUeuZu`jV`%w_TWeEw)WO3c-mB^D3k

Z}Hpio&^jOT;M`{xaC;6es#?1qX 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 Date: Sun, 14 Mar 2021 08:05:23 +0400 Subject: [PATCH 09/35] add user documentation --- .../nodes/object_nodes/object_nodes_index.rst | 1 + docs/nodes/object_nodes/set_loop_normals.rst | 47 +++++++++++++++++++ nodes/object_nodes/set_loop_normals.py | 5 +- 3 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 docs/nodes/object_nodes/set_loop_normals.rst diff --git a/docs/nodes/object_nodes/object_nodes_index.rst b/docs/nodes/object_nodes/object_nodes_index.rst index fd040ac0e3..452dd416e7 100644 --- a/docs/nodes/object_nodes/object_nodes_index.rst +++ b/docs/nodes/object_nodes/object_nodes_index.rst @@ -16,3 +16,4 @@ Objects assign_materials material_index set_custom_uv_map + set_loop_normals diff --git a/docs/nodes/object_nodes/set_loop_normals.rst b/docs/nodes/object_nodes/set_loop_normals.rst new file mode 100644 index 0000000000..6bc372b7d3 --- /dev/null +++ b/docs/nodes/object_nodes/set_loop_normals.rst @@ -0,0 +1,47 @@ +Set loop normals +================ + +.. image:: https://user-images.githubusercontent.com/28003269/111056673-62a8ed00-849a-11eb-86b8-faa4bb111f16.png + +Functionality +------------- +The nodes allowed to set custom normals to corners of an input mesh. +Most of the time it should be used together with `Origins` nodes which can calculate vertices normals. + +Category +-------- + +BPY Data -> Set loop normals + +Inputs +------ + +- **Objects** - Blender mesh objects +- **Vert normals** - normals for each input vertices +- **Faces** - indexes pointing to vertex normals +- **Matrix** - optional, fro UV transformation + +Outputs +------- + +- **Objects** - Blender mesh objects + +Parameters +---------- + +- **Normalized** - It will normalize input normals. It's convenient because if normals are not normalized the result can looks weird. + +Usage +----- + +Smooth normals + +.. image:: https://user-images.githubusercontent.com/28003269/111041776-65342400-8453-11eb-98a7-95b1fcb7eb8e.png + +Flat normals + +.. image:: https://user-images.githubusercontent.com/28003269/111041779-66fde780-8453-11eb-8de0-92ac014266b9.png + +Custom normals based on edges angle + +.. image:: https://user-images.githubusercontent.com/28003269/111056842-c1229b00-849b-11eb-9257-1080cd43f3b7.png \ No newline at end of file diff --git a/nodes/object_nodes/set_loop_normals.py b/nodes/object_nodes/set_loop_normals.py index b463d7db97..5ac9aba45b 100644 --- a/nodes/object_nodes/set_loop_normals.py +++ b/nodes/object_nodes/set_loop_normals.py @@ -15,9 +15,10 @@ class SvSetLoopNormalsNode(SverchCustomTreeNode, bpy.types.Node): """ - Triggers: # todo - + Triggers: set loops normals + Adding custom normals for input object + Should be used together with Origins node """ bl_idname = 'SvSetLoopNormalsNode' bl_label = 'Set loop normals' From 6f29cd5332ab8edc081241ee3edfe2fe205d9b7e Mon Sep 17 00:00:00 2001 From: DolphinDream Date: Sun, 14 Mar 2021 00:36:11 -0500 Subject: [PATCH 10/35] Add a few features - show objects in collection hierarchy - show only visible objects - sort objects by name --- nodes/scene/collection_picker_mk1.py | 41 ++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/nodes/scene/collection_picker_mk1.py b/nodes/scene/collection_picker_mk1.py index 46c518e9d6..17b5b526ba 100644 --- a/nodes/scene/collection_picker_mk1.py +++ b/nodes/scene/collection_picker_mk1.py @@ -1,7 +1,7 @@ # This file is part of project Sverchok. It's copyrighted by the contributors # recorded in the version control history of the file, available from # its original location https://github.com/nortikin/sverchok/commit/master -# +# # SPDX-License-Identifier: GPL3 # License-Filename: LICENSE @@ -10,17 +10,18 @@ from sverchok.node_tree import SverchCustomTreeNode from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode from sverchok.data_structure import updateNode +from bpy.props import BoolProperty; # pylint: disable=w0613 # pylint: disable=c0111 # pylint: disable=c0103 class SvCollectionPicker(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): - + """ Triggers: SvCollectionPicker - Tooltip: - + Tooltip: + A short description for reader of node code """ @@ -34,6 +35,18 @@ def find_collections(self, object): collection: bpy.props.PointerProperty( name="collection name", poll=find_collections, type=bpy.types.Collection, update=updateNode) + sort_object: BoolProperty( + name="Sort Objects", description="Sort objects by name", + default=True, update=updateNode) + + show_all_objects: bpy.props.BoolProperty( + name="Show All Objects", description="Show all objects in the hierarchy of collections", + default=False, update=updateNode) + + show_only_visible: bpy.props.BoolProperty( + name="Show Only Visible", description="Show only the visible objects", + default=False, update=updateNode) + def sv_init(self, context): self.outputs.new("SvObjectSocket", "Objects") @@ -41,15 +54,31 @@ def draw_buttons(self, context, layout): self.draw_animatable_buttons(layout, icon_only=True) col = layout.column() col.prop_search(self, 'collection', bpy.data, 'collections', text='', icon='GROUP') + layout.prop(self, "show_all_objects") + layout.prop(self, "show_only_visible") + layout.prop(self, "sort_object"); def process(self): found_objects = [] if self.collection: - found_objects = self.collection.objects[:] or [] + if self.show_all_objects: + found_objects = bpy.data.collections[self.collection.name].all_objects[:] or [] + else: + found_objects = self.collection.objects[:] or [] - self.outputs['Objects'].sv_set(found_objects) + if self.show_only_visible: + found_objects = [obj for obj in found_objects if obj.visible_get()] + + if self.sort_object: + items = [(obj.name, obj) for obj in found_objects] + items = sorted(items, key=lambda x: x[0], reverse=False) + found_objects = [item[1] for item in items] + self.outputs['Objects'].sv_set(found_objects) classes = [SvCollectionPicker] register, unregister = bpy.utils.register_classes_factory(classes) + +if __name__ == '__main__': + register() From 7dbe3d54a6e938989f0049dde54e730db4a36ef5 Mon Sep 17 00:00:00 2001 From: DolphinDream Date: Sun, 14 Mar 2021 12:17:46 -0400 Subject: [PATCH 11/35] Update Display Nodes panel script - add icons to the constrains layout nodes (width, height, aspect) - add node alignment within columns/bins (left, center, right) - var renaming, cleanup, comments - add logging debug instead of prints - add try/catch for spawning to avoid crashes - add try/catch for removal of spawned nodes to avoid (though this crash may be due to accessing already deallocated memory): needs further investigation or recoding - add feature to view all nodes (button in property panel) which calls "view all" nodes - speedup the binpacking using binary search for the optimal height instead of brute force search incrementing the height - add info to display (Property Panel) the displayed nodes, total nodes and hidden nodes (e.g. dependent nodes) - fix the binpacking to take the node spacing into account (leads to better matching of the desired grid width/height/aspect constraints). - take the DPI factor into account for all node spacing/locations (retina display fix) - allow the subcategories nodes to be also be displayed (e.g. Curve @ Nurbs) --- ui/sv_panel_display_nodes.py | 451 +++++++++++++++++++++++------------ 1 file changed, 303 insertions(+), 148 deletions(-) diff --git a/ui/sv_panel_display_nodes.py b/ui/sv_panel_display_nodes.py index 7fae7adf08..d49c19400e 100644 --- a/ui/sv_panel_display_nodes.py +++ b/ui/sv_panel_display_nodes.py @@ -21,62 +21,72 @@ from sverchok.utils.context_managers import sv_preferences from sverchok.menu import make_node_cats +from sverchok.settings import get_dpi_factor from sverchok.utils.dummy_nodes import is_dependent from pprint import pprint +from sverchok.utils.logging import debug +from collections import namedtuple -DEBUG = False - -_all_categories = {} # cache for the node categories +_node_category_cache = {} # cache for the node categories _spawned_nodes = {} # cache for the spawned nodes -constrainLayoutItems = [ - ("WIDTH", "Width", "", "", 0), - ("HEIGHT", "Height", "", "", 1), - ("ASPECT", "Aspect", "", "", 2)] +constrain_layout_items = [ + ("WIDTH", "Width", "", "ARROW_LEFTRIGHT", 0), + ("HEIGHT", "Height", "", "EMPTY_SINGLE_ARROW", 1), + ("ASPECT", "Aspect", "", "FULLSCREEN_ENTER", 2)] + +node_alignment_items = [ + ("LEFT", "Left", "", "ALIGN_LEFT", 0), + ("CENTER", "Center", "", "ALIGN_CENTER", 1), + ("RIGHT", "Right", "", "ALIGN_RIGHT", 2)] + +NodeItem = namedtuple('NodeItem', 'width height name node') class Bin(object): - ''' Container for items that keep a running sum ''' + ''' Container for items (of NodeType) that keep a running sum ''' - def __init__(self): + def __init__(self): # start with an empty bin self.items = [] - self.width = 0 - self.height = 0 + self.width = 0 # current width of the bin + self.height = 0 # current height of the bin - def append(self, item): + def append(self, item): # add item and update the bin's height and width self.items.append(item) - self.width = max(self.width, item[0][0]) - self.height += item[0][1] + self.width = max(self.width, item.width) + self.height += item.height def __str__(self): ''' Printable representation ''' return 'Bin(w/h=%d/%d, items=%s)' % (self.width, self.height, str(self.items)) -def binpack(nodes, maxValue): +def binpack(nodes, max_bin_height, spacing=0): + ''' Add nodes to the bins of given max bin height and spacing ''' if nodes: - # print("there are %d nodes to bin pack" % (len(nodes))) + debug("There are %d nodes to bin pack" % (len(nodes))) for node in nodes: if node == None: - print("WOW. a None node in the spawned nodes???") + debug("WARNING: a None node in the spawned nodes???") else: - print("there are no nodes to bin pack") + debug("WARNING: there are no nodes to bin pack!!!") return [] - # first, sort the items in the decreasing height order - items = [(node.dimensions, node.bl_idname, node) for node in nodes] - items = sorted(items, key=lambda x: x[0][1], reverse=True) + scale = 1.0 / get_dpi_factor() # dpi adjustment scale + items = [NodeItem(node.dimensions.x * scale, node.dimensions.y * scale, node.bl_idname, node) for node in nodes] + items = sorted(items, key=lambda item: item.height, reverse=True) bins = [] for item in items: - # try to fit the item into the first bin that is not full - for bin in bins: - if bin.height + item[0][1] <= maxValue: # bin not full ? => add item - # print 'Adding', item, 'to', bin + # try to fit the next item into the first bin that is not yet full + for n, bin in enumerate(bins): # check all the bins created so far + if bin.height + len(bin.items) * spacing + item.height <= max_bin_height: + # bin not full ? => add item + debug("ADDING node <%s> to bin #%d" % (item.name, n)) bin.append(item) - break - else: # item didn't fit into any bin, start a new bin - # print 'Making new bin for', item + break # proceed to the next item + else: # item didn't fit into any bin ? => add it to a new bin + debug('ADDING node <%s> to new bin' % (item.name)) bin = Bin() bin.append(item) bins.append(bin) @@ -84,44 +94,66 @@ def binpack(nodes, maxValue): return bins +def should_display_node(name): + if name == "separator" or '@' in name or name == "SvFormulaNodeMk5": + # if name == "separator" or is_dependent(name) or '@' in name: + return False + else: + return True + + def cache_node_categories(): - ''' Cache category names, nodes and enum items ''' - if _all_categories: + """ + Cache category names, nodes and enum items + + Creates the structure: + + categories + + names [ Generator, Surface, ... ] + + items [ ("Generator", "generator", "", 1) ... ] + + {category} [ All, Generators, Surfaces ... ] + + nodes [ SvLine, SvTorus ... ] + """ + + if _node_category_cache: return node_categories = make_node_cats() categories = node_categories.keys() - _all_categories["categories"] = {} - _all_categories["categories"]["names"] = list(categories) - _all_categories["categories"]["names"].append("All") - _all_categories["categories"]["All"] = {} - _all_categories["categories"]["All"]["nodes"] = [] + + debug("categories = %s" % list(categories)) + + _node_category_cache["categories"] = {} + _node_category_cache["categories"]["names"] = list(categories) + _node_category_cache["categories"]["names"].append("All") + _node_category_cache["categories"]["All"] = {} + _node_category_cache["categories"]["All"]["nodes"] = [] for category in categories: - # print("adding category: ", category) + debug("ADDING category: %s" % category) nodes = [n for l in node_categories[category] for n in l] - _all_categories["categories"][category] = {} - _all_categories["categories"][category]["nodes"] = nodes - _all_categories["categories"]["All"]["nodes"].extend(nodes) + nodes = list(filter(lambda node: should_display_node(node), nodes)) + _node_category_cache["categories"][category] = {} + _node_category_cache["categories"][category]["nodes"] = nodes + _node_category_cache["categories"]["All"]["nodes"].extend(nodes) - categoryItems = [] - categoryItems.append(("All", "All", "", 0)) + category_items = [] + category_items.append(("All", "All", "", 0)) for i, category in enumerate(categories): - categoryItem = (category, category.title(), "", i + 1) - categoryItems.append(categoryItem) + category_item = (category, category.title(), "", i + 1) + category_items.append(category_item) - _all_categories["categories"]["items"] = categoryItems + _node_category_cache["categories"]["items"] = category_items - # pprint(_all_categories) + # pprint(_node_category_cache) def get_category_names(): cache_node_categories() - return _all_categories["categories"]["names"] + return _node_category_cache["categories"]["names"] def get_nodes_in_category(category): cache_node_categories() - return _all_categories["categories"][category]["nodes"] + return _node_category_cache["categories"][category]["nodes"] def get_spawned_nodes(): @@ -135,13 +167,15 @@ def add_spawned_node(context, name): if not _spawned_nodes: _spawned_nodes["main"] = [] - # print("adding spawned node: ", name) - tree = context.space_data.edit_tree - node = tree.nodes.new(name) + debug("ADDING spawned node: %s" % name) - _spawned_nodes["main"].append(node) + tree = context.space_data.edit_tree - return node + try: + node = tree.nodes.new(name) + _spawned_nodes["main"].append(node) + except: + print("EXCEPTION: failed to spawn node with name: ", name) def remove_spawned_nodes(context): @@ -150,19 +184,26 @@ def remove_spawned_nodes(context): return nodes = _spawned_nodes["main"] + N = len(nodes) tree = context.space_data.edit_tree - if DEBUG: - print("There are %d previously spawned nodes to remove" % (len(nodes))) + debug("There are %d previously spawned nodes to remove" % N) + + for i, node in enumerate(nodes): + try: + if node != None: + debug("REMOVING spawned node %d of %d : %s" % (i+1, N, node.bl_idname)) + else: + debug("REMOVING spawned node %d of %d : None" % (i+1, N)) + + except: + print("EXCEPTION: failed to remove spaned node (debug bad access)") - for node in nodes: - if DEBUG: - print("removing spawned node") try: tree.nodes.remove(node) except: - print("exception: failed to remove node from tree") + print("EXCEPTION: failed to remove node from tree") del _spawned_nodes["main"] @@ -182,12 +223,26 @@ def execute(self, context): return {'FINISHED'} +class SvViewAllNodes(bpy.types.Operator): + bl_label = "View All Nodes" + bl_idname = "sv.view_all_nodes" + bl_description = "View all the spawned nodes in the current category" + + def execute(self, context): + bpy.ops.node.select_all(action="SELECT") + bpy.ops.node.view_selected() + for i in range(7): + bpy.ops.view2d.zoom_in() + # bpy.ops.node.select(deselect_all=True) + + return {'FINISHED'} + + class SvDisplayNodePanelProperties(bpy.types.PropertyGroup): def navigate_category(self, direction): - ''' Navigate to Prev or Next category ''' - if DEBUG: - print("Navigate to PREV or NEXT category") + ''' Navigate to PREV or NEXT category ''' + debug("Navigate to PREV or NEXT category") categories = get_category_names() @@ -202,133 +257,201 @@ def navigate_category(self, direction): def category_items(self, context): ''' Get the items to display in the category enum property ''' cache_node_categories() - return _all_categories["categories"]["items"] + return _node_category_cache["categories"]["items"] def arrange_nodes(self, context): ''' Arrange the nodes in current category (using bin-packing) ''' try: nodes = get_spawned_nodes() - if DEBUG: - print("arranging %d nodes" % (len(nodes))) - - max_node_width = 0 - max_node_height = 0 - max_node_area = 0 - for node in nodes: - w = node.dimensions[0] - h = node.dimensions[1] - max_node_width = max(max_node_width, w) - max_node_height = max(max_node_height, h) - max_node_area = max(max_node_height, w * h) + + debug("ARRANGING %d nodes constrained by %s" % (len(nodes), self.constrain_layout)) + + scale = 1.0 / get_dpi_factor() # dpi adjustment scale + + max_node_width = max([node.dimensions.x * scale for node in nodes]) if self.constrain_layout == "HEIGHT": - bins = binpack(nodes, self.grid_height) + # prioritize the layout height to fit all nodes => variable width + bins = binpack(nodes, self.grid_height, self.grid_y_space) elif self.constrain_layout == "WIDTH": - # find the height that has total width less than max width - found = False - height = 100 - while not found: - bins = binpack(nodes, height) - # find max width for current layout - totalWidth = 0 - for bin in bins: - totalWidth = totalWidth + bin.width - - if DEBUG: - print("For height= %d total width = %d" % (height, totalWidth)) - - if totalWidth > max(max_node_width, self.grid_width): - height = height + 10 - # try again with larger height - else: # found it - found = True - else: - # find the height and width closest to the user aspect ratio + # find the height that gives the desired width + max_tries = 11 + num_steps = 0 + min_h = 0 + max_h = 2 * (sum([node.dimensions.y * scale for node in nodes]) + (len(nodes)-1)*self.grid_height) + while num_steps < max_tries: + num_steps = num_steps + 1 + + bin_height = 0.5 * (min_h + max_h) # middle of the height interval + + # get the packed bins for the next bin height + bins = binpack(nodes, bin_height, self.grid_y_space) + + # find the total width for current bin layout + totalWidth = sum([bin.width for bin in bins]) + # add the spacing between bins + totalWidth = totalWidth + self.grid_x_space * (len(bins)-1) + + debug("{0} : min_h = {1:.2f} : max_h = {2:.2f}".format(num_steps, min_h, max_h)) + debug("For bin height = %d total width = %d (%d bins)" % (bin_height, totalWidth, len(bins))) + + delta = abs((self.grid_width - totalWidth)/self.grid_width) + + debug("{0} : target = {1:.2f} : current = {2:.2f} : delta % = {3:.2f}".format( + num_steps, self.grid_width, totalWidth, delta)) + + if delta < 0.1: # converged ? + break + + else: # not found ? => binary search + if self.grid_width < totalWidth: # W < w (make h bigger) + min_h = bin_height + else: # W > w (make h smaller) + max_h = bin_height + + debug("*** FOUND solution in %d steps" % num_steps) + debug("* {} bins of height {} : width {} : space {} ".format(len(bins), + int(bin_height), + int(totalWidth), + (len(bins)-1)*self.grid_x_space + )) + + else: # self.constrain_layout == "ASPECT" + # find the height and width closest to the grid aspect ratio target_aspect = self.grid_width / self.grid_height - found = False - height = 100 - while not found: - bins = binpack(nodes, height) - # find max width for current layout - totalWidth = 0 - for bin in bins: - totalWidth = totalWidth + bin.width + max_tries = 11 + num_steps = 0 + min_h = 0 + max_h = 2 * sum([node.dimensions.y * scale for node in nodes]) + while num_steps < max_tries: + num_steps = num_steps + 1 - if DEBUG: - print("For height= %d total width = %d" % (height, totalWidth)) + bin_height = 0.5 * (min_h + max_h) # middle of the height interval - current_aspect = totalWidth / height + # get the packed bins for the next bin height + bins = binpack(nodes, bin_height, self.grid_y_space) - if current_aspect > target_aspect: - height = height + 10 - # try again with larger height - else: # found it - found = True + # find the max width for current layout + totalWidth = sum([bin.width for bin in bins]) + # add the spacing between bins + totalWidth = totalWidth + self.grid_x_space * (len(bins)-1) - # arrange the nodes in the bins on the grid + debug("{0} : min_h = {1:.2f} : max_h = {2:.2f}".format(num_steps, min_h, max_h)) + debug("For bin height = %d total width = %d" % (bin_height, totalWidth)) + + current_aspect = totalWidth / bin_height + + delta_aspect = abs(current_aspect - target_aspect) + + debug("{0} : target = {1:.2f} : current = {2:.2f} : delta = {3:.2f}".format( + num_steps, target_aspect, current_aspect, delta_aspect)) + + if delta_aspect < 0.1: # converged ? + break + + else: # not found ? => binary search + if target_aspect < current_aspect: # W/H < w/h (make h bigger) + min_h = bin_height + else: # W/H > w/h (make h smaller) + max_h = bin_height + + debug("*** FOUND solution in %d steps" % num_steps) + debug("* {} bins of height {} : width {} : space {} ".format(len(bins), + int(bin_height), + int(totalWidth), + (len(bins)-1)*self.grid_x_space + )) + + max_idname = max([len(node.bl_idname) for node in nodes]) + + # ARRANGE the nodes in the bins on the grid x = 0 for bin in bins: - max_x_width = max([item[0][0] for item in bin.items]) y = 0 for item in bin.items: - node_width = item[0][0] - node_height = item[0][1] - node_name = item[1] - node = item[2] - if DEBUG: - print("node = ", node_name, " : ", node_width, " x ", node_height) - node.location[0] = x + 0.5 * (max_x_width - node_width) + node_width = item.width + node_height = item.height + node_name = item.name + node = item.node + if self.node_alignment == "LEFT": + node.location[0] = x + elif self.node_alignment == "RIGHT": + node.location[0] = x + (bin.width - node_width) + else: # CENTER + node.location[0] = x + 0.5 * (bin.width - node_width) node.location[1] = y - y = y - node_height - self.grid_y_space - x = x + max_x_width + self.grid_x_space + + debug("node = {0:>{x}} : W, H ({1:.1f}, {2:.1f}) & X, Y ({3:.1f}, {4:.1f})".format( + node_name, + node.dimensions.x * scale, node.dimensions.y * scale, + node.location.x, node.location.y, + x=max_idname)) + + y = y - (item.height + self.grid_y_space) + x = x + (bin.width + self.grid_x_space) + except Exception as e: - print('well.. some exception occurred:', str(e)) + print('EXCEPTION: arranging nodes failed:', str(e)) def create_nodes(self, context): # remove the previously spawned nodes remove_spawned_nodes(context) node_names = get_nodes_in_category(self.category) + node_names.sort(reverse=False) - if DEBUG: - print("* current category : ", self.category) - print("* nodes in category : ", node_names) + debug("* current category : %s" % self.category) + debug("* nodes in category : %s" % node_names) N = len(node_names) - # print('There are <%d> nodes in this category' % (N)) + debug('There are <%d> nodes in category <%s>' % (N, self.category)) + if N == 0: return - for i, node_name in enumerate(node_names): - name = node_name + for i, name in enumerate(node_names): if name == "separator": + debug("SKIPPING separator node") continue if is_dependent(name): + debug("SKIPPING dependent node %d of %d : %s" % (i+1, N, name)) continue if '@' in name: + debug("SKIPPING subcategory node: %s" % name) continue - if DEBUG: - print("Spawning Node %d : %s" % (i, name)) - node = add_spawned_node(context, name) + debug("SPAWNING node %d of %d : %s" % (i+1, N, name)) + + add_spawned_node(context, name) # force redraw to update the node dimensions - bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1) + bpy.ops.wm.redraw_timer(type='DRAW_WIN', iterations=1) + bpy.context.area.tag_redraw() def update_category(self, context): - ''' - Spawn all nodes in the selected category - note: all previously spawned nodes are removed first - ''' + """ + Spawn all nodes in the selected category + note: all previously spawned nodes are removed first + """ self.create_nodes(context) self.arrange_nodes(context) + # update the total/hidden node count (e.g. nodes with dependency are hidden) + node_names = get_nodes_in_category(self.category) + self.total_num_nodes = len(node_names) + other_node_names = [name for name in node_names if is_dependent(name)] + self.hidden_num_nodes = len(other_node_names) + constrain_layout: EnumProperty( name="Constrain Layout", default="ASPECT", - items=constrainLayoutItems, update=arrange_nodes) + items=constrain_layout_items, update=arrange_nodes) + + node_alignment: EnumProperty( + name="Node Alignment", default="CENTER", + items=node_alignment_items, update=arrange_nodes) category: EnumProperty( name="Category", @@ -350,6 +473,16 @@ def update_category(self, context): name="Grid Y spacing", default=20, update=arrange_nodes) + total_num_nodes: IntProperty( + name="Total number of nodes", + description="Total number of nodes in the current category", + default=0) + + hidden_num_nodes: IntProperty( + name="Hidden number of nodes", + description="Number of nodes hidden in the current category", + default=0) + class SV_PT_DisplayNodesPanel(bpy.types.Panel): bl_idname = "SV_PT_DisplayNodesPanel" @@ -376,34 +509,56 @@ def poll(cls, context): def draw(self, context): layout = self.layout displayProps = context.space_data.node_tree.displayNodesProps - split = layout.split(factor=0.7, align=True) + box = layout.box() + split = box.split(factor=0.7, align=True) c1 = split.column(align=True) c2 = split.column(align=True) c1.prop(displayProps, "category", text="") row = c2.row(align=True) row.operator("sv.navigate_category", icon="PLAY_REVERSE", text=" ").direction = 0 row.operator("sv.navigate_category", icon="PLAY", text=" ").direction = 1 - row = layout.row() + row = box.row() + row.operator("sv.view_all_nodes") + # node count info + label = "Total: {} - Shown: {} - Hidden: {}".format(displayProps.total_num_nodes, + displayProps.total_num_nodes - + displayProps.hidden_num_nodes, + displayProps.hidden_num_nodes) + box.label(text=label) + # grid settings + box = layout.box() + col = box.column(align=True) + row = col.row() row.prop(displayProps, 'constrain_layout', expand=True) - col = layout.column(align=True) + row = col.row() + row.prop(displayProps, 'node_alignment', expand=True) + col = box.column(align=True) col.prop(displayProps, 'grid_width') col.prop(displayProps, 'grid_height') - col = layout.column(align=True) + col = box.column(align=True) col.prop(displayProps, 'grid_x_space') col.prop(displayProps, 'grid_y_space') +classes = [SvNavigateCategory, SvViewAllNodes, SV_PT_DisplayNodesPanel, SvDisplayNodePanelProperties] + + def register(): - bpy.utils.register_class(SvNavigateCategory) - bpy.utils.register_class(SV_PT_DisplayNodesPanel) - bpy.utils.register_class(SvDisplayNodePanelProperties) + for cls in classes: + bpy.utils.register_class(cls) + bpy.types.NodeTree.displayNodesProps = PointerProperty( name="displayNodesProps", type=SvDisplayNodePanelProperties) + cache_node_categories() def unregister(): del bpy.types.NodeTree.displayNodesProps - bpy.utils.unregister_class(SV_PT_DisplayNodesPanel) - bpy.utils.unregister_class(SvDisplayNodePanelProperties) - bpy.utils.unregister_class(SvNavigateCategory) + + for cls in classes: + bpy.utils.unregister_class(cls) + + +if __name__ == '__main__': + register() From 2535a4b2295ca7bbe6f661d68810ff6fc4c2f968 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Mon, 15 Mar 2021 16:42:19 +0100 Subject: [PATCH 12/35] Mesh Select Mk2 (#3973) * Mesh Select Mk2 * edges by vert_mask numpyzed --- docs/nodes/analyzer/analyzer_index.rst | 2 +- .../{mesh_select.rst => mesh_select_mk2.rst} | 0 index.md | 2 +- json_examples/Advanced/Candy.json | 4 +- json_examples/Advanced/Pineapple.json | 4 +- json_examples/Architecture/Coliseum.json | 4 +- .../Architecture/ProfileBuilding.json | 6 +- json_examples/Design/Adaptive_per_face.json | 6 +- json_examples/Shapes/Blender_logo.json | 4 +- json_examples/Shapes/Donut.json | 4 +- json_examples/Shapes/SverchokLogo.json | 4 +- .../Shapes/Technical_ring_with_holes.json | 4 +- nodes/analyzer/mesh_select_mk2.py | 379 ++++++++++++++++++ {nodes/analyzer => old_nodes}/mesh_select.py | 2 +- 14 files changed, 402 insertions(+), 23 deletions(-) rename docs/nodes/analyzer/{mesh_select.rst => mesh_select_mk2.rst} (100%) create mode 100644 nodes/analyzer/mesh_select_mk2.py rename {nodes/analyzer => old_nodes}/mesh_select.py (99%) diff --git a/docs/nodes/analyzer/analyzer_index.rst b/docs/nodes/analyzer/analyzer_index.rst index d11be2fe19..3c97e4a51b 100644 --- a/docs/nodes/analyzer/analyzer_index.rst +++ b/docs/nodes/analyzer/analyzer_index.rst @@ -23,7 +23,7 @@ Analyzers kd_tree_path linked_verts mesh_filter - mesh_select + mesh_select_mk2 select_similar proportional normals diff --git a/docs/nodes/analyzer/mesh_select.rst b/docs/nodes/analyzer/mesh_select_mk2.rst similarity index 100% rename from docs/nodes/analyzer/mesh_select.rst rename to docs/nodes/analyzer/mesh_select_mk2.rst diff --git a/index.md b/index.md index 5a3a44e52a..bf876bd9cd 100644 --- a/index.md +++ b/index.md @@ -302,7 +302,7 @@ SvInscribedCircleNode SvSteinerEllipseNode --- - SvMeshSelectNode + SvMeshSelectNodeMk2 SvSelectSimilarNode SvChessSelection diff --git a/json_examples/Advanced/Candy.json b/json_examples/Advanced/Candy.json index 3aa2f09e48..da768b497d 100644 --- a/json_examples/Advanced/Candy.json +++ b/json_examples/Advanced/Candy.json @@ -755,7 +755,7 @@ "width": 140.0 }, "Select mesh elements by location": { - "bl_idname": "SvMeshSelectNode", + "bl_idname": "SvMeshSelectNodeMk2", "custom_socket_props": { "3": { "prop": [ @@ -1117,4 +1117,4 @@ 0 ] ] -} \ No newline at end of file +} diff --git a/json_examples/Advanced/Pineapple.json b/json_examples/Advanced/Pineapple.json index c0c2a9442d..96e1b41e08 100644 --- a/json_examples/Advanced/Pineapple.json +++ b/json_examples/Advanced/Pineapple.json @@ -64,7 +64,7 @@ "Vertex color mk3.001": "Frame.006" }, "groups": { - "Monad": "{\"export_version\": \"0.10\", \"framed_nodes\": {}, \"groups\": {}, \"nodes\": {\"Group Inputs Exp\": {\"bl_idname\": \"SvGroupInputsNodeExp\", \"height\": 100.0, \"width\": 140.0, \"label\": \"\", \"hide\": false, \"location\": [1028.47900390625, -0.3426551818847656], \"params\": {\"node_kind\": \"outputs\"}, \"custom_socket_props\": {}, \"color\": [0.8308190107345581, 0.911391019821167, 0.7545620203018188], \"use_custom_color\": true, \"outputs\": [[\"Vertices\", \"SvVerticesSocket\"], [\"Movement Vectors\", \"SvVerticesSocket\"], [\"Polygons\", \"SvStringsSocket\"], [\"Center\", \"SvVerticesSocket\"], [\"Radius\", \"SvStringsSocket\"]]}, \"Group Outputs Exp\": {\"bl_idname\": \"SvGroupOutputsNodeExp\", \"height\": 100.0, \"width\": 140.0, \"label\": \"\", \"hide\": false, \"location\": [1871.47509765625, -0.3426551818847656], \"params\": {\"node_kind\": \"inputs\"}, \"custom_socket_props\": {}, \"color\": [0.8308190107345581, 0.911391019821167, 0.7545620203018188], \"use_custom_color\": true, \"inputs\": [[\"Vertices\", \"SvVerticesSocket\"]]}, \"Move\": {\"bl_idname\": \"SvMoveNodeMk3\", \"height\": 100.0, \"width\": 140.0, \"label\": \"\", \"hide\": false, \"location\": [1691.47509765625, -18.33763885498047], \"params\": {\"movement_vectors\": [0.0, 0.0, 0.20000000298023224]}, \"custom_socket_props\": {\"1\": {\"expanded\": true}}}, \"Select mesh elements by location\": {\"bl_idname\": \"SvMeshSelectNode\", \"height\": 100.0, \"width\": 140.0, \"label\": \"\", \"hide\": false, \"location\": [1238.47900390625, 17.652328491210938], \"params\": {\"mode\": \"BySphere\", \"radius\": 0.6000000238418579, \"include_partial\": true}, \"custom_socket_props\": {\"3\": {\"prop\": [0.0, 0.0, 1.0]}, \"4\": {\"prop\": [0.0, 0.0, -1.0], \"expanded\": true}}}, \"Proportional Edit Falloff\": {\"bl_idname\": \"SvProportionalEditNode\", \"height\": 100.0, \"width\": 166.3173828125, \"label\": \"\", \"hide\": false, \"location\": [1466.7452392578125, -14.141777992248535], \"params\": {\"radius\": 0.699999988079071, \"falloff_type\": \"sharp\"}, \"custom_socket_props\": {}}}, \"update_lists\": [[\"Move\", 0, \"Group Outputs Exp\", 0], [\"Group Inputs Exp\", 0, \"Move\", 0], [\"Group Inputs Exp\", 1, \"Move\", 1], [\"Proportional Edit Falloff\", 0, \"Move\", 2], [\"Group Inputs Exp\", 0, \"Select mesh elements by location\", 0], [\"Group Inputs Exp\", 2, \"Select mesh elements by location\", 2], [\"Group Inputs Exp\", 3, \"Select mesh elements by location\", 4], [\"Group Inputs Exp\", 4, \"Select mesh elements by location\", 6], [\"Group Inputs Exp\", 0, \"Proportional Edit Falloff\", 0], [\"Select mesh elements by location\", 0, \"Proportional Edit Falloff\", 1]], \"bl_idname\": \"SverchGroupTreeType\", \"cls_bl_idname\": \"SvGroupNodeMonad_140486095450048\"}" + "Monad": "{\"export_version\": \"0.10\", \"framed_nodes\": {}, \"groups\": {}, \"nodes\": {\"Group Inputs Exp\": {\"bl_idname\": \"SvGroupInputsNodeExp\", \"height\": 100.0, \"width\": 140.0, \"label\": \"\", \"hide\": false, \"location\": [1028.47900390625, -0.3426551818847656], \"params\": {\"node_kind\": \"outputs\"}, \"custom_socket_props\": {}, \"color\": [0.8308190107345581, 0.911391019821167, 0.7545620203018188], \"use_custom_color\": true, \"outputs\": [[\"Vertices\", \"SvVerticesSocket\"], [\"Movement Vectors\", \"SvVerticesSocket\"], [\"Polygons\", \"SvStringsSocket\"], [\"Center\", \"SvVerticesSocket\"], [\"Radius\", \"SvStringsSocket\"]]}, \"Group Outputs Exp\": {\"bl_idname\": \"SvGroupOutputsNodeExp\", \"height\": 100.0, \"width\": 140.0, \"label\": \"\", \"hide\": false, \"location\": [1871.47509765625, -0.3426551818847656], \"params\": {\"node_kind\": \"inputs\"}, \"custom_socket_props\": {}, \"color\": [0.8308190107345581, 0.911391019821167, 0.7545620203018188], \"use_custom_color\": true, \"inputs\": [[\"Vertices\", \"SvVerticesSocket\"]]}, \"Move\": {\"bl_idname\": \"SvMoveNodeMk3\", \"height\": 100.0, \"width\": 140.0, \"label\": \"\", \"hide\": false, \"location\": [1691.47509765625, -18.33763885498047], \"params\": {\"movement_vectors\": [0.0, 0.0, 0.20000000298023224]}, \"custom_socket_props\": {\"1\": {\"expanded\": true}}}, \"Select mesh elements by location\": {\"bl_idname\": \"SvMeshSelectNodeMk2\", \"height\": 100.0, \"width\": 140.0, \"label\": \"\", \"hide\": false, \"location\": [1238.47900390625, 17.652328491210938], \"params\": {\"mode\": \"BySphere\", \"radius\": 0.6000000238418579, \"include_partial\": true}, \"custom_socket_props\": {\"3\": {\"prop\": [0.0, 0.0, 1.0]}, \"4\": {\"prop\": [0.0, 0.0, -1.0], \"expanded\": true}}}, \"Proportional Edit Falloff\": {\"bl_idname\": \"SvProportionalEditNode\", \"height\": 100.0, \"width\": 166.3173828125, \"label\": \"\", \"hide\": false, \"location\": [1466.7452392578125, -14.141777992248535], \"params\": {\"radius\": 0.699999988079071, \"falloff_type\": \"sharp\"}, \"custom_socket_props\": {}}}, \"update_lists\": [[\"Move\", 0, \"Group Outputs Exp\", 0], [\"Group Inputs Exp\", 0, \"Move\", 0], [\"Group Inputs Exp\", 1, \"Move\", 1], [\"Proportional Edit Falloff\", 0, \"Move\", 2], [\"Group Inputs Exp\", 0, \"Select mesh elements by location\", 0], [\"Group Inputs Exp\", 2, \"Select mesh elements by location\", 2], [\"Group Inputs Exp\", 3, \"Select mesh elements by location\", 4], [\"Group Inputs Exp\", 4, \"Select mesh elements by location\", 6], [\"Group Inputs Exp\", 0, \"Proportional Edit Falloff\", 0], [\"Select mesh elements by location\", 0, \"Proportional Edit Falloff\", 1]], \"bl_idname\": \"SverchGroupTreeType\", \"cls_bl_idname\": \"SvGroupNodeMonad_140486095450048\"}" }, "nodes": { "3pt Arc": { @@ -1898,4 +1898,4 @@ 4 ] ] -} \ No newline at end of file +} diff --git a/json_examples/Architecture/Coliseum.json b/json_examples/Architecture/Coliseum.json index 15309a6937..2922b00049 100644 --- a/json_examples/Architecture/Coliseum.json +++ b/json_examples/Architecture/Coliseum.json @@ -683,7 +683,7 @@ "width": 140.0 }, "Select mesh elements by location": { - "bl_idname": "SvMeshSelectNode", + "bl_idname": "SvMeshSelectNodeMk2", "custom_socket_props": { "3": { "prop": [ @@ -1067,4 +1067,4 @@ 2 ] ] -} \ No newline at end of file +} diff --git a/json_examples/Architecture/ProfileBuilding.json b/json_examples/Architecture/ProfileBuilding.json index 2fff9c9ebb..1172e8a10d 100644 --- a/json_examples/Architecture/ProfileBuilding.json +++ b/json_examples/Architecture/ProfileBuilding.json @@ -537,7 +537,7 @@ "width": 16.0 }, "Select mesh elements by location": { - "bl_idname": "SvMeshSelectNode", + "bl_idname": "SvMeshSelectNodeMk2", "custom_socket_props": { "3": { "expanded": true, @@ -561,7 +561,7 @@ "width": 140.0 }, "Select mesh elements by location.002": { - "bl_idname": "SvMeshSelectNode", + "bl_idname": "SvMeshSelectNodeMk2", "custom_socket_props": { "3": { "expanded": true, @@ -835,4 +835,4 @@ 0 ] ] -} \ No newline at end of file +} diff --git a/json_examples/Design/Adaptive_per_face.json b/json_examples/Design/Adaptive_per_face.json index bdb755e021..9d64d7431f 100644 --- a/json_examples/Design/Adaptive_per_face.json +++ b/json_examples/Design/Adaptive_per_face.json @@ -417,7 +417,7 @@ "width": 16.0 }, "Select mesh elements by location": { - "bl_idname": "SvMeshSelectNode", + "bl_idname": "SvMeshSelectNodeMk2", "custom_socket_props": { "3": { "expanded": true, @@ -450,7 +450,7 @@ "width": 140.0 }, "Select mesh elements by location.001": { - "bl_idname": "SvMeshSelectNode", + "bl_idname": "SvMeshSelectNodeMk2", "custom_socket_props": { "3": { "expanded": true, @@ -908,4 +908,4 @@ 3 ] ] -} \ No newline at end of file +} diff --git a/json_examples/Shapes/Blender_logo.json b/json_examples/Shapes/Blender_logo.json index 6b27718687..401b2bb4a4 100644 --- a/json_examples/Shapes/Blender_logo.json +++ b/json_examples/Shapes/Blender_logo.json @@ -300,7 +300,7 @@ "width": 140.0 }, "Select mesh elements by location": { - "bl_idname": "SvMeshSelectNode", + "bl_idname": "SvMeshSelectNodeMk2", "custom_socket_props": { "3": { "expanded": true, @@ -603,4 +603,4 @@ 1 ] ] -} \ No newline at end of file +} diff --git a/json_examples/Shapes/Donut.json b/json_examples/Shapes/Donut.json index 332565c20f..8c4c93987a 100644 --- a/json_examples/Shapes/Donut.json +++ b/json_examples/Shapes/Donut.json @@ -495,7 +495,7 @@ "width": 140.0 }, "Select mesh elements by location": { - "bl_idname": "SvMeshSelectNode", + "bl_idname": "SvMeshSelectNodeMk2", "custom_socket_props": { "3": { "prop": [ @@ -527,7 +527,7 @@ "width": 140.0 }, "Select mesh elements by location.001": { - "bl_idname": "SvMeshSelectNode", + "bl_idname": "SvMeshSelectNodeMk2", "custom_socket_props": { "3": { "expanded": true, diff --git a/json_examples/Shapes/SverchokLogo.json b/json_examples/Shapes/SverchokLogo.json index 1f65a178f0..04b9e44be6 100644 --- a/json_examples/Shapes/SverchokLogo.json +++ b/json_examples/Shapes/SverchokLogo.json @@ -697,7 +697,7 @@ "width": 400.0 }, "Select mesh elements by location": { - "bl_idname": "SvMeshSelectNode", + "bl_idname": "SvMeshSelectNodeMk2", "custom_socket_props": { "3": { "prop": [ @@ -1205,4 +1205,4 @@ 1 ] ] -} \ No newline at end of file +} diff --git a/json_examples/Shapes/Technical_ring_with_holes.json b/json_examples/Shapes/Technical_ring_with_holes.json index 3f98690dd0..fb13cf423f 100644 --- a/json_examples/Shapes/Technical_ring_with_holes.json +++ b/json_examples/Shapes/Technical_ring_with_holes.json @@ -289,7 +289,7 @@ "width": 140.0 }, "Select mesh elements by location": { - "bl_idname": "SvMeshSelectNode", + "bl_idname": "SvMeshSelectNodeMk2", "custom_socket_props": { "3": { "expanded": true, @@ -526,4 +526,4 @@ 2 ] ] -} \ No newline at end of file +} diff --git a/nodes/analyzer/mesh_select_mk2.py b/nodes/analyzer/mesh_select_mk2.py new file mode 100644 index 0000000000..afc9fc9572 --- /dev/null +++ b/nodes/analyzer/mesh_select_mk2.py @@ -0,0 +1,379 @@ +# ##### 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 math + +from mathutils import Vector, Matrix, kdtree + +import bpy +from bpy.props import IntProperty, FloatProperty, BoolProperty, EnumProperty +import numpy as np +from sverchok.node_tree import SverchCustomTreeNode +from sverchok.data_structure import updateNode, match_long_repeat, describe_data_shape, numpy_match_long_repeat, repeat_last_for_length +from sverchok.utils.logging import info, debug +from sverchok.utils.math import np_dot +from sverchok.utils.sv_bmesh_utils import bmesh_from_pydata, pydata_from_bmesh +from sverchok.nodes.analyzer.normals import calc_mesh_normals +from sverchok.utils.nodes_mixins.recursive_nodes import SvRecursiveNode + +def select_verts_by_faces(faces, verts): + flat_index_list = {idx for face in faces for idx in face} + return [v in flat_index_list for v in range(len(verts))] + +def select_edges_by_verts(verts_mask, edges, include_partial): + if isinstance(verts_mask, np.ndarray): + return select_edges_by_verts_numpy(verts_mask, edges, include_partial) + return select_edges_by_verts_python(verts_mask, edges, include_partial) + +def select_edges_by_verts_python(verts_mask, edges, include_partial): + result = [] + for u,v in edges: + if include_partial: + ok = verts_mask[u] or verts_mask[v] + else: + ok = verts_mask[u] and verts_mask[v] + result.append(ok) + return result + +def select_edges_by_verts_numpy(verts_mask, edges, include_partial): + if include_partial: + result = np.any(verts_mask[np.array(edges)], axis=1) + else: + result = np.all(verts_mask[np.array(edges)], axis=1) + + return result.tolist() + +def select_faces_by_verts(verts_mask, faces, include_partial): + result = [] + for face in faces: + if include_partial: + ok = any(verts_mask[i] for i in face) + else: + ok = all(verts_mask[i] for i in face) + result.append(ok) + return result + +def map_percent(values, percent): + maxv = np.amax(values) + minv = np.amin(values) + if maxv <= minv: + return maxv + return maxv - percent * (maxv - minv) * 0.01 + +def by_side(verts, direction, percent): + np_verts = np.array(verts) + np_dir = np.array(direction) + np_dir, np_percent = numpy_match_long_repeat([np_dir, np.array(percent)]) + values = np_dot(np_verts[:,np.newaxis], np_dir[np.newaxis,:], axis=2) + threshold = map_percent(values, np_percent) + out_verts_mask = np.any(values >= threshold, axis=1) + return out_verts_mask + +def by_bbox(vertices, points, radius): + np_rads = np.array(radius) + np_verts = np.array(vertices) + np_bbox = np.array(points) + bbox_max = np.amax(np_bbox, axis=0) + bbox_min = np.amin(np_bbox, axis=0) + min_mask = np_verts > bbox_min - np_rads[:, np.newaxis] + max_mask = np_verts < bbox_max + np_rads[:, np.newaxis] + out_verts_mask = np.all(np.all([min_mask, max_mask], axis=0), axis=1) + + return out_verts_mask + +def by_sphere(vertices, centers, radius): + + if len(centers) == 1: + center = centers[0] + out_verts_mask = np.linalg.norm(np.array(vertices)-np.array(center)[np.newaxis,:], axis=1)<= radius[0] + else: + # build KDTree + tree = kdtree.KDTree(len(centers)) + for i, v in enumerate(centers): + tree.insert(v, i) + tree.balance() + + out_verts_mask = [] + rad = repeat_last_for_length(radius, len(centers)) + for vertex in vertices: + _, idx, rho = tree.find(vertex) + mask = rho <= rad[idx] + out_verts_mask.append(mask) + return out_verts_mask + + +def by_plane(vertices, center, radius, direction): + + np_verts = np.array(vertices) + np_center = np.array(center) + np_normal = np.array(direction) + normal_length= np.linalg.norm(np_normal, axis=1) + np_normal /= normal_length[:, np.newaxis] + np_rad = np.array(radius) + np_center, np_normal, np_rad = numpy_match_long_repeat([np_center, np_normal, np_rad]) + vs = np_verts[np.newaxis, :, :] - np_center[:, np.newaxis,:] + distance = np.abs(np.sum(vs * np_normal[:,np.newaxis, :], axis=2)) + out_verts_mask = np.any(distance < np_rad[:,np.newaxis], axis=0) + + return out_verts_mask + + +def by_cylinder(vertices, center, radius, direction): + np_vertices = np.array(vertices) + np_location = np.array(center) + np_direction = np.array(direction) + np_direction = np_direction/np.linalg.norm(np_direction, axis=1)[:, np.newaxis] + np_radius = np.array(radius) + np_location, np_direction, np_radius = numpy_match_long_repeat([np_location, np_direction, np_radius]) + v_attract = np_vertices[np.newaxis, :, :] - np_location[:, np.newaxis, :] + vect_proy = np_dot(v_attract, np_direction[:, np.newaxis, :], axis=2) + + closest_point = np_location[:, np.newaxis, :] + vect_proy[:, :, np.newaxis] * np_direction[:, np.newaxis, :] + + dif_v = closest_point - np_vertices[np.newaxis, :, :] + dist_attract = np.linalg.norm(dif_v, axis=2) + out_verts_mask = np.any(dist_attract < np_radius[:, np.newaxis], axis=0) + + return out_verts_mask + +def by_normal(vertices, edges, faces, percent, direction): + vertex_normals, face_normals = calc_mesh_normals(vertices, edges, faces) + np_verts = np.array(face_normals) + np_dir = np.array(direction) + np_dir, np_percent = numpy_match_long_repeat([np_dir, np.array(percent)]) + values = np_dot(np_verts[:, np.newaxis], np_dir[np.newaxis,:], axis=2) + threshold = map_percent(values, np_percent) + out_face_mask = np.any(values >= threshold, axis=1) + + return out_face_mask + +def by_outside(vertices, edges, faces, percent, center): + vertex_normals, face_normals = calc_mesh_normals(vertices, edges, faces) + center = Vector(center[0]) + + def get_center(face): + verts = [Vector(vertices[i]) for i in face] + result = Vector((0,0,0)) + for v in verts: + result += v + return (1.0/float(len(verts))) * result + + values = [] + for face, normal in zip(faces, face_normals): + face_center = get_center(face) + direction = face_center - center + dirlength = direction.length + if dirlength > 0: + value = math.pi - direction.angle(normal) + else: + value = math.pi + values.append(value) + threshold = map_percent(values, percent[0]) + + out_face_mask = [(value >= threshold) for value in values] + + return out_face_mask + + +def by_edge_dir(vertices, edges, percent, direction): + + np_verts = np.array(vertices) + np_edges = np.array(edges) + edges_v = np_verts[np_edges] + edges_dir = edges_v[:, 1 , :] - edges_v[:, 0 ,:] + np_dir = np.array(direction) + np_dir /= np.linalg.norm(np_dir, axis=1)[:, np.newaxis] + edges_dir /= np.linalg.norm(edges_dir, axis=1)[:, np.newaxis] + np_percent = np.array(percent) + np_dir, np_percent = numpy_match_long_repeat([np_dir, np_percent]) + + values = np.abs(np_dot(edges_dir[:, np.newaxis], np_dir[np.newaxis, :], axis=2)) + threshold = map_percent(values, np_percent) + + out_edges_mask = np.any(values >= threshold, axis=1) + + return out_edges_mask + +def edge_modes_select(params, mode='BySide', v_mask=True, e_mask=True, p_mask=True, include_partial=True): + vertices, edges, faces, direction, center, percent, radius = params + if mode == 'EdgeDir': + out_edges_mask = by_edge_dir(vertices, edges, percent, direction) + + out_edges = [edge for (edge, mask) in zip (edges, out_edges_mask) if mask] + + out_verts_mask = select_verts_by_faces(out_edges, vertices) if v_mask or p_mask else [] + + out_faces_mask = select_faces_by_verts(out_verts_mask, faces, False) if p_mask else [] + + return out_verts_mask, out_edges_mask.tolist() if isinstance(out_edges_mask, np.ndarray) else out_edges_mask, out_faces_mask + + + +def face_modes_select(params, mode='BySide', v_mask=True, e_mask=True, p_mask=True, include_partial=True): + vertices, edges, faces, direction, center, percent, radius = params + if mode == 'ByNormal': + out_faces_mask = by_normal(vertices, edges, faces, percent, direction) + _include_partial = False + if mode == 'Outside': + out_faces_mask = by_outside(vertices, edges, faces, percent, center) + _include_partial = include_partial + + out_faces = [face for (face, mask) in zip(faces, out_faces_mask) if mask] + out_verts_mask = select_verts_by_faces(out_faces, vertices) if v_mask or e_mask else [] + out_edges_mask = select_edges_by_verts(out_verts_mask, edges, _include_partial) if e_mask else [] + + return out_verts_mask, out_edges_mask, out_faces_mask.tolist() if (isinstance(out_faces_mask, np.ndarray) and p_mask) else out_faces_mask + +def vert_modes_select(params, mode='BySide', v_mask=True, e_mask=True, p_mask=True, include_partial=True): + verts, edges, faces, direction, center, percent, radius = params + if mode == 'BySide': + out_verts_mask = by_side(verts, direction, percent) + if mode == 'BBox': + out_verts_mask = by_bbox(verts, center, radius) + if mode == 'BySphere': + out_verts_mask = by_sphere(verts, center, radius) + if mode == 'ByPlane': + out_verts_mask = by_plane(verts, center, radius, direction) + if mode == 'ByCylinder': + out_verts_mask = by_cylinder(verts, center, radius, direction) + if e_mask: + out_edges_mask = select_edges_by_verts(out_verts_mask, edges, include_partial) + else: + out_edges_mask = [] + if p_mask: + out_faces_mask = select_faces_by_verts(out_verts_mask, faces, include_partial) + else: + out_faces_mask = [] + + return out_verts_mask.tolist() if (isinstance(out_verts_mask, np.ndarray) and v_mask) else out_verts_mask, out_edges_mask, out_faces_mask + +VERT_MODES = ['BySide', 'BBox', 'BySphere', 'ByPlane', 'ByCylinder'] +EDGE_MODES = ['EdgeDir'] +FACE_MODES = ['ByNormal', 'Outside'] + +class SvMeshSelectNodeMk2(bpy.types.Node, SverchCustomTreeNode, SvRecursiveNode): + ''' + Triggers: Mask by geometry + Tooltip: Select vertices, edges, faces by geometric criteria + ''' + bl_idname = 'SvMeshSelectNodeMk2' + bl_label = 'Select mesh elements' + bl_icon = 'UV_SYNC_SELECT' + + modes = [ + ("BySide", "By side", "Select specified side of mesh", 0), + ("ByNormal", "By normal direction", "Select faces with normal in specified direction", 1), + ("BySphere", "By center and radius", "Select vertices within specified distance from center", 2), + ("ByPlane", "By plane", "Select vertices within specified distance from plane defined by point and normal vector", 3), + ("ByCylinder", "By cylinder", "Select vertices within specified distance from straight line defined by point and direction vector", 4), + ("EdgeDir", "By edge direction", "Select edges that are nearly parallel to specified direction", 5), + ("Outside", "Normal pointing outside", "Select faces with normals pointing outside", 6), + ("BBox", "By bounding box", "Select vertices within bounding box of specified points", 7) + ] + + def update_mode(self, context): + self.inputs['Radius'].hide_safe = (self.mode not in ['BySphere', 'ByPlane', 'ByCylinder', 'BBox']) + self.inputs['Center'].hide_safe = (self.mode not in ['BySphere', 'ByPlane', 'ByCylinder', 'Outside', 'BBox']) + self.inputs['Percent'].hide_safe = (self.mode not in ['BySide', 'ByNormal', 'EdgeDir', 'Outside']) + self.inputs['Direction'].hide_safe = (self.mode not in ['BySide', 'ByNormal', 'ByPlane', 'ByCylinder', 'EdgeDir']) + + updateNode(self, context) + + mode: EnumProperty(name="Mode", + items=modes, + default='ByNormal', + update=update_mode) + + include_partial: BoolProperty(name="Include partial selection", + description="Include partially selected edges/faces", + default=False, + update=updateNode) + + percent: FloatProperty(name="Percent", + default=1.0, + min=0.0, max=100.0, + update=updateNode) + + radius: FloatProperty(name="Radius", default=1.0, min=0.0, update=updateNode) + + def draw_buttons(self, context, layout): + layout.prop(self, 'mode') + if self.mode not in ['ByNormal', 'EdgeDir']: + layout.prop(self, 'include_partial') + def draw_buttons_ext(self, context, layout): + self.draw_buttons(context, layout) + layout.prop(self, 'list_match') + + def rclick_menu(self, context, layout): + layout.prop_menu_enum(self, "list_match", text="List Match") + + def sv_init(self, context): + self.inputs.new('SvVerticesSocket', "Vertices").is_mandatory = True + eds = self.inputs.new('SvStringsSocket', "Edges") + eds.nesting_level = 3 + pols = self.inputs.new('SvStringsSocket', "Polygons") + pols.nesting_level = 3 + d = self.inputs.new('SvVerticesSocket', "Direction") + d.use_prop = True + d.default_property = (0.0, 0.0, 1.0) + d.nesting_level = 3 + c = self.inputs.new('SvVerticesSocket', "Center") + c.use_prop = True + c.default_property = (0.0, 0.0, 0.0) + c.nesting_level = 3 + perc = self.inputs.new('SvStringsSocket', 'Percent') + perc.prop_name = 'percent' + perc.nesting_level = 2 + rad = self.inputs.new('SvStringsSocket', 'Radius') + rad.prop_name = 'radius' + rad.nesting_level = 2 + + self.outputs.new('SvStringsSocket', 'VerticesMask') + self.outputs.new('SvStringsSocket', 'EdgesMask') + self.outputs.new('SvStringsSocket', 'FacesMask') + + self.update_mode(context) + + def process_data(self, params): + result = [[] for s in self.outputs] + if self.mode in VERT_MODES: + func = vert_modes_select + elif self.mode in EDGE_MODES: + func = edge_modes_select + else: + func = face_modes_select + + for local_params in zip(*params): + masks = func( + local_params, + mode=self.mode, + v_mask=self.outputs[0].is_linked, + e_mask=self.outputs[1].is_linked, + p_mask=self.outputs[2].is_linked, + include_partial=self.include_partial + ) + [r.append(r_local) for r, r_local in zip(result, masks)] + return result + + +def register(): + bpy.utils.register_class(SvMeshSelectNodeMk2) + + +def unregister(): + bpy.utils.unregister_class(SvMeshSelectNodeMk2) diff --git a/nodes/analyzer/mesh_select.py b/old_nodes/mesh_select.py similarity index 99% rename from nodes/analyzer/mesh_select.py rename to old_nodes/mesh_select.py index b3d3c9bffc..cf683da4da 100644 --- a/nodes/analyzer/mesh_select.py +++ b/old_nodes/mesh_select.py @@ -34,7 +34,7 @@ class SvMeshSelectNode(bpy.types.Node, SverchCustomTreeNode): bl_idname = 'SvMeshSelectNode' bl_label = 'Select mesh elements by location' bl_icon = 'UV_SYNC_SELECT' - + replacement_nodes = [('SvMeshSelectNodeMk2', None, None)] modes = [ ("BySide", "By side", "Select specified side of mesh", 0), ("ByNormal", "By normal direction", "Select faces with normal in specified direction", 1), From 7d3a86375c58fc55acc542443554434add7c858c Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Mon, 15 Mar 2021 16:44:16 +0100 Subject: [PATCH 13/35] Extra addons support (#3966) * Support for Docs linking * Support for custom menu * Support for examples * support for examples folders with spaces * support for one-click update * extra_addons download from settings * download bugfix * json test fix --- settings.py | 5 +- tests/json_import_tests.py | 4 +- ui/development.py | 10 +- ui/nodeview_space_menu.py | 7 +- ui/sv_examples_menu.py | 28 ++++-- ui/sv_icons.py | 5 +- ui/sv_panels.py | 18 ++-- utils/__init__.py | 19 ++-- utils/context_managers.py | 16 ++++ utils/extra_categories.py | 31 +++++++ utils/sv_extra_addons.py | 183 +++++++++++++++++++++++++++++++++++++ utils/sv_update_utils.py | 112 +++++++++++++---------- 12 files changed, 354 insertions(+), 84 deletions(-) create mode 100644 utils/sv_extra_addons.py diff --git a/settings.py b/settings.py index 4df964c4d6..0da9287d3f 100644 --- a/settings.py +++ b/settings.py @@ -10,6 +10,7 @@ from sverchok.core import update_system from sverchok.utils import logging from sverchok.utils.sv_gist_tools import TOKEN_HELP_URL +from sverchok.utils.sv_extra_addons import draw_extra_addons from sverchok.ui import color_def from sverchok.ui.utils import message_on_layout @@ -402,6 +403,7 @@ def update_log_level(self, context): # updating sverchok dload_archive_name: StringProperty(name="archive name", default="master") # default = "master" dload_archive_path: StringProperty(name="archive path", default="https://github.com/nortikin/sverchok/archive/") + available_new_version: bpy.props.BoolProperty(default=False) FreeCAD_folder: StringProperty( name="FreeCAD python 3.7 folder", @@ -584,6 +586,7 @@ def draw_freecad_ops(): if any(package.module is None for package in sv_dependencies.values()): box.operator('wm.url_open', text="Read installation instructions for missing dependencies").url = "https://github.com/nortikin/sverchok/wiki/Dependencies" + draw_extra_addons(layout) def draw(self, context): @@ -613,7 +616,7 @@ def draw(self, context): row1.operator('wm.url_open', text='Sverchok home page').url = 'http://nikitron.cc.ua/blend_scripts.html' row1.operator('wm.url_open', text='Documentation').url = 'http://nikitron.cc.ua/sverch/html/main.html' - if context.scene.sv_new_version: + if self.available_new_version: row1.operator('node.sverchok_update_addon', text='Upgrade Sverchok addon') else: row1.operator('node.sverchok_check_for_upgrades_wsha', text='Check for new version') diff --git a/tests/json_import_tests.py b/tests/json_import_tests.py index 1352a12f24..c737c5c64a 100644 --- a/tests/json_import_tests.py +++ b/tests/json_import_tests.py @@ -62,9 +62,7 @@ def test_mesh_expr_import(self): class ExamplesImportTest(SverchokTestCase): def test_import_examples(self): - examples_path = Path(sverchok.__file__).parent / 'json_examples' - - for category_name in example_categories_names(): + for examples_path, category_name in example_categories_names(): info("Opening Dir named: %s", category_name) diff --git a/ui/development.py b/ui/development.py index b876f999c5..f360f021b9 100644 --- a/ui/development.py +++ b/ui/development.py @@ -21,7 +21,7 @@ import subprocess import webbrowser import socket - +import inspect import bpy from bpy.props import StringProperty, CollectionProperty, BoolProperty, FloatProperty @@ -35,6 +35,8 @@ from sverchok.ui.presets import get_presets, SverchPresetReplaceOperator, SvSaveSelected, node_supports_presets from sverchok.nodes.__init__ import nodes_dict from sverchok.settings import PYPATH +from sverchok.utils.extra_categories import external_node_docs + def displaying_sverchok_nodes(context): return context.space_data.tree_type in {'SverchCustomTreeType', 'SverchGroupTreeType'} @@ -95,6 +97,7 @@ def get_docs_filepath(string_dir, filename): ) return filepath + class SvViewHelpForNode(bpy.types.Operator): """ Open docs on site, on local PC or on github """ bl_idname = "node.view_node_help" @@ -106,6 +109,10 @@ def execute(self, context): n = context.active_node string_dir = remapper.get(n.bl_idname) + if not string_dir: #external node + print('external_node') + return external_node_docs(self, n, self.kind) + filename = n.__module__.split('.')[-1] if filename in ('mask','mask_convert','mask_join'): string_dir = 'list_masks' @@ -232,7 +239,6 @@ def view_source_external(self, prefs, fpath): def get_filepath_from_node(self, n): """ get full filepath on disk for a given node reference """ - import inspect return inspect.getfile(n.__class__) class SV_MT_LoadPresetMenu(bpy.types.Menu): diff --git a/ui/nodeview_space_menu.py b/ui/nodeview_space_menu.py index d14798dcdf..d354382008 100644 --- a/ui/nodeview_space_menu.py +++ b/ui/nodeview_space_menu.py @@ -35,7 +35,7 @@ draw_node_ops as monad_node_ops) from sverchok.utils import get_node_class_reference -from sverchok.utils.extra_categories import get_extra_categories +from sverchok.utils.extra_categories import get_extra_categories, extra_category_providers from sverchok.ui.sv_icons import node_icon, icon, get_icon_switch, custom_icon from sverchok.ui import presets import nodeitems_utils @@ -195,6 +195,10 @@ def draw(self, context): layout.separator() for category in extra_categories: layout.menu("NODEVIEW_MT_EX_" + category.identifier) + if extra_category_providers: + for provider in extra_category_providers: + if hasattr(provider, 'use_custom_menu') and provider.use_custom_menu: + layout.menu(provider.custom_menu) class NODEVIEW_MT_Solids_Special_Menu(bpy.types.Menu): bl_label = "Solids" @@ -402,7 +406,6 @@ def draw(self, context): make_class('SVG', "SVG"), make_class('Betas', "Beta Nodes"), make_class('Alphas', "Alpha Nodes"), - # NODEVIEW_MT_Solids_Special_Menu ] def sv_draw_menu(self, context): diff --git a/ui/sv_examples_menu.py b/ui/sv_examples_menu.py index 517b829899..c46377b8f1 100644 --- a/ui/sv_examples_menu.py +++ b/ui/sv_examples_menu.py @@ -1,7 +1,7 @@ # This file is part of project Sverchok. It's copyrighted by the contributors # recorded in the version control history of the file, available from # its original location https://github.com/nortikin/sverchok/commit/master -# +# # SPDX-License-Identifier: GPL3 # License-Filename: LICENSE @@ -38,27 +38,39 @@ def poll(cls, context): return False def draw(self, context): - for category_name in example_categories_names(): - self.layout.menu("SV_MT_PyMenu_" + category_name) + for path, category_name in example_categories_names(): + self.layout.menu("SV_MT_PyMenu_" + category_name.replace(' ', '_')) -def make_submenu_classes(category_name): +def make_submenu_classes(path, category_name): """Generator of submenus classes""" def draw_submenu(self, context): """Draw Svershok template submenu""" - category_path = Path(sverchok.__file__).parent / 'json_examples' / category_name + category_path = path / category_name self.path_menu(searchpaths=[str(category_path)], operator='node.tree_importer_silent') - class_name = "SV_MT_PyMenu_" + category_name + class_name = "SV_MT_PyMenu_" + category_name.replace(' ', '_') + return type(class_name, (bpy.types.Menu,), {'bl_label': category_name, 'draw': draw_submenu, 'bl_idname': class_name}) +extra_examples= dict() +def add_extra_examples(provider, path): + global extra_examples + extra_examples[provider] = path def example_categories_names(): examples_path = Path(sverchok.__file__).parent / 'json_examples' + names = [] for category_path in examples_path.iterdir(): if category_path.is_dir(): - yield category_path.name + names.append((examples_path, category_path.name)) + for c in extra_examples: + for category_path in extra_examples[c].iterdir(): + if category_path.is_dir(): + names.append((extra_examples[c], category_path.name)) + for name in names: + yield name class SvNodeTreeImporterSilent(bpy.types.Operator): @@ -88,7 +100,7 @@ def execute(self, context): def register(): - submenu_classes = (make_submenu_classes(category_name) for category_name in example_categories_names()) + submenu_classes = (make_submenu_classes(path, category_name) for path, category_name in example_categories_names()) _ = [bpy.utils.register_class(cls) for cls in chain(classes, submenu_classes)] bpy.types.NODE_HT_header.append(node_examples_pulldown) diff --git a/ui/sv_icons.py b/ui/sv_icons.py index e4c271bb27..86eb46f3aa 100644 --- a/ui/sv_icons.py +++ b/ui/sv_icons.py @@ -18,7 +18,10 @@ def init(self, custom_icons): if self.provider_inited: return for icon_id, path in self.provider.get_icons(): - custom_icons.load(icon_id, path, "IMAGE") + try: + custom_icons.load(icon_id, path, "IMAGE") + except KeyError: + pass _icon_providers = dict() diff --git a/ui/sv_panels.py b/ui/sv_panels.py index d79f024ec6..d8b31864ae 100644 --- a/ui/sv_panels.py +++ b/ui/sv_panels.py @@ -131,15 +131,15 @@ class SV_PT_SverchokUtilsPanel(SverchokPanels, bpy.types.Panel): def draw(self, context): col = self.layout.column() col.operator('node.sv_show_latest_commits') - - if context.scene.sv_new_version: - col_alert = self.layout.column() - col_alert.alert = True - col_alert.operator("node.sverchok_update_addon", text='Upgrade Sverchok addon') - else: - col.operator("node.sverchok_check_for_upgrades_wsha", text='Check for updates') - with sv_preferences() as prefs: + if prefs.available_new_version: + col_alert = self.layout.column() + col_alert.alert = True + col_alert.operator("node.sverchok_update_addon", text='Upgrade Sverchok addon') + else: + col.operator("node.sverchok_check_for_upgrades_wsha", text='Check for updates') + + # with sv_preferences() as prefs: if prefs.developer_mode: col.operator("node.sv_run_pydoc") @@ -319,7 +319,6 @@ def register(): bpy.utils.register_class(class_name) bpy.types.Scene.ui_list_selected_tree = bpy.props.IntProperty() # Pointer to selected item in list of trees - bpy.types.Scene.sv_new_version = bpy.props.BoolProperty(default=False) bpy.types.NODE_HT_header.append(node_show_tree_mode) bpy.types.VIEW3D_HT_header.append(view3d_show_live_mode) @@ -327,7 +326,6 @@ def register(): def unregister(): del bpy.types.Scene.ui_list_selected_tree - del bpy.types.Scene.sv_new_version for class_name in reversed(sv_tools_classes): bpy.utils.unregister_class(class_name) diff --git a/utils/__init__.py b/utils/__init__.py index 5c8596dd91..e78439bdf3 100644 --- a/utils/__init__.py +++ b/utils/__init__.py @@ -17,7 +17,7 @@ def unregister_node_class(class_ref): def register_node_classes_factory(node_class_references, ops_class_references=None): """ - + !!!! Unless you are testing/developing a node, you do not need to use this. ever. !!!! @@ -53,16 +53,16 @@ def register(): def unregister(): for cls in reversed(ops_class_references): - bpy.utils.unregister_class(cls) + bpy.utils.unregister_class(cls) for cls in reversed(node_class_references): unregister_node_class(cls) return register, unregister def auto_gather_node_classes(start_module = None): - """ - this produces a dict with mapping from bl_idname to class reference at runtime - f.ex + """ + this produces a dict with mapping from bl_idname to class reference at runtime + f.ex node_classes = {SvBMeshViewerMk2: , .... } """ @@ -109,12 +109,12 @@ def app_handler_ops(append=None, remove=None): (operation, handler_dict) = ('append', append) if append else ('remove', remove) for handler_name, handler_function in handler_dict.items(): handler = getattr(bpy.app.handlers, handler_name) - + # bpy.app.handlers..(function_name) getattr(handler, operation)(handler_function) # try: - # names = lambda d: [f" {k} -> {v.__name__}" for k, v in d.items()] + # names = lambda d: [f" {k} -> {v.__name__}" for k, v in d.items()] # listed = "\n".join(names(handler_dict)) # except Exception as err: # print('error while listing event handlers', err) @@ -146,5 +146,8 @@ def app_handler_ops(append=None, remove=None): # geom 2d tools "geom_2d.lin_alg", "geom_2d.dcel", "geom_2d.dissolve_mesh", "geom_2d.merge_mesh", "geom_2d.intersections", "geom_2d.make_monotone", "geom_2d.sort_mesh", "geom_2d.dcel_debugger", - "quad_grid" + "quad_grid", + # extra addons + "sv_extra_addons" + ] diff --git a/utils/context_managers.py b/utils/context_managers.py index 2527c12fff..436481b880 100644 --- a/utils/context_managers.py +++ b/utils/context_managers.py @@ -18,3 +18,19 @@ def sv_preferences(): addon = bpy.context.preferences.addons.get(sverchok.__name__) if addon and hasattr(addon, "preferences"): yield addon.preferences + +@contextmanager +def addon_preferences(addon_name): + ''' + use this whenever you need set or get content of the preferences class + usage + from sverchok.utils.context_managers import addon_preferences + ... + with addon_preferences(addon_name) as prefs: + print(prefs.) + + addon_name sverchok passing sverchok.__name__ + ''' + addon = bpy.context.preferences.addons.get(addon_name) + if addon and hasattr(addon, "preferences"): + yield addon.preferences diff --git a/utils/extra_categories.py b/utils/extra_categories.py index 8785fa261a..e6f2d0419f 100644 --- a/utils/extra_categories.py +++ b/utils/extra_categories.py @@ -17,6 +17,11 @@ # # ##### END GPL LICENSE BLOCK ##### +import os +from os.path import exists, isfile +import inspect +import webbrowser + extra_category_providers = [] def register_extra_category_provider(provider): @@ -40,3 +45,29 @@ def get_extra_categories(): result.extend(provider.get_categories()) return result +def external_node_docs(operator, node, kind): + + node_file_path = inspect.getfile(node.__class__) + separator = node_file_path.rfind('nodes') + local_file_path = os.path.join(node_file_path[0:separator], 'docs', node_file_path[separator:-2]+'rst') + + valid = exists(local_file_path) and isfile(local_file_path) + + if valid: + if kind == 'offline': + webbrowser.open(local_file_path) + else: + f_direc = node.__module__.split('.') + + extra_cats = extra_category_providers + for cat in extra_cats: + + if f_direc[0] in cat.identifier.lower(): + if hasattr(cat, 'docs'): + link = cat.docs+'/'+ f_direc[1]+'/'+ f_direc[2]+'/'+ f_direc[3] + '.rst' + print('Docs found ', cat.identifier, cat.docs) + webbrowser.open(link) + break + return {'FINISHED'} + operator.report({'ERROR'}, "Not available documentation") + return {'CANCELLED'} diff --git a/utils/sv_extra_addons.py b/utils/sv_extra_addons.py new file mode 100644 index 0000000000..edc6279715 --- /dev/null +++ b/utils/sv_extra_addons.py @@ -0,0 +1,183 @@ +# ##### 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 os +import urllib +import urllib.request +from zipfile import ZipFile +import addon_utils + + +import bpy +import sverchok +from sverchok.utils import sv_requests as requests + + + +EXTRA_ADDONS = { +'Sverchok Extra': { + 'name': 'sverchok_extra', + 'description': 'Experimental Nodes on Surfaces, Curves, Solids and Data managment', + 'archive_link':'https://github.com/portnov/sverchok-extra/archive/', + 'branch': 'master', + 'self_instalable': True + }, +'Sverchok Open3d': { + 'name': 'sverchok_open3d', + 'description': 'Point Cloud and Triangle Mesh nodes', + 'archive_link':'https://github.com/vicdoval/sverchok-open3d/archive/', + 'branch': 'master', + 'self_instalable': True + } +} + +ARCHIVE_LINK = 'https://github.com/nortikin/sverchok/archive/' +MASTER_BRANCH_NAME = 'master' + +def sv_get_local_path(): + script_paths = os.path.normpath(os.path.dirname(__file__)) + addons_path = os.path.split(os.path.dirname(script_paths))[0] + + return addons_path + +bl_addons_path = sv_get_local_path() +import importlib + + +def get_addons_folder(): + addons ={} + for p in bpy.utils.script_paths(): + p2 = os.path.join(p, 'addons') + if os.path.exists(p2): + addons.update({name: os.path.join(p2, name) for name in os.listdir(p2) if os.path.isdir(os.path.join(p2, name))}) + return addons + + +ADDON_LIST = get_addons_folder() + +def draw_extra_addons(layout): + for pretty_name in EXTRA_ADDONS: + addon = EXTRA_ADDONS[pretty_name] + + b = layout.box() + b.label(text=pretty_name) + if addon['name'] in ADDON_LIST: + addon_name = addon['name'] + elif addon['name'].replace('_', '-') in ADDON_LIST: + addon_name = addon['name'].replace('_', '-') + elif addon['name']+'-'+ addon['branch'] in ADDON_LIST: + addon_name = addon['name']+'-'+ addon['branch'] + elif addon['name'].replace('_', '-')+'-'+ addon['branch'] in ADDON_LIST: + addon_name = addon['name'].replace('_', '-')+'-'+ addon['branch'] + else: + addon_name = False + print(addon_name) + if addon_name: + loaded_default, loaded_state = addon_utils.check(addon_name) + if loaded_state: + op = b.operator('preferences.addon_disable') + op.module = addon_name + try: + module = importlib.import_module(addon['name']) + if hasattr(module, 'settings'): + if hasattr(module.settings, 'draw_in_sv_prefs'): + module.settings.draw_in_sv_prefs(b) + if hasattr(module.settings, 'update_addon_ui'): + row = b.row() + module.settings.update_addon_ui(row) + except ModuleNotFoundError: + addon_name = False + else: + op = b.operator('preferences.addon_enable') + op.module = addon_name + if not addon_name: + b.label(text=addon['description']) + op = b.operator('node.sverchok_download_addon', text=f'Download {pretty_name}') + op.master_branch_name = addon['branch'] + op.archive_link = addon['archive_link'] + +class SverchokDownloadExtraAddon(bpy.types.Operator): + """ Download Sverchok Extra Addon. After completion press F8 to reload addons or restart Blender """ + bl_idname = "node.sverchok_download_addon" + bl_label = "Sverchok update addon" + bl_options = {'REGISTER'} + + master_branch_name: bpy.props.StringProperty(default=MASTER_BRANCH_NAME) + archive_link: bpy.props.StringProperty(default=ARCHIVE_LINK) + + def execute(self, context): + global ADDON_LIST + os.curdir = bl_addons_path + os.chdir(os.curdir) + + # wm = bpy.context.window_manager should be this i think.... + wm = bpy.data.window_managers[0] + wm.progress_begin(0, 100) + wm.progress_update(20) + + # dload_archive_path, dload_archive_name = get_archive_path(self.addon_name) + + try: + branch_name = self.master_branch_name + branch_origin = self.archive_link + zipname = '{0}.zip'.format(branch_name) + url = branch_origin + zipname + + to_path = os.path.normpath(os.path.join(os.curdir, zipname)) + + print('> obtaining: [{0}]\n> sending to path: [{1}]'.format(url, to_path)) + # return {'CANCELLED'} + + file = requests.urlretrieve(url, to_path) + wm.progress_update(50) + except Exception as err: + self.report({'ERROR'}, "Cannot get archive from Internet") + print(err) + wm.progress_end() + return {'CANCELLED'} + + try: + err = 0 + ZipFile(file[0]).extractall(path=os.curdir, members=None, pwd=None) + wm.progress_update(90) + err = 1 + os.remove(file[0]) + err = 2 + wm.progress_update(100) + wm.progress_end() + bpy.ops.preferences.addon_refresh() + ADDON_LIST = get_addons_folder() + self.report({'INFO'}, "Unzipped, reload addons with F8 button, maybe restart Blender") + except: + self.report({'ERROR'}, "Cannot extract files errno {0}".format(str(err))) + wm.progress_end() + os.remove(file[0]) + return {'CANCELLED'} + + return {'FINISHED'} + + + +def register(): + + bpy.utils.register_class(SverchokDownloadExtraAddon) + + +def unregister(): + + bpy.utils.unregister_class(SverchokDownloadExtraAddon) diff --git a/utils/sv_update_utils.py b/utils/sv_update_utils.py index 7b56b643a9..543a712877 100644 --- a/utils/sv_update_utils.py +++ b/utils/sv_update_utils.py @@ -24,8 +24,16 @@ import bpy import sverchok from sverchok.utils import sv_requests as requests - +from sverchok.utils.context_managers import sv_preferences, addon_preferences # pylint: disable=w0141 +ADDON_NAME = sverchok.__name__ +COMMITS_LINK = 'https://api.github.com/repos/nortikin/sverchok/commits' + +SHA_FILE = 'sv_shafile.sv' +SHA_DOWNLOADED = 'sv_sha_downloaded.sv' + +ARCHIVE_LINK = 'https://github.com/nortikin/sverchok/archive/' +MASTER_BRANCH_NAME = 'master' def sv_get_local_path(): script_paths = os.path.normpath(os.path.dirname(__file__)) @@ -37,64 +45,64 @@ def sv_get_local_path(): -def get_sha_filepath(filename='sv_shafile.sv'): - """ the act if calling this function should produce a file called +def get_sha_filepath(filename=SHA_FILE, addon_name=ADDON_NAME): + """ the act if calling this function should produce a file called ../datafiles/sverchok/sv_shafile.sv (or sv_sha_downloaded.sv) the location of datafiles is common for Blender apps and defined internally for each OS. returns: the path of this file """ - dirpath = os.path.join(bpy.utils.user_resource('DATAFILES', path='sverchok', create=True)) + dirpath = os.path.join(bpy.utils.user_resource('DATAFILES', path=addon_name, create=True)) fullpath = os.path.join(dirpath, filename) - + # create fullpath if it doesn't exist if not os.path.exists(fullpath): with open(fullpath, 'w') as _: pass - + return fullpath -def latest_github_sha(): +def latest_github_sha(commits_link): """ get sha produced by latest commit on github sha = latest_github_sha() print(sha) """ - r = requests.get('https://api.github.com/repos/nortikin/sverchok/commits') + r = requests.get(commits_link) json_obj = r.json() return os.path.basename(json_obj[0]['commit']['url']) -def latest_local_sha(filename='sv_shafile.sv'): +def latest_local_sha(filename=SHA_FILE, addon_name=ADDON_NAME): """ get previously stored sha, if any. finding no local sha will return empty string reads from ../datafiles/sverchok/sv_shafile.sv """ - filepath = get_sha_filepath(filename) + filepath = get_sha_filepath(filename, addon_name=addon_name) with open(filepath) as p: return p.read() -def write_latest_sha_to_local(sha_value='', filename='sv_shafile.sv'): - """ write the content of sha_value to +def write_latest_sha_to_local(sha_value='', filename=SHA_FILE, addon_name=ADDON_NAME): + """ write the content of sha_value to ../datafiles/sverchok/sv_shafile.sv """ - filepath = get_sha_filepath(filename) + filepath = get_sha_filepath(filename, addon_name=addon_name) with open(filepath, 'w') as p: p.write(sha_value) -def make_version_sha(): +def make_version_sha(addon_name=ADDON_NAME): """ Generate a string to represent sverchok version including sha if found returns: 0.5.9.13 (a3bcd34) (or something like that) """ sha_postfix = '' - sha = latest_local_sha(filename='sv_sha_downloaded.sv') + sha = latest_local_sha(filename=SHA_DOWNLOADED, addon_name=addon_name) if sha: sha_postfix = " (" + sha[:7] + ")" @@ -108,38 +116,38 @@ class SverchokCheckForUpgradesSHA(bpy.types.Operator): bl_idname = "node.sverchok_check_for_upgrades_wsha" bl_label = "Sverchok check for new minor version" bl_options = {'REGISTER'} - + addon_name: bpy.props.StringProperty(default=ADDON_NAME) + commits_link: bpy.props.StringProperty(default=COMMITS_LINK) def execute(self, context): report = self.report - context.scene.sv_new_version = False - - local_sha = latest_local_sha() - latest_sha = latest_github_sha() - - # this logic can be simplified. - if not local_sha: - context.scene.sv_new_version = True - else: - if not local_sha == latest_sha: - context.scene.sv_new_version = True - - write_latest_sha_to_local(sha_value=latest_sha) - downloaded_sha = latest_local_sha(filename='sv_sha_downloaded.sv') - - if not downloaded_sha == latest_sha: - context.scene.sv_new_version = True - - if context.scene.sv_new_version: - report({'INFO'}, "New commits available, update at own risk ({0})".format(latest_sha[:7])) - else: - report({'INFO'}, "No new commits to download") + + local_sha = latest_local_sha(addon_name=self.addon_name) + latest_sha = latest_github_sha(self.commits_link) + + with addon_preferences(self.addon_name) as prefs: + prefs.available_new_version = False + if not local_sha: + prefs.available_new_version = True + else: + if not local_sha == latest_sha: + prefs.available_new_version = True + + write_latest_sha_to_local(sha_value=latest_sha, addon_name=self.addon_name) + downloaded_sha = latest_local_sha(filename=SHA_DOWNLOADED, addon_name=self.addon_name) + if not downloaded_sha == latest_sha: + prefs.available_new_version = True + + if prefs.available_new_version: + report({'INFO'}, "New commits available, update at own risk ({0})".format(latest_sha[:7])) + else: + report({'INFO'}, "No new commits to download") + return {'FINISHED'} -def get_archive_path(): - from sverchok.utils.context_managers import sv_preferences - with sv_preferences() as prefs: +def get_archive_path(addon_name): + with addon_preferences(addon_name) as prefs: return prefs.dload_archive_path, prefs.dload_archive_name @@ -148,6 +156,9 @@ class SverchokUpdateAddon(bpy.types.Operator): bl_idname = "node.sverchok_update_addon" bl_label = "Sverchok update addon" bl_options = {'REGISTER'} + addon_name: bpy.props.StringProperty(default=ADDON_NAME) + master_branch_name: bpy.props.StringProperty(default=MASTER_BRANCH_NAME) + archive_link: bpy.props.StringProperty(default=ARCHIVE_LINK) def execute(self, context): @@ -159,11 +170,11 @@ def execute(self, context): wm.progress_begin(0, 100) wm.progress_update(20) - dload_archive_path, dload_archive_name = get_archive_path() + dload_archive_path, dload_archive_name = get_archive_path(self.addon_name) try: - branch_name = dload_archive_name or 'master' - branch_origin = dload_archive_path or 'https://github.com/nortikin/sverchok/archive/' + branch_name = dload_archive_name or self.master_branch_name + branch_origin = dload_archive_path or self.archive_link zipname = '{0}.zip'.format(branch_name) url = branch_origin + zipname @@ -179,7 +190,7 @@ def execute(self, context): print(err) wm.progress_end() return {'CANCELLED'} - + try: err = 0 ZipFile(file[0]).extractall(path=os.curdir, members=None, pwd=None) @@ -187,7 +198,8 @@ def execute(self, context): err = 1 os.remove(file[0]) err = 2 - bpy.context.scene.sv_new_version = False + with addon_preferences(self.addon_name) as prefs: + prefs.available_new_version = False wm.progress_update(100) wm.progress_end() self.report({'INFO'}, "Unzipped, reload addons with F8 button, maybe restart Blender") @@ -198,8 +210,9 @@ def execute(self, context): return {'CANCELLED'} # write to both sv_sha_download and sv_shafile.sv - write_latest_sha_to_local(sha_value=latest_local_sha(), filename='sv_sha_downloaded.sv') - write_latest_sha_to_local(sha_value=latest_local_sha()) + lastest_local_sha = latest_local_sha(addon_name=self.addon_name) + write_latest_sha_to_local(sha_value=lastest_local_sha, filename=SHA_DOWNLOADED, addon_name=self.addon_name) + write_latest_sha_to_local(sha_value=lastest_local_sha, addon_name=self.addon_name) return {'FINISHED'} @@ -207,9 +220,10 @@ class SvPrintCommits(bpy.types.Operator): """ show latest commits in info panel, and terminal """ bl_idname = "node.sv_show_latest_commits" bl_label = "Show latest commits" + commits_link: bpy.props.StringProperty(default=COMMITS_LINK) def execute(self, context): - r = requests.get('https://api.github.com/repos/nortikin/sverchok/commits') + r = requests.get(self.commits_link) json_obj = r.json() for i in range(5): commit = json_obj[i]['commit'] From c6a2b211a43e76660ec5aa3f7753d9112f814223 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Wed, 17 Mar 2021 09:27:27 +0100 Subject: [PATCH 14/35] Vector interpolation recursived (#3974) Multilevel Recusion fasion. Output numpy option. End_ point property to avoid doubled begining-end vertex on cyclic geometries --- docs/nodes/vector/interpolation_mk3.rst | 42 +++++-- nodes/vector/interpolation_mk3.py | 152 ++++++++++++++---------- 2 files changed, 121 insertions(+), 73 deletions(-) diff --git a/docs/nodes/vector/interpolation_mk3.rst b/docs/nodes/vector/interpolation_mk3.rst index 754517063b..c1ecfbf2a9 100644 --- a/docs/nodes/vector/interpolation_mk3.rst +++ b/docs/nodes/vector/interpolation_mk3.rst @@ -1,5 +1,6 @@ Vector Interpolation ==================== + Functionality ------------- @@ -9,23 +10,41 @@ Performs linear or cubic spline interpolation based on input points by creating Input & Output -------------- -+--------+----------+-------------------------------------------+ -| socket | name | Description | -+========+==========+===========================================+ -| input | Vertices | Points to interpolate | -+--------+----------+-------------------------------------------+ -| input | t | Value to interpolate | -+--------+----------+-------------------------------------------+ -| output | Vertices | Interpolated points | -+--------+----------+-------------------------------------------+ - ++--------+----------+------------------------------------------------+ +| socket | name | Description | ++========+==============+============================================+ +| input | Vertices | Points to interpolate | ++--------+--------------+--------------------------------------------+ +| input | t | Value to interpolate | ++--------+--------------+--------------------------------------------+ +| output | Vertices | Interpolated points | ++--------+--------------+--------------------------------------------+ +| output | Tangent | Tangents at outputted vertices | ++--------+--------------+--------------------------------------------+ +| output | Tangent Norm | Normalized Tangents at outputted vertices | ++--------+--------------+--------------------------------------------+ + +Paramters +--------- + + - *Mode* : Interpolation method. Can be Linear or Cubic + - *Cyclic*: Treat the input vertices as a cyclic path. + - *Int Range*: When activated the node will expect a Interger Value in the 't' input and will create a range from 0 to 1 with the inputted steps. + - *End Point*: (Only when Int Range is activated) If active the generated range will exclude 1. Usefull when the value 0 and 1 of the interpolation is the same + +Extra Parameters +---------------- + + - *Knot Mode*: Used for different cubic interpolations. Can be 'Manhattan', 'Euclidan', 'Points' and 'Chebyshev' + - *List Match*: How List should be matched + - *Ouput Numpy*: Ouputs numpy arrays in stead of regular python lists (makes node faster) Examples -------- .. image:: https://cloud.githubusercontent.com/assets/619340/4185874/ca99927c-375b-11e4-8cc8-451456bfb194.png :alt: interpol-simple.png -Sine interpolated from 5 points. The input points are shown with numbers. +Sine interpolated from 5 points. The input points are shown with numbers. .. image:: https://cloud.githubusercontent.com/assets/619340/4185875/ca9f56ee-375b-11e4-83fd-a746c8cc690b.png :alt: interpol-surface.png @@ -36,4 +55,3 @@ Notes ------- The node doesn't extrapolate. Values outside of ``[0, 1]`` are ignored. -It doesn't support cyclic interpolation (TODO). diff --git a/nodes/vector/interpolation_mk3.py b/nodes/vector/interpolation_mk3.py index d6c982d277..809d31bd7c 100644 --- a/nodes/vector/interpolation_mk3.py +++ b/nodes/vector/interpolation_mk3.py @@ -22,19 +22,24 @@ from bpy.props import EnumProperty, FloatProperty, BoolProperty, IntProperty from sverchok.node_tree import SverchCustomTreeNode +from sverchok.utils.nodes_mixins.recursive_nodes import SvRecursiveNode + from sverchok.data_structure import updateNode, dataCorrect, repeat_last from sverchok.utils.geom import LinearSpline, CubicSpline -def make_range(number): +def make_range(number, end_point): if number in {0, 1, 2} or number < 0: return [0.0] - return np.linspace(0.0, 1.0, num=number, endpoint=True).tolist() + return np.linspace(0.0, 1.0, num=number, endpoint=end_point).tolist() -class SvInterpolationNodeMK3(bpy.types.Node, SverchCustomTreeNode): - '''Advanced Vect. Interpolation''' +class SvInterpolationNodeMK3(bpy.types.Node, SverchCustomTreeNode, SvRecursiveNode): + """ + Triggers: Interp. Vector List + Tooltip: Interpolate a list of vertices in a linear or cubic fashion + """ bl_idname = 'SvInterpolationNodeMK3' bl_label = 'Vector Interpolation' bl_icon = 'OUTLINER_OB_EMPTY' @@ -44,9 +49,21 @@ def wrapped_updateNode(self, context): self.inputs['Interval'].prop_name = 'int_in' if self.infer_from_integer_input else 't_in' self.process_node(context) - t_in: FloatProperty(name="t", default=.5, min=0, max=1, precision=5, update=updateNode) - int_in: IntProperty(name="int in", default=10, min=3, update=updateNode) - h: FloatProperty(default=.001, precision=5, update=updateNode) + t_in: FloatProperty( + name="t", + default=.5, + min=0, max=1, + precision=5, + update=updateNode) + int_in: IntProperty( + name="int in", + default=10, + min=3, + update=updateNode) + h: FloatProperty( + default=.001, + precision=5, + update=updateNode) modes = [('SPL', 'Cubic', "Cubic Spline", 0), ('LIN', 'Linear', "Linear Interpolation", 1)] @@ -58,10 +75,30 @@ def wrapped_updateNode(self, context): ('CHEBYSHEV', 'Chebyshev', "Chebyshev distance", 3)] knot_mode: EnumProperty( - name='Knot Mode', default="DISTANCE", items=knot_modes, update=updateNode) - - is_cyclic: BoolProperty(name="Cyclic", default=False, update=updateNode) - infer_from_integer_input: BoolProperty(name="IntRange", default=False, update=wrapped_updateNode) + name='Knot Mode', + default="DISTANCE", + items=knot_modes, + update=updateNode) + + is_cyclic: BoolProperty( + name="Cyclic", + default=False, + update=updateNode) + + infer_from_integer_input: BoolProperty( + name="Int Range", + default=False, + update=wrapped_updateNode) + + end_point: BoolProperty( + name="End Point", + default=True, + update=updateNode) + + output_numpy: BoolProperty( + name='Output NumPy', + description='Output NumPy arrays', + default=False, update=updateNode) def sv_init(self, context): self.inputs.new('SvVerticesSocket', 'Vertices') @@ -74,70 +111,63 @@ def draw_buttons(self, context, layout): layout.prop(self, 'mode', expand=True) row = layout.row(align=True) row.prop(self, 'is_cyclic', toggle=True) - row.prop(self, 'infer_from_integer_input',toggle=True) + row.prop(self, 'infer_from_integer_input', toggle=True) + if self.infer_from_integer_input: + layout.prop(self, 'end_point') + def rclick_menu(self, context, layout): + layout.prop_menu_enum(self, "list_match", text="List Match") def draw_buttons_ext(self, context, layout): + layout.prop(self, 'list_match') + self.draw_buttons(context, layout) layout.prop(self, 'h') layout.prop(self, 'knot_mode') + layout.prop(self, 'output_numpy') - def process(self): + def pre_setup(self): + self.inputs['Vertices'].is_mandatory = True + if self.infer_from_integer_input: + self.inputs['Interval'].nesting_level = 1 + self.inputs['Interval'].pre_processing = 'ONE_ITEM' + else: + self.inputs['Interval'].nesting_level = 2 + self.inputs['Interval'].pre_processing = 'NONE' - if not any((s.is_linked for s in self.outputs)): - return + def process_data(self, params): + verts, t_ins = params calc_tanget = self.outputs['Tanget'].is_linked or self.outputs['Unit Tanget'].is_linked norm_tanget = self.outputs['Unit Tanget'].is_linked - h = self.h - - if self.inputs['Vertices'].is_linked: - verts = self.inputs['Vertices'].sv_get() - verts = dataCorrect(verts) - t_ins = self.inputs['Interval'].sv_get() - + verts_out, tanget_out, norm_tanget_out = [], [], [] + for v, t_in in zip(verts, t_ins): if self.infer_from_integer_input: - t_ins = [make_range(int(value)) for value in t_ins[0]] - - if len(t_ins) > len(verts): - new_verts = verts[:] - for i in range(len(t_ins) - len(verts)): - new_verts.append(verts[-1]) - verts = new_verts - - verts_out = [] - tanget_out = [] - norm_tanget_out = [] - for v, t_in in zip(verts, repeat_last(t_ins)): - + t_corr = make_range(int(t_in), self.end_point) + else: t_corr = np.array(t_in).clip(0, 1) - if self.mode == 'LIN': - spline = LinearSpline(v, metric = self.knot_mode, is_cyclic = self.is_cyclic) - out = spline.eval(t_corr) - verts_out.append(out.tolist()) - - if calc_tanget: - tanget_out.append(spline.tangent(t_corr).tolist()) - - else: # SPL - spline = CubicSpline(v, metric = self.knot_mode, is_cyclic = self.is_cyclic) - out = spline.eval(t_corr) - verts_out.append(out.tolist()) - if calc_tanget: - tangent = spline.tangent(t_corr, h) - if norm_tanget: - norm = np.linalg.norm(tangent, axis=1) - norm_tanget_out.append((tangent / norm[:, np.newaxis]).tolist()) - tanget_out.append(tangent.tolist()) - - outputs = self.outputs - if outputs['Vertices'].is_linked: - outputs['Vertices'].sv_set(verts_out) - if outputs['Tanget'].is_linked: - outputs['Tanget'].sv_set(tanget_out) - if outputs['Unit Tanget'].is_linked: - outputs['Unit Tanget'].sv_set(norm_tanget_out) + if self.mode == 'LIN': + spline = LinearSpline(v, metric=self.knot_mode, is_cyclic=self.is_cyclic) + out = spline.eval(t_corr) + verts_out.append(out if self.output_numpy else out.tolist()) + + if calc_tanget: + tanget_out.append(spline.tangent(t_corr) if self.output_numpy else spline.tangent(t_corr).tolist()) + + else: # SPL + spline = CubicSpline(v, metric=self.knot_mode, is_cyclic=self.is_cyclic) + out = spline.eval(t_corr) + verts_out.append(out if self.output_numpy else out.tolist()) + if calc_tanget: + tangent = spline.tangent(t_corr, h) + if norm_tanget: + norm = np.linalg.norm(tangent, axis=1) + tangent_norm = tangent / norm[:, np.newaxis] + norm_tanget_out.append(tangent_norm if self.output_numpy else tangent_norm.tolist()) + tanget_out.append(tangent if self.output_numpy else tangent.tolist()) + + return verts_out, tanget_out, norm_tanget_out def register(): From fe5a27fc21a7ca3242215a9ef8751c2c76bfbc93 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Wed, 17 Mar 2021 22:03:55 +0100 Subject: [PATCH 15/35] Mesh Select By normals bugfix (#3975) --- nodes/analyzer/mesh_select_mk2.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nodes/analyzer/mesh_select_mk2.py b/nodes/analyzer/mesh_select_mk2.py index afc9fc9572..4ed7c1f72d 100644 --- a/nodes/analyzer/mesh_select_mk2.py +++ b/nodes/analyzer/mesh_select_mk2.py @@ -152,7 +152,7 @@ def by_cylinder(vertices, center, radius, direction): return out_verts_mask def by_normal(vertices, edges, faces, percent, direction): - vertex_normals, face_normals = calc_mesh_normals(vertices, edges, faces) + face_normals, _ = calc_mesh_normals(vertices, edges, faces) np_verts = np.array(face_normals) np_dir = np.array(direction) np_dir, np_percent = numpy_match_long_repeat([np_dir, np.array(percent)]) @@ -163,7 +163,7 @@ def by_normal(vertices, edges, faces, percent, direction): return out_face_mask def by_outside(vertices, edges, faces, percent, center): - vertex_normals, face_normals = calc_mesh_normals(vertices, edges, faces) + face_normals, _ = calc_mesh_normals(vertices, edges, faces) center = Vector(center[0]) def get_center(face): From 9533f258aea83a0bdd4dc51722249793e856bad4 Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Thu, 18 Mar 2021 13:45:00 +0100 Subject: [PATCH 16/35] add image of useful usage --- docs/nodes/number/easing.rst | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/nodes/number/easing.rst b/docs/nodes/number/easing.rst index 9aa52718a3..e8bd747c62 100644 --- a/docs/nodes/number/easing.rst +++ b/docs/nodes/number/easing.rst @@ -12,8 +12,11 @@ https://zeffii.github.io/docs_easing_node/ the original development thread is here: https://github.com/nortikin/sverchok/issues/695 -You can see kind of curve, because we draw it to the right of the node. -add the node to the tree, and scroll through the list of options. +You can see the kind of easing curve because we draw it to the right of the node. +Add the node to the tree and connect something useful to the input, and scroll through the list of easing curve types. + +|visual_viewport| -.. |visual_easing| image:: https://user-images.githubusercontent.com/619340/82451459-51779580-9aae-11ea-9dce-9a4dc1236014.png +.. |visual_easing| image:: https://user-images.githubusercontent.com/619340/82451459-51779580-9aae-11ea-9dce-9a4dc1236014.png +.. |visual_viewport| image:: https://user-images.githubusercontent.com/619340/111627552-76808600-87ef-11eb-9929-f9295d766623.png From 513dd849ffd8d916195a3401e319e0c0b7567361 Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Thu, 18 Mar 2021 20:55:50 +0100 Subject: [PATCH 17/35] add poll to node.sv_quicklink_new_node_input (#3977) --- core/sockets.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/sockets.py b/core/sockets.py index 4c23aacd5b..e0192a76c5 100644 --- a/core/sockets.py +++ b/core/sockets.py @@ -1232,6 +1232,10 @@ class SvLinkNewNodeInput(bpy.types.Operator): bl_idname = "node.sv_quicklink_new_node_input" bl_label = "Add a new node to the left" + @classmethod + def poll(cls, context): + return hasattr(context, 'socket') + def execute(self, context): tree, node, socket = context.node.id_data, context.node, context.socket From e6260de826facc314d56931a4676ba12fd07c391 Mon Sep 17 00:00:00 2001 From: DolphinDream Date: Wed, 17 Mar 2021 22:34:36 -0400 Subject: [PATCH 18/35] Add feature to PointInside node to partition points in inside/outside Add "Outside Points" socket to output the points outside the mesh. Renamed the original output vert socekt as "Inside Points" Note: due to renaming and adding extra socket this is a semi-hack implementation to avoid having to create an MK2 version. --- nodes/analyzer/points_inside_mesh.py | 30 ++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/nodes/analyzer/points_inside_mesh.py b/nodes/analyzer/points_inside_mesh.py index 38f212276f..b84652f8d7 100644 --- a/nodes/analyzer/points_inside_mesh.py +++ b/nodes/analyzer/points_inside_mesh.py @@ -37,6 +37,7 @@ def generate_random_unitvectors(): seed_set(140230) return [random_unit_vector() for i in range(6)] + directions = generate_random_unitvectors() @@ -118,6 +119,7 @@ def get_points_in_mesh_2D(verts, faces, points, normal, eps=0.0): mask_totals.append(inside) return mask_totals + def get_points_in_mesh_2D_clip(verts, faces, points, normal, clip_distance, eps=0.0, matchig_method='REPEAT'): mask_totals = [] bvh = BVHTree.FromPolygons(verts, faces, all_triangles=False, epsilon=eps) @@ -138,11 +140,11 @@ def get_points_in_mesh_2D_clip(verts, faces, points, normal, clip_distance, eps= mask_totals.append(inside) return mask_totals + class SvPointInside(bpy.types.Node, SverchCustomTreeNode): """ Triggers: Mask verts with geom Tooltip: Mask points inside geometry in 2D or 3D - """ bl_idname = 'SvPointInside' bl_label = 'Points Inside Mesh' @@ -159,7 +161,7 @@ def update_sockets(self, context): self.inputs.remove(self.inputs['Plane Normal']) if self.dimensions_mode == '2D' and self.limit_max_dist and len(self.inputs) < 5: self.inputs.new('SvStringsSocket', 'Max Dist').prop_name = 'max_dist' - elif self.dimensions_mode == '3D' or not self.limit_max_dist: + elif self.dimensions_mode == '3D' or not self.limit_max_dist: if 'Max Dist' in self.inputs: self.inputs.remove(self.inputs['Max Dist']) @@ -172,9 +174,11 @@ def update_sockets(self, context): name='Normal', description='Plane Normal', size=3, default=(0, 0, 1), update=updateNode) + max_dist: FloatProperty( name='Max Distance', description='Maximum valid distance', default=10.0, update=updateNode) + limit_max_dist: BoolProperty( name='Limit Proyection', description='Limit projection distance', default=False, update=update_sockets) @@ -208,11 +212,15 @@ def update_sockets(self, context): update=updateNode) def sv_init(self, context): + self.width = 160 self.inputs.new('SvVerticesSocket', 'verts') self.inputs.new('SvStringsSocket', 'faces') self.inputs.new('SvVerticesSocket', 'points') self.outputs.new('SvStringsSocket', 'mask') - self.outputs.new('SvVerticesSocket', 'verts') + # self.outputs.new('SvVerticesSocket', 'Inside Vertices') # to be used in MK2 + s = self.outputs.new('SvVerticesSocket', 'verts') # to be removed in MK2 + s.label = "Inside Vertices" # to be removed in MK2 + self.outputs.new('SvVerticesSocket', 'Outside Vertices') self.update_sockets(context) def draw_buttons(self, context, layout): @@ -251,6 +259,7 @@ def get_data(self): # general options params.append(cycle([self.epsilon_bvh])) # special options and main_func + if self.dimensions_mode == '3D': if self.selected_algo == 'algo_1': main_func = are_inside @@ -280,10 +289,19 @@ def process(self): self.outputs['mask'].sv_set(mask) if self.outputs['verts'].is_linked: - out_verts = [] + # if self.outputs['Inside Vertices'].is_linked: # to be used in MK2 + verts = [] for masked, pts_in in zip(mask, params[2]): - out_verts.append([p for m, p in zip(masked, pts_in) if m]) - self.outputs['verts'].sv_set(out_verts) + verts.append([p for m, p in zip(masked, pts_in) if m]) + self.outputs['verts'].sv_set(verts) # to be removed in MK2 + # self.outputs['Inside Vertices'].sv_set(verts) # to be used in MK2 + + if 'Outside Vertices' in self.outputs: # to be removed in MK2 + if self.outputs['Outside Vertices'].is_linked: + verts = [] + for masked, pts_in in zip(mask, params[2]): + verts.append([p for m, p in zip(masked, pts_in) if not m]) + self.outputs['Outside Vertices'].sv_set(verts) def register(): From c49e7e9185b40740d81d9edb0aff5f218d46fcdf Mon Sep 17 00:00:00 2001 From: DolphinDream Date: Thu, 18 Mar 2021 17:44:39 -0400 Subject: [PATCH 19/35] Bump Matrix Out node to MK2 .. adding same features in Quaternion Out node - The new node now has modes that let you select the format of output the rotation component (Quaternion, Axis-Angle and Euler Angles). - Also the node utilizes the Angle Units feature so the angle (by default set to DEGREES) can be changed to other units via Property Panel. - Add documentation --- docs/nodes/matrix/matrix_index.rst | 2 +- docs/nodes/matrix/matrix_out.rst | 2 - docs/nodes/matrix/matrix_out_mk2.rst | 79 +++++++++++ index.md | 4 +- json_examples/Shapes/Donut.json | 8 +- nodes/matrix/matrix_out_mk2.py | 156 ++++++++++++++++++++++ {nodes/matrix => old_nodes}/matrix_out.py | 6 + 7 files changed, 248 insertions(+), 9 deletions(-) delete mode 100644 docs/nodes/matrix/matrix_out.rst create mode 100644 docs/nodes/matrix/matrix_out_mk2.rst create mode 100644 nodes/matrix/matrix_out_mk2.py rename {nodes/matrix => old_nodes}/matrix_out.py (90%) diff --git a/docs/nodes/matrix/matrix_index.rst b/docs/nodes/matrix/matrix_index.rst index 879b209567..a60b1f8f1f 100644 --- a/docs/nodes/matrix/matrix_index.rst +++ b/docs/nodes/matrix/matrix_index.rst @@ -11,7 +11,7 @@ Matrix input interpolation matrix_in_mk4 - matrix_out + matrix_out_mk2 matrix_math matrix_track_to shear diff --git a/docs/nodes/matrix/matrix_out.rst b/docs/nodes/matrix/matrix_out.rst deleted file mode 100644 index 189d4df369..0000000000 --- a/docs/nodes/matrix/matrix_out.rst +++ /dev/null @@ -1,2 +0,0 @@ -Matrix In & Out -=============== \ No newline at end of file diff --git a/docs/nodes/matrix/matrix_out_mk2.rst b/docs/nodes/matrix/matrix_out_mk2.rst new file mode 100644 index 0000000000..466490df63 --- /dev/null +++ b/docs/nodes/matrix/matrix_out_mk2.rst @@ -0,0 +1,79 @@ +Matrix Out +========== + +Functionality +------------- + +Matrix Out node converts a 4x4 matrix into its location, rotation and scale components. The rotation component can be represented in various formats: quaternion, axis-angle or Euler angles. + + +Modes +----- + +The available **Modes** are: EULER, AXIS-ANGLE & QUATERNION. These specify +how the output *rotation component* of the matrix is going to be represented. + +Regardless of the selected mode the node always outputs the **Location** and the **Scale** components of the 4x4 matrix. + ++------------+---------------------------------------------------------------------------------------+ +| Mode | Description | ++============+=======================================================================================+ +| EULER | Converts the rotation component of the matrix into X, Y, Z angles | +| | corresponding to the Euler rotation given an Euler rotation order. [1,2] | ++------------+---------------------------------------------------------------------------------------+ +| AXIS-ANGLE | Converts the rotation component of the matrix into the Axis & Angle of rotation. [1] | ++------------+---------------------------------------------------------------------------------------+ +| QUATERNION | Converts the rotation component of the matrix into a quaternion. | ++------------+---------------------------------------------------------------------------------------+ + +Notes: +[1] : For EULER and AXIS-ANGLE modes, which output angles, the node provides an angle unit conversion to let the angle output values be converted to Radians, Degrees or Unities (0-1 range). +[2] : For EULER mode the node provides the option to select the Euler rotation order: "XYZ", "XZY", "YXZ", "YZX", "ZXY" or "ZYX". + + +Inputs +------ + +**Matrix** +The node takes a list of (one or more) matrices and based on the selected mode +it converts the matrices into the corresponding components. + + +Extra Parameters +---------------- +A set of extra parameters are available on the property panel. +These parameters do not receive external input. + ++-----------------+----------+---------+--------------------------------------+ +| Extra Param | Type | Default | Description | ++=================+==========+=========+======================================+ +| **Angle Units** | Enum | DEGREES | Interprets the angle values based on | +| | RADIANS | | the selected angle units: | +| | DEGREES | | Radians = 0 - 2pi | +| | UNITIES | | Degrees = 0 - 360 | +| | | | Unities = 0 - 1 | ++-----------------+----------+---------+--------------------------------------+ + + +Outputs +======= + +Based on the selected **Mode** the node makes available the corresponding output sockets: + ++------------+-----------------------------------------+ +| Mode | Output Sockets (types) | ++============+=========================================+ +| | Location and Scale components (vectors) | ++------------+-----------------------------------------+ +| EULER | X, Y, Z angles (floats) [1] | ++------------+-----------------------------------------+ +| AXIS-ANGLE | Axis (vector) & Angle (float) [1] | ++------------+-----------------------------------------+ +| QUATERNION | Quaternion | ++------------+-----------------------------------------+ + +Notes: +[1] : The angles are by default in DEGREES. The Property Panel has option to set angle units as: RADIANS, DEGREES or UNITIES. + +The node only generates the conversion when the output sockets are connected. + diff --git a/index.md b/index.md index 4702c9e743..aed0944b3f 100644 --- a/index.md +++ b/index.md @@ -527,7 +527,7 @@ ## Matrix SvMatrixInNodeMK4 - MatrixOutNode + SvMatrixOutNodeMK2 SvMatrixApplyJoinNode SvIterateNode MatrixDeformNode @@ -725,7 +725,7 @@ SvSelectMeshVerts SvSetCustomMeshNormals --- - SvCombinatoricsNode + SvCombinatoricsNode ## Alpha Nodes SvBManalyzinNode diff --git a/json_examples/Shapes/Donut.json b/json_examples/Shapes/Donut.json index 8c4c93987a..cd28ca2325 100644 --- a/json_examples/Shapes/Donut.json +++ b/json_examples/Shapes/Donut.json @@ -5,7 +5,7 @@ "Matrix In": "Tangent Move", "Matrix Math": "Tangent Move", "Matrix Track To": "Tangent Move", - "Matrix out": "Tangent Move", + "Matrix Out": "Tangent Move", "Mesh viewer": "Output", "Move": "Bottom Flat", "Move.002": "Tangent Move", @@ -139,8 +139,8 @@ }, "width": 140.0 }, - "Matrix out": { - "bl_idname": "MatrixOutNode", + "Matrix Out": { + "bl_idname": "SvMatrixOutNodeMK2", "height": 100.0, "hide": false, "label": "", @@ -860,7 +860,7 @@ [ "Matrix Math", 0, - "Matrix out", + "Matrix Out", 0 ], [ diff --git a/nodes/matrix/matrix_out_mk2.py b/nodes/matrix/matrix_out_mk2.py new file mode 100644 index 0000000000..3897ab4508 --- /dev/null +++ b/nodes/matrix/matrix_out_mk2.py @@ -0,0 +1,156 @@ +# ##### 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 +from bpy.props import EnumProperty +from sverchok.node_tree import SverchCustomTreeNode +from sverchok.data_structure import updateNode +from sverchok.utils.sv_transform_helper import AngleUnits, SvAngleHelper +from mathutils import Matrix + + +mode_items = [ + ("QUATERNION", "Quaternion", "Convert rotation component of the matrix into Quaternion", 0), + ("EULER", "Euler Angles", "Convert rotation component of the matrix into Euler angles", 1), + ("AXISANGLE", "Axis Angle", "Convert rotation component of the matrix into Axis & Angle", 2), +] + +output_sockets = { + "QUATERNION": ["Quaternion"], + "EULER": ["Angle X", "Angle Y", "Angle Z"], + "AXISANGLE": ["Angle", "Axis"], +} + + +class SvMatrixOutNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvAngleHelper): + """ + Triggers: Matrix, Out + Tooltip: Convert a matrix into its location, scale & rotation components + """ + bl_idname = 'SvMatrixOutNodeMK2' + bl_label = 'Matrix Out' + bl_icon = 'OUTLINER_OB_EMPTY' + sv_icon = 'SV_MATRIX_OUT' + + def migrate_from(self, old_node): + ''' Migration from old nodes (attributes mapping) ''' + if old_node.bl_idname == "MatrixOutNode": + self.angle_units = AngleUnits.DEGREES + self.last_angle_units = AngleUnits.DEGREES + + def migrate_props_pre_relink(self, old_node): + self.update_sockets() + + def rclick_menu(self, context, layout): + layout.prop(self, "flat_output", text="Flat Output", expand=False) + self.node_replacement_menu(context, layout) + + def update_sockets(self): + # hide all the mode related output sockets + for k, names in output_sockets.items(): + for name in names: + self.outputs[name].hide_safe = True + + # show the output sockets specific to the current mode + for name in output_sockets[self.mode]: + self.outputs[name].hide_safe = False + + def update_mode(self, context): + self.update_sockets() + updateNode(self, context) + + mode : EnumProperty( + name='Mode', description='The output component format of the Matrix', + items=mode_items, default="AXISANGLE", update=update_mode) + + def sv_init(self, context): + self.inputs.new('SvMatrixSocket', "Matrix") + # translation and scale outputs + self.outputs.new('SvVerticesSocket', "Location") + self.outputs.new('SvVerticesSocket', "Scale") + # quaternion output + self.outputs.new('SvQuaternionSocket', "Quaternion") + # euler angles ouputs + self.outputs.new('SvStringsSocket', "Angle X") + self.outputs.new('SvStringsSocket', "Angle Y") + self.outputs.new('SvStringsSocket', "Angle Z") + # axis-angle output + self.outputs.new('SvVerticesSocket', "Axis") + self.outputs.new('SvStringsSocket', "Angle") + + self.update_mode(context) + + def draw_buttons(self, context, layout): + layout.prop(self, "mode", expand=False, text="") + + if self.mode == "EULER": + self.draw_angle_euler_buttons(context, layout) + + def draw_buttons_ext(self, context, layout): + if self.mode in {"EULER", "AXISANGLE"}: + self.draw_angle_units_buttons(context, layout) + + def process(self): + outputs = self.outputs + if not any(s.is_linked for s in outputs): + return + + input_M = self.inputs['Matrix'].sv_get() + + # decompose matrices into: Translation, Rotation (quaternion) and Scale + location_list = [] + quaternion_list = [] # rotations (as quaternions) + scale_list = [] + for m in input_M: + T, R, S = m.decompose() + location_list.append(list(T)) + quaternion_list.append(R) + scale_list.append(list(S)) + + outputs["Location"].sv_set(location_list) + outputs["Scale"].sv_set(scale_list) + + if self.mode == "QUATERNION": + self.outputs['Quaternion'].sv_set(quaternion_list) + + elif self.mode == "EULER": + # conversion factor from radians to the current angle units + au = self.angle_conversion_factor(AngleUnits.RADIANS, self.angle_units) + for i, name in enumerate("XYZ"): + if outputs["Angle " + name].is_linked: + angles = [q.to_euler(self.euler_order)[i] * au for q in quaternion_list] + outputs["Angle " + name].sv_set([angles]) + + elif self.mode == "AXISANGLE": + if outputs['Axis'].is_linked: + axis_list = [tuple(q.axis) for q in quaternion_list] + outputs['Axis'].sv_set([axis_list]) + + if outputs['Angle'].is_linked: + # conversion factor from radians to the current angle units + au = self.angle_conversion_factor(AngleUnits.RADIANS, self.angle_units) + angle_list = [q.angle * au for q in quaternion_list] + outputs['Angle'].sv_set([angle_list]) + + +def register(): + bpy.utils.register_class(SvMatrixOutNodeMK2) + + +def unregister(): + bpy.utils.unregister_class(SvMatrixOutNodeMK2) diff --git a/nodes/matrix/matrix_out.py b/old_nodes/matrix_out.py similarity index 90% rename from nodes/matrix/matrix_out.py rename to old_nodes/matrix_out.py index 5c55f6130b..8db528e6b8 100644 --- a/nodes/matrix/matrix_out.py +++ b/old_nodes/matrix_out.py @@ -30,6 +30,12 @@ class MatrixOutNode(bpy.types.Node, SverchCustomTreeNode): bl_icon = 'OUTLINER_OB_EMPTY' sv_icon = 'SV_MATRIX_OUT' + replacement_nodes = [('SvMatrixOutNodeMK2', None, dict(Rotation="Axis"))] + + def rclick_menu(self, context, layout): + layout.prop(self, "flat_output", text="Flat Output", expand=False) + self.node_replacement_menu(context, layout) + def sv_init(self, context): self.outputs.new('SvVerticesSocket', "Location") self.outputs.new('SvVerticesSocket', "Scale") From 82af1bf6a406520f5210cd961b67b9afd71754fc Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Fri, 19 Mar 2021 18:16:58 +0100 Subject: [PATCH 20/35] Nearest Point on Mesh (#3982) * Nearest Point on Mesh * docs examples * cleaining * docs fixing --- docs/nodes/analyzer/analyzer_index.rst | 1 + docs/nodes/analyzer/nearest_point_on_mesh.rst | 53 ++++++ index.md | 2 +- nodes/analyzer/nearest_point_on_mesh.py | 167 ++++++++++++++++++ .../analyzer => old_nodes}/bvh_nearest_new.py | 2 +- tests/docs_tests.py | 1 - utils/bvh_tree.py | 20 +++ 7 files changed, 243 insertions(+), 3 deletions(-) create mode 100644 docs/nodes/analyzer/nearest_point_on_mesh.rst create mode 100644 nodes/analyzer/nearest_point_on_mesh.py rename {nodes/analyzer => old_nodes}/bvh_nearest_new.py (97%) create mode 100644 utils/bvh_tree.py diff --git a/docs/nodes/analyzer/analyzer_index.rst b/docs/nodes/analyzer/analyzer_index.rst index 3c97e4a51b..c2f2e0e683 100644 --- a/docs/nodes/analyzer/analyzer_index.rst +++ b/docs/nodes/analyzer/analyzer_index.rst @@ -27,6 +27,7 @@ Analyzers select_similar proportional normals + nearest_point_on_mesh bvh_overlap_polys object_insolation path_length_2 diff --git a/docs/nodes/analyzer/nearest_point_on_mesh.rst b/docs/nodes/analyzer/nearest_point_on_mesh.rst new file mode 100644 index 0000000000..d076b69f4c --- /dev/null +++ b/docs/nodes/analyzer/nearest_point_on_mesh.rst @@ -0,0 +1,53 @@ +Nearest Point on Mesh +===================== + +Functionality +------------- + +Finds the closest point in a specified mesh. + +Inputs +------ + +Vertices, Faces: Base mesh for the search +Points: Points to query +Distance: Maximum query distance (only for Nearest in Range mode) + +Parameters +---------- + +*Mode*: + - Nearest: Nearest point on the mesh surface + - Nearest in range: Nearest points on the mesh within a range (one per face) + +*Flat Output*: (only in Nearest in Range) Flattens the list of every vertex to have only a list for every inputted list. + +*Safe Check*: (in N-Panel) When disabled polygon indices referring to unexisting points will crash Blender. Not performing this check makes node faster + +Outputs +------- + +*Location*: Position of the closest point in the mesh + +*Normal*: mesh normal at closets point + +*Index*: Face index of the closest point + +*Distance*: Distance from the queried point to the closest point + +Examples +-------- + +Used as skin-wrap modifier: + +.. image:: https://user-images.githubusercontent.com/10011941/111774583-f3733480-88af-11eb-9559-78392166b00c.png + + +Determine which polygons are nearer than a distance: + +.. image:: https://user-images.githubusercontent.com/10011941/111812010-f255fd80-88d7-11eb-8f48-de67716dd93a.png + + +Placing objects on mesh: + +.. image:: https://user-images.githubusercontent.com/10011941/111810852-bf5f3a00-88d6-11eb-9cff-eb2a6c18a01a.png diff --git a/index.md b/index.md index aed0944b3f..6a77bc08a0 100644 --- a/index.md +++ b/index.md @@ -284,6 +284,7 @@ SvKDTreeNodeMK2 SvKDTreeEdgesNodeMK2 SvKDTreePathNode + SvNearestPointOnMeshNode SvBvhOverlapNodeNew SvMeshFilterNode SvEdgeAnglesNode @@ -715,7 +716,6 @@ SvSampleUVColorNode SvSubdivideLiteNode SvExtrudeSeparateLiteNode - SvBVHnearNewNode SvUnsubdivideNode SvLimitedDissolveMK2 SvArmaturePropsNode diff --git a/nodes/analyzer/nearest_point_on_mesh.py b/nodes/analyzer/nearest_point_on_mesh.py new file mode 100644 index 0000000000..e61e2099f7 --- /dev/null +++ b/nodes/analyzer/nearest_point_on_mesh.py @@ -0,0 +1,167 @@ +# ##### 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 ##### +from itertools import cycle +import bpy +from bpy.props import EnumProperty, BoolProperty +from sverchok.node_tree import SverchCustomTreeNode +from sverchok.data_structure import updateNode +from sverchok.utils.bvh_tree import bvh_tree_from_polygons +from sverchok.utils.nodes_mixins.recursive_nodes import SvRecursiveNode + +def take_third(elem): + return elem[2] + +def append_multiple(container, data): + for r, rl in zip(container, data): + r.append(rl) + +def translate_data(data): + try: + return data[0][:], data[1][:], data[2], data[3] + except TypeError: + return [], [], -1, -1 + + +def svmesh_to_bvh_lists(vsock, fsock, safe_check): + for vertices, polygons in zip(vsock, fsock): + yield bvh_tree_from_polygons(vertices, polygons, all_triangles=False, epsilon=0.0, safe_check=safe_check) + +def nearest_point_in_mesh(verts, faces, points, safe_check=True): + '''Expects multiple objects lists (level of nesting 3)''' + output = [[] for i in range(4)] + for bvh, pts in zip(svmesh_to_bvh_lists(verts, faces, safe_check), points): + res_local = list(zip(*[translate_data(bvh.find_nearest(P)) for P in pts])) + append_multiple(output, res_local) + + return output + +def nearest_in_range(verts, faces, points, distance, safe_check=True, flat_output=True): + ''' + verts, faces and points: Expects multiple objects lists (level of nesting 3) + distace: expects a list with level of nesting of 2 + ''' + output = [[] for i in range(4)] + for bvh, pts, dist in zip(svmesh_to_bvh_lists(verts, faces, safe_check), points, distance): + + res_local = [[] for i in range(4)] + + for pt, d in zip(pts, cycle(dist)): + res = bvh.find_nearest_range(pt, d) + #claning results: + res = sorted(res, key=take_third) + unique = [] + if flat_output: + for r in res: + if not r[2] in unique: + unique.append(r[2]) + append_multiple(res_local, translate_data(r)) + + else: + sub_res_local = [[] for i in range(4)] + for r in res: + if not r[2] in unique: + unique.append(r[2]) + append_multiple(sub_res_local, translate_data(r)) + + append_multiple(res_local, sub_res_local) + + append_multiple(output, res_local) + + return output + + +class SvNearestPointOnMeshNode(bpy.types.Node, SverchCustomTreeNode, SvRecursiveNode): + """ + Triggers: BVH Closest Point + Tooltip: Find nearest point on mesh surfaces + """ + bl_idname = 'SvNearestPointOnMeshNode' + bl_label = 'Nearest Point on Mesh' + bl_icon = 'OUTLINER_OB_EMPTY' + sv_icon = 'SV_POINT_ON_MESH' + + modes = [ + ("find_nearest", "Nearest", "", 0), + ("find_nearest_range", "Nearest in range", "", 1), + ] + + def update_sockets(self, context): + self.inputs['Distance'].hide_safe = self.mode == 'find_nearest' + updateNode(self, context) + + mode: EnumProperty( + name="Mode", items=modes, + default='find_nearest', + update=update_sockets) + + safe_check: BoolProperty( + name='Safe Check', + description='When disabled polygon indices refering to unexisting points will crash Blender but makes node faster', + default=True) + + flat_output: BoolProperty( + name='Flat Output', + description='Ouput a single list for every list in stead of a list of lists', + default=True, + update=updateNode) + + def draw_buttons(self, context, layout): + layout.prop(self, 'mode') + if self.mode == 'find_nearest_range': + layout.prop(self, 'flat_output') + + def draw_buttons_ext(self, context, layout): + layout.prop(self, 'list_match') + layout.prop(self, 'mode') + layout.prop(self, 'safe_check') + + def sv_init(self, context): + si = self.inputs.new + so = self.outputs.new + si('SvVerticesSocket', 'Verts') + si('SvStringsSocket', 'Faces').nesting_level = 3 + for s in self.inputs[:2]: + s.is_mandatory = True + si('SvVerticesSocket', 'Points').use_prop = True + d = si('SvStringsSocket', 'Distance') + d.use_prop = True + d.default_property = 10.0 + d.hide_safe = True + + so('SvVerticesSocket', 'Location') + so('SvVerticesSocket', 'Normal') + so('SvStringsSocket', 'Index') + so('SvStringsSocket', 'Distance') + + + def process_data(self, params): + verts, faces, points, distance = params + if self.mode == 'find_nearest': + return nearest_point_in_mesh(verts, faces, points, + safe_check=self.safe_check) + else: + return nearest_in_range(verts, faces, points, distance, + safe_check=self.safe_check, + flat_output=self.flat_output) + +def register(): + bpy.utils.register_class(SvNearestPointOnMeshNode) + + +def unregister(): + bpy.utils.unregister_class(SvNearestPointOnMeshNode) diff --git a/nodes/analyzer/bvh_nearest_new.py b/old_nodes/bvh_nearest_new.py similarity index 97% rename from nodes/analyzer/bvh_nearest_new.py rename to old_nodes/bvh_nearest_new.py index 37dddf6f73..edd149a84e 100644 --- a/nodes/analyzer/bvh_nearest_new.py +++ b/old_nodes/bvh_nearest_new.py @@ -29,7 +29,7 @@ class SvBVHnearNewNode(bpy.types.Node, SverchCustomTreeNode): bl_label = 'bvh_nearest' bl_icon = 'OUTLINER_OB_EMPTY' sv_icon = 'SV_POINT_ON_MESH' - + replacement_nodes =[('SvNearestPointOnMeshNode', None, None)] modes = [ ("find_nearest", "nearest", "", 0), ("find_nearest_range", "nearest in range", "", 1), diff --git a/tests/docs_tests.py b/tests/docs_tests.py index 87eb5f6e7d..028b4cb73a 100644 --- a/tests/docs_tests.py +++ b/tests/docs_tests.py @@ -153,7 +153,6 @@ def test_node_docs_existance(self): symmetrize.py vd_attr_node_mk2.py scalar_field_point.py -bvh_nearest_new.py quads_to_nurbs.py location.py sun_position.py""".split("\n") diff --git a/utils/bvh_tree.py b/utils/bvh_tree.py new file mode 100644 index 0000000000..9d8ad98dd4 --- /dev/null +++ b/utils/bvh_tree.py @@ -0,0 +1,20 @@ +# This file is part of project Sverchok. It's copyrighted by the contributors +# recorded in the version control history of the file, available from +# its original location https://github.com/nortikin/sverchok/commit/master +# +# SPDX-License-Identifier: GPL3 +# License-Filename: LICENSE + +from mathutils.bvhtree import BVHTree + +def bvh_safe_check(verts, pols): + len_v = len(verts) + for p in pols: + for c in p: + if c > len_v: + raise Exception(f"Index {c} should be less than vertices length ({len_v})") + +def bvh_tree_from_polygons(vertices, polygons, all_triangles=False, epsilon=0.0, safe_check=True): + if safe_check: + bvh_safe_check(vertices, polygons) + return BVHTree.FromPolygons(vertices, polygons, all_triangles=all_triangles, epsilon=epsilon) From bd2bb73457252353a374163859199dfc2d51c2fe Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Wed, 24 Mar 2021 08:55:53 +0100 Subject: [PATCH 21/35] Bounding Box Numpy (#3984) --- nodes/analyzer/bbox_mk3.py | 219 +++++++++++++++++++++---------------- 1 file changed, 126 insertions(+), 93 deletions(-) diff --git a/nodes/analyzer/bbox_mk3.py b/nodes/analyzer/bbox_mk3.py index 11ada8f559..669ab8d0b2 100644 --- a/nodes/analyzer/bbox_mk3.py +++ b/nodes/analyzer/bbox_mk3.py @@ -17,24 +17,132 @@ # ##### END GPL LICENSE BLOCK ##### from itertools import product - +import numpy as np import bpy from bpy.props import BoolVectorProperty, EnumProperty from mathutils import Matrix from sverchok.node_tree import SverchCustomTreeNode +from sverchok.utils.nodes_mixins.recursive_nodes import SvRecursiveNode + from sverchok.data_structure import dataCorrect, updateNode +EDGES = [ + (0, 1), (1, 3), (3, 2), (2, 0), # bottom edges + (4, 5), (5, 7), (7, 6), (6, 4), # top edges + (0, 4), (1, 5), (2, 6), (3, 7) # sides +] +def generate_matrix(maxmin, dims, to_2d): + center = [(u+v)*.5 for u, v in maxmin[:dims]] + scale = [(u-v) for u, v in maxmin[:dims]] + if to_2d: + center += [0] + scale += [1] + mat = Matrix.Translation(center) + for i, sca in enumerate(scale): + mat[i][i] = sca + return mat + +def generate_mean_np(verts, dims, to_2d): + avr = (np.sum(verts[:, :dims], axis=0)/len(verts)).tolist() + if to_2d: + avr += [0] + return [avr] + +def generate_mean(verts, dims, to_2d): + avr = list(map(sum, zip(*verts))) + avr = [n/len(verts) for n in avr[:dims]] + if to_2d: + avr += [0] + return [avr] + +def bounding_box(verts, + box_dimensions='2D', + output_verts=True, + output_mat=True, + output_mean=True, + output_limits=True): + ''' + verts expects a list of level 3 [[[0,0,0],[1,1,1]..],[]] + returns per sublist: + verts_out: vertices of the bounding box + edges_out: edges of the bounding box + mean_out: mean of all vertcies + mat_out: Matrix that would transform a box of 1 unit into the bbox + *min_vals, Min X, Y and Z of the bounding box + *max_vals, Max X, Y and Z of the bounding box + *size_vals Size X, Y and Z of the bounding box + ''' + verts_out = [] + edges_out = [] + edges = EDGES + + mat_out = [] + mean_out = [] + min_vals = [[], [], []] + max_vals = [[], [], []] + size_vals = [[], [], []] + to_2d = box_dimensions == '2D' + dims = int(box_dimensions[0]) + calc_maxmin = output_mat or output_verts or output_limits + + for vec in verts: + if calc_maxmin: + if isinstance(vec, np.ndarray): + np_vec = vec + else: + np_vec = np.array(vec) + bbox_max = np.amax(np_vec, axis=0) + bbox_min = np.amin(np_vec, axis=0) + maxmin = np.concatenate([bbox_max, bbox_min]).reshape(2,3).T.tolist() + + if output_verts: + out = list(product(*reversed(maxmin))) + v_out = [l[::-1] for l in out[::-1]] + if to_2d: + verts_out.append([[v[0], v[1], 0] for v in v_out[:4]]) + edges = edges[:4] + else: + verts_out.append(v_out) + edges_out.append(edges) + + if output_mat: + mat_out.append(generate_matrix(maxmin, dims, to_2d)) + + if output_mean: + if calc_maxmin: + mean_out.append(generate_mean_np(np_vec, dims, to_2d)) + else: + if isinstance(vec, np.ndarray): + mean_out.append(generate_mean_np(vec, dims, to_2d)) + else: + mean_out.append(generate_mean(vec, dims, to_2d)) + + if output_limits: + for i in range(dims): + min_vals[i].append([maxmin[i][1]]) + max_vals[i].append([maxmin[i][0]]) + size_vals[i].append([maxmin[i][0] - maxmin[i][1]]) + + return (verts_out, + edges_out, + mean_out, + mat_out, + *min_vals, + *max_vals, + *size_vals) -class SvBBoxNodeMk3(bpy.types.Node, SverchCustomTreeNode): + +class SvBBoxNodeMk3(bpy.types.Node, SverchCustomTreeNode, SvRecursiveNode): """ Triggers: Bbox 2D or 3D Tooltip: Get vertices bounding box (vertices, sizes, center) """ bl_idname = 'SvBBoxNodeMk3' bl_label = 'Bounding box' - bl_icon = 'NONE' + bl_icon = 'SHADING_BBOX' sv_icon = 'SV_BOUNDING_BOX' + def update_sockets(self, context): bools = [self.min_list, self.max_list, self.size_list] dims = int(self.box_dimensions[0]) @@ -81,7 +189,7 @@ def draw_buttons(self, context, layout): def sv_init(self, context): son = self.outputs.new - self.inputs.new('SvVerticesSocket', 'Vertices') + self.inputs.new('SvVerticesSocket', 'Vertices').is_mandatory = True son('SvVerticesSocket', 'Vertices') son('SvStringsSocket', 'Edges') @@ -97,95 +205,20 @@ def sv_init(self, context): def migrate_from(self, old_node): self.box_dimensions = old_node.dimensions - def generate_matrix(self, maxmin, dims, to_2d): - center = [(u+v)*.5 for u, v in maxmin[:dims]] - scale = [(u-v) for u, v in maxmin[:dims]] - if to_2d: - center += [0] - scale += [1] - mat = Matrix.Translation(center) - for i, sca in enumerate(scale): - mat[i][i] = sca - return mat - - def generate_mean(self, verts, dims, to_2d): - avr = list(map(sum, zip(*verts))) - avr = [n/len(verts) for n in avr[:dims]] - if to_2d: - avr += [0] - return [avr] - - def process(self): - if not self.inputs['Vertices'].is_linked: - return - if not any(s.is_linked for s in self.outputs): - return - has_mat_out = bool(self.outputs['Center'].is_linked) - has_mean = bool(self.outputs['Mean'].is_linked) - has_vert_out = bool(self.outputs['Vertices'].is_linked) - - verts = self.inputs['Vertices'].sv_get(deepcopy=False) - verts = dataCorrect(verts, nominal_dept=2) - has_limits = any(s.is_linked for s in self.outputs[4:]) - if verts: - verts_out = [] - edges_out = [] - edges = [ - (0, 1), (1, 3), (3, 2), (2, 0), # bottom edges - (4, 5), (5, 7), (7, 6), (6, 4), # top edges - (0, 4), (1, 5), (2, 6), (3, 7) # sides - ] - - mat_out = [] - mean_out = [] - min_vals = [[], [], []] - max_vals = [[], [], []] - size_vals = [[], [], []] - to_2d = self.box_dimensions == '2D' - dims = int(self.box_dimensions[0]) - - for vec in verts: - if has_mat_out or has_vert_out or has_limits: - maxmin = list(zip(map(max, *vec), map(min, *vec))) - if has_vert_out: - out = list(product(*reversed(maxmin))) - v_out = [l[::-1] for l in out[::-1]] - if to_2d: - verts_out.append([[v[0], v[1], 0] for v in v_out[:4]]) - edges = edges[:4] - else: - verts_out.append(v_out) - edges_out.append(edges) - - if has_mat_out: - mat_out.append(self.generate_matrix(maxmin, dims, to_2d)) - - if has_mean: - mean_out.append(self.generate_mean(vec, dims, to_2d)) - - if has_limits: - for i in range(dims): - min_vals[i].append([maxmin[i][1]]) - max_vals[i].append([maxmin[i][0]]) - size_vals[i].append([maxmin[i][0] - maxmin[i][1]]) - - if has_vert_out: - self.outputs['Vertices'].sv_set(verts_out) - - if self.outputs['Edges'].is_linked: - self.outputs['Edges'].sv_set(edges_out) - - if has_mean: - self.outputs['Mean'].sv_set(mean_out) - - if self.outputs['Center'].is_linked: - self.outputs['Center'].sv_set(mat_out) - - vals = [min_vals, max_vals, size_vals] - for j in range(3): - for i, socket in enumerate(self.outputs[4+3*j:7+3*j]): - if socket.is_linked: - socket.sv_set(vals[j][i]) + def process_data(self, params): + + verts = params[0] + output_mat = self.outputs['Center'].is_linked + output_mean = self.outputs['Mean'].is_linked + output_verts = self.outputs['Vertices'].is_linked + output_limits = any(s.is_linked for s in self.outputs[4:]) + return bounding_box(verts, + box_dimensions=self.box_dimensions, + output_verts=output_verts, + output_mat=output_mat, + output_mean=output_mean, + output_limits=output_limits) + def register(): From 4c9c1259476e8565ed20744684db8b308bc940c1 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Wed, 24 Mar 2021 09:09:41 +0100 Subject: [PATCH 22/35] index to mask output numpy prop (#3985) --- nodes/list_masks/index_to_mask.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/nodes/list_masks/index_to_mask.py b/nodes/list_masks/index_to_mask.py index 977a729680..9f7371af9b 100644 --- a/nodes/list_masks/index_to_mask.py +++ b/nodes/list_masks/index_to_mask.py @@ -32,12 +32,20 @@ name="Data masking", description="Use data to define mask length", default=False)) + node.props.is_topo_mask = NodeProperties( bpy_props=BoolProperty( name="Topo mask", description="data consists of verts or polygons / edges. " "Otherwise the two vertices will be masked as [[[T, T, T], [F, F, F]]] instead of [[T, F]]", default=False)) + +node.props.output_numpy = NodeProperties( + bpy_props=BoolProperty( + name="Output NumPy", + description="Output Numpy arrays in stead of regular python lists", + default=False)) + node.props.index = NodeProperties(bpy_props=IntProperty(name="Index")) node.props.mask_size = NodeProperties(bpy_props=IntProperty(name='Mask Length', default=10, min=2)) @@ -76,6 +84,13 @@ def draw_buttons(self, context, layout): if self.data_to_mask: col.prop(self, "is_topo_mask", toggle=True) + def draw_buttons_ext(self, context, layout): + self.draw_buttons(context, layout) + layout.prop(self, 'output_numpy') + + def rclick_menu(self, context, layout): + layout.prop(self, 'output_numpy') + def process(self): if not node.props.data_to_mask: mask = np.zeros(node.inputs.mask_size[0], dtype=bool) @@ -87,4 +102,7 @@ def process(self): mask = np.zeros_like(node.inputs.data_to_mask, dtype=bool) mask[node.inputs.index] = True - node.outputs.mask = mask.tolist() + if node.props.output_numpy: + node.outputs.mask = mask + else: + node.outputs.mask = mask.tolist() From e71650a2d33dccdd87d9c740a0d54701e49aea60 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Sat, 27 Mar 2021 13:38:13 +0100 Subject: [PATCH 23/35] matrix_out: nesting fix + recursive node (#3991) --- nodes/matrix/matrix_out_mk2.py | 44 +++++++++++++++------------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/nodes/matrix/matrix_out_mk2.py b/nodes/matrix/matrix_out_mk2.py index 3897ab4508..33770ba093 100644 --- a/nodes/matrix/matrix_out_mk2.py +++ b/nodes/matrix/matrix_out_mk2.py @@ -21,6 +21,7 @@ from sverchok.node_tree import SverchCustomTreeNode from sverchok.data_structure import updateNode from sverchok.utils.sv_transform_helper import AngleUnits, SvAngleHelper +from sverchok.utils.nodes_mixins.recursive_nodes import SvRecursiveNode from mathutils import Matrix @@ -37,7 +38,7 @@ } -class SvMatrixOutNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvAngleHelper): +class SvMatrixOutNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvAngleHelper, SvRecursiveNode): """ Triggers: Matrix, Out Tooltip: Convert a matrix into its location, scale & rotation components @@ -79,7 +80,7 @@ def update_mode(self, context): items=mode_items, default="AXISANGLE", update=update_mode) def sv_init(self, context): - self.inputs.new('SvMatrixSocket', "Matrix") + self.inputs.new('SvMatrixSocket', "Matrix").is_mandatory =True # translation and scale outputs self.outputs.new('SvVerticesSocket', "Location") self.outputs.new('SvVerticesSocket', "Scale") @@ -104,48 +105,41 @@ def draw_buttons(self, context, layout): def draw_buttons_ext(self, context, layout): if self.mode in {"EULER", "AXISANGLE"}: self.draw_angle_units_buttons(context, layout) - - def process(self): + + def process_data(self, params): + input_M = params[0] outputs = self.outputs - if not any(s.is_linked for s in outputs): - return - - input_M = self.inputs['Matrix'].sv_get() - # decompose matrices into: Translation, Rotation (quaternion) and Scale location_list = [] quaternion_list = [] # rotations (as quaternions) scale_list = [] + angles = [[], [], []] + axis_list, angle_list = [], [] for m in input_M: T, R, S = m.decompose() - location_list.append(list(T)) + location_list.append([list(T)]) quaternion_list.append(R) - scale_list.append(list(S)) + scale_list.append([list(S)]) - outputs["Location"].sv_set(location_list) - outputs["Scale"].sv_set(scale_list) - - if self.mode == "QUATERNION": - self.outputs['Quaternion'].sv_set(quaternion_list) - - elif self.mode == "EULER": + if self.mode == "EULER": # conversion factor from radians to the current angle units au = self.angle_conversion_factor(AngleUnits.RADIANS, self.angle_units) + for i, name in enumerate("XYZ"): if outputs["Angle " + name].is_linked: - angles = [q.to_euler(self.euler_order)[i] * au for q in quaternion_list] - outputs["Angle " + name].sv_set([angles]) - + angles[i] = [[q.to_euler(self.euler_order)[i] * au] for q in quaternion_list] elif self.mode == "AXISANGLE": if outputs['Axis'].is_linked: - axis_list = [tuple(q.axis) for q in quaternion_list] - outputs['Axis'].sv_set([axis_list]) + axis_list = [[tuple(q.axis)] for q in quaternion_list] + if outputs['Angle'].is_linked: # conversion factor from radians to the current angle units au = self.angle_conversion_factor(AngleUnits.RADIANS, self.angle_units) - angle_list = [q.angle * au for q in quaternion_list] - outputs['Angle'].sv_set([angle_list]) + angle_list = [[q.angle * au] for q in quaternion_list] + + return (location_list, scale_list, quaternion_list, *angles, axis_list, angle_list) + def register(): From efc6c32a084620465fad35af62a77a11514ade94 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Sun, 28 Mar 2021 01:04:59 +0100 Subject: [PATCH 24/35] icosphere recursived (#3993) --- nodes/generator/icosphere.py | 63 +++++++++++++++----------- nodes/modifier_change/subdivide_mk2.py | 2 + utils/sv_bmesh_utils.py | 3 +- 3 files changed, 39 insertions(+), 29 deletions(-) diff --git a/nodes/generator/icosphere.py b/nodes/generator/icosphere.py index 8306762619..2ed6afd1c3 100644 --- a/nodes/generator/icosphere.py +++ b/nodes/generator/icosphere.py @@ -18,14 +18,16 @@ from math import pi, sqrt import bpy +from bpy.props import IntProperty, FloatProperty, BoolVectorProperty import bmesh -from bpy.props import IntProperty, FloatProperty, EnumProperty from mathutils import Matrix, Vector from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode, list_match_modes, list_match_func -from sverchok.utils.sv_bmesh_utils import bmesh_from_pydata, pydata_from_bmesh +from sverchok.data_structure import updateNode +from sverchok.utils.sv_bmesh_utils import numpy_data_from_bmesh from sverchok.utils.math import from_cylindrical +from sverchok.utils.nodes_mixins.recursive_nodes import SvRecursiveNode + def icosahedron_cylindrical(r): @@ -78,7 +80,7 @@ def icosahedron(r): vertices = [from_cylindrical(rho, phi, z, 'radians') for rho, phi, z in vertices] return vertices, edges, faces -class SvIcosphereNode(bpy.types.Node, SverchCustomTreeNode): +class SvIcosphereNode(bpy.types.Node, SverchCustomTreeNode, SvRecursiveNode): "IcoSphere primitive" bl_idname = 'SvIcosphereNode' @@ -113,13 +115,18 @@ def get_subdivisions(self): name = "Radius", default=1.0, min=0.0, update=updateNode) - - list_match: EnumProperty( - name="List Match", - description="Behavior on different list lengths, object level", - items=list_match_modes, default="REPEAT", - update=updateNode) - + + # list_match: EnumProperty( + # name="List Match", + # description="Behavior on different list lengths, object level", + # items=list_match_modes, default="REPEAT", + # update=updateNode) + out_np: BoolVectorProperty( + name="Ouput Numpy", + description="Output NumPy arrays slows this node but may improve performance of nodes it is connected to", + default=(False, False, False), + size=3, update=updateNode) + def sv_init(self, context): self['subdivisions'] = 2 @@ -133,22 +140,23 @@ def sv_init(self, context): def draw_buttons_ext(self, context, layout): layout.prop(self, "subdivisions_max") layout.prop(self, "list_match") + layout.label(text="Ouput Numpy:") + r = layout.row(align=True) + for i in range(3): + r.prop(self, "out_np", index=i, text=self.outputs[i].name, toggle=True) - def process(self): - # return if no outputs are connected - if not any(s.is_linked for s in self.outputs): - return - - subdivisions_s = self.inputs['Subdivisions'].sv_get()[0] - radius_s = self.inputs['Radius'].sv_get()[0] + def pre_setup(self): + for s in self.inputs: + s.nesting_level = 1 + s.pre_processing = 'ONE_ITEM' + def process_data(self, params): out_verts = [] out_edges = [] out_faces = [] - objects = list_match_func[self.list_match]([subdivisions_s, radius_s]) - for subdivisions, radius in zip(*objects): + for subdivisions, radius in zip(*params): if subdivisions == 0: # In this case we just return the icosahedron verts, edges, faces = icosahedron(radius) @@ -161,19 +169,20 @@ def process(self): subdivisions = self.subdivisions_max bm = bmesh.new() - bmesh.ops.create_icosphere(bm, - subdivisions = subdivisions, - diameter = radius) - verts, edges, faces = pydata_from_bmesh(bm) + bmesh.ops.create_icosphere( + bm, + subdivisions=subdivisions, + diameter=radius) + + verts, edges, faces, _ = numpy_data_from_bmesh(bm, self.out_np) bm.free() out_verts.append(verts) out_edges.append(edges) out_faces.append(faces) - self.outputs['Vertices'].sv_set(out_verts) - self.outputs['Edges'].sv_set(out_edges) - self.outputs['Faces'].sv_set(out_faces) + return out_verts, out_edges, out_faces + def register(): bpy.utils.register_class(SvIcosphereNode) diff --git a/nodes/modifier_change/subdivide_mk2.py b/nodes/modifier_change/subdivide_mk2.py index 3c02ff5bf5..fbb30e2db6 100644 --- a/nodes/modifier_change/subdivide_mk2.py +++ b/nodes/modifier_change/subdivide_mk2.py @@ -303,6 +303,8 @@ def process(self): face_data_matched = numpy_full_list(face_data, len(faces)).tolist() else: face_data_matched = repeat_last_for_length(face_data, len(faces)) + else: + face_data_matched =[] bm = bmesh_from_pydata( vertices, edges, faces, diff --git a/utils/sv_bmesh_utils.py b/utils/sv_bmesh_utils.py index bc9123bc7d..2641282774 100644 --- a/utils/sv_bmesh_utils.py +++ b/utils/sv_bmesh_utils.py @@ -155,7 +155,7 @@ def add_mesh_to_bmesh(bm, verts, edges=None, faces=None, sv_index_name=None, upd def numpy_data_from_bmesh(bm, out_np, face_data=None): if out_np[0]: - verts = np.array([v.co[:] for v in bm.verts]) + verts = np.array([v.co for v in bm.verts]) else: verts = [v.co[:] for v in bm.verts] if out_np[1]: @@ -850,4 +850,3 @@ def recalc_normals(verts, edges, faces, loop=False): verts, edges, faces = pydata_from_bmesh(bm) bm.free() return verts, edges, faces - From e78e7be1da92d4478448d2844881d07da7cfca8b Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Sun, 28 Mar 2021 10:22:17 +0200 Subject: [PATCH 25/35] Control Points Output to Curve Mapper (#3994) * Control Points Output to Curve Mapper * update docs --- docs/nodes/number/curve_mapper.rst | 5 +++-- nodes/number/curve_mapper.py | 11 ++++++++--- utils/sv_manual_curves_utils.py | 17 ++++++++++++++++- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/docs/nodes/number/curve_mapper.rst b/docs/nodes/number/curve_mapper.rst index 75ae9189b8..ee239b86fa 100644 --- a/docs/nodes/number/curve_mapper.rst +++ b/docs/nodes/number/curve_mapper.rst @@ -30,6 +30,8 @@ This node has the following outputs: always lying in XOY plane along the OX axis. The domain of the curve is defined by **Min X** and **Max X** parameters, which are defined in the curve editor widget. +* **Control Points: Location over the XOY Plane of the control points of the widget. + It can be used as a 2D slider. Examples -------- @@ -40,9 +42,8 @@ Basic range remapping: Using the node to define the column profile: -.. image:: https://raw.githubusercontent.com/vicdoval/sverchok/docs_images/images_for_docs/number/Curve%20Mapper/curve_mapper_sverchok__blender_example_2.png +.. image:: https://raw.githubusercontent.com/vicdoval/sverchok/docs_images/images_for_docs/number/Curve%20Mapper/curve_mapper_sverchok__blender_example_2.png Example of the Curve output usage: .. image:: https://user-images.githubusercontent.com/284644/80520701-4051d200-89a3-11ea-92fd-2f2f2004e4e7.png - diff --git a/nodes/number/curve_mapper.py b/nodes/number/curve_mapper.py index 5d88e8e7bd..d7ab210955 100644 --- a/nodes/number/curve_mapper.py +++ b/nodes/number/curve_mapper.py @@ -31,7 +31,8 @@ get_valid_node, CURVE_NODE_TYPE, set_rgb_curve, - get_rgb_curve) + get_rgb_curve, + get_points_from_curve) from sverchok.utils.curve import SvScalarFunctionCurve @@ -71,6 +72,7 @@ def sv_init(self, context): self.outputs.new('SvStringsSocket', "Value") self.outputs.new('SvCurveSocket', "Curve") + self.outputs.new('SvVerticesSocket', "Control Points") _ = get_evaluator(node_group_name, self._get_curve_node_name()) @@ -111,6 +113,9 @@ def process(self): curve = SvScalarFunctionCurve(evaluate) curve.u_bounds = (curve_node.mapping.clip_min_x, curve_node.mapping.clip_max_x) self.outputs['Curve'].sv_set([curve]) + if 'Control Points' in self.outputs: + points = get_points_from_curve(node_group_name, curve_node_name) + self.outputs['Control Points'].sv_set(points) # no outputs, end early. if not outputs['Value'].is_linked: @@ -138,8 +143,8 @@ def save_to_json(self, node_data: dict): node_data['curve_data'] = data_json_str def sv_copy(self, other): - ''' - self: is the new node, other: is the old node + ''' + self: is the new node, other: is the old node by the time this function is called the new node has a new empty n_id a new n_id will be generated as a side effect of _get_curve_node_name ''' diff --git a/utils/sv_manual_curves_utils.py b/utils/sv_manual_curves_utils.py index 17d82184ac..7fdecfae8e 100644 --- a/utils/sv_manual_curves_utils.py +++ b/utils/sv_manual_curves_utils.py @@ -109,7 +109,7 @@ def get_rgb_curve(group_name, node_name): def set_rgb_curve(data_dict, curve_node_name): ''' - stores RGB Curves data into json + stores RGB Curves data into json ''' group_name = data_dict['group_name'] @@ -130,3 +130,18 @@ def set_rgb_curve(data_dict, curve_node_name): curve.points[pidx].handle_type = handle_type curve.points[pidx].location = location node.mapping.update() + +def get_points_from_curve(group_name, node_name): + ''' + get control points from curve + ''' + node_groups = bpy.data.node_groups + group = node_groups.get(group_name) + node = group.nodes.get(node_name) + + out_list = [] + + points = node.mapping.curves[-1].points + out_list.append([[p.location[0], p.location[1], 0] for p in points]) + + return out_list From f01b3126dd88aa862313147241baffe4f6e91f0b Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Sun, 28 Mar 2021 11:46:46 +0200 Subject: [PATCH 26/35] Deconstruct Surface weights bugfix (#3996) --- nodes/surface/deconstruct_surface.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/nodes/surface/deconstruct_surface.py b/nodes/surface/deconstruct_surface.py index 0c0d235d6e..0ca8ad0c19 100644 --- a/nodes/surface/deconstruct_surface.py +++ b/nodes/surface/deconstruct_surface.py @@ -71,9 +71,9 @@ def deconstruct(self, surface): if hasattr(nurbs, 'get_weights'): weights = nurbs.get_weights() if self.split_points: - weights = weights.flatten().tolist() - else: weights = weights.tolist() + else: + weights = weights.flatten().tolist() else: weights = [] @@ -160,4 +160,3 @@ def register(): def unregister(): bpy.utils.unregister_class(SvDeconstructSurfaceNode) - From 1a168ae1ed62fc3e5c47c201e291de69324f4f4a Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Sun, 28 Mar 2021 13:40:15 +0200 Subject: [PATCH 27/35] edgenet_to_paths typofix (#3997) * edgenet_to_paths typofix * prevent breaking layouts --- nodes/modifier_change/edgenet_to_paths.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/nodes/modifier_change/edgenet_to_paths.py b/nodes/modifier_change/edgenet_to_paths.py index d03091d1b4..f6e4c9299c 100644 --- a/nodes/modifier_change/edgenet_to_paths.py +++ b/nodes/modifier_change/edgenet_to_paths.py @@ -196,10 +196,10 @@ def rclick_menu(self, context, layout): self.draw_buttons_ext(context, layout) def sv_init(self, context): self.inputs.new('SvVerticesSocket', 'Vertices') - self.inputs.new('SvStringsSocket', 'Egdes') + self.inputs.new('SvStringsSocket', 'Edges') self.outputs.new('SvVerticesSocket', 'Vertices') - self.outputs.new('SvStringsSocket', 'Egdes') + self.outputs.new('SvStringsSocket', 'Edges') self.outputs.new('SvStringsSocket', 'Vert Indexes') self.outputs.new('SvStringsSocket', 'Edge Indexes') self.outputs.new('SvStringsSocket', 'Cyclic') @@ -208,8 +208,8 @@ def sv_init(self, context): def process(self): if not any(s.is_linked for s in self.outputs): return - verts = self.inputs['Vertices'].sv_get(deepcopy=False) - edges = self.inputs['Egdes'].sv_get(deepcopy=False) + verts = self.inputs[0].sv_get(deepcopy=False) + edges = self.inputs[1].sv_get(deepcopy=False) verts_out = [] edge_out = [] v_index_out = [] @@ -236,8 +236,8 @@ def process(self): new_e_index(ed_index) new_cyclic(cyclic) - self.outputs['Vertices'].sv_set(verts_out) - self.outputs['Egdes'].sv_set(edge_out) + self.outputs[0].sv_set(verts_out) + self.outputs[1].sv_set(edge_out) self.outputs['Vert Indexes'].sv_set(v_index_out) self.outputs['Edge Indexes'].sv_set(e_index_out) self.outputs['Cyclic'].sv_set([cyclic_out] if self.join else cyclic_out) From 22b100e23a7129d27ea4d8525dd326aebfc68e21 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Sun, 28 Mar 2021 16:22:04 +0200 Subject: [PATCH 28/35] String tools 'number to string' mode (#3998) * String tools 'number to string' mode * spacing fix --- nodes/text/string_tools.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/nodes/text/string_tools.py b/nodes/text/string_tools.py index ae850f6384..54c755bbb3 100644 --- a/nodes/text/string_tools.py +++ b/nodes/text/string_tools.py @@ -51,6 +51,7 @@ def find_all(text, chars): out.append(f) index=f+1 return out + def find_all_slice(text, chars, start, end): out =[] index=start @@ -64,10 +65,14 @@ def find_all_slice(text, chars, start, end): index=f+1 return out +def number_to_string(data, precision): + return ("{:." + str(precision) + "f}").format(float(data)) + func_dict = { "---------------OPS" : "#---------------------------------------------------#", "to_string": (0, str, ('t t'), "To String"), "to_number": (1, eval, ('t s'), "To Number"), + "num_to_str": (3, number_to_string , ('ss t'), "Number To String", ('Precision',)), "join": (5, lambda x, y: ''.join([x,y]), ('tt t'), "Join"), "join_all": (6, join, ('tb t'), "Join All", ('Add Break Lines',)), "split": (10, split, ('tcs t'), "Split", ('Spliter', 'Max Split')), From 50a35d6634c360fa5ee476a6fdad728d0f7a1914 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Tue, 30 Mar 2021 08:37:20 +0200 Subject: [PATCH 29/35] Random Points on Mesh Numpy Implementation (#3999) * Random Points on Mesh Numpy Implementation * Rondom points on Edges + viewer map attribute * performace fix * Edges mode docs --- docs/nodes/spatial/random_points_on_mesh.rst | 21 +- nodes/spatial/random_points_on_mesh.py | 325 ++++++++++++++++--- ui/nodeview_rclick_menu.py | 53 ++- 3 files changed, 347 insertions(+), 52 deletions(-) diff --git a/docs/nodes/spatial/random_points_on_mesh.rst b/docs/nodes/spatial/random_points_on_mesh.rst index 54757616db..bc1f125136 100644 --- a/docs/nodes/spatial/random_points_on_mesh.rst +++ b/docs/nodes/spatial/random_points_on_mesh.rst @@ -31,6 +31,7 @@ This node has the following parameters: * **Surface**. Generate points on the surface of the mesh. * **Volume**. Generate points inside the volume of the mesh. The mesh is expected to represent a closed volume in this case. + * **Edges**. Generate points on the edges of the mesh. The default option is **Surface**. @@ -40,12 +41,28 @@ This node has the following parameters: **Face weight** input). If not checked, then the number of points on each face will be only defined by **Face weight** input. Checked by default. +- **All Triangles**. Enable if the input mesh is made only of triangles + (makes node faster). Available in Surfaces and Volume modes (in N-Panel) + +- **Safe Check**. Disabling it will make node faster but polygon indices + referring to unexisting points will crash Blender. Only available in Volume Mode. + (in N-Panel) + +- **Implementation**. Offers two implementations: + * **Numpy**. Faster + * **Mathutils**. Old implementation. Slower. + Only available in Surface Mode (in N-Panel) + +- **Ouput Numpy**. Output NumPy arrays in stead of regular list (makes node faster) + Only available in Surface and Edges modes (in N-Panel) + + Outputs ------- - **Verts** - random vertices on mesh -- **Face index** - indexes of faces to which random vertices lays. This input - is available only when **Mode** parameter is set to **Surface**. +- **Face / Edges index** - indexes of faces/edges to which random vertices lays. This input + is available only when **Mode** parameter is set to **Surface** or **Edges**. Examples -------- diff --git a/nodes/spatial/random_points_on_mesh.py b/nodes/spatial/random_points_on_mesh.py index c526910188..b4bc151ff6 100644 --- a/nodes/spatial/random_points_on_mesh.py +++ b/nodes/spatial/random_points_on_mesh.py @@ -13,14 +13,18 @@ import bpy from mathutils import Vector -from mathutils.bvhtree import BVHTree from mathutils.geometry import tessellate_polygon, area_tri from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode, throttle_and_update_node +from sverchok.data_structure import updateNode, throttle_and_update_node, numpy_full_list +from sverchok.utils.bvh_tree import bvh_tree_from_polygons from sverchok.utils.geom import calc_bounds from sverchok.utils.sv_mesh_utils import point_inside_mesh +def np_calc_tris_areas(v_pols): + perp = np.cross(v_pols[:, 1]- v_pols[:, 0], v_pols[:, 2]- v_pols[:, 0])/2 + return np.linalg.norm(perp, axis=1)/2 + class SocketProperties(NamedTuple): name: str socket_type: str @@ -49,12 +53,17 @@ class InputData(NamedTuple): class NodeProperties(NamedTuple): proportional: bool - mode : str + mode: str + all_triangles: bool + implementation: str + safe_check: bool + out_np: tuple MAX_ITERATIONS = 1000 -def populate_mesh(verts, faces, count, seed): - bvh = BVHTree.FromPolygons(verts, faces) +def populate_mesh(verts, faces, count, seed, all_triangles, safe_check): + + bvh = bvh_tree_from_polygons(verts, faces, all_triangles=all_triangles, epsilon=0.0, safe_check=safe_check) np.random.seed(seed) x_min, x_max, y_min, y_max, z_min, z_max = calc_bounds(verts) low = np.array([x_min, y_min, z_min]) @@ -66,7 +75,7 @@ def populate_mesh(verts, faces, count, seed): if iterations > MAX_ITERATIONS: raise Exception("Iterations limit is reached") max_pts = max(count, count-done) - points = np.random.uniform(low, high, size=(max_pts,3)).tolist() + points = np.random.uniform(low, high, size=(max_pts, 3)).tolist() points = [p for p in points if point_inside_mesh(bvh, p)] n = len(points) result.extend(points) @@ -78,26 +87,102 @@ def populate_mesh(verts, faces, count, seed): def node_process(inputs: InputData, properties: NodeProperties): if properties.mode == 'SURFACE': - me = TriangulatedMesh([Vector(co) for co in inputs.verts], inputs.faces) + me = TriangulatedMesh(inputs.verts, inputs.faces, properties.all_triangles, properties.implementation) + if properties.proportional: me.use_even_points_distribution() if inputs.face_weight: me.set_custom_face_weights(inputs.face_weight) - return me.generate_random_points(inputs.number[0], inputs.seed[0]) # todo [0] <-- ?! + if properties.implementation == 'NUMPY': + return me.generate_random_points_np(inputs.number[0], inputs.seed[0], properties.out_np) + return me.generate_random_points(inputs.number[0], inputs.seed[0]) + + elif properties.mode == 'VOLUME': + return populate_mesh(inputs.verts, inputs.faces, + inputs.number[0], inputs.seed[0], + properties.all_triangles, properties.safe_check) + else: # 'EDGES' + return random_points_on_edges(inputs.verts, inputs.faces, inputs.face_weight, + inputs.number[0], inputs.seed[0], + properties.proportional, properties.out_np) + +def verts_edges(verts, edges): + if isinstance(verts, np.ndarray): + np_verts = verts + else: + np_verts = np.array(verts) + if isinstance(edges, np.ndarray): + np_edges = edges else: - return populate_mesh(inputs.verts, inputs.faces, inputs.number[0], inputs.seed[0]) + np_edges = np.array(edges) + + return np_verts[np_edges] + +def get_weights(edges_dir, input_weights, proportional): + if proportional: + edge_length = np.linalg.norm(edges_dir, axis=1) + if len(input_weights) > 0: + edges_weights = numpy_full_list(input_weights, len(edges_dir)) * edge_length + weights = edges_weights/np.sum(edges_weights) + else: + weights = edge_length/np.sum(edge_length) + + else: + if len(input_weights) > 0: + edges_weights = numpy_full_list(input_weights, len(edges_dir)) + weights = edges_weights/np.sum(edges_weights) + else: + weights = None + + return weights + +def random_points_on_edges(verts: List[List[float]], + edges: List[List[int]], + input_weights: List[float], + random_points_total: int, + seed: int, + proportional: bool, + out_np: List[bool]): + + v_edges = verts_edges(verts, edges) + edges_dir = v_edges[:, 1] - v_edges[:, 0] + weights = get_weights(edges_dir, input_weights, proportional) + np.random.seed(seed) + + chosen_edges = np.random.choice(np.arange(len(edges)), + random_points_total, + replace=True, + p=weights) + + edges_with_points, points_total_per_edge = np.unique(chosen_edges, return_counts=True) + + t_s = np.random.uniform(low=0, high=1, size=random_points_total) + direc = np.repeat(edges_dir[edges_with_points], points_total_per_edge, axis=0) + orig = np.repeat(v_edges[edges_with_points, 0], points_total_per_edge, axis=0) + + random_points = orig + direc * t_s[:, np.newaxis] + + return (random_points if out_np[0] else random_points.tolist(), + chosen_edges if out_np[1] else chosen_edges.tolist()) + class TriangulatedMesh: - def __init__(self, verts: List[Vector], faces: List[List[int]]): - self._verts = verts - self._faces = faces - self._face_weights = None + def __init__(self, verts: List[List[float]], faces: List[List[int]], all_triangles: bool, implementation: str): + if implementation == 'NUMPY': + self._verts = verts + else: + self._verts = [Vector(v) for v in verts] - self._tri_faces = [] + self._faces = faces + self._face_weights = [] self._tri_face_areas = [] - self._old_face_indexes_per_tri = [] - - self._triangulate() + if all_triangles: + self._tri_faces = faces + self._old_face_indexes_per_tri = list(range(len(faces))) + else: + self._tri_faces = [] + self._old_face_indexes_per_tri = [] + self._triangulate() def use_even_points_distribution(self, even=True): self._face_weights = self.tri_face_areas if even else None @@ -105,10 +190,45 @@ def use_even_points_distribution(self, even=True): def set_custom_face_weights(self, custom_weights): weights_per_tri = self._face_attrs_to_tri_face_attrs(custom_weights) if self._face_weights: - self._face_weights *= weights_per_tri # can be troubles if set custom weights several times + self._face_weights = [f*w for f, w in zip(self._face_weights, weights_per_tri)] else: self._face_weights = weights_per_tri + def generate_random_points_np(self, + random_points_total: int, + seed: int, + out_np: Tuple[bool, bool]) -> Tuple[list, list]: + + np.random.seed(seed) + faces_with_points, points_total_per_face = self._distribute_points_np(random_points_total) + random_points = [] + old_face_indexes_per_point = [] + u1 = np.random.uniform(low=0, high=1, size=random_points_total) + u2 = np.random.uniform(low=0, high=1, size=random_points_total) + mask = (u1 + u2) > 1 + u1[mask] = 1 - u1[mask] + mask = (u1+u2) > 1 + u2[mask] = 1 - u2[mask] + + if isinstance(self._tri_faces, np.ndarray): + np_faces = self._tri_faces[faces_with_points] + else: + np_faces = np.array(self._tri_faces)[faces_with_points] + if isinstance(self._verts, np.ndarray): + v_pols = np.repeat(self._verts[np_faces], points_total_per_face, axis=0) + else: + v_pols = np.repeat(np.array(self._verts)[np_faces], points_total_per_face, axis=0) + + side1 = v_pols[:, 1, :] - v_pols[:, 0, :] + side2 = v_pols[:, 2, :] - v_pols[:, 0, :] + + random_points = v_pols[:, 0, :] + side1 * u1[:, np.newaxis] + side2 * u2[:, np.newaxis] + + old_face_indexes_per_point = np.repeat(np.array(self._old_face_indexes_per_tri)[faces_with_points], points_total_per_face, axis=0) + + return (random_points if out_np[0] else random_points.tolist(), + old_face_indexes_per_point if out_np[1] else old_face_indexes_per_point.tolist()) + def generate_random_points(self, random_points_total: int, seed: int) -> Tuple[list, list]: random.seed(seed) points_total_per_face = self._distribute_points(random_points_total) @@ -125,7 +245,11 @@ def generate_random_points(self, random_points_total: int, seed: int) -> Tuple[l @property def tri_face_areas(self): if not self._tri_face_areas: - self._tri_face_areas = [area_tri(*[self._verts[i] for i in f]) for f in self._tri_faces] + if isinstance(self._verts, np.ndarray): + self._tri_face_areas = np_calc_tris_areas(self._verts[np.array(self._tri_faces)]) + else: + self._tri_face_areas = [area_tri(*[self._verts[i] for i in f]) for f in self._tri_faces] + return self._tri_face_areas def _distribute_points(self, random_points_total: int) -> List[int]: @@ -136,26 +260,50 @@ def _distribute_points(self, random_points_total: int) -> List[int]: points_total_per_face[i] += 1 return points_total_per_face + def _distribute_points_np(self, random_points_total: int) -> List[int]: + # generate list of numbers which mean how many points should be created on face + + if len(self._face_weights) != 0: + weights = np.array(self._face_weights, dtype='float') + weights /= np.sum(weights) + else: + weights = None + chosen_faces = np.random.choice( + np.arange(len(self._tri_faces)), + random_points_total, + replace=True, + p=weights) + + return np.unique(chosen_faces, return_counts=True) + def _triangulate(self): # generate list of triangle faces and list of indexes which points to initial faces for each new triangle + verts = self._verts + tri_faces_add = self._tri_faces.append + old_face_index_add = self._old_face_indexes_per_tri.append for i, f in enumerate(self._faces): - face_verts = [[self._verts[i] for i in f]] - # [[v1,v2,v3,v4]] - face_verts - for tri_face in tessellate_polygon(face_verts): - self._tri_faces.append([f[itf] for itf in tri_face]) - self._old_face_indexes_per_tri.append(i) + if len(f) == 3: + tri_faces_add(f) + old_face_index_add(i) + else: + face_verts = [[verts[i] for i in f]] + # [[v1,v2,v3,v4]] - face_verts + for tri_face in tessellate_polygon(face_verts): + tri_faces_add([f[itf] for itf in tri_face]) + old_face_index_add(i) @staticmethod def _get_random_vectors_on_tri(v1, v2, v3, number): # returns random vertices for given triangle out = [] + side1 = v2 - v1 + side2 = v3 - v1 for _ in range(number): u1 = random.random() u2 = random.random() u1 = u1 if u1 + u2 <= 1 else 1 - u1 u2 = u2 if u1 + u2 <= 1 else 1 - u2 - side1 = v2 - v1 - side2 = v3 - v1 + out.append(v1 + side1 * u1 + side2 * u2) return out @@ -166,44 +314,118 @@ def _face_attrs_to_tri_face_attrs(self, values): class SvRandomPointsOnMesh(bpy.types.Node, SverchCustomTreeNode): """ Triggers: random points vertices - - distribute points on given mesh - points are created evenly according area faces - based on Blender function - tessellate_polygon + Tooltip: distribute points on given mesh """ bl_idname = 'SvRandomPointsOnMesh' bl_label = 'Random points on mesh' sv_icon = 'SV_RANDOM_NUM_GEN' - points_number: bpy.props.IntProperty(name='Number', default=10, description="Number of random points", - update=updateNode) - seed: bpy.props.IntProperty(name='Seed', update=updateNode) + viewer_map = [ + ("SvViewerDrawMk4", [60, 0]) + ], [ + ([0, 0], [1, 0]) + ] + + points_number: bpy.props.IntProperty( + name='Number', + default=10, + description="Number of random points", + update=updateNode) + + seed: bpy.props.IntProperty( + name='Seed', + update=updateNode) proportional: bpy.props.BoolProperty( - name="Proportional", - description="If checked, then number of points at each face is proportional to the area of the face", - default=True, - update=updateNode) + name="Proportional", + description="If checked, then number of points at each face is proportional to the area of the face", + default=True, + update=updateNode) @throttle_and_update_node def update_sockets(self, context): - self.outputs['Face index'].hide_safe = self.mode != 'SURFACE' - - modes = [ - ('SURFACE', "Surface", "Surface", 0), - ('VOLUME', "Volume", "Volume", 1) + self.outputs['Face index'].hide_safe = self.mode == 'VOLUME' + self.outputs[1].label = 'Face index' if self.mode == 'SURFACE' else 'Edge index' + self.inputs[1].label = 'Faces' if self.mode == 'SURFACE' else 'Edges' + self.inputs[2].label = 'Faces Weight' if self.mode == 'SURFACE' else 'Edges Weight' + + modes = [('SURFACE', "Surface", "Surface", 0), + ('VOLUME', "Volume", "Volume", 1), + ('EDGES', "Edges", "Edges", 2), + ] + + mode: bpy.props.EnumProperty( + name="Mode", + items=modes, + default='SURFACE', + update=update_sockets) + + all_triangles: bpy.props.BoolProperty( + name="All Triangles", + description="Enable if the input mesh is made only of triangles (makes node faster)", + default=False, + update=updateNode) + + safe_check: bpy.props.BoolProperty( + name='Safe Check', + description='When disabled polygon indices referring to unexisting points will crash Blender but makes node faster', + default=True) + + implementations = [ + ('NUMPY', "NumPy", "Faster", 0), + ('MATHUTILS', "MathUtils", "Old implementation", 1) ] + implementation: bpy.props.EnumProperty( + name="Implementation", + items=implementations, + default='NUMPY', + update=updateNode) + + out_np: bpy.props.BoolVectorProperty( + name="Ouput Numpy", + description="Output NumPy arrays", + default=(False, False), + size=2, update=updateNode) - mode : bpy.props.EnumProperty( - name = "Mode", - items = modes, - default = 'SURFACE', - update=update_sockets) - def draw_buttons(self, context, layout): + layout.prop(self, "mode", text='') + if self.mode != 'VOLUME': + layout.prop(self, "proportional") + + def draw_buttons_ext(self, context, layout): layout.prop(self, "mode", text='') if self.mode == 'SURFACE': layout.prop(self, "proportional") + layout.prop(self, "all_triangles") + layout.prop(self, "implementation") + if self.implementation == 'NUMPY': + b = layout.box() + b.label(text='Output Numpy') + r = b.row() + r.prop(self, "out_np", index=0, text='Verts', toggle=True) + r.prop(self, "out_np", index=1, text='Face index', toggle=True) + elif self.mode == 'VOLUME': + layout.prop(self, "all_triangles") + layout.prop(self, "safe_check") + else: + layout.prop(self, "proportional") + b = layout.box() + b.label(text='Output Numpy') + r = b.row() + r.prop(self, "out_np", index=0, text='Verts', toggle=True) + r.prop(self, "out_np", index=1, text='Edge index', toggle=True) + + def rclick_menu(self, context, layout): + layout.prop_menu_enum(self, "mode") + if self.mode == 'SURFACE': + layout.prop(self, "proportional") + layout.prop(self, "all_triangles") + layout.prop_menu_enum(self, "implementation") + if self.implementation == 'NUMPY': + layout.label(text='Output Numpy') + layout.prop(self, "out_np", index=0, text='Verts') + layout.prop(self, "out_np", index=1, text='Face index') + def sv_init(self, context): [self.inputs.new(p.socket_type, p.name) for p in INPUT_CONFIG] @@ -216,7 +438,12 @@ def process(self): if not all([self.inputs['Verts'].is_linked, self.inputs['Faces'].is_linked]): return - props = NodeProperties(self.proportional, self.mode) + props = NodeProperties(self.proportional, + self.mode, + self.all_triangles, + self.implementation, + self.safe_check, + self.out_np) out = [node_process(inputs, props) for inputs in self.get_input_data_iterator(INPUT_CONFIG)] [s.sv_set(data) for s, data in zip(self.outputs, zip(*out))] diff --git a/ui/nodeview_rclick_menu.py b/ui/nodeview_rclick_menu.py index cbf0cf806b..7632904d14 100644 --- a/ui/nodeview_rclick_menu.py +++ b/ui/nodeview_rclick_menu.py @@ -100,6 +100,56 @@ def get_output_sockets_map(node): def offset_node_location(existing_node, new_node, offset): new_node.location = existing_node.location.x + offset[0] + existing_node.width, existing_node.location.y + offset[1] + +def conect_to_3d_viewer(tree): + if hasattr(tree.nodes.active, 'viewer_map'): + view_node(tree) + else: + add_connection(tree, bl_idname_new_node="SvViewerDrawMk4", offset=[60, 0]) + +def view_node(tree): + '''viewer map is a node attribute to inform to the operator how to visualize + the node data + it is a list with two items. + The first item is a list with tuples, every tuple need to have the node bl_idanme and offset to the previous node + The second item is a list with tuples, every tuple indicates a link. + The link is defined by two pairs of numbers, refering to output and input + The first number of every pair indicates the node being 0 the active node 1 the first needed node and so on + The second nmber of every pair indicates de socket index. + + So to say: create a Viewer Draw with a offset of 60,0 and connect the first output to the vertices input + the node would need to have this: + + viewer_map = [ + ("SvViewerDrawMk4", [60, 0]) + ], [ + ([0, 0], [1, 0]) + ] + + ''' + nodes = tree.nodes + links = tree.links + existing_node = nodes.active + node_list = [existing_node] + output_map = existing_node.viewer_map + + previous_state = tree.sv_process + tree.sv_process = False + + for node in output_map[0]: + bl_idname_new_node, offset = node + new_node = nodes.new(bl_idname_new_node) + apply_default_preset(new_node) + offset_node_location(node_list[-1], new_node, offset) + frame_adjust(node_list[-1], new_node) + node_list.append(new_node) + for link in output_map[1]: + output_s, input_s = link + links.new(node_list[output_s[0]].outputs[output_s[1]], + node_list[input_s[0]].inputs[input_s[1]]) + tree.sv_process = previous_state + tree.update() + def add_connection(tree, bl_idname_new_node, offset): nodes = tree.nodes @@ -200,7 +250,8 @@ def execute(self, context): tree = context.space_data.edit_tree if self.fn == 'vdmk2': - add_connection(tree, bl_idname_new_node="SvViewerDrawMk4", offset=[60, 0]) + conect_to_3d_viewer(tree) + elif self.fn == 'vdmk2 + idxv': add_connection(tree, bl_idname_new_node=["SvViewerDrawMk4", "IndexViewerNode"], offset=[180, 0]) elif self.fn == '+idxv': From 23449a3accd64750f6844041635287425f2a8011 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Tue, 30 Mar 2021 16:48:44 +0200 Subject: [PATCH 30/35] random_points_on_mesh_ui_fix (#4001) --- nodes/spatial/random_points_on_mesh.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/nodes/spatial/random_points_on_mesh.py b/nodes/spatial/random_points_on_mesh.py index b4bc151ff6..9f9e5c56f4 100644 --- a/nodes/spatial/random_points_on_mesh.py +++ b/nodes/spatial/random_points_on_mesh.py @@ -345,9 +345,10 @@ class SvRandomPointsOnMesh(bpy.types.Node, SverchCustomTreeNode): @throttle_and_update_node def update_sockets(self, context): self.outputs['Face index'].hide_safe = self.mode == 'VOLUME' - self.outputs[1].label = 'Face index' if self.mode == 'SURFACE' else 'Edge index' - self.inputs[1].label = 'Faces' if self.mode == 'SURFACE' else 'Edges' - self.inputs[2].label = 'Faces Weight' if self.mode == 'SURFACE' else 'Edges Weight' + self.inputs['Face weight'].hide_safe = self.mode == 'VOLUME' + self.outputs[1].label = 'Edge index' if self.mode == 'EDGES' else 'Face index' + self.inputs[1].label = 'Edges' if self.mode == 'EDGES' else 'Faces' + self.inputs[2].label = 'Edge Weight' if self.mode == 'EDGES' else 'Face Weight' modes = [('SURFACE', "Surface", "Surface", 0), ('VOLUME', "Volume", "Volume", 1), @@ -425,7 +426,13 @@ def rclick_menu(self, context, layout): layout.label(text='Output Numpy') layout.prop(self, "out_np", index=0, text='Verts') layout.prop(self, "out_np", index=1, text='Face index') - + elif self.mode == 'EDGES': + layout.prop(self, "proportional") + layout.label(text='Output Numpy') + layout.prop(self, "out_np", index=0, text='Verts') + layout.prop(self, "out_np", index=1, text='Edge index') + else: + layout.prop(self, "all_triangles") def sv_init(self, context): [self.inputs.new(p.socket_type, p.name) for p in INPUT_CONFIG] From e816073d9f55fd7fec617283ba90146eba57981b Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Wed, 31 Mar 2021 18:24:32 +0200 Subject: [PATCH 31/35] matrix out format fix (#4003) * matrix out format fix * apply @Durman api suggestions --- core/sockets.py | 8 +++- node_tree.py | 9 ++++- nodes/matrix/matrix_out_mk2.py | 69 +++++++++++++++++++++------------- 3 files changed, 56 insertions(+), 30 deletions(-) diff --git a/core/sockets.py b/core/sockets.py index e0192a76c5..42541633e3 100644 --- a/core/sockets.py +++ b/core/sockets.py @@ -666,6 +666,7 @@ class SvMatrixSocket(NodeSocket, SvSocketCommon): color = (0.2, 0.8, 0.8, 1.0) quick_link_to_node = 'SvMatrixInNodeMK4' + nesting_level: IntProperty(default=1) def do_flatten(self, data): return flatten_data(data, 1, data_types=(Matrix,)) @@ -814,7 +815,7 @@ class SvColorSocket(NodeSocket, SvSocketCommon): default_property: FloatVectorProperty(default=(0, 0, 0, 1), size=4, subtype='COLOR', min=0, max=1, update=process_from_socket) expanded: BoolProperty(default=False) # for minimizing showing socket property - + nesting_level: IntProperty(default=3) def draw_property(self, layout, prop_origin=None, prop_name='default_property'): if prop_origin is None: prop_origin = self @@ -837,6 +838,9 @@ def draw_group_property(self, layout, text, interface_socket): layout.prop(self, 'default_property', text=text) else: layout.label(text=text) + + def do_flat_topology(self, data): + return flatten_data(data, 3) class SvDummySocket(NodeSocket, SvSocketCommon): '''Dummy Socket for sockets awaiting assignment of type''' @@ -1234,7 +1238,7 @@ class SvLinkNewNodeInput(bpy.types.Operator): @classmethod def poll(cls, context): - return hasattr(context, 'socket') + return hasattr(context, 'socket') def execute(self, context): tree, node, socket = context.node.id_data, context.node, context.socket diff --git a/node_tree.py b/node_tree.py index e58af361e5..baa69632e8 100644 --- a/node_tree.py +++ b/node_tree.py @@ -184,7 +184,7 @@ def on_draft_mode_changed(self, context): sv_show_error_details : BoolProperty( name = "Show error details", description = "Display exception stack in the node view as well", - default = False, + default = False, update=lambda s, c: process_tree(s), options=set()) @@ -322,6 +322,11 @@ def init(self, context): sys.stderr.write('ERROR: %s\n' % str(err)) self.set_color() + def sv_new_input(self, socket_type, name, **attrib_dict): + socket = self.inputs.new(socket_type, name) + for att in attrib_dict: + setattr(socket, att, attrib_dict[att]) + def free(self): """ This method is not supposed to be overriden in specific nodes. @@ -603,7 +608,7 @@ def migrate_from(self, old_node): def get_and_set_gl_scale_info(self, origin=None): # todo, probably openGL viewers should have its own mixin class """ - This function is called in sv_init in nodes that draw GL instructions to the nodeview, + This function is called in sv_init in nodes that draw GL instructions to the nodeview, the nodeview scale and dpi differs between users and must be queried to get correct nodeview x,y and dpi scale info. """ diff --git a/nodes/matrix/matrix_out_mk2.py b/nodes/matrix/matrix_out_mk2.py index 33770ba093..43f81370a1 100644 --- a/nodes/matrix/matrix_out_mk2.py +++ b/nodes/matrix/matrix_out_mk2.py @@ -48,6 +48,11 @@ class SvMatrixOutNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvAngleHelper, Sv bl_icon = 'OUTLINER_OB_EMPTY' sv_icon = 'SV_MATRIX_OUT' + flat_output: bpy.props.BoolProperty( + name="Flat Quaternions output", + description="Flatten Quaternions output by list-joining level 1", + default=True, update=updateNode) + def migrate_from(self, old_node): ''' Migration from old nodes (attributes mapping) ''' if old_node.bl_idname == "MatrixOutNode": @@ -80,7 +85,7 @@ def update_mode(self, context): items=mode_items, default="AXISANGLE", update=update_mode) def sv_init(self, context): - self.inputs.new('SvMatrixSocket', "Matrix").is_mandatory =True + self.sv_new_input('SvMatrixSocket', "Matrix", is_mandatory=True, nesting_level=2) # translation and scale outputs self.outputs.new('SvVerticesSocket', "Location") self.outputs.new('SvVerticesSocket', "Scale") @@ -105,40 +110,52 @@ def draw_buttons(self, context, layout): def draw_buttons_ext(self, context, layout): if self.mode in {"EULER", "AXISANGLE"}: self.draw_angle_units_buttons(context, layout) - + elif self.mode == 'QUATERNION': + layout.prop(self, 'flat_output') + def process_data(self, params): input_M = params[0] outputs = self.outputs # decompose matrices into: Translation, Rotation (quaternion) and Scale - location_list = [] - quaternion_list = [] # rotations (as quaternions) - scale_list = [] - angles = [[], [], []] - axis_list, angle_list = [], [] - for m in input_M: - T, R, S = m.decompose() - location_list.append([list(T)]) - quaternion_list.append(R) - scale_list.append([list(S)]) + result = [] + for mat_list in input_M: + location_list = [] + quaternion_list = [] # rotations (as quaternions) + scale_list = [] + angles = [[], [], []] + axis_list, angle_list = [], [] + for m in mat_list: + T, R, S = m.decompose() + location_list.append(list(T)) + quaternion_list.append(R) + scale_list.append(list(S)) + + if self.mode == "EULER": + # conversion factor from radians to the current angle units + au = self.angle_conversion_factor(AngleUnits.RADIANS, self.angle_units) - if self.mode == "EULER": - # conversion factor from radians to the current angle units - au = self.angle_conversion_factor(AngleUnits.RADIANS, self.angle_units) + for i, name in enumerate("XYZ"): + if outputs["Angle " + name].is_linked: + angles[i] = [q.to_euler(self.euler_order)[i] * au for q in quaternion_list] + elif self.mode == "AXISANGLE": + if outputs['Axis'].is_linked: + axis_list = [tuple(q.axis) for q in quaternion_list] - for i, name in enumerate("XYZ"): - if outputs["Angle " + name].is_linked: - angles[i] = [[q.to_euler(self.euler_order)[i] * au] for q in quaternion_list] - elif self.mode == "AXISANGLE": - if outputs['Axis'].is_linked: - axis_list = [[tuple(q.axis)] for q in quaternion_list] + if outputs['Angle'].is_linked: + # conversion factor from radians to the current angle units + au = self.angle_conversion_factor(AngleUnits.RADIANS, self.angle_units) + angle_list = [q.angle * au for q in quaternion_list] + result.append([location_list, scale_list, quaternion_list, *angles, axis_list, angle_list]) - if outputs['Angle'].is_linked: - # conversion factor from radians to the current angle units - au = self.angle_conversion_factor(AngleUnits.RADIANS, self.angle_units) - angle_list = [[q.angle * au] for q in quaternion_list] + if self.mode == 'QUATERNION': + output_data = list(zip(*result)) + if len(output_data[2]) == 1 and self.flat_output: + output_data[2] = output_data[2][0] + return output_data + + return list(zip(*result)) - return (location_list, scale_list, quaternion_list, *angles, axis_list, angle_list) From 7b21a72b843e1443e53c91b9bb9cc0708c0cab58 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Wed, 31 Mar 2021 19:34:32 +0200 Subject: [PATCH 32/35] fixes #3987 (#4004) There as a trouble of creating itertools iterators from other iterator items... change one of the to regular matching strategy --- nodes/generator/line_mk4.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/nodes/generator/line_mk4.py b/nodes/generator/line_mk4.py index c50d79b9bc..83ad086db2 100644 --- a/nodes/generator/line_mk4.py +++ b/nodes/generator/line_mk4.py @@ -24,7 +24,7 @@ from bpy.props import IntProperty, FloatProperty, BoolProperty, EnumProperty, FloatVectorProperty from sverchok.node_tree import SverchCustomTreeNode -from sverchok.data_structure import updateNode, numpy_list_match_modes, iter_list_match_func +from sverchok.data_structure import updateNode, numpy_list_match_modes, iter_list_match_func, list_match_func Directions = namedtuple('Directions', ['x', 'y', 'z', 'op', 'od']) @@ -57,16 +57,18 @@ def make_line(numbers=None, steps=None, sizes=None, verts_or=None, verts_dir=Non :return: np.array of vertices, np.array of edges """ line_number = max(len(numbers), len(sizes), len(steps), len(verts_or), len(verts_dir)) - list_match_f = iter_list_match_func[list_match_mode] + list_match_f = list_match_func[list_match_mode] params = list_match_f([numbers, steps, sizes, verts_or, verts_dir]) + vert_number = sum([v_number if v_number > 1 else 2 for _, v_number in zip(range(line_number), params[0])]) + verts_lines = np.empty((vert_number, 3)) edges_lines = [] num_added_verts = 0 indexes = iter(range(int(1e+100))) - for i_line, n, st, size, vor, vdir in zip(range(line_number), *params): + for n, st, size, vor, vdir in zip(*params): vor, vdir = get_corner_points(dir_mode, center, vor, vdir, get_len_line(size_mode, n, size, st)) line_verts = generate_verts(vor, vdir, n) edges_lines.extend([(i, i + 1) for i, _ in zip(indexes, line_verts[:-1])]) From cc731594ef9d0fd766c6b35e8b1483e91cf51804 Mon Sep 17 00:00:00 2001 From: stansu Date: Thu, 1 Apr 2021 14:48:11 +0800 Subject: [PATCH 33/35] correct typo correct 'to' to 'too' --- docs/nodes/solid/chamfer_solid.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/nodes/solid/chamfer_solid.rst b/docs/nodes/solid/chamfer_solid.rst index 977d245649..22ae3c133b 100644 --- a/docs/nodes/solid/chamfer_solid.rst +++ b/docs/nodes/solid/chamfer_solid.rst @@ -33,4 +33,4 @@ Notes - The Distance A and Distance B depends on the orientation of the edge. -- If Distance A or Distance B are to big the node will became in Error state and will not perform the operation. +- If Distance A or Distance B are too big the node will became in Error state and will not perform the operation. From 4bacd8ad3d9d986823b9d92fe812c0285a17d363 Mon Sep 17 00:00:00 2001 From: stansu Date: Thu, 1 Apr 2021 16:03:38 +0800 Subject: [PATCH 34/35] fixing some typo as title --- docs/nodes/solid/general_fuse.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/nodes/solid/general_fuse.rst b/docs/nodes/solid/general_fuse.rst index 42cf7e71d2..70312d13d6 100644 --- a/docs/nodes/solid/general_fuse.rst +++ b/docs/nodes/solid/general_fuse.rst @@ -20,8 +20,8 @@ parts, one application of "Solid General Fuse" will give you better performance compared to many "Solid Boolean" applications. To illustrate what exactly this node does, it's simpler to draw some 2D -pictures first. Let's say we have a circle (object number 0), a square (object -number 1) and a triangle (object number 2): +pictures first. Let's say we have a circle (object number 0), a triangle (object +number 1) and a square (object number 2): .. image:: https://user-images.githubusercontent.com/284644/94195404-65079280-fecc-11ea-8ec7-73b8b357c063.png (Figure 1) @@ -47,8 +47,8 @@ and 1, i.e. we remove the intersection of the circle and the triangle: .. image:: https://user-images.githubusercontent.com/284644/94196223-7f8e3b80-fecd-11ea-975e-b20b193f4e62.png (Figure 3) -Or, let's leave only parts, for which the set of source objects is ``[0,1]``, -``[1,2]``, or ``[0,1,2]``: +Or, let's leave only parts, for which the set of source objects is ``[0,2]``, +``[0,1,2]``, and ``[1,2]``: .. image:: https://user-images.githubusercontent.com/284644/94196342-a482ae80-fecd-11ea-91ef-6d564e325491.png (Figure 4) From 8bef7918a6bcbb05772c040bbbb189b4b27f5eb8 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Thu, 1 Apr 2021 19:09:41 +0200 Subject: [PATCH 35/35] Partial menus (#4008) * partial menus * to shortcuts docs --- docs/shortcuts.rst | 8 ++++++++ ui/nodeview_keymaps.py | 17 ++++++++++++++++ ui/nodeview_space_menu.py | 41 ++++++++++++++++++++++++--------------- 3 files changed, 50 insertions(+), 16 deletions(-) diff --git a/docs/shortcuts.rst b/docs/shortcuts.rst index 757e278291..689cba0b40 100644 --- a/docs/shortcuts.rst +++ b/docs/shortcuts.rst @@ -8,6 +8,14 @@ This is a collection of shortcuts useful in the Sverchok node tree, some are Ble **Shift + A** - Add node menu +**Numbers 1 to 5** - Partial add node menus + + - 1: Basic Data Types: Number, Vector, Matrix, Color, List and Dictionary + - 2: Mesh: Generators, Transforms, Modifiers and CAD + - 3: Advanced Objects: Curve, Surface, Field, Spatial, Pulga Physics, Alpha and Beta + - 4: Connection: Viz, Text, Scene, Exchange, BPY Data, Network and SVG + - 5: Sv Interface: Layout, Monad, Group and Presets + **Shift + S** - Add solids node menu (needs FreeCad) **Alt + Space** - Add node search menu diff --git a/ui/nodeview_keymaps.py b/ui/nodeview_keymaps.py index 9b9e9a9c88..c5fd52260e 100644 --- a/ui/nodeview_keymaps.py +++ b/ui/nodeview_keymaps.py @@ -194,6 +194,23 @@ def add_keymap(): kmi.properties.name = "NODEVIEW_MT_Dynamic_Menu" nodeview_keymaps.append((km, kmi)) + # numbers 1 to 5 for partial menus + kmi = km.keymap_items.new('wm.call_menu', 'ONE', 'PRESS') + kmi.properties.name = "NODEVIEW_MT_Basic_Data_Partial_Menu" + nodeview_keymaps.append((km, kmi)) + kmi = km.keymap_items.new('wm.call_menu', 'TWO', 'PRESS') + kmi.properties.name = "NODEVIEW_MT_Mesh_Partial_Menu" + nodeview_keymaps.append((km, kmi)) + kmi = km.keymap_items.new('wm.call_menu', 'THREE', 'PRESS') + kmi.properties.name = "NODEVIEW_MT_Advanced_Objects_Partial_Menu" + nodeview_keymaps.append((km, kmi)) + kmi = km.keymap_items.new('wm.call_menu', 'FOUR', 'PRESS') + kmi.properties.name = "NODEVIEW_MT_Connection_Partial_Menu" + nodeview_keymaps.append((km, kmi)) + kmi = km.keymap_items.new('wm.call_menu', 'FIVE', 'PRESS') + kmi.properties.name = "NODEVIEW_MT_UI_tools_Partial_Menu" + nodeview_keymaps.append((km, kmi)) + # Shift + S | show custom menu kmi = km.keymap_items.new('wm.call_menu', 'S', 'PRESS', shift=True) kmi.properties.name = "NODEVIEW_MT_Solids_Special_Menu" diff --git a/ui/nodeview_space_menu.py b/ui/nodeview_space_menu.py index d354382008..2c665c66c9 100644 --- a/ui/nodeview_space_menu.py +++ b/ui/nodeview_space_menu.py @@ -36,6 +36,7 @@ from sverchok.utils import get_node_class_reference from sverchok.utils.extra_categories import get_extra_categories, extra_category_providers +from sverchok.utils.context_managers import sv_preferences from sverchok.ui.sv_icons import node_icon, icon, get_icon_switch, custom_icon from sverchok.ui import presets import nodeitems_utils @@ -81,7 +82,7 @@ def category_has_nodes(cat_name): ["NODEVIEW_MT_AddViz", 'RESTRICT_VIEW_OFF'], ["NODEVIEW_MT_AddText", 'TEXT'], ["NODEVIEW_MT_AddScene", 'SCENE_DATA'], - ["NODEVIEW_MT_AddExchange", 'SCENE_DATA'], + ["NODEVIEW_MT_AddExchange", 'ARROW_LEFTRIGHT'], ["NODEVIEW_MT_AddLayout", 'NODETREE'], ["NODEVIEW_MT_AddBPYData", "BLENDER"], ["separator"], @@ -190,30 +191,30 @@ def draw(self, context): # print('AA', globals()[item[0]].bl_label) layout.menu(item[0], **icon(item[1])) - extra_categories = get_extra_categories() - if extra_categories: - layout.separator() - for category in extra_categories: - layout.menu("NODEVIEW_MT_EX_" + category.identifier) if extra_category_providers: for provider in extra_category_providers: if hasattr(provider, 'use_custom_menu') and provider.use_custom_menu: layout.menu(provider.custom_menu) + else: + for category in provider.get_categories(): + layout.menu("NODEVIEW_MT_EX_" + category.identifier) -class NODEVIEW_MT_Solids_Special_Menu(bpy.types.Menu): - bl_label = "Solids" - @classmethod - def poll(cls, context): - tree_type = context.space_data.tree_type - if tree_type in sv_tree_types: - #menu_prefs['show_icons'] = get_icon_switch() - # print('showing', menu_prefs['show_icons']) - return True + +class NodePatialMenuTemplate(bpy.types.Menu): + bl_label = "" + items = [] def draw(self, context): layout = self.layout layout.operator_context = 'INVOKE_REGION_WIN' - layout_draw_categories(self.layout, self.bl_label, node_cats[self.bl_label]) + for i in self.items: + item = menu_structure[i] + layout.menu(item[0], **icon(item[1])) +# quick class factory. +def make_partial_menu_class(name, bl_label, items): + name = f'NODEVIEW_MT_{name}_Partial_Menu' + clazz = type(name, (NodePatialMenuTemplate,), {'bl_label': bl_label, 'items':items}) + return clazz class NODEVIEW_MT_AddGenerators(bpy.types.Menu): bl_label = "Generator" @@ -406,6 +407,14 @@ def draw(self, context): make_class('SVG', "SVG"), make_class('Betas', "Beta Nodes"), make_class('Alphas', "Alpha Nodes"), + + # make | NODEVIEW_MT_ + class name +_Partial_Menu , menu name, menu items + make_partial_menu_class('Basic_Data', 'Basic Data Types (1)', range(12, 20)), + make_partial_menu_class('Mesh', 'Mesh (2)', [1, 7, 8, 9, 10]), + make_partial_menu_class('Advanced_Objects', 'Advanced Objects (3)', [2, 3, 4, 5, 6, 28, 30, 32, 33]), + make_partial_menu_class('Connection', 'Connection (4)', [21, 22, 23, 24, 26, 29, 31]), + make_partial_menu_class('UI_tools', 'SV Interface (5)', [25, 35, 36, 37]) + ] def sv_draw_menu(self, context):

tq7<5&7fcl^}JPEBpmaG!SF}d0kmtNUKGEDBMjA_ilWou*PUvcxz zeZc&@kQpdD{xo3Wi;z0SqzLOq1`i5u)D{*@$qrxjf-73-b#~%xRPpx$J%L< zkSN%#f~E)<=R&}LAMjyWxZrze`1fyj-Og{3dWLpOJryWZiDz#K+KrB`U8oJ>WjlXs zu`5yxW|}pf#H*n}nmqI&4WVR3Rm4abCwjo%aBv@3kAHM%{obYxSJKQ4?}HL`6SEV> zKS4S0Dar+MQItx5V&0OIyTM!@S2wpIp6c)z`D1+E$jfDT2kyF`p{|f$RMl$ihHSfr zf3|$XmL(4lF74`Fd>8kXzvZiW?O*;PKSFiDTtZ*_DRMy~q2W2rPb|Co>V-drm%Cnu zrI*PTDt?#3gUqToIk*K53g^$tgM9LLyg~l5yu3+@DsLM46lL$hoMAoY44|nuI92F| z_3yp6ZQBOTQRn&31w0QQ*&C9`_X!`lOSAtxyr2tVs1|=cK)koXsR@UspfV-=ZvGqT z8$nkh7c9+h7Pj{`?e4{c2>Gl?7@*wb;YKN7_)b_G<_!xj1;~ERDE z#03@e_H1$~_(JP*mjfB#k32wLWSLlw!W{v)tVU8V|QnmUD`^f&A?8Mio{27>@~eCS4tj@uM~l46?#9?_ndz(qCbfr$n|1I10{ zhi+-AEpME_RpU-N6k!#1;EDg1KXVWJhs>wWj3K-D}W!_MA$kwl_0lZEpVf7 z2pyyh_%qi}(%yOJM)~)U!kOv&rL|$fOP%svPA6aDY_`u5v@RWP%63?kUjO>OcRol+D19iu&h=hxQBBo-_rx2e>o8Hd&KVPK%)G(U z5m{gHtg|8Ix}l`-Yx48OSh&Ykho}w7f-g-x*DRkJ*=PX@%<7a!%-YhL|hC+D2DWfTgZAahs2tLB-le;gB zEquZhPPMo1oTS}*c4qn^?!R>D(y(CuxpU|p`z%dRGw8bvExducXi3=KY&&$e&G)H> zhC`Pc zMALXgks1FR=#F{e2rUd_3F7OfjPH+XoKXor#j&O=pE)yY!s2}Fni^e{&vXs{+F(dZ znp-X3%G;+H3*?)4dvZKH0d;N&_!ptI{%Au@{4|x;CL{kkBEn5-3#usbmgA@&ig>tN z(<{OQ%Yq0ITxcOenf!R2%jBvPmj{ZwfST+Y5l+fMGX5lBO;+Oq7&_ujGN!&@u5S4sWo5UTrmk8Grd&h96CGVMMK6Cs zbY6$cy{Id^9iaz7rO|Mjhe6i!d-vUPdv=PocwR;MwYwwZqV?wOn>Rbt9BFe3Vhd+E z4dDrf@GAlHGQfOH>Lh$dcu5HY(wv1qw#A;cbZNt$J!x$PS$vvv!v?2(A_?^tquvX^ z1q0~TSTM<|an43hUVyGL3;D`2#!C$bLq$EWm-ok6j5w_yI@&H*5c-doPzw>IaKGn?{Mwob~rOTl{QEj ze1N);EfZwQqP3BI_T?Y6c62Q{xO>IYmc@IXdyY$A-GBc%!YLPHO*lUF!NvUW(8)4L8S2yg;c?W5|4Q~6b72G&`2F%r zpP%H@&z6_h@aFOb|NfDdJ&SN<57G0Yr#v zVCWUPc(l#+B9IBLR-L@8?DVlAsBnJ$M2+9#*|?XFXXB!Ot=xw{!#5*tgBWLKIKmUT zTrY$NOdHA_S+9l$bp{3m=4ea8LVeZ-1_bBotN7-mX#X0ExIj0Y8lJ)PKu-~aK+N1? zfYCW6!s`6%)=pW6er`ZN4@*sCpCFwAcUTV*7grRA-ooo^N{fn0YpTioR(EyzIIEtl zbo#7nBP;9#42liDpx8Jqg6pFW?x?L>RJ_>La+x)K>(4G53+`ZAJP4hAD# z7Q)h{5Gfrp3VwjwP0>?QwT5hiuZX6T&yVg?U^UU|q1(!WN^**O2lO>Psf)+y&ffuQ8(o0-yrN>Hu^!nEM@>| zoK9p4$oWOQPE31`ZEN1PZQB+1F1vi=!Uwi)+t%0D=Y*YZm%rp;@_wgN^kbBFRBzIu zau9fkw;$*2=qowEN6?lHSxH2x)kv7ChR|oQvFP&%W1-)UY+=>$lz4h=YTUj}*G9x= z#BNvbQcc?*oq_0#C7iEt8jUjoc0gAprQPIRWD75Fe<@B&%S=m)hyo5*NOk<6bXegJ zvb4T<^Mefy$1xkILm~uEA~7%;;28!BIF0CHM%$hf7{djT;Bj-uw(`zSXH9rSM0oXJ zW98kIjp9-|E&1-0jEodq4lQ|Yi9KTS@yQX16cSbf!}65~LfGvl`7&IA2hGU`fkz}f zpk&-%)U%~{lqQqnz{1^v=Qo&U2n&mvo-@6x+|jlqKi4|xyYDtl3X@87kyc)$(@o6| z?N3adlau>YxO|#@9nGrLiWS%K9CekD>lGn^R zb7mIMWnO8x(HKq_z!rX_$cco~h$HZbu_fIUCSscVYWCruf}mV`_0`CZz-1Qn-N$~# zuXW3@XRuNz5s?$P_OCsrusMy@<%N3Rs8x6Us_fRZL~Fvdyqvj)Qe&Xy#{$kE;A{pQ zBU&dehl(e`8xcw6PDrYrZ=O}OZ1Ie^$dcTM_^8-M*OjSuUX(i{FEcwLCNDZNIo6Oj zV9AM#hNdB!-j6xl24xPXwPf4n#&&fIhi9u`N1uY;hVCa1Y;@KRFIwooW0*R{nN7w9 z_z59tad5rJIe@3sD+d`20W>ai(Fo1WbTl`k=$JdUI-+9Wl-v2-I-jQM8rOo>1e>$< zx|$lkZeD$GgR|Hc@5q;nQJ-)<#l2uh+98F)o2Q%+_kuG<&z^>jX~pUa_&~59_DnH5 z!WdpmK8DTT<@8o^CIXSu4(`D~qM#f;qcp1-zo8xPtE3Ylc%`I5)t+;y1xP}D|?~x|K zKL`*SiDi%C?>(C0L3R$&2@8MrU`9bvshPXtircd0%}t1&8dp8c$~i+HJ8UKBsXiDpDYRQo*fA1*?u_c*4K_yFS z(b`udjmdv6dq`(VOSk1^%rO;agzuL=A8Avs_R9=yj~Jv@<@wXDJ! zj_ByvhDu-h0Ejn#2Vp!`!G;gQWOCrVsnG^UsU~35W6VsA>lBP*fcL;hO zj(w4z30IdhjmE+q2sv+;?E@ri`D1iQo}ALy7+WtJvd zK;+*bykV}fOFq92{Yi5DqulVaJUl5QrDgBkk^PU!&qa6<$&( zWt%*6MdXnQ&vGPZ6sfqF3X%5_V~DY$9L>J5{fAYcSsip9qDI4^k z>h2w_Oa1q#>xKRYUbJp6>OQEsu>T&_)&4h)Kv4QW+P;Qu1&l))kN%HVr<|_n|46PW zK=fa&E~x~NNFMmF!DqoEu^c6A2HU21eR?qoK|bc!$lK-QsF}O|ekFIu=V8IMJAL;D z=f5%amz124rWBe6R&z8fbP)xi=8FD3fo>ShA6=juG)hcO&|YL}C?+lJhC8)4g1<+m zhDP(F3A0M1FIx}^75U6@nI-ZCL=4ZfJ&gAE%|Zgf0VV%Yd&D2%SYJ9KA>Y@es>BaW z+^SILi+?~rONDO@Tl{@90nNlpf8yNT!xIeg#qxR5JD%3SOQru*jD#=Z2AC(g=Z@by z3U>&`mnWvkM^FSqKe{MIIM%Xk=RfCv5;HM%aTOv127cARz>NO>8REL#eS@!pSBCH5 zCp8A(8BdrhG$ebgs&51r>`2-}zHFdhmQ82SV&1418PDjTs0t%7O>hKm%3Ogv=ULPL z=)a>tq&}s^eaY>l%5jslni8P8Fj-2C*M;))sSq|v$-xOeh0iiZDm;98?t~{l9Ar)KLZ=i>F5Ix56KYN{{0X zPtb#cBfc2}d6W@6Axlc`PtcR1nQ)mj$c!r)z+iN`NzDQZ+b|{-h_RqG2b3oYq*)c^ zqsgXVrtF!KejOQU*UFKUbm|}y=G#V6(j05S8GjEj;KLvn;C5WpFoUw*%soj|W?N!9 z4sJT!(3odys;!EPOv%nGF6vn~wI#nO-dUu#6sjsY_+`b|7PTk<1?d_B!^Tw3~gYb{jFx{o(DV z|F8N>KJ+CLneP%0_cUF!b*Iy#-xO!EVRyg}ruRj3@5S?~+6naUMR1eWda7Ue;tEe3 zR(WFT565!E6S+8E&k1?F7$$zIuja<#3)rS;%o7PCMR80x8;45$VR`7LOq-7_Q#kxN zijV*7MKjaV#wn?(Q^X7)PB{ES4_^dr;%ACudSU)(#*UB~7onJ8E~h|3EJ95PxZ50x zWK-;2JDT?Wc)_x$$nucFqMZeW9ZM@y^ivXji}QY|DO_=WUQ}#ER8&UYhUiE?OXSq4 zxurn|X68Gsy0EIs{+3ypt1Z!~Q4!oUJ3rcF#Jpky<`tClhNI>&uTWy}VnQn>K%>)& zY-L(8cea`ezif0?QSI+6Q}g0ZbxNU8*IB)RIcBut{kda6q%S7OX#Wg~;=-)< zvFkujWewL4gbl%*0QP1mgYSh6pO|uMDqD@q!UJz1_Y;8sRuTAdEs&slsrVmOX@e2C zbStU{KS48J3W2$>l{XYYap%HmtwtbZggj$+F1!t-eOn~Mi>@1TD9P|~0et!CmEHg#=2@!@SsGx-aSx=0@An`M81LqD9f>TeOztADzS{VwsCoUl&RLTy|YX#FP3`C zGiMvO%KK?K?Y8=g1(8#HXUzUv!Tq$(811=0IVF~f$UiLaxD^TdiBn`_bLYtuXxy>+ zbYAYMXf1G>||gyVxPqE9|{}tGd_FY z4}SQ5*pMG}-f$7ktjN!J@G}(N8Q%iQj~joAt3->u&?U70MQr2vChwkLgf473CQjBgpZkd#lRv__mV;zmIE8HFzX1`B+<-fu8#cNk#^O;u0!~Z%k^PLhCgaw3~XM=XrC7srz_L7%$I1bt-0({IrOlh;;?vDK+M=thE@kvcN`c zdco>~cJS!f6$Ul%glN9;L*RimFMzijeEEIw#M-Kf@e}I&0+4!z7cYP+JT{`Ug6Cn; z?-*VO9(#S! zvJzslBSHwbjiO^ZU%TysRl!oA{4yx;wGmiYpUkW ztJ2s~bjC7dJ$_NT z;ZKYBB6A6@)KSbbOHo7ov@Gya)5=uS1L%nKC=8*AwbW_B4E+y`vBvg z=(9gzF|rCN(A~RF+>4PEU?Xdiq^+VOSc4Ba{{#3_#68^WJ;^wNcFMX&WzFXw#G22U z=~r}5(t57?jJD5miY1O>;U{NnktaR^9pnSNR9{!b6?>W_a_E3Fl_^A-6I4d+^;!iz z>4d5yFO|dRY^zj;bs*&DF!I#wY6!@#3%B!#I9=_W5?#rhT3wv9-E6d1SKEznDyZE* zNvrq_q0@jH?BEQoyxH|HBSvqM`?4Oj4$*s%{U+8c5R z8)_$^<0}`;ne1O~EO|0j7k|@D(5)!DO{y0AH=t)Gb`0O1z|oM7c{qQF-ARqu)A5N(CQVEoU}Gsv63yH)ZXv?LYcg(#)vHx1SN zSo0)pXr|fT!5=Iulb@dy;>?)NOVEA|){?yGvDZ^<3RCxb8u9Eqk7wV>R{o*->}~!E zuaJIDYg90Hw5l(CX?AfOe?{z{=Im{(0>v_IdX8)>`u-PsEVft+8oxcff>&Ud2c9c? zP{ng)_ce|GHo(74z{iL|h{d`Yy8eOS92jZKyZz3;nDtRJWSdE@=-M6xf45QyoO8hQ8h@y9%$z$+f}TneMT z;quoL?gB5K@K;_x@z3k9WqjELyTd2kGM+F&LBU@yV%^n3vF=J;b;TEsth6F}k9jWE zYDgoiH0U|))qlccKl2k}#esW2vog-KHv}^V$eBp2xkU~u$FR(Z-W1|hY#hJ+fd?K) zw_e`kT1NL+taPrZGK!#;(35Ndq2`uU$F*6I3ninTwidr zn6?9cCg6V#__WRfzM7VnIACLW>HXb~HGQ-dNJ<>~0DVnCxxb;@MfBghu4?|;!VsbV zy0EXI!WJ}1aE_Q_~9u=FOa#>C%}uekpJ?~uQ|>oJ~kWC?fiTI{K~ zO}+(nE~PVzhYuoOG`bJ|r2JwH&ja7|YIf1MUTQ5A){RQuSd;9Bf)-`dlwI;(eb43< z3rY_?CVe(!;MdE)l>Wp(kzlq{3gsV)7_NiX_P9N`Ot(`h1^|29uqYQJ0SB4FC{}$O z#VFOp!rcMYbLUnElvu5WxXY~ym}j;AR*FsVo#mD5n;0t}9KGLJS);3|bT}$<hRr zj-9j3vH3GgOwH=2;Mq&{?NZO?4eR-D(Qk~OvU|fVHwqWc+c-%(Gkw<}-`8E0Z?oYmcv$LZE+o(G_NQP=qPuZ7^Rcz|cY`C26 zE!S`I>9jy`^8wnSJ@6q+#f5d$-Pg*JMwFc{zlmMlw5T!Sz>)#%!j`WfyL55-|L}8G z(7M>CD)yVxu0A1=TK?{io*Q;_IXXK#`4agqzC>KH7fn73bT8TVrSQU;T)YvrmA}pG zyn4@BC@i<~yTp9?&(wPjOOc|~doLC$(T-O7^Jc-)9`)Xb>7_T-dtWwRbFF&s#|&P6 z>b*biYt;Kd7VfoAy~oZ@uMgGxV7A+bR=?9<2#fOh5E99~V1IGG5=kfBa~8)hSMRYl zogY!}ah`$LUr%McSe#U>{*F_}q;=}O4@;KrQ15-&UD6-bdq0-0d0)NvXX#!>^*)fL zdeQnyf*FMSht&IEZuI&}y$@m2eeOY~r5kIKH{$H24y?IpXZ_3wA7cfZg3nC#q^nfi z7b08Ui&rh$1rDI-p~YQry7y9=`}BX)_m;GC%*z%oJ-2XMWxZW5k$qfS4| zLrb1;)A79TRMB% zjjaPCPm|~X#k>_t+4L3NYmDpHuTS^*J|)$-zN5e0Sliau*1N8))mYr!)o-lAF^ooA zU3*J!8=4=*g{awvo)X0>1>Tq`i(VdUlE)u-dj&1D!2cYBWmk zYCP)@6zCO{A4~U{fPU#VsRWIA2CdW-ov!ZeSl8CuI#8%|b*AwGtY(6287O>dxa0fM zh`#g+uAxyfBI27a+J%L0Z0qgo=G5sg|mf;+m!wOu@!ND`>d3Y6;*qhdtOZndUThrTOZ){oy?K=n588gcAp zfZT$b^m_+Ra~tr0(uG20g!rtQFPd-j;Oqc z39fI40u&0Xu6t$wdT1*ne&_^ab@f4&4Ro~Zds&Q0;r==SO zFtsj$X<66O(b=-RvrSQuEym*f`C#FhMs>{lR`hoC^!KIrb#$h8_pX{+T?~x=pSp1= zfD##M#)bze?yTBv@r!cdT>L6=3AXb8<5MKL24_ZIjnfyO!+DEmac(1>z<3B}JKoK` z*bO+n@hY4l`xQ=j+=}R^a5uR`v!s z|2R&0e4D+AQz75NS&u7mUgJABxA75h&|h)3Bc0s%Ul_12aAM?k?7-}RCR_t9>tc6+ z&(?zXNbi$2TnFC$9Q*VyhbQqP?8n-KlPmAU`L$cH_Vr4fM|losO8ypSNd5_DTt0@A zCqKc7lytJ>y*Q=v58PXvI!UKX{*HabeQ=uPq4^^Fg;ZGU zJJ8jUk&&OFein((%)%V;X)h@Bnm5qfOHNKvZzP33045|4ylZHw)A%a4n1RZLM%O9(S!4- zG0RlG;hDn!)LH=iWp7+1v}&bYK;W5Mk;yoKv6=>2zk<~-ui=#gzBmr;egZr)3#0!9 zRy+L#uekzN0DQ{cacyH3kEbIt*3#11&k|Smwya>OogJ%MSZ3G2nqD@eySKHA&FvfL z>4UGS;7C^mN5sbj47yUEIIyL)3*qQ(B6M4pS}sF5CmeaX1iNF5=RoM>L literal 0 HcmV?d00001 diff --git a/ui/fonts/digital-7 (mono).ttf b/ui/fonts/digital-7 (mono).ttf new file mode 100644 index 0000000000000000000000000000000000000000..a481b97b4f84fd4199360c511517a5cf22d2a664 GIT binary patch literal 34404 zcmeHw4R}=5ng4rdCYfaNF`3LHlkdzVgbWapFd+nS(4Y`MfI5mOXhk9k9|8eGg!oxR zu@({CuBF!9D(zZptyQYlQnZM6wW+mT%BtJ#W?j0qv~^u&)ponA&g}1Z&b^bFB*eJO z6aN3_$t3qZ=bn4+J@0wXd*1VYoVg>0h~xt}B(UJ(Mdu!S_~GY8>`$X~!v%{P!mB19 zTP0#Vg7f9kvlm?av)%755V^e$=QA#uyKu?ct2d?L<_RKcM^>zF-+0gEuXl?0%0z6@ z6`Okk`PXL87MZ*g^;fRkxN80MxrN(B3fGBvPhZu(X`}ch6VF3^$y>GVx|MZbe7hL+ zKNPv>;OdU`z3U#_;}CK2C|cdw-tpey_nrbis{Pd{NGq_1aNdFYC#+uI(|hQn(s$5y z2Fe~=w_!#51?yHuMQ&n$e!0HAccVSm`wLvV1LuLR_Vt~8FFlF#n}J{YT^l!S>bc^) ztEP!;Cq5rRkX8X!Hqc3x*o_a3djzz$ zJ!jj2lDlFv9N;BXb znGyd`&QkDfX+eIj%mkb#rvbLfEWmT*^!NvIu7c-D1o`u2HsE|Y18{+y3AhmOeff;E z0$w0<0Hbmi;DvHF;6*YQa1r2tK-$a$Tr6#Xm&iGQm&&<-OB7rx=f#i7WpX~?Xa%Dd2j!46sYV4RSg18|Aa{cjOwm0-3xf*brtd0LcZk2U_ zw<)+?)+2wrbOC-|HUQos8{@y1FUU23I~2TAx{=>0n*i^U9>864ZTxp~w}SV`X5{}u zwg7%ndIA4Zt^>SRu8$v;FDbZNZb1IaawFhg=a@Ed@?k%#3Dz;DVI03VSZfZvik0Uwo} zfZqoES9whC0{o8b0(@NV27E&90o<$LcjYhQzm_NEi-1qbUjjZY_X2)Tz6AJ;g5Q_j z@guTNz6|&Sxesu^dz1b@MQ&mEPsQ1pF9Nk6ZuB`pXC*K81Sd^O~6+b{Fyw0{LkfE@qYO`c@*%F zd>il=3LcinkpFx64&ZC@c>JH_b$J5t4cQC$4+{QLzKi@n%9DVsv(fd8uCZ)896Z^^TOzm?|zkIE0@zm(r8_ zc?Ix4<)?su27F!qOI`&$E?Bsc{kI#W! zd>-uK`LKf*!v4JgcJGC-cNf9VT@3s7QrNXiVb5L;JN63LuUEouZD%J>+6SIe^||__ zJ&_Mu4NJKb_VWs%m-ED*t1u4mb%N@7YTRy?Zv}jT;y`(zD$p2@<4OP}-at{HOqaxe z6Mx~z;v@5qoOfj2k+3eb8VPOVFv>(fAB zU;NQ7m;&RQ))bjIdw_G^WL(eJPg%5NZ)@pZS-N8fpSfsBb#U+29Xm>QpdaS>J~=q3 zz>vWOt!BYK;WIcq`;4toJPb*7uvCp#usR4lm(E4o-n#jVmdpdDL1O9~ndAkDj-YNK z&@WIV_n#z^7mbGG#iJs5NdnUpl9vMK5|X^^6q39=h2#|@le{v~5nvqv`jv|0!IMPt zs?m_VdQ>EzkiayB z>l2u!kh}pn*OTOpr;y~+Qb-;indD80jsWZFK)*?my!j-Ne8y-<-ZCnZ&rD#NLh{pq z^GuR_)+r?U=_w?Sj7;*`iH-p4Gl2eVMe;LG63JUfL-IMJBKcVfOjAgHHgGB=5l3zA5$uCcI z1XzC-=wGf#e#J>5`LfZF{K`?0e0c)X6q2_C=j9~%Ri}{TD^f__F*3^0!zHMZZ-OKy{Unk6_R*01^P?j99SKZR zNd5)jd%W9J;Pubx$o${2!AWTyw>8ix3N;2Fm&s2GrD$iE= z991({kAnHC+^e8ZT`f?sP+j$_e3631tOGof|KWGEJ!{-5^KEUmbU2+aG=3hx z$M~wP5#?GXIdS@2W)klPm1#3A3THuR~-HO#EHBU z`5csIAfM5&ACIwWJ5cIIX&%zze(Zno;!&%nu!;{U8o&hyD)^8(5ABDq98IC2{lMHO zS;#d`n`BI^Z3%jUwKH0RhSTFW(w()QmO{UAf9$@HD{9omUXQv$#;Vve(Wr5cD^yVt zask>Jk$!w{g>7!d$1kIvtr4~8!9R@tR-wNR)!(z(+x_tB+Z94~Ad&`zY)CWBG#e?) za}I&^oamq%UVUQkMxnjGahl;TsGe;DN*<@Ty1B{7^+nOP&j);#`5xW2^DtVD{oWVb z1(&o)4a~w z<|aQue<&3F8V*}yD75E69H3%0q6%A#H*8DPxOy%5d2QJeJ&oC zkKD?`ML;209>ZmCZsJjH!>Ms&C=~k$lxp>1 z=DT9AVZI+b7V%w3!Eh!{K=CL(sBsU88TMg3T+zd^Hz_E}4n%y0!==SWR~VOL2cLeL z$4;JLa~3egPGnO?4xUSY(DR6FSBJx5p)ofpcPQv%kro z?yPQUh6F6|Dp)(@s*$!O;=6xpp@J(S7?|G6K=F=5?&*{>U2eSjekk_J*7rlk45Mn8 z>#;Kuw+}o>5PJ>9AI5k+qGTWEM>%4vlR%dz^z6vPLPP?E&~eR@)h1Obd7T(7&J!0% zre_7mM%UPnFs-$^1yQ#Wqg0hB;ar%EyLdO}2+tciH|j7i$}t()n8)OQt_3{z;@qPK znNzM9qfv#LWLj|`**W~%fRL#YMSMkr1jrvVvY;pHOI zY*#0K$|C2{Veo;p0pBWgjN6mZ0WBBHqsD`_iJ-^|jfw6slp$ciRalU^xq6ZzbHP0V z9BgV{Iuf~zL@qm#!}kl!dOkA;DiX&QzuUkfsOZNf5bNLJP^hiNJ#U`7r7e*&9tYmh zkh>)mYH=fz$WsI&rhdS9$cFDN$eBa&<^oN;vxqlU8XNFVGlx127bqGzC9)w)6i%cj zNr{04E|*#V#yyEFGHmxS*1IaS?vNAlUYg>)D$04K00CE{)p$sKPsmMN!CjhRtyz^= zH15IRa4}*#0BpxT(2jwD$GzPBK@JE~!K=brqMk^&~eQ)2I9`MsD@3EFbfy6jT&$W}&qqy$&LsYi>= zxY4A0I^+dKTB4TxU>nh{-ECG1z0nYt;19jKV8^g-fk>gyV*l*TP}9be;1j1A>i z9;~Qx`Gy{u3OtN0Q&}ZBEX~=4@vx(e5`}gI=R+Ar4`!T{DdO=8Z6cDq{W!rNxgpQ`OUdmB*6uA>F$RuKkpz|!DY^J*DVE(IoE>s7zV zRLeA9TVqbm$ty)eDWWX{uW}41L6hL?ab4IUcMY2Wv=h$1lmZ9h9 zkHum1HCU!SIfGu8Oi&{mB1W%wl<1r>l<1@%Q#ErOs+w2H2a+lSYm$fhw8<-~$I4I{ zW+C#OaP={kC0HV{{c_r`{0e z8K8EuUZi~-;AZsX1x@XmBx={7#}+RQo{Neq!%({#45H`Z@DfX8phmL9;`2y#&i{$Y zROae8l*$lqsOSS%mgD*fC752fQdFhk$U1~yhf-AeJO?RDYUB^g9@t@x&|;nB(rt<% z4B3u_m3?xcPX^L7+F;alx1)j++V*y6yfx5xn=P$3x+i*!sxL&9(#h2`GX&3}T}Ks~ z_EhpS(`gN)VWwIdw1H=Nw6;!NJ!%|@ehkxX51-i~yNzz!EVP^{)qE!IrO-{s{RZT- zwtzCs9PL9GVIG)dO^3Vs==tsIGP?U}V~^JMDIBBn9&CUk5G7e!qeuVJ;U5^#o-ADn zK0azp7U3PHL+J=@1Lb>D&l?UuTEFxPleUJEz1;uJ9Pk5r)dfvJu!Fb}N1L~{&(~Lr z$ED~{F6ftjc+9?{SDUgV4yXQ?juE0Gbg+I&EixO|=(SBpo*D*y^BjRf=$(0JrciM^ zOQ=Bcjv}P2P2MgZ2!<#(}W%FKhu1bWx55pC7we^U7zWIO+@uD4-;+l z_70_V7=q{>J=ci#8KFf1(ookI&nUXD{{Xn!v ziE1`5T~1Tn0JrmiM>9z+Pn!B}8@-*1$j!8j{nTmwpKLmXcS4bm?(sz;zCBUsJ6*7) zdQlWsO3n!-?P0?es&sYuA{BiV5nqR^GUP&lY^WYof!;i!IddYp3kNNqiJ%zQt3sS7 z>%QeFG8flSFBkRb3njnN{&8c<)+kqa;)Hv*i=VECeZig0X7*#6coulg3H= zMM`Cn9w`@ursYw!yd3NiJsc&}E(UxU9@P_z2Q424*CCHuvaA&+$%~OZZq`bj?88VI zzu}!2);K2f8vEdvdAbK_7*zIv5{NU8DS6F}6h3OG_K-eSFD&fyz!y4NtyjsK0ow|W z`4l;mY*DE&vAIAdY>wD{mM|GAhiQ*Kp?NLY9;HPzyj4EfQXSd4NVe3It&9Jw{R#hW zr7_r=7&Msh^zI(yARJ~mE#JoQ%UXgrEuW1SUZfx`P8`(da;eRva6k@6qsNG2ET)*=72q)tcP(KwscU-H_aI|to=?0b#i5(-4n*~EYD65xKdvEQATOZHJQ?v ze33fK^f@IrX9q1%KT>+uS)aNK%d5y6RD0+!rtU(Q*l_&OT#ImlQLO^1o|a+xgAr}| z`Vym+VgMdEh7kBRQ*`(&_JCEAJbqr8%|6qZawzeejg+Q}UQ^i{+JX7x6%R1wTdpV! zS(w47jTUBJ27H5d&BVRL2Ua2WxV#otTvTOZ5qlq(jP3+31M-Y}Zy@EBP5-PO1={r5 zX9&vn&#~hhsWvgLK<1#zU|wQ8I0i0WJ&4s;U0tp+TK;iXdQr>bK%TQt44~1is{N3( zfH=k+AC4DYN0fG~U4@k8u(%Ysde-3m^`rjF`1&`8>^=d{vv5Lv4l#*>H zQZEr6JQ{o7oO2_pm*(30s_kX0IN9*xP`+KMDMBfw(v)VwBn~j@+IC0wM9BbTh}dl@ ztiWr%W(O6MVn5U{d|}0j8E#h^1vFS7VOhQ$S8BDKZ4;1skuu`tNAHr?D~_;=WtHPw z*3_4*c(S45$;!Mkwb&X&lOc$cV#{!wheG`!A41AdVPgjYAZuB6%!)D}SCM6{xkiTu zoRejZ6*thxuq$RhsnF}rPHar zAB?W!L|V>JD^3@e=2v<-&IA=w75YK8&>-bduSu4glB&I1>k;jq_@A)fjQi@eUQEuc zm2c~Q)9&F0HXCpc0at3iSwNKouC4D(T;W{J#8vi`448#HSB`wtEPyC8Yoe5T46o9I zVMj_DP&QERGKIYZ7ErX%u7UzYE6E92Xp*$hVKonCa|x~#nA9miSYPcoat<5AbQ?|B z>Q@VMJnB*lpgd`@ET`4Lrml-EnkO=zp*A|0Bcnvtw5?|AlEF4&mz!?^wT`0 zjY@hpC!jppv*~X#(yJQ~tWrvEazw6%0W3@7L1+QHO^&Ix%&1F>%f${_VVVx?=sFfQ zmlC!8ClQ-FuI$HzEacu*YaiTGn%@HCH5`Jz1ke|2o(=X8lUIhthC~M!|Zpnh<3v5ZK=AVj%%gt zYU94wNr{*_H|SzH)B9dIJ-|Ug%4zl@ldC^tD|(+Rl`SQhxE_;VxzdpXS%b5fHgq8vrzlaAC8g{)mwIX|ZX88iv2};wph3Lf zZD6Bhi$92U&fXkR%d%3K`}#NwBfdUkwYe0V%JQ*Z7Q>YoiG9?YBA-s6w`m!TK54xT zZ%Ea88#9=L=q3A1mEDCjxs^$h|8~-gItD9@vN3Qf;5nGyBMp#e8S=Iq z`>C=q)pAbW0c>q0vYbE3fqqy=<~E`fyGTpJS%bDhBiP6}b*b_+lE1r!z8`heMC-<{y*c?nk^%{R56e!PQR&9UHG@l)l8g+Ex)MavkM z#e)q-GT-@Gh}}>T)A}6eb2bRf6_nG|o4CRf?8DTS zGp%UKIWKWYm|PeO?G?a~z#FY3xGx;>^{QPy;a(s1wOW$fSOx>y+Qbyw<%?h(Yj}TIjY@-=Dg$5L?NBQ_L|}H4#HG$8g_&izg^pB*sii7ju6L``9HPh@U z2_y|IWekCF0}bRCKzKU+^x|m99$TYvvF$B%*lkjoN{fRnV)W3Ti$gnIA=_0U*G@E% ztS4%HXFM*0*rMel8_{qckIRh5Wya$&N=F)x%czxcJT610*LYk;ZHXR_%V_<}+>!jh zvZ9CVQW=lSAVN1Dm(kwo@wiMCtQiOF92zm>aT#U9j>l!j<1*uMnen)c4E8P3^D`co z8IQ~8ZBpZL8TA60@wkj;hw-?K`eM;|Tqd!B`sBrB((s*jF;*wVWy-C{#i%1QMTxx< z!$fEj-=EPDnr1UXV^?n)+8yy(aT;I5jML!VHGDk-0$4}Ym*IWUqrOPLj@4klJwA*l zsThRx0&nNQy9*eCKs19fg*3zzTCj7AZ_esP_yIwPFoF^0Td^3Y$Je@y`#)8`^RX$1 zktip2{4llp?LaxdgTcVA-gJky*>Aiu1F!F?Zh`-;*{)t1Q>)*wbU4x50SX{s#*TNe zx3X}|-a2GO7a74zhXKazWK=M$ zubr~o3P9!RZ#uy<=2Rn6qhPIq`W;f{d!TxWfc286K6Rp@p}sSwUfQHUgx9taaGda) zw(+>}wi#PvEO_vHxfaSIW0H=Qm6=~v!&`t9fwOR~-y)C!l=b(WbO~SKgBL(4qBod1 zymkh)_|~BF6Zf5uuFpcmea=7$>a?NGIcCXz{9wrWG7C@A_b;~MZ`{DZFaOlzXvHy? zDQ=$0@ID^k!Ecbznqj2U%9Wcr{RXcp)T&Ngn}pm<)eN7~a7e#Bs@W{%i;eVkqGr{c ziJA-Wl!YkKmXp_+ex}h>%XsW?ZzDQEc@1NR1-1IUMRWw~FIqKuTV}Y8+TZSp7(cAI z(}jp#TL|3Nk;wI_TrJ90B+6p1;Pf(e%9x|hh1DaByB{9}=((gv@>gLj!I^#h|l#3~b5eT|rLMvl#U@Cr#+B%F#WRhUCuJ+F6W;zZqE#5-s@W6 zdOxcyt1YW5Yj@Ux?A9Dt&Lg>Px%atC+&8*^p0_&hh$qj}<2jZ;BmbA)v%HV`Ciq?~ zSXS_1VPoMV{(S$F{*Q`oEPAfkRa{rRwfO7B2a4Y)=_$=G?I=B3c5d1I< z-TrLm@k><3WIRoOK5Lv|<_)}G^nNpM69<0nUe~ds{4q0+H&7Y;ZU8@NQf%~@dF*&I zer@J6Fn8WH^O@qYWt;hIDYliH`5c*Jn_=d?;<9bQo(aQ|iKp(f-D2hqDYKtu=FwmK zVl!_?`4wi~f&6u5K25^*FPZstDY5_9%x6f%{%bRzDOHYgGY^_L&NTBmvdwXgnFoCw zAK>@2y77Bc?f7-&PRNk}e$n|lz(x2Ks_RkGh2Lu4fb%){wdPK6VLM7Xkn6^`m+|{j zIKuedu137?lK1rBUe=q6U+>~|-n9;CH=ec%ziicmUvlPICsICRGhhd5&Q;gf;Cegi z^X`RcwF}44D?>{z!851fDa0dy-vL{J=LC=stMVrNhFBQiPsT5EtLqlN#HL3!qPzir zThw1Y@Ur?q42fSCp1cB>tjFC$exK~@?#}j}&W^xU*98`>xxTY&?S{adb)CKKT^*g> z^?`2%!i|kH1B-gDTh}?Yr5=~o1-jR)THUiL(A~MIvwL%AM}1&*PtV3#4GmkiY^mSG zikmt&cXrjU*sy-?npJCh+Sg5O2`t>uwSh-!N$T0O`o?fz&c^OQV@qIKc-FM$S&fZo ze%iD|H9lcve1~-5gt)bJcXn=R@9qq&+|V7^*x9{lLs$E{z_pt?>vLRfC<6NHJG)n` z(S?DH>pI&vb)vMZ=h_uLs8`=OE!;G{c}C03)Bc}ez<^@TPsa{J88MJx+Y__zK%J59 z*X&FNo&y%`R_xrO*f|V_orV`zCbRQ2lni~Eg~R`4f`76Y`1I4LO$mTbOt^NH3&=`L zFZOYx5(=Bt)TbZ_$hAsP)MKURE2(uYJsH=lx+@?!l56rA6hQ6jzJQvzU6|6>nnHok zqo5cvktyeG1h8H1KvTng)_kWG|J(phj@*B=McJoj0{tvk3 z-Yc$t=>?b7KJY!pe*HGal)t_5f*Y<;9u42k*uNaX_ls9uaOFkc8|nQl-oKVHW79QP zU;px%FYkUoV}JZS-k*8Rbr)STcImIW7+3Kf_8z7x7xQ;8jRpAq{C<2Al>hQPn_|!7 z2}}zq^iKf49LE%h65_uDhxacrm!^I(T#IL;{3ceM6nP5qlVjZlL zb>aF9vzf!PxO1KrST~+qVr5ogJ*=1Yv3@qd2H6lBW+QBrjj?ey!6q@gDw}3AY?jTj z4Q!rmWSiJ#wuLRQMa*g|+s3xD9c(8%iS1&$*~ysq9=4b5W2dquwx6BGPG@JZ1MEz8 z7CXoevBT_ab`Cqj&SfuQ=dtrKhnv{V;Gj3Mx3IUfyV$+#9`=6rKiHqMzhL*Xzhoa^ z53moi53>)kkFbxjkFy8aC)g+1r`f02XV@d`v+PlR2D_5IlpO_~&cxl`$1Z1=@+0hO zb_qY9y^g&TpIyZ-;1{xs*fn_V|MxO>Jzn0&9%eVN3+0FWJbo^_jJ=$n#V%ksve&XZ zd5DMk9=@0F=cn;~{8aW3zWI4R&d=uO@I(ACUB?fwYxxpCogZYc!J59B-NN3$ZezEz zH?dpU+t?larR=Tj-Qb^hv47^9_*QlW-@+I8BD;=n<1XI}ek$TNJ3veD7S`xy%=p8Y z<-_bzJZp~c<~J)@Wls5)^0UINg?}q{6rEzBST6PzCyE=3JBkmM%4NNrEblI#U%u!+ zmzS4uw=`Dve$ecrpwnmB=hzqdJU>Or;4Xiq{C(l|g+CTk#Y{0*EQ-6#x83C^-DUZo zm!Dn!`tsw;Ut9jl@|Tvsxcr6X&o6&&xv;F(UQxT~*>663@R<$I%seywO!b+GXZoM% zex~c^pZ@vArw=~8_v!T0?0+8%9$kf3F|-%`-~Xe}`Xp0X-|~>+sY8H*z-_!{~@=J1yoH9Xh#jm5=CXoL8fWy5>wUaBGYxgpK%`NZr1Ht`9+m!x~d&) z`r2W)gR|{h=jR6dolGJY)L4XDL2H;#btXFWN~zp8lbEii`zmEU#`VsQuIkhxPvd2b zN4b2f%r5fjzJ7IjOsSNkN@qtwsZK2@{P(Agmut6nkDq#y8j9IkNzK~bq0Z;}9f(g5F+TtB2 zg}YAD3?=Rq$9ILgej0ZI$G#e;3%g3G1TMslAhCb9{9pV=$l)+#WYwKe6@@dt0J5;9 z0BB||YFtqS#VpmeOwN*Vv&-tz11!u#x|qA#Q7O-;)78{eS0~5-DooGvE5l={j-JS1 zeqbP<9~@MkG><(W3@W;L>@$P(0sdlX74`tXi9aEp-^ogDp)+oVNt|;IqCmhbsho3@ zxz$Rw6o?O}@F);(6DZ#F@`qNK+mTuGG4Ee~TPVaAqS4wn0OAQ40QUrX(qXGBK z1Du_6=)ierzGVNtJ-c^qbGK}mtxgON_Ek!SY^Ey}wL&^OgP)NU)afwP4vcp$HCvtP z^xkxK4D)h~)92!)p@M8P(_jsJ-tuOK<|;oIFL4{yyAq#Pct@7+u>K~j?ADU>Dq`EE z5TCF%+V-g?->E0Ee9`=V{Z-tyD`92A+U__9L+Wm=i0_);r%%*D+u*fYILH$n@|9zU zACB5isJ5K4b^g0p{e@!(ABouxeY18yzJqs=-e)dQF38Un2VJmhRqu z+pBN9@`?-2=j@KR-1g4f-|_mJZoKu?x4!(kD{i>*RhJw+|MCkiJ92pcse4Y@wR7v@ z=8bdHlj9?U-8mlj_OE9eW~UbxpdPC!_Qke$ipgZguS5Zp%s!mpW2~z7ETpvG5z~u1t|W{_BVp z?d%=-u=q?Jw>MbU1{*)aiFBmjajMpGIAG39e{jsTrfhr4l0WB%I~>Ouwzz4=@&oog zokNvQT=x!Z*)*4}{`@^oH~y_XYS#YUD%&5-_j0rLCyTz0y{fVF^4FF9Y7(|p9yZcE z?4AqUmzZ2(%Eb&~_7WIjJYevH77s*uFcb(Lif~@Z`LNi9|*5$1VEx>HGmo^a>+hvZ=s%^g& z3n>=@w68BpBxl_w_3wJ#P5hq}9eS12rXcPmeh zm)}<&7eCyLVZ88c#1013LbNtGQGPF7^WO3VKU#QS0e@gQFMf-Mc7GvXN05;(MqVEZVnDyQ09ct zi9)`Srs)K?line91U@B#F7nx#>2W>=yA0f1?IfCsYw?S@ndu4%8{Oz69$rxBn|=J$ zOn>l=n(}ciphgqPV90bL9qF*rWp~*@JCjsZJsnCJzs*&`hXU%k0mV#qS(bW+s%y$C z6>h!G3@l=9KhffGlRv5`PxfctYz42^aNW1HXje9B+M$e-k17E*TPo=3u56dy6O9xz zKevoiH9YhhH57QWl}?yd>$L&(Xh6AC(QgFP2DYf7Z(H%sE?wh)2X}(=2)~J+BXo=7 zrlD5gQ9!kkR>2EWDkUX4Od`NjDSS(t0)albd-)Um2Wl^Tg>E-TRvq7ii`fzsCEjhv z-Ab%9QVK+eHR%2RF?9xXlw>!eDp5TRt;j#mc|cvf^yI;w?dNadK|48p#(a0hJ$o*B zCg+`pZ+y>b``&W(X&pS93M5au;Km)N+;-JcN=xKuv|g zhI@4bf^2R9j~`R|p@FMY=>i_luipD|J2`i@Tj`!ZV>)RE`R4Pt_sm^Z&L*|g(p9&e zvh#)uPD%z+S>Ca9)tgWKnt0x8_-6i`@lgy2sU{=1t33F_c)6ArkIv5I_)sYQb`soVU3!!Yz zz^@JlV_`GqoNE{_?Z}0#&>=-Ll^@zyo19Mtop^Xs(+qXkOlAXtNhtPfN~NnTg->gG z+)PF%RozghLaD5#RTb+Rn`nK2y;(^qr?74|>5l2JlT@}x!@_brRXK}L@PJ+Iul2Bk90=TnS3%<=q{z4UYb8YT}km<;b&tn ztb7h@qY-a zNl&sH8YDZ$rNCQfN(bac1V}-_%`$MlkQ9sX7vRt{KnrfQIz0tLw6|gJm!>)^)0iwY zeYG?-qjdD-YhST@7x?zAGgj>@rpdQki@8cqRynY^Xj#V|v@DGDVG!amJS)vc+(A4W zzKMF2sT_YUl!iB^B1jUCnjx6mX`a>uVH4OPWI~W+rd6Ds!~gulup+`*;I3fM(E_Kx zKB7F?aqNiWD0?G;n~kg<(oVV*N}L0yU`i3s?I#|F)5FyO$8#}1jrQ>(o~kTi=9c1e zMh0y%774R{-Y0B*FfPbR`xvvP6$a-*4dW+X`&?b+zj2J(8v_=9z2nr*aSVQQz^Xk3 zX10|l?T?#A?Fv;ZgQuM{EuG&L2)x3wZgHHCi#-Os3?BcJKw&nzbG@(!HS$JipaJsT z*b;3s3=>XXeVBuNr2_2kMA%>>eAwG;r1G%eNFx%r3+b^yMw{4lWIRj${5$&!J$`a# zWY;V1+Ly8Ir8{1>U_Fou-fq=?4Dvl`=ROy*LWTUTTQA&R4yNqF+^LgqFfG&khlpci zVEZs$d=1#q26v{6oyQk+UnCsDfXzj6J$(m?v%X3pR~HR~d{DTL7-PF=5Tk2x8c0a| zg>5a^_5#U++V35HO#t@)CDt!2euI4veRzT6Twrw?ijwKf=t?bRTK9mewC-SEU?5Kd z)4FlbLt~H|{h+C$29%>lP{9BLOeI%WSZE+GSf6}jFklvJVt_pju%~xLkY=>z1&7@( z&c;WF`g_aWc_$r@T46THCql%$!sM31hs+a9sSnE`K7i-!@f5Mw)NGYMl+ilT}I00m}cz>xCrqm|9&K0O6@-972BP3E;E1r$-5IBkys?phaqjO zuS4l$Z=H-EWS8ZD@xjN%Cjm_XJCPpu*vUf$;Nx=E-%~1d!g+u+%kivWCn2??3XKed z#0~`SB*kfu z?Y}$hMmg*1NJJq|9c~N3k>}FOoSjR-uxs9~|KU6yOk@@QRjc+*+Lqw@TaW!L;lKn_ zk}t8W^Bw0lJd16^7<)0sF5sqPY?HeInhzj}q8$uE-LfU(bnuRctAKYhY0kh1J%wz# zoGB&akR)BaQ*Z)E34_$9r0|xi!i@qYNt_76dLotoy&dm}JGIlCe$(j%HJNEHn6>xg z)kUDIy&Tj6A**&9sQPNhTDGg!|FZC>_P3V!D`dOR19`bq;mxRurXDnSAW&xlPu^qT z-388i%Z0)20lN#MHdvnLe4r<)knJq=w%}mN3oV0J0?z#Tuic)Anoe@=WnhRJlWU_82eTa47 z2b+yQ(U3g%PfkT|bl#)o3qHaIzjlVNxl_TY~$G^gk@y2gEuxBbA$*>iUCZjz{ zV>%bDX4+u?eVyIKKdg*{;%nG8@UozSJ)5H0c7;zw(9JA=n-jc8QSJ#kX7G;T;X8uL zcvd&>(G^9%Cm42uw-0r64BZ~Y`W|5a0z2wC*ik9AwCAC2tZxS<4~|sNXsk1d-gRl@ zCQTT2V9%79l$Mvoum3?H}&9ogea^pZ?Xh#&YmVr~7TC3?CQIFAbuxv=Jx z7LiNd8pLfr2V1k4>(BSe$+0YV#Cmn5Q((7B8G8)#@C@F$)B*=m0bG@|uG&}Ouk4x9 z&f?ilH3z`z`zFt+omqaCHqqCkjhnpNn$UWbC&wzs{+tIgU0)7|zuc99>N;8(tM=CJ z3y1jyz1Rn8-TqGi-x^}uT~~wCj)7y<0*E4D1zCU#X1nP>s^2!;z6T)U730>WYj zdjV>#8+X`z^fh*L-S0shb5?{kN9%*QM}=2l7xj`yUypl~=$&-leP;+063y91djxAowZLpyHbnolVnVLH1b$joCjqvdBzAM~IP4m)iSL_{9p4@QZEqnLf za{e4qws!Z9>&_S>A8qXPYlUn?d|m+{$cmoj2#Xnpa+BrQkWil2Pw>CWik{amHl5sV z!ia3!iu_+;Dc)^azqRe(0%*M%@6Htlm}C8$u=4*|7-aVe--y<@3uAG7pRqm`&vy$1 ztbi*GKQRcHehrn-ItbxIR{0Bf;CoE-w~q5$l5mi0{)3;uFzB)1t*y)duJqx#Q@|C7 zw;mnj2KEK?dqlj^>5cc{;lq;shG3IGv>m~&M+gqaHZ3AK4&XmkHI^XbfNu(XU)~1} ziMT>Ly80zL%uE04Q{eC6^}pWwgr;xnhJMNFPmq@w?qOITaA8J=2Kw?&hCBiCzo+=5 zzoAz!IWZkcUMwzgA>8u*`nKTT+?s{A_7$w|b_?#9{kQ}7F&avxI+C@oIK7M5-Hk2q zAGF-Hf7GK9OAANsnAjq;2J=|^F|0v18+HfqUO2>x4%dxBbO2PzbID5T5y*kqo`M0+ur2;7dZcaD-i&|AIQwPSD@cxqriJz?F)xp zL?Of?6V;%1!4iramq2?fjxpqh~#DeLtYs5|kR9Y(Jx>8mc95%v7p!CF&Z36l(QBp($1&$$|rMBfe z*D(hSh4+R`TYn)Cc_L9rM;xcS_AvIcTuN9>n_+u~YX2vohokB4WbHRt)^w$@te`24 zwT!XGSkcV`f}%YN7-&ECtbl=pxe?>BfHykO!?z_c0)9Iva)6$9>^531k{TS@Fj8*z zvjuk(ay#I2EAUed{JD_u1W1sB2!u%X^^mR}0t_;pDG%}L=lx>Gfo}w}dWcs)G(HJ- zDZ!>-Ayg^4ssz*EVqLo_luU%*p=%gQSKR!(rfb?q;dFH$y97hiqQP26iibmyW52`O zdq9szgF$|Bhu|&51{4@~(Ei|W!7kng12xqB^^=~M^ z7+n0$BxFQJCL;KZTbDeYo_T?Bk#*szVb~UsLl8R09`rPDRbY}}U3&JZ_<^;A?#)Sr z5MnmK0d6-zgn})S3EDS_Trw-<4YaV_>0;;9mnYpkhGlHwX?wm+> zk+3JT8-WW#utegApf|}i8GnJNB!ygse|>9jt{hQHj%(YlGZdLp^(V4D0E6#}#x*Au z&Fg_P2pJG-5(-W_PORfpO~`(+IN@U0va=g>k}sHszqgph5+LXJ1l7ivA>FPE;(og8JY%5PE!z*96;)+~1?QFX6^&<1^Vt9BOQn>TQt|>v z#-^0*{cPTy?M74qejP<{6@D}zl`;`q+pj~CAVY!tQJ|K@2xJ#P6*W|IUC_(zEetD? z3&I5_NpR4~URSc6p3Ax%dnA9&pcNZ_MGrg;``BICBEKF|@Qz|uxg6BGt1?_DjFj=3 z#yF2Ll8rY`yLvDIx!Z_+w3~Ve%^=1oB17YRTqq$wZjS+Vz-*YAXl(C_pH&1!IoSc? z&P=~1s^6XYi2W=vGuT`L8mGAB4@=?N7nKO#iB0_4H1f%~ zReO#$RL)8qdoajN+sQ>^%9&h;W|wmA*ULlvbr?h18-wR>3!Kvn&;pW$b%Xs2iveRG zj1HVbOfw5^s(Xn1V%r|4oivVrbGZi`d!SqG=pKXgec?G6D<=~B6jljQ6V}Mg^v+n2 z|16NR!nGbvO-5gMHV{rn)Pi9MpPRGxvDfM6f#L`*bB2HdR?ZtcVr!5)#Q4JZ!4#zU z;S-e+j9m;IKLNaSzwjJ@bf-f__7TaTOZY!QlYb8x*z#UgVPm-WLRG-ae>&4+&Ry0$>c@qpJ4=v!UP}L!i;} zKP_LUykYr6ClIf0V5JJo#AEk3&N=Xg9gOSO2vXgwys&PJxiMD2b!s$po(2TyynymT zYq_)TT)S|V4n=k3Gu(k)B+Ao!8@Xg3aGcmvYm}DCKABF8W?M~(d zdgehBp4b=jYIqi;YK4G}@+jvIPBP+ zVGTm{VQZ;&|32jl_OX}q%Y$*N_C_lv_oJ{oK<^T}RN5UCGG@u{fX5g(yP4Rks_lpQ z1j$dt7T*epcxOOuS(L{21hIjL`L;rd7X`6F&K3B8@FH97gRepFZ>5m9NRD{HGX*eq zYn$VM2l=-Nn{TFRmT215N>d?WB(Hc5FK13V6*q&L$|Ox8Rj~NjopO=k3kX2C3vXxm zF{k#H(@y8JaPz-zMD-BgN%5&;yY}((m#l~F+P_%wVC|hTVaHM20(KneNpaLGB}D-r zlJ9?nQg+p56BL6|l)4E=*gdRw6)xbqUlbYE)6WjV=6NO==zFiopob6p+7I_E5G&8v~JsY(FT#?(Z!oU{U z<4w#0Qx<0CdfyX(Qa}7#LTEhWa+nXb7?+Tqm_(Bn5Du;{Udh%}6f!OU&9d%v9P*>A zdE1`1$f`WuaYiibtz`7o&arL&A^PpZHt`SgfbXX-#llqZd zev#x7XD);FlZA9O0M=DaBemNpYFS-pT@VD zwJ(JOJZc~bnZI!C%6u70Ao>bxiJ!l3(TW9X@7CiK`}XBVmhcDYZUH|8mLLJ6i=-7O z?WR(hE@=tm-3Y39V!?v|8vdz0|mB7Rul>a{%(>81gYLMAIQ=OL#| z)<-lE6Zc}*9-13nBrbofnLY^?qN40qAw*xU;3MIusZZ2G{*`YY_2)k|4EGdvx4Y~ zX}-#FZV~e;7O~@wU0~a1K#d4&%yxe4&zWo(!tx-&5s@D!mr!DwUU)@ODA4U0jD3&@ zluZbEfRq_w>`Lm+&h@UyCG77dZ;vpl<pc83NOJpCx>!+2sJ@gO(KhR|ad$ynTxfNt+A*YB)!IrQ?vC?`#5x!uhTAA*f zDjKQb6tX?Zer$k*%?>@NAsxg`-^nF9J71MV5s2etqAwY8oW56@*s(7Z3NgFVSwr}N zzcJ+u)NaI!+XuwP!MgZzKh2OwE94xuQFM_=0P6&UC{k%gsrm7c)$*AK_{B*So7i|> z?SEmK{Dr8~c#?bq={f%yggdohUXrstOQ-=l0hR&e)Q)+H6lOe_lpCR5KUys3YhTM% z%tYD}O2OhUEY{xW^!8-2-MW&sx%uYH%u`|eonOE6bl9ahx7+Wn+iZRJ%lVW|KRZF;Ul zn41(mg!*Cbz7+^x8kn3LhiTK5iaBu`R#v21HjuzfxDAEw7q6c5L*(Cji^@^ zgc4r~pvY>C?+EobAo9Tg8A<>{sy{d>#JFO&Vh&(c3RaW!Tp?1c$6~Q~2lkC^y){#` zZh`6aO~<*~G!c2{FF-S15#C2M|!{B@l}2o^1=X1r|xc z5DN9RMcNDeg-Q;)e+Y?}=Jb~kgmQ^?)T7#T#&pCVQiD+(}FAwcJ($P*EB5=EIZv_@6EFBq4E6H(OW!q8ShsV_3Pl6RHulBkQfF#J< zt`%aCb^HzFM~b{#ehjhOiif-5SAV@Ovo=#1xmLX&#o&7<~U=O5joTGBHlgF!K;`-Ox5C-ZG^6@P%0*ts$XJS$LTtNh`Q#hG`OjBSEP_ zsMKHWONR+@f((c35|D0*m&9%?h^l4+bSXn~41fJh&0nQPhAL(_)0Nbmj$&^-IXu*3 z#nP#$o=u|O@PSl1mFP^`k-QyGWm5Q)jTD>&)&YZQu2nvD&qHZwrLcSCWboMkg)5^4AFrpy!ggK$ zd&IXMhu^%9XWSU_|Jf;!0M$uRS1j{k#-UC%N>k9FM9)S!pl+NKLWx?K0%7VQlLrvD zGy?h|3&ciknwJza)_$3B$#JftvUjAo)58Q@2wjYTJ4%|@z0Tc$=TiO5aW8~nvOob2H%~lR@RJJn}`t(*CcZ_2`K(#BY{h zv}0i-r&9sze2Bl*QUDnSmF;2seB0h=1#55M0n^&*I2Sv?qe;|z^UyxT;l67}_H^EF z)!twk{PlVmeAmc1nPG30i#g%PB6XCH>)O#US3^9YBSlbnM>30(Jal6}K=@o3JbCdQEWiBxov_=#EyvXo}{j79P2COYOhZ8q`+Kq8-*WFdOkJiHUokwp6U zC>`k^tdFDM2LCwO-dyctwmo6>+jc)N2`?Av3${~xpJlx%LwR~+J6`J8|2qSHM)dIG zJag<+ch7Jd(Kfz-n!qqB;ncvP5Z8#6Q8(lQ4fOStiv^TuBbikSjyXPu zWL9_sO|c*tKyp$>r~FrjhP-rrBr5gCte;pKA8d;thLS zJRQOF@J=@2Fa9MNcCWI;|62Ki$n7UT7d9J&F6s#Bh3t30`1a%E?pK<@mv`Bv63YHd zAM*ZHzEJG!>hA99Ec*XaZYxBnau)3Q6i|he*)w|{N5y*fwn0^o>DJxTylo(ZXb16W z_ws#1L;Egwx5|IF&K_PYmlqGs%^X@RR~8Qy$Q3=u!XKbFAEM~KpGrD+{w@3V-g4oF z>ew0A?bvbc>0`(y-9ee94>+3~Bw1S@G0mdmAhh_e4tV0z{968bZgixVhqK(Dtq?&aR zd~I1t(#LW!XH+lUdadon?{}QIm4I`i<Q9!Y!e`-lQ=VI zon+g;cMztbG@0GU-Cod52b61Ii#>1xG2c4IRIgE15N8+A0C?_=d(^$Qn~AX{sQN0SQAkZ@s_IKV~Pk_V#X_$mJ)t_Vge& zx*=5>v7M1p3jZQYq?F=+qK|VEE`2SV!`J9j`j+=EwgUQF9e^D{HRxr2@d2*%Aui3h z!C%5y?bB?tI}gbK2BC6vQKYG(sxyRqIA8ykOA1GLZKymbGMj-i1vOq&is3ZUsheWm zahL8Z%c*-smjoYXC#^fj_lBZb?IqzzE};BA(q$NTM!LcQVH@}us)*%aD1>2xS_ttl z)E^&SLsCS@$gM@~H;0nX*D1QnFD#7-%Y1KiZkE=kn%K7a=2A}Gn{f<}o zjr`Nlr)$)0$$*Wh+iC=CxL@$bKV7%uImkQ6&tLux;$C)BUAoA8sF%-cq;dm%7@Rul$2vLTeM|hBIgCZJr_)_&fD4Y3uq9YwOjISGp@<9JDAz5%Zs4=W2YNg_ThFVAE|H*B*BJ z1_!bZXVX(KMCJ$Q%SER@+fSBlG-8H>I_x@RI-!*f1dduIC@(KWPu-eL&88%}BKOuT zl2N2FX`qlm>ZLEH=a1&|<#IlMTiy*_iZ%vY^f=lWd?Q@@WTueYV_5m{Yfubbsy%&X zK7VGuP|fG7IleQ;d+ku*SUidxVdamJF1vPZF30z}Mm`d{2zhakW}xjQplu$={}xyk z59LA2=rme>q>ySrrR?fLw&jDMx`5Ps`dZcGz`-u2-V#O#h_SBdmyp>=M#@>JnF`dE zStC{kTZL9@W80+xHK+z)4Yu3@C2*_V!QF5o7ekGrO{Ec}VjVwFN4DeW2o?8kn4Ov! z*)qDNuct8FJ#443r%g-)YS6E#i*e8EAY*Wm&s5}kQJXUXg{`?*%Eo-~p$BuhZ|97U zU!BY4u3l@kzLYx>G=Cq$S0*jvSDQ}CtEd0-;=3qn=0(c8w+=&)BNw7sJEkK7brjI4Tbl0C8kFf z22vS2nj0w$C4-Td*qKr@4QoGLu_;I%UIP8Ltb7+(*eE+94YCS)Tq!70ggFeBIU58L zIS9h-^J4emi`t_NCfzF$uc3xm`5$YFFsj6==&ACQNhLR%}}p}VAB za>{d5kX5_ae!H)s{vD;JigCGLbNYZ~o#{BQhTn0SSC>lmfylX4pCtPL60Q$;H0%Sm z4Z8BjMJ;9+4!V9Z96kt4uPhS)2672xg%$)IMRtb<3wec4jt|Zb&GwY?1BHIn zX24|NIVEetVp#imSBvMJ?4IO3kDbWl=wa2#k)ifSk#W-WtZ%l?jU&2&xgB!P^qz&v zS|fzH>BhytA+RI-84_y6_DjFko8h3C;o#Q6t!NxKGd0ov=tz3FPSbnap1V~%_rAxx z$L@KkA98IBMIAZ|8#|`obMiZ`09L}+! z00H`lg;rAbHJ0^7$9dZMT1c%|DjzZ*y|gEQR4%{%QWSoEqfx3{J6Q?ycl6SFp1wRN z`V?W0pH6!m)yrU>>tKL?OG>gyS=4(3yIIu!!UaH$xlT25LKO=4QkKY3v3VQ-r7W_T zk{7b0FXBqKy6Q!cFjR84#`Bf1zpGfA|Bbl#)%)c3onbCI%aH_fxZ zNtT`DZpW!d zi&>#%WPMIz&o`du?fE5luN5>Ko4x5#%^Lxl4f(L+V?;jmb(-GvC9_%T%-kMgYes8fhjj?-c1GzzHHq;3_D&)Bi0VSUy#bWamN|-`v zz9i)F&_L_6uq=&diFIi_%Uc)d%jR`i>nUTSM5^hj(G6o82Kq`P<&oAW(TWK92lQRk z(GzYq>sB?0J)J8C%s{Y`0J0$nP{lzpX{dX~(7La;g4jQhwyyGqsZeYD&c3W<7q^s;hl z|0-+lu^ysUM-}=OMLK=R1t5$=>f1Y{o*fQGR_a-rR3qk4uh`7GQ@)Z#Khkz3yT(QE z6pGyn-!wmqezHRYy_Iga=pr~R>#H?hPzqAdV7ww{LGr$k$CFLGzvynJ?hyg9LbQup zI!H9|^jtO`Q+TD69moyH>@G;cs1ot`bM^a6-ba@-bhBFj_H^@J^c`!yb&!~(K6b(T zjj?;Y4}J_oZ;*``&@P4t%>rnTjNkx5f5LBQ%pfafkgaB`qW@#L`BB1DY&=V>Ytysj zx+1bh_R|n*90Ty#1F!}(GDb85Mo3dUqUn){sX>FILI}?O30{L$m9!>fZ*&-WrQO-h zxy{X^_2ikPx!9+Tv3mP-x4YBS(FhZk0%#8lg2uOkBm@2OQDY6E#mN8(w}~*^C~H4z%+u54%zL5$ZS|lIAGp^Pui=LK-fH(?Q`l95Kjtd2uiIpL<)On z2M2Ol#;OwovxBqXr2bqV=wO!z$|iE=;X1=2MDKTzJTI{vWFP_Rl!e(-NU!OfuB6K% zug36lHu*p0Q)V_~c2Qh5Z6&gXo?f&}&EUg|l`*v1&yZKgdr_v*Z)ZYwv~cX**`7Wp z7mS9=$}1O<&l-*x{6B&`{IXyzO(l4y#eakTme}jcO#>RXP{wq2k>FRczgk6j&KZs|`$-kINcWnH5qU@j*>ijo`tZ=Si zhWlQZE0#0I9>Ww4CCb?Zt&8ln_yYN*XVJQB$6R!Qk=!mTEykP7)l~}gNYo>&;iqO( zf!@T5D@ckoYV}rJ0{>@pgsixc`O*1dROypZ9Wr27#o`Z$Sy-XO<0)-ZcdY?$a3 zPBx?e9movWFjH+EH7Q&n2j#f`XWO`8hwu?O?)f%q){&fWSYIN`Q-`1-rB7f^ z>)7`^RDlNCC~wdh?~A$v8A2P{?y#D@yZQ*+Mc>+OyTvNT@2YnY8C}GjyHDD_6+jD2 zrICH3`&x-9jNkfR`a&x$g`Mv#nwg`615^Y;i(iF%?U*TbaHxId^PAYWhlmE)Ectj9Zz zr9bf-z?5&DI39=Rwm@UFVk;g^ag9wIY5rRmah}3X%zuSc5niFnz~#tOegUXA&Trrw zWgcj>$aQTC5+PxUA)tnMPtyl7-a~d3>}@SfFp^4c`w{ejN7yoq1cZ>%$X2inR43I7 zKP644nl2PYpeJ-Cbt$gOE0OJhXP)S#$Sx8C#Z@#RiiJ>;rE(!ox#7We2TZ)*L&sBa z?`VpuIGTd`G(kQC{6?+>5<{ADCFJ1$A{hg(R-%f=)C|wN!J(R`4AKMyA^6;Gr zuLgV0y5Eee9k*EgZtLAal(b@B9sov2wYroiKss)x&~bzj{*^53p&Z6WEi}{@n&D$< ziN8E$<<~m5Lxio>(I;{xmT{GfG(rg1ejY)DJry#sD)T+_;$$77zsAc-Nn%2xW(>9Y z{v3DJ^*FpqV%Q0|uR*x4K^DXbC6Z~I>yN2n5M)mizq*rcm#nB+UU3cbG>3;2J~c5k zH#{ejYN-7gnaFu1SNDBaA1mqdTjf~C*^3?OMC%nNGSZB|jYO4^Xwv45k}MA58OVl| zBJ{c789`5>&)+Y{IBW56FbsMcK{_XiqDL#Ky5GxMYNqPksu#A8c;%Ic-Qo~vJG5j!e;BYB*PW&Q> zkGWamhb^0Cx6W+^b~H0Q(>`i1J|gRo1^-?}d-R{{{EIH-02g$`)^!yDEDt1&qF92k zQ!ou`HS)Qha&9m`Se>d)O$BqFZL|74iO-O2iloccZzUpjs%LX&AZ(1v+X;0;Mj1A{S5ywX(?^{t z)3&EXEeoywNFSuT2^L3ayQzxOud79<7Jd^dOC|aV9P~|)%xLLd`_=ZF&YP!>?+$;h zIeFU4=8}%hzhl+@3|`bth({(y_H3*{!t-xA*65~6#6i=QI?oC_RPZcFhCmH8H2X_w zM)uV)Fr-2Rmh`X^2zZt!zErQkMev49#(sgDAurU!%|JcDE2!6`3*}jAqBddxsoHHI zTjR^92V2HlC zKs^&mydE=I{r<$uYoMMjx2Kx}9`BYddF8EvSk%YekaJ?(g0I&{JX>yG5Th^57G`nY z7*h0`ALIG|a{P_;mCvE|eO#{ZNMo(U`U3mJ`Zn;+mIr#PygowOdc}z$q%GHwDJd6* z94G`>(Y2zm*uB_1Jt1`KbZp36x&DNotcj4eJZpGJK1m8mAk>3?17*2d(qU8C?D9V; z6Z~1^_~DE|CeR;n8oGB;M`juLBaB@O?4hJ1iuwh#?ddMs+WBl(DP2Oxjm}7i%mfsD z4H}t%X<&4sOro0hb1>*YoY`DI;M;+LKUONW-QC^K&|CcF&kp3M6eu_FbWfpF`tyF& zPxNM;eoPqv;_l^NL-ye87(~A|@Q{n%7rKh$8`1GwCd`k+vI3$>wIYU&t90# zb76F(*iEG!BO69x0d)@-hjR`}XG5&O3tqh3Z-VXTv{B0|R4SL|W(^5|l3-0t_X@d7 z&?qVo6*Zd-qp8TJf@U&fA-9sMcXvm^Sxv9~ArRpSv-Sv}Q4P3qM6r>J)ET4N{&2L@ zw8CbWtniOVZqRF=2xw?ybRdeB249Hie3z=3b^dMGj|c1WYZWvUs{^g!l?FG^P~<}) zGr&Vb*Ssgmtd&S;%Pl1m+PED-ef9e_WR)1BkX0h8+7_MhE3z9SZ3RIaw-+E&{r-(T zENMV{cr^sHWyC8H(8lfScCV<5l{WfTvT@E4G$wlNbhjlWZdk{p0$xG+Y8A5zht7vM z&rw+!@KDMW5Sqg4pCD>miVRfAi5@qyj|iP0AmW>1bICkF(m^Q3q!JP|AS`xv(-Ae$ z{3sj|h0ZcVi{Qr+<@|vweQRKj8dCXvsJ`kr)KURWsG>UZHXcG7s{8g)Rp={iw7x_E zS&Uz6#AyvB4FrvwXh1YR!`&}w&WJXZ@M<|3_OfAh?X)Q=7cMW;AuI4F@^S1s;|Wh^AF_ie1PLjtDO8==o(3h;kN`J9{SWRK+R;uKUq?#3=^yF24Xjx_ z_irU_kUfJs@_Gk2KtA%>7z&kv5QSFYJrM9z<~iL)rW3o?otCp)>*CcPDaE|Px4D#V zHnMAUS1X~VuBN`dLrOpPVlSH{J{ucUbgk5hj8qkeV4@rWRgx%8Ah?JMlQ2Q_cqPdy zwq{&$`}?T#df#OKgg88klt?e{kxDzA67e*dbRg4mQHqyURXa-$eB)z| z^G!SXl|ub+2s3_gmBS(Qkf~AyNFr&y@7r`pgqct-YCR(YJ^V1gByg1>Hpg!NELyej zEpi>lV09SO9|M}*K=l=Ij0dE6`n_eISwtzt1*Bw8=nBy@13^WcYJu~qQX*e@hz|f{w!5JZ()+3wGy&cn5LuGjX@qsyIZxBr72kTLTg5U-1vIpw9v zc-K=Dv7n+SKVqQ}bbx#UwVtB}g0<(0QDDW7Sky0QGW_>EQ?3Vr_+LsW%m z*cMe$01!x0LQaTuKOzh@Z^!QP4N4+qTU4cf9Yg){Iv2ve>xItg-O>wTS4FjDYqlP3 z{JIWk*eQapV%&F2x=yc*>9mvAkLWa$w{6gr&byMzD=);LE5Hsbn<|?qfoEi>mD(6| zoz{1@(HhxD(2>wwL~CfS7A_T<2*-j`2Gwfp3e82|Z!qcl7kF8ao+fYM*cME#VV_C5 z(iq<;=}Nt{TX5W!s}_ox)!8vUR9`U~eTim7i*EJu39l+O0>$Nn7o8bdNZ-N6?Nm3P|lY zq8(}8{ABCNw5xU}Ri3FI>SpJX@j`*ls|9cR`H#>?fC+T=W~}fD;b4-XoAA*9n8rRdd-tV%(1!|+kYV9@s$8N-nR1zead zS4-t`Ih-68O`Ym(8+>eW3&$(3vnDbiWS7=opnsxmk9w_IYfk}49ByjZ`WiYC)Ul6! zUUY4BZRe|g*H+L#=H>`LpeYYn`T;xKtxek>`_n(#$m5>Y3~GSb!?Hp)mi86xDDS=I0RU z+Bv+loyz3!)cH;5)Fv8Bo%-VVZM9_cW`1kvM8R)Jr27Az-&T+ANPa_()Nc3+bavP% zVU{iIRNr9!F;$wTF9CRu>#jJtusfgi`r?URSW=b}PT5*>0?bTS;CYoN2s}$cvf@}V zt8V6_`DkmENg`A??!|#$)X!*0#Eys9EY;2Utb(nJT0`WQ8HPM-1zJE+#JJ(wKv+-* z?KqvCfHPD^`g#D>WW10${FJcYu|`Y+BPV}^ns6XPvek2;D9f5XoejM{lY1ctS8whd zvb6e~&`7)9=DE(FLYFr2r_`lV28e)hUDqE^2FTb*d1GbcdNQD47fW8H=fRpM**J~; z7;1#4Lt;C_zC2E7lD4sTnFynv*md46ma){KZNuAE+r=U_CC+@4Hiy8h28GQ*wRTVO z{lcz$bg20hxFJB@bPAmO&_4wZMcHP^M1^oLg!Eq#hF^Is+lWKYzL3b3jnVDP2rn;>KFaNYV4$D~*w(fdsIbR=uz0L@khisHgZo`&nQW*hIm zKF<3V`XI8YK#-!G9LG*fPfc4eXz)zA#zG%9t+Bww`0f*4<9Un=%L~6kLu-AM@*&G6 zi1Np#)$xiRVUD&^SMC6E@#;6wjvnU@?dyw5@)vP+>+`7$z4>Bt{VzGr^IO(-25WoD z?(L`^onD$*T7PYY9niG4MCUsnl}jsCI?gJEhoJ&^gegMcA0@}Hv%avCnrs%j?s!)q zXB_|=N9`u+H2SvoZ*66YI!_4w-NX|@e^YiOeBu+?_muBL++czmLM$k1VC#F;uQ6Ml z8z?UcmujfCTKC#^KA1ki>)JS=ewkSN<2~B@#39=BPB~amId!Pp;EgMjy$$nt)^?e-n_wk@OpA&vgea%EYD3_?)iLBUM zW5tm69z^^E5g6mxGEn4GRI@xPO)5@)LZPUUvuBToS^DWow z!BC54Sa zd=O*TDOV`gY$wpvrdBM?B1IL5?9hE7c%PUI?g7?`tx zIJC$vA}zAcGcd_Cao_l8-{$_!ZQLhpg?aeJW71ZbC*4Jd?-(9tNtpmEYFlNi|3f&o zixj`t=D$>GDW0UGVMGIBUQ~+Se!_Fo@;QQzr^x3le+qcrsu@ZCQ4(~LT>U7Cd_F&u zpQ%)kK2(`5BO?j>Q9(AWJbNpPjtR&@g7t2oX8KIppJ;;;@XJfQu@dA_?9Ns4Wv@*# zb$QA1ER5U~Y}yiBc)y7Y;qQJa164U7rdU10=5I&OIPcI^{+Ly}md?_9^P6!b7|s%H zI(D`8sCC(8bVdd`QHry52I&--P*4GZQFGyA4qm`ic4o(!d6?258z@(%D^r9vbPT6x zL>QRJb`V{B{V_Eir6FoN_v88KIaT`+ouE-aP-6sMgNHM?2y|ZCe6j{krNZ;T=duR) z9^&&xZL7#GnGUN}DArI2odHbbIYTYCrsH{uZrF;Hgf&QCVj*3F&Z}R%`UR+O zGqjLqgdlWI>=N3F`J6=I(G;|p+mhcRvfr#+Jr1i1tViGt;A{X366?V!ti;PA*ehu# zeb8ot6XE>sU{tTuRDs=;ul4|~ueiU=SETzRw}FZw*GbyT=WzH{37hn zCVr7IS;&nh+lGR%Yn4OOsOM%VQ>nDMyt#F$rQDF~EbOnQb*ATBE)B0<^eknDids`7 z9?IGdl`62jgiC*g-Cq0}`HuB(ug(dF-Bdm|H9_U(xw-tDOnemSiP*?(}+d5m`em0pBmghD}RR1cjJzJC+|GzB|VcyTQu z&Y?ls9fSzbJ5?%~9XP&cn6EcZYN8>k$<^j$tmmC0{-D3ta)i#)-q||nf-U2=cT%fb z{~R6VKL4{3_mtuO}bH0_$vQ&2Grmw!6P^kjabUkO_fw@h>nU; z_tS9=mWmKyFA5?Q9O7|w-R}V7Boi(njZUvX1uBPGZ-&h!?odfV8qjp6)yLm%a7 zX2$P|^MFPj=L3#2Xjy~MIR6EW^Ly&%{Dft_h7QHS%a&ttgko$tWIMp7!JB^q9ZW<- zwxKHWV=@xIfrS*bd4nrTq=;KlK?=&@(3WBbL^!EQFOUI-MR(2pNUx0tL7#cL6s_Li zgucjY54%GcJSss(LL&oF_8o8Dt#x)tc}1J6 z5wW>V`G>rH@CD}?+umzgTWtHKwsng0cGQ&o8XRQ)jcKCs>~8N^rZrEV;@?^Oye8}+ zyy470i{qKgV&S_QfnB}49rid* zy$5uv0;6Jqi@h@-k>vxsof2CWPOaob_tCf#*D>6NJs|EUWb~=>evo-jiF4Xyn3GZf zNZ-haBsKDC+!dfRG$mOs7-v>-WWG1ina;QO=}hC4bUshEJt{yRAcChJX&WdZFmaqf z?RJYVptx8*AG-AcD%`wLczzw3#lPHIH*uv9Ms725m9k zSQ~BWo_~pZp5S<86-hg7u|J|jTimx)CB^vp1MGYXbrr{DQ8Xi=zZ z7@My9izMv)`oTuS187$P*EK=S9LM;mIM1-Nd9b8|DB$GTDc*>weT8RG1{W_U!@~yV~kLZu^6s=uT zA{H@Qa|;H~4X1`tn?$sYQBH1EGPw?wR6D>kx&_i2JwKXv#5?{Kq*tZ6j-( zxrPXvW0#BexHC>eHL^kuNLq@xR(-5~j)?T7TH;!Qpb~x&Y3&|CX~fhR2cw=V&b5wO z`cjgvjd+$Av&co6ai{!D6qI4qGf_bCdZ7{;UDII}MSIejq_KxEcJT57;*CV-es-lB z>xaR>`VjEw0uD?KWT+^+jDsR!u~7p%hJ#DRmP2>4RwZ4bFCmpySPpA^>#!TDRM48U zTEel36o3?I-lE?>#UjD=TM#p;)DasTy~Gpz-yIx>@dq-bzGc?lso~5gd#IS;=PF;Y z?HAtSA8>h<@~%+i*rPy7?iel{yFiO3fE>HP7#d^u zaz1vsJHWAMZAIm9knYqBl4jtUMC~)6WDoS{n$68N&%(2{+H*Z*truYoH%N@3ul^7` z6DU&SQ7zNSx_xVospX4+p5@fh2#&Hz=ey^dr!SHa>TCCT(&tU{--dBL#ZGZ|i9S|n z&x2>eR&R_+gkwd~f#?G(mr!7#lA#G7`UO2p;6suI^sJjCPCYWn#dA^X z)_7veicHesKz(pN*jlKTj?=!5Dse z4@WP&zDiT)&k`?sSs2(-tyvhps-%*pYMS(;#4zZ1ZRew=d68{jWSU=wFZMFKZ}DF1 zPSd=T;NIp=pFLUSz#{S#;PYCbms;=BP=uGYfxQ+dM^LXI88Gel(uVwm3}PrhBLfZo z8r>J%f%e>uwZ4jDfH|YHRH!ywAn#NWQ{>%#+6HE|qSJv_!__?H6ir`}XNGzkJQn8W zJ4J7USKt)ZWS4cf`Buw%tNBxWia)J=4g5n{K?mfQf z8#jvQ{bMmiB9rtu$@mdo2jPS?Lvie645nngzvL45BO~jSV9NGU?v`gS-14YAf>+Xh z2+>SrYoN(IJlp1zQDxB%d1*cmW#Iy~eYt){>dJ2;)7HZ=ffrDQfT(f`@DXL$-^;sU zk5E1l_E((-(jGy+CcsyCLjDo#P4jN?8OKH`*>rUK*!FfZcyeqB&&UAB!ZVuaaNXZ9 z_Ldep46i?X6tM<_p(QUy=#I#5uQ~meuS2pmhKXI+Mh$6)NPcMK@d$npcF0p~pL+^W z1+h%^Y?@}`$n&{8rl3br4`ong=h)76s?_VLB!39Ir$HC-yt`ZIf*5`%T;~lI7TE+r zs77%#E**%~ethmk^A*S&KJFzDdaZ+ANh6t4B6O0puZ29GY1%VC_Hr+pI1~XTgzV8} z4`+s>#|wfJD)Nv>A$r-5Eob6V=TiM z2wa?wMe{Og#w6@PKCzg0Q(urX>wEb{&l=jMW!7Z5y@*-2UjCwH-Eyg%HT7a5wS*0k z!MQzVP^bJMY+QfN5}RwRwHJf^H@VhZR?CE1W6Awork2Umk}s@xllJ9X>JK9M@)my$~;o1%#+Ajbn}K(($sXryBhhiq)R0Wrjj zxr4h|Uff^?adm)lI@XaW-T**|!UR}j!|eFZiJdFiqHd=`$2IpxlJWt5Hy?O$G-z6e z1`UWOPM8L(-hrq{i78lyHbShn5Ubqc#gK93YwBfzu8=sJSKLB~8DC8v=N|5s=F1!8Ji#&0-XfNgl4g9@#IBWW z)!17^kEZ@fQr=Lm?|+XPO-ln1T1uN2OO4ihym)G~Tu;=Xd?%U8I=y#h?@H$IWN$lm zHY;>6VOyxcA*`(q6cF59cf9~^rBT4yo$ne+k9Zbvr_v#D{G-^nbS6D))1zdgqqdrG zeBAnbGWs;>oly^=p@#wxTIhc3pH(j{ZU9K~top`&rQJ5=pIZMSu5_y{7m2*H<35i> z)YPQHH*T2RHMMJ$&N`t)CrY)@_=GYpwieki?RXy1&&Tr+uZABdS~+<&Uy`8pP!4<@ zq9XNf0VT)MV+~6B*kcO3dWl*jTBZaoKTY>PmHi3a>c#R#8`Q+Xpp?Y9_Vje1Rj7c5 zL!<>{=H_uPI1x$!8^kyT21^m8pg|q%aY`%lu>b-Jd;&;?IHv&PE;FjFDo;&Kg#hmP zNHyg=37=e68OW}(BGrj!tVeM&D?q$2Sf94-PdheF#pUk;42Nt2;9<*-UHcL~*(nm7 zI6D_(A^zJ!wZbCWiF!c9k!k0E@7@gyX}kdVyq=8*&v!X#w*@+C~jOU(P7s(ZUzZ7IO}=FeEJ zu5;_wt#eN8%c*l*kd?%}CVT*Ur<3pUi)dFV__~5^-`d&MLb6<~ZK2lI{8EzV0#AnG zTyc*=Y(t3Ew`7#;j$|%b;6;;enyKwOuDyQ$UTn&{zVG*c-}S1`_p0jx9_!04IK9QL ztHJWo7`I+-+$6yOG;RNjtoh!$%VX^SdVTNb#xafevx*3NF1ux z>by*!yDs)8_MPRKNdOB(U6nhI>2owwT^=1ZhZL}^R7;i7zMO7Da{l*BdVG?)Q;5DV zNcpbyIr^7CEB2%WLKIv^iHa`UwI(wwBfldvE22}6a5*;_O)A7qI7RLRrFf4-ba2(agl+fpc)RrQnCuO}4J zJODI^uTZTnwtO;c*{|o+VZw8bY+-c<0^ozKW+0|2yb9AbYtWR#cje_|Wq6lsP0731 zQ_kXD?kPiZLFi3S?o3x!spT3#!( z3Sm!Js<;woPS(rh;Ak`TgwM}=O3)EkMGS$rpHwwrtN2gn*R4}dLOS@o+H8orMM4M> zw9y$;3HI!2Xl_-26Qe6cFCh4on~`)-CUo*bnt`**b&&29vehu;S7Q@~{EAA%U1ND@ zy+TAUNEWn<+82F3H?PBJU{H4HTg9rc06VysZYlA*_`}%Wt~6*Xz#$TUzkii^%oZ_5 z(7mP?$@Z8EYH^1eSN)+>lwnqftX4P-df*O`&0#-mc8Z*)q11w`79;(J4VcW{4OV$-nZ~+Ovp5bhE2QycDE|s8;q*SC z)cG&=CHo04=)k;6@{4m=UFZLwHD93X{tpBoC6hL&lCc3G`yZ)OO6+ZjJ0Dl2`5Wyz zP=w`H?tL+c&15N-5@Q2NGK)DBWSnwTe5_EjWvurkZ^B+ehBw_N3ZxKp-qtXipmRl5 zQH)LxNB6LalHp7=e$*M1m69*_Eu)l&SV5)t`fY58F_TZ4mqU;wIPruQI5xwK5<_tL!U?&)`C%GAk~3W)>X+*feJZ+o_OAD-{<0T=K@`1N&fdqn+l#<} zEaYi1zX&iGex~hB2)LWm;y5H*D7s1^)GNegE9t!~CaxWr$;+~Uh5slpYf^DLI9f6SFrMt{TE!^!}E24j9XgNzr6+OTOzKVp)$ zAD)RuI@nf6%yL#93az)mMpGrP;*ib@RX3B+k8ZXT+WUFCrM%#n)nm2Jn_!51&TjEo zkFQgHVR98rSZyBb9Kx&~n{}dcCEoh3THsSS&W178>=%b;F!Qdk9?pdPyp5Ifatl-; zR7+dw!isuZD^Sv+9R%?9yi&q!v(6z8m3gxrm@Acmg2D*`=M)8q?dFLpaCf`X#DApx z1m)5r*FFWn1!T%WnlCv?=T|u(#;1q|g&`a88poGR>4|o^VPn3eAm47Ki)%y@Y&T1r zRiu^&b3RB%l~tNxmS?y*{n2L?c5pO75TI}&{*%%CN+~V^T zmxe=L%8$2{A-T5@&iH;3|+$l5*0dzU%kwuUBv}p z7fSPd1wJ6p=lP<_N#w+8M;QzbVG7&|y|Z-?q-txc^90M??RBM9Ri)m_O6BXD*4K3u z_=2AGo9Zh{DYUeLc-0_l{s^cmVYv5!D=?gi`2)#07b;zxx$=OognP^`*wD^Z)&cXd z{2{B!m{D5`?D;m6p@Z;l3-oQUTa<(Rr^+*sTe(5*S(GwNULlciP{_i`<-XV*rtOx1 zct%FhU<>y5BkzR;Id1A9aWY7(qG?XjoMiP#=o5-LgLnikUkXceK^_zfgi3{Mds8Kq zwIft*C~x|y2NoKfj&g6Y#b2V<78ZvaYFq_n9=A16Tv4k$<0E_QXuOjyXY`a|56^QyejfoCj+F&Twd;ud{sZJl&OVV574ip4Xb&Zk~ zZHG4X(2_#3CFxK6$zs!h#o;mUw`L&a)k3rN=DZ?{y_N4&v+z%Vve3w zW`q}5b^g}En#1Ac7K?JZ)z4Dox=Yl_taX>HlaP?q*Iih4VABPgO_r&wO+bCwMT;&e zxR+UOi7h+I%hh!>Q~Hn)lxs;`3bEnd1)2QFQqp|cDw34%HKL=dYh9_9n2HUuuzUpP zuD3#XYK?IL7PetlLW~QBR(Ade2*Rf@RGy7_xtGWxX?>&jD=i^&xEQGYwXjE5TI6s#+(qsXHTUemeGRK@0~jW7Oqh zS_Ub}+_5;?1=*f7`r3Da{@S#zz4D6Ug32n=wTDjd0saI2O;aUsH!`fIsT)UjQg;ZO zfYh5KN6X7NQ!C3F%Nr#|jKQ8&a<*-iu$L&aLnXxym&0A`uK5@q{pq}~;XgQ{9dhu|3A1`trDb}$f_4;^I*h-GqWn1y^*epa=9Tw(svw7193#A z-%j=75#c7NHPClW#0xnkq20Cu%%;q&idSJu!gYCl;~FZ4d;P?3n>hC3n|!VZeZB|j z91HhM{{|Ab{!h_i)};aTCSRuDPZ|A*PU9vzLm(QfaZ5H26+wZrGde>c={=ZV!PdGP z(v-sbPM}N0GhU!>;||@5=z0{KA;2g?b0Z`M=l;aL7MOFK zN9TBgOUTvoO*%J{C$J-Ul)sX{Z%EcwJjj0NqwHJ!1tkx5L(xCbbPHMs$0W)VAw~p%x!PKrL?nK zF`p~LT`KHl+08cGPeKPVWPyweUAys>leG?9-V6Cco+4LSewkb&K;~LhS*y4(CGS${ za4>uA&`wr4DmHBRJ{J*j{c$-Sn{aY<*Xa*sc@HiS))ODC4ZI zro6Pki7Y4?X$j0+jF#Z z{X}uF=&q`&yNardJ^|~!mb@u-=cVsWZb({I0DQSP_N9q`|S?D z{q}~El7`!9o$-#iPzfY1PpeonXBNwwz%<6k|E;5N`t$Bnl>73OW+QpO!!A+g*#k7+ zXn6Z;$`!B~jkB``X0kFY23T2Fi5PZi^>kE$#u(T?cbn)?ku%)iRT@!FJK4ihqi|YA z4JYmvyA`*!O)vpYVgb;kLFaDrAf63j(MRVr*+=lYXci=a-t)(he&KW!-?6C;Dy28n zhSZ9HudEbjDP#l0%y#k}1$xIMtp4FPj-lYS)HsvRR(y!}bysj&r)=Y!bPu~7Z|n*L zoR@y+dd=s1?JIu&S6p0m1_Ct|mwxE4-QxFeA-7X`Vdqe3>5$9ygwOwRzwZH;>yGmB zI|4N|fd@pu6Lds~I(~}(3;$2#T_KB*)~WUDye2wvp_MW$8%)Xp+76prlu=ev7l2J* z`KX}ohl$Hde>pDeIr@4Y4OEk{4f1gaq&$D-0lN66&L@T*L~Y0C9po1?0=6J*0b#Ef(6N=L|!H+fM6y7n*8YHJJoJ)AW{kNoCUO1C>JVbqEm&>S4%h~T))Z=y)U`^>Vs2X4Z^%SK zEyPRg6OL1Kh@bB#9~Yp7z7_0MQ4axyMm5#d!D{+(LIP$pwHPuWBzMka1Jh3~4J$(; z%CF+DV8mCB+Y18b;VXT<#n`ufzF(yr`2ovh3~#FL_xsPg%Wbxs{eFOt=VOcLK|jq6 zPX7({?@a&rb{RgN#`_;DA6$U}QTUWHjZ(%sS9iaJ|1ewy+!$OL+#Y3` z=fgj*yBpw-!u?M7>6-?)5x8Zz-EaeNSHca!?S(r8*R8`8pWN5rC>`>r;Y#6l!cjWp z+Tnm(z`NjYfx8awD!5+V(fb{66n_wozNausm%<6AFoNm(ez+*y>u^Lf`M?cJWD+Ji zhvDdZ!zW${CbtMT4@Wc*E!*HIt`VQ&5YO~Hsr!^46pv^mKIY&aK%Q1fAA5l^|0z%C zJ4zdLiuWG}Tm<(exMMm@aXtV?KG9D&>D#yAz6eM0+;CK;Vr))>O zWjh7Wl!p{I*BwDv7%uyJf+?>D;Zksvud6xA58@-&Eg~%2Q60*SV?1}@9pN*c4WH7c zydj@>r*QI#4#Ov2D10ry9q$_9h<{4U!1GRiHg1E4Y=4WM9{CP9%4_1+pxt=R^$QS( zXreko^^n>D!Ib|Lm!4Pi-Fi5cA>mldUn?KB;Tz(K_@?@u>l<{hq6UQQt=HcDT3TUQ(h=gMSO$$KZ_gbA1D!ktX$h zhI;_8;f(hmMOYhLJKWcFNBzxKxKnUOeI&fbH{=`ru-<{Q2gTnHu|j-CdCb&rcAHzw zN%Q9{9hPe?k6B)_T(Z_#ueRQ2ecje&yVqW9pR_-gSCV%!?{Pt3(utvFxtLSQ-CTuLc`}59wXC+T_E7D;wZEx*aQ(IQ>+0{Qf2#h?4XqnKvf?xdBw9k%6H7{cxGqi&Qm*|>hgCbyFR_ky{lu_J-eRn_I3|; zU+n%v&tT8zddquFI?|E}?&EC}BXZKa^yKUcN`(EB( zynlSZHc&FqJ8=ELr7IsBbPOIFynFD;!Pkb0hen3pH}uHR_lDVU)9{VMFCTCnXgYB0 zz=sYze&Cgn;gJg?uN*8q*n9AvgU^nZjLwh#cC2RXnz2X5{&=YU(A|d}hd(s#9=|W@ zk3M;%|HyMk-n?r5s!v??>#IAie)6dMXzJ)Ek6t|b`(xXWojUf_V{aU9KmLK^&&OP` zJ+T{OkHvl#_r|xzr{Z_VpNhY6VsWB)V*A8}N$X_yKoQv8j8f zE>8V%x^p@?{m}IHrvETgIWsbI+srew<+F>k&!4P5dH&=JbCq+8bDy4jY3?`k_ssu# zp=n`c;pxSe#Y2lX>VLP>?1N9Uk6<$!I^{7->16%vB&zx+^XBOA50J`lOV3g04TaIK z6Y(UhV7K~=4x5hp|*(%Q|dD_>($pgI<;I=&&6ofoVgS{^bFtl{x)$ zGN{wmVHaR1E*9bWnA^h&v4GvIj(Od%b%Fu&2M+QT8uP{nA`H%`iTu{YfDReV{6OC7IpNxQ%jSH&di=xrvR()7nf4%R5Fp6zfPT;J)KIkI6Y3ec-N8;D1`WIQ?Oe%G1YjgA2vuB%DGPUN5 z;rT@TbV5xg;*)A>CZSH8NhTA>w%jaL=VvDpi-;MYMounJlz2*AGudW6decm5VgB94 z%Hm(oNLJ4#u=G-46sQG%?bzNYXd|48#nE-_6kCGaW`ZTz0-Hr#6-{*s>JU@xG#U}b znL+qzKvR0Ssy{E{IVHlA_&x!_^Xu?5Dc+`#-Yh$T2ApDX`15#AsT~q;XT^7^Rj@aK zf+bKQu_fUz;F;1Vtc!w%CN_XHlOo+&yvfit0%67xgiHhPyol2ZtZjndZQvw|?q~={ zoU4CNUpMA_|L$WR0^TI@X;$PC<+p+P-KVj7Oe4SJ$OFpPxG1j$!QULhmXHJQT$Uq< zPvx@`$LgUoz>`AF*vgvmcUJs0A>{JfVwBf=|6*9wi8ykM%9cu)_#zHxM92inFe$>R zF1|B=D$=9+n?Nm*X~t2WvSu!bP)a2((t7XIHs_??1S(UgoAbhdZ+W$LS}V)OsMjlN zw6W%Y`v%CY7~`fGtmF^IU2J)v&!-C|q%fGY@H;TtxiD6`p?kCt`?bZ`GcUn->BZi3 zIrBm5X@IR`71$lALM8=SHTL;ySS_n#>(PO1fJX2z_8%KjrJF@#YDJ@JXPaPOW;4e2 zEvP8lAmw`nq%U@|F18CY5IxXr*N3iTH#C3jW&7BERJ<#p<8ug2@BkXwK{UrPbO(po zIGW`V=%&0H_p^?%fD`)q&9&T$j_Ap0NeF7`2q(!R_- z$v%hMZog%3vWM6g*gvsi_CEH0_6GYU`zj=Qtk_ku^E}AC|A}3K?3Rn?b2ob%6ORI%^A+)8?!nx? zlzU;qqn!IV)WPv}yn{3I z`L+Byem%c|-^eboN7-ZSE9@EeW%hUM>+A#UX?8pNpX^!8+Wvw4J->LIEl}IKgZM$T!EiQfQt`o_` zH3@56c(z?j(@TqqIa^%%&Yp?ck{b1H7uEnee>!AF8QFx}l#c5MwaoRSd7u=H0?vP}6 zNqG4~GiMg3xjgglz2z7P`Q#>57rThHz~b?@~hLra~{m(kn?l~ zc8z8w;7VmZSVv_tDdCw%sSs0Ch-0!4&&Wa?)44jMb2TQpIwL&GSaNo8+H!_|^T)Dz z%0H9+WE;~9`;7FRhcgs9&t}2VEcm(%Y&{}*y@XUQ@l1rA} z#C$4FDff5w_nQaD1_oSBsniq-d1+>LF-1csx@w#k6l4vh1h&aPoM18K1;|h{+||m0 z8M@YpI;p9#sgTBo#}m;;jUzzSo*LH7bw@OF-&Ny5NN$}QSGD2c@u1cf4X9ctL7ma4 zsyX`NlUhAJI{H+tg@6`{@zn6RI;EaF7e|!g@fbo>5s9D7$oQe8Vg6GI&L6W zA}Z1`*J3H6S$c-YHA|>lvxd3@!C+M5u|~}l34tDUa@lgCTctM_99(G#0_;)GsppW~ za*L(*+=21fa3DSs9S=qEuIu19UId8xG@Is#W=GmKI7Y5Vv-KPp*X%vv3&_i!Shwa) ztOG@s2;LDEI>J-sR7_K5Nf8{P`nr4 z+9JyqOP|K$fb9|Rq#}!Y_EGKw2z5s_Cq0ee$%&^%Eia-zZe}OwX98F>S5Hhm7gIG? zs5{iCIU>s}zh`WGIX}M#iFRvw;V3bq)OPE9EIR-%JMp7&Z%73ppbat1wcY2CV@T27 z5Dej414fyM?~#Uh7X^L0LDlY<_P!IDd{}186YAA?kH&UffFKRBtWk4<982HmIMeb& z-D(V}{+%1A;4aqPeJ-}_Fo(6-aG)Aoxe(DAZq)K4%ba|7WLY7yWU0yp`=2sm}e)E?wwjIs{@4~&P@?RX4n#ff!PdmFXth!zZM!G=aH z6j9aPD0ibuh2otd_1xHaZeV~ut4U`m_iCXAjhD8F9IVaec;&0Qh`LF%mh};)nPk01 z12FIr$h=<`T}AJXQ0HjR~%g#sX ziA{zyQ%`&nm0szI2LQ*SXak5A2V!(`q5gPhAcS=KspRr{L|RBfCIt*=eg3(NhD7Yr#M+FW`oz72aJJ@U%!CD^LhpP66kY!<%f1}nS z*au~bo;z%Gyh+`T&R5nbJx72(oqe?+W-s2xHQqN7IwAX~ke;C+r%~IeBkM78G)8?r z7%(!uH4;*ri1U8*INPI5%hkLDRk|%5jC{`ox2J4<2J z;d7`|RC~^$WnIP}inB?p#y4Y>TnB(dlpFzvDLDehDLDc*i*lh_YZN2ZNVIOX2~9_4 z*OipcW<(yObO;!tbO;!xbO`7~Z-G8H-2{vhdFML5`@L0bDopB7wud?c!K^A4jOx_x zB5FH9Qa4dcKo3z%Krc~CKv#rnsJ0W}7Ag&+V)W6sTM*h$-x9E!z9nD}eM`VrDu5u> zFyc+mq;#GipcJ+u+6bjUz(GoZfKf_;fSr`*eJDA#9|M$;%h8C|lqTc|J!q|ne3gLO z09`GL3c>AoI2zHK)3J}ygNS`xKomPBAc`7~Xf5feC+I;$oe&U3ofHs7O+>Vf>8Mlm zAfiqSh@#F2h@#F$!kRsynQDfwrB1t%?SGtI92sBc{O;%zxNy!URCJHM7?DG#w30qm z-LJV1?ANRZkBn>W0j)k7!whN+-Ime5H6_&hsKa3~haYto(r=L$ztIckdVAkUFT$+m t@UoTnF4yooFqP@LV|>|a>P7F4C(It`k@sTK6@8q)eXC}^YuUnj{~yo78F>Hz literal 0 HcmV?d00001 diff --git a/ui/fonts/monof55.ttf b/ui/fonts/monof55.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9aebf80094a59d16fd0f10ec0343ec67d2ed3fc2 GIT binary patch literal 169452 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 D9ti__ literal 0 HcmV?d00001 diff --git a/ui/fonts/Monoid-Retina.ttf b/ui/fonts/Monoid-Retina.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ec881731ace782f1f692c4d9afabe1710ef6ac25 GIT binary patch literal 81928 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