From 0ab08cc829153c1307025b485ded9c98e98b2412 Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Sat, 22 May 2021 10:50:03 +0200 Subject: [PATCH 01/10] step one, it's a nodetree function, not node specific --- node_tree.py | 27 +++++++++++++++------------ utils/nodeview_time_graph_drawing.py | 18 +++--------------- 2 files changed, 18 insertions(+), 27 deletions(-) diff --git a/node_tree.py b/node_tree.py index b11ee952b..f35a97e65 100644 --- a/node_tree.py +++ b/node_tree.py @@ -120,6 +120,19 @@ class SvNodeTreeCommon(object): finally: self.skip_tree_update = previous_state + def update_gl_scale_info(self, origin=None): + """ + the nodeview scale and dpi differs between users and must be queried to get correct nodeview + x,y and dpi scale info. + """ + debug('get_and_set_gl_scale_info called from', origin or self.name) + try: + from sverchok.utils.context_managers import sv_preferences + with sv_preferences() as prefs: + prefs.set_nodeview_render_params(None) + except Exception as err: + debug('failed to get gl scale info', err) + class SverchCustomTree(NodeTree, SvNodeTreeCommon): ''' Sverchok - architectural node programming of geometry in low level ''' @@ -607,21 +620,11 @@ class SverchCustomTreeNode(UpdateNodes, NodeUtils): # Methods for OpenGL viewers - def get_and_set_gl_scale_info(self, origin=None): # todo, probably openGL viewers should have its own mixin class + def get_and_set_gl_scale_info(self, origin=None): """ 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. """ - # print('get_and_set_gl_scale_info called from', origin or self.name) - - try: - # print('getting gl scale params') - from sverchok.utils.context_managers import sv_preferences - with sv_preferences() as prefs: - prefs.set_nodeview_render_params(None) - except Exception as err: - print('failed to get gl scale info', err) + self.id_data.update_gl_scale_info(origin) @post_load_call diff --git a/utils/nodeview_time_graph_drawing.py b/utils/nodeview_time_graph_drawing.py index ce23a8ea3..d0d671bdc 100644 --- a/utils/nodeview_time_graph_drawing.py +++ b/utils/nodeview_time_graph_drawing.py @@ -48,16 +48,6 @@ def write_time_graph(): counter += 1 return cumulative_dict -def get_sv_times(named_group): - ng = bpy.data.node_groups - upd = bpy.ops.node.sverchok_update_current - - for g in ng: - if g.bl_idname == 'SverchCustomTreeType': - if g.name == named_group: - upd(node_group=named_group) - return write_time_graph() - def draw_text(font_id, location, text, color): x, y = location @@ -212,7 +202,7 @@ def draw_overlay(*data): def configure_node_times(ng): named_tree = ng.name - data_time_infos = (get_sv_times(named_tree), get_preferences(), named_tree) + data_time_infos = (None, get_preferences(), named_tree) config_node_info = { 'tree_name': named_tree, @@ -223,13 +213,11 @@ def configure_node_times(ng): nvBGL2.callback_enable(f"{ng.tree_id}_node_time_info", config_node_info) def configure_time_graph(ng): - # ensure most recent gl scale. - from sverchok.node_tree import SverchCustomTreeNode - SverchCustomTreeNode.get_and_set_gl_scale_info(None, origin="time graph") + ng.update_gl_scale_info(origin=f"configure_time_graph, tree: {ng.name}") named_tree = ng.name shader = gpu.shader.from_builtin('2D_SMOOTH_COLOR') - data_overlay = (get_sv_times(named_tree), named_tree, shader) + data_overlay = (None, named_tree, shader) config_graph_overlay = { 'tree_name': named_tree, -- GitLab From aeabf8510c1395c3b351d0eb6d43747878005c40 Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Sat, 22 May 2021 10:58:24 +0200 Subject: [PATCH 02/10] remove all calls to old get_and_set_gl_scale_info --- core/handlers.py | 2 +- node_tree.py | 2 +- nodes/number/easing.py | 2 +- nodes/text/stethoscope_v28.py | 2 +- nodes/viz/console_node.py | 2 +- nodes/viz/viewer_2d.py | 2 +- nodes/viz/viewer_texture.py | 2 +- nodes/viz/viewer_texture_lite.py | 2 +- nodes/viz/viewer_waveform_output.py | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/core/handlers.py b/core/handlers.py index 6deff67cc..7053a709e 100644 --- a/core/handlers.py +++ b/core/handlers.py @@ -184,7 +184,7 @@ def sv_post_load(scene): # ensure current nodeview view scale / location parameters reflect users' system settings from sverchok import node_tree - node_tree.SverchCustomTreeNode.get_and_set_gl_scale_info(None, "sv_post_load") + node_tree.SverchCustomTree.update_gl_scale_info(None, "sv_post_load") for monad in (ng for ng in bpy.data.node_groups if ng.bl_idname == 'SverchGroupTreeType'): diff --git a/node_tree.py b/node_tree.py index f35a97e65..84bccd8e3 100644 --- a/node_tree.py +++ b/node_tree.py @@ -125,7 +125,7 @@ class SvNodeTreeCommon(object): the nodeview scale and dpi differs between users and must be queried to get correct nodeview x,y and dpi scale info. """ - debug('get_and_set_gl_scale_info called from', origin or self.name) + debug('update_gl_scale_info called from', origin or self.name) try: from sverchok.utils.context_managers import sv_preferences with sv_preferences() as prefs: diff --git a/nodes/number/easing.py b/nodes/number/easing.py index 98b21eb42..d86735576 100644 --- a/nodes/number/easing.py +++ b/nodes/number/easing.py @@ -183,7 +183,7 @@ class SvEasingNode(bpy.types.Node, SverchCustomTreeNode): def sv_init(self, context): self.inputs.new('SvStringsSocket', "Float").prop_name = 'in_float' self.outputs.new('SvStringsSocket', "Float").custom_draw = 'custom_draw_socket' - self.get_and_set_gl_scale_info() + self.id_data.update_gl_scale_info() def get_offset(self): return [int(j) for j in (Vector(self.absolute_location) + Vector((self.width + 20, 0)))[:]] diff --git a/nodes/text/stethoscope_v28.py b/nodes/text/stethoscope_v28.py index acdf626e2..b72e64b01 100644 --- a/nodes/text/stethoscope_v28.py +++ b/nodes/text/stethoscope_v28.py @@ -145,7 +145,7 @@ class SvStethoscopeNodeMK2(bpy.types.Node, SverchCustomTreeNode): def sv_init(self, context): self.inputs.new('SvStringsSocket', 'Data') self.get_theme_colors_for_contrast() - self.get_and_set_gl_scale_info() + self.id_data.update_gl_scale_info() def sv_copy(self, node): # reset n_id on copy diff --git a/nodes/viz/console_node.py b/nodes/viz/console_node.py index 91d7e50ba..9753ad396 100644 --- a/nodes/viz/console_node.py +++ b/nodes/viz/console_node.py @@ -484,7 +484,7 @@ class SvConsoleNode(bpy.types.Node, SverchCustomTreeNode, SvNodeViewDrawMixin): def sv_init(self, context): self.inputs.new("SvStringsSocket", "text") - self.get_and_set_gl_scale_info() + self.id_data.update_gl_scale_info() def draw_buttons(self, context, layout): row = layout.row(align=True) diff --git a/nodes/viz/viewer_2d.py b/nodes/viz/viewer_2d.py index f3d98d689..c33dd5024 100644 --- a/nodes/viz/viewer_2d.py +++ b/nodes/viz/viewer_2d.py @@ -686,7 +686,7 @@ class SvViewer2D(bpy.types.Node, SverchCustomTreeNode): vc2 = self.inputs.new('SvColorSocket', "Polygon Color") vc2.prop_name = 'polygon_color' vc2.custom_draw = 'draw_color_socket' - self.get_and_set_gl_scale_info() + self.id_data.update_gl_scale_info() self.update_sockets() def draw_color_socket(self, socket, context, layout): diff --git a/nodes/viz/viewer_texture.py b/nodes/viz/viewer_texture.py index 380b0a780..af2ecf912 100644 --- a/nodes/viz/viewer_texture.py +++ b/nodes/viz/viewer_texture.py @@ -258,7 +258,7 @@ class SvTextureViewerNode(bpy.types.Node, SverchCustomTreeNode): height_socket.prop_name = 'height_custom_tex' height_socket.hide_safe = True - self.get_and_set_gl_scale_info() + self.id_data.update_gl_scale_info() def delete_texture(self): diff --git a/nodes/viz/viewer_texture_lite.py b/nodes/viz/viewer_texture_lite.py index 2fc96c1b7..d7919e3a5 100644 --- a/nodes/viz/viewer_texture_lite.py +++ b/nodes/viz/viewer_texture_lite.py @@ -87,7 +87,7 @@ class SvTextureViewerNodeLite(bpy.types.Node, SverchCustomTreeNode): def sv_init(self, context): self.width = 180 self.inputs.new('SvStringsSocket', "pixel value") - self.get_and_set_gl_scale_info() + self.id_data.update_gl_scale_info() def delete_texture(self): n_id = node_id(self) diff --git a/nodes/viz/viewer_waveform_output.py b/nodes/viz/viewer_waveform_output.py index ec9a5172c..d22526dbc 100644 --- a/nodes/viz/viewer_waveform_output.py +++ b/nodes/viz/viewer_waveform_output.py @@ -327,7 +327,7 @@ class SvWaveformViewer(bpy.types.Node, SverchCustomTreeNode): def sv_init(self, context): self.inputs.new(DATA_SOCKET, 'channel 0') self.inputs.new(DATA_SOCKET, 'channel 1') - self.get_and_set_gl_scale_info() + self.id_data.update_gl_scale_info() def draw_buttons(self, context, layout): -- GitLab From d34a398e5373e7f6fa11b4c7268bbaa26a8e337b Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Sat, 22 May 2021 10:59:21 +0200 Subject: [PATCH 03/10] remove function get_and_set_gl_scale_info --- node_tree.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/node_tree.py b/node_tree.py index 84bccd8e3..11083e116 100644 --- a/node_tree.py +++ b/node_tree.py @@ -618,14 +618,6 @@ class SverchCustomTreeNode(UpdateNodes, NodeUtils): return False return prefs.over_sized_buttons - # Methods for OpenGL viewers - - def get_and_set_gl_scale_info(self, origin=None): - """ - This function is called in sv_init in nodes that draw GL instructions to the nodeview, - """ - self.id_data.update_gl_scale_info(origin) - @post_load_call def add_use_fake_user_to_trees(): -- GitLab From 19d66fb815d3c055b37f66b3e0e2a40c7e0e093c Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Sat, 22 May 2021 11:09:24 +0200 Subject: [PATCH 04/10] elaborate update_gl_scale_info docstring --- node_tree.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/node_tree.py b/node_tree.py index 11083e116..6517ca8d0 100644 --- a/node_tree.py +++ b/node_tree.py @@ -124,7 +124,10 @@ class SvNodeTreeCommon(object): """ the nodeview scale and dpi differs between users and must be queried to get correct nodeview x,y and dpi scale info. + + this is instead of calling `get_dpi_factor` on every redraw. """ + debug('update_gl_scale_info called from', origin or self.name) try: from sverchok.utils.context_managers import sv_preferences -- GitLab From 72ead871c4cf44dbf2cb3ae020a418fb0f2c5a49 Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Sat, 22 May 2021 11:19:13 +0200 Subject: [PATCH 05/10] time to cleanup --- settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.py b/settings.py index 89ef22494..f6a56bd6a 100644 --- a/settings.py +++ b/settings.py @@ -347,7 +347,7 @@ class SverchokPreferences(AddonPreferences): def set_nodeview_render_params(self, context): # i think these are both the same.. - self.render_scale = get_dpi_factor() + self.render_scale = get_dpi_factor() # this was intended as a general draw scale multiplier, not location but size. self.render_location_xy_multiplier = get_dpi_factor() # print(f'set render_scale to: {self.render_scale}') # print(f'set render_location_xy_multiplier to: {self.render_location_xy_multiplier}') -- GitLab From b26d26de8fbd9bb0240f769c4b61d3a881383354 Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Sat, 22 May 2021 11:21:52 +0200 Subject: [PATCH 06/10] adjust comment reflects intent --- settings.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/settings.py b/settings.py index f6a56bd6a..7baca256b 100644 --- a/settings.py +++ b/settings.py @@ -346,11 +346,8 @@ class SverchokPreferences(AddonPreferences): description="Auto update angle values when angle units are changed to preserve the angle") def set_nodeview_render_params(self, context): - # i think these are both the same.. self.render_scale = get_dpi_factor() # this was intended as a general draw scale multiplier, not location but size. self.render_location_xy_multiplier = get_dpi_factor() - # print(f'set render_scale to: {self.render_scale}') - # print(f'set render_location_xy_multiplier to: {self.render_location_xy_multiplier}') ## -- GitLab From 36356cd56598a7ff3b006ac72ce0f871b2757879 Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Sat, 22 May 2021 11:48:30 +0200 Subject: [PATCH 07/10] calling get_dpi_factor here may be sufficient --- nodes/number/easing.py | 1 - utils/nodeview_time_graph_drawing.py | 5 ++--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/nodes/number/easing.py b/nodes/number/easing.py index d86735576..4e544c2d7 100644 --- a/nodes/number/easing.py +++ b/nodes/number/easing.py @@ -197,7 +197,6 @@ class SvEasingNode(bpy.types.Node, SverchCustomTreeNode): multiplier = prefs.render_location_xy_multiplier scale = prefs.render_scale except: - # print('did not find preferences - you need to save user preferences') multiplier = 1.0 scale = 1.0 diff --git a/utils/nodeview_time_graph_drawing.py b/utils/nodeview_time_graph_drawing.py index d0d671bdc..579955d1f 100644 --- a/utils/nodeview_time_graph_drawing.py +++ b/utils/nodeview_time_graph_drawing.py @@ -31,9 +31,8 @@ def string_from_duration(duration): return f"{(1000*duration):.3f} ms" def get_preferences(): - from sverchok.settings import get_params - props = get_params({'render_location_xy_multiplier': 1.0}) - return props.render_location_xy_multiplier + from sverchok.settings import get_dpi_factor + return get_dpi_factor() def write_time_graph(): m = sverchok.core.update_system.graphs -- GitLab From ce29c66a03a992dd2b9cd455aba7595b95e235c6 Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Sat, 22 May 2021 13:02:17 +0200 Subject: [PATCH 08/10] restage --- nodes/number/easing.py | 9 ++------- settings.py | 2 -- utils/nodeview_time_graph_drawing.py | 2 -- 3 files changed, 2 insertions(+), 11 deletions(-) diff --git a/nodes/number/easing.py b/nodes/number/easing.py index 4e544c2d7..c991de4f0 100644 --- a/nodes/number/easing.py +++ b/nodes/number/easing.py @@ -195,20 +195,17 @@ class SvEasingNode(bpy.types.Node, SverchCustomTreeNode): try: with sv_preferences() as prefs: multiplier = prefs.render_location_xy_multiplier - scale = prefs.render_scale except: multiplier = 1.0 - scale = 1.0 # cache this. self.location_theta = multiplier - return scale def generate_graph_geom(self, config): geom = lambda: None x, y = config.loc - size = 140 * config.scale + size = 140 back_color, grid_color, line_color = config.palette easing_func = config.easing_func @@ -282,12 +279,10 @@ class SvEasingNode(bpy.types.Node, SverchCustomTreeNode): if self.activate and self.inputs[0].is_linked: + self.get_drawing_attributes() config = lambda: None - scale = self.get_drawing_attributes() - config.loc = (0, 0) config.palette = palette_dict.get(self.selected_theme_mode)[:] - config.scale = scale config.easing_func = easing_func geom = self.generate_graph_geom(config) diff --git a/settings.py b/settings.py index 7baca256b..c301d6e50 100644 --- a/settings.py +++ b/settings.py @@ -469,8 +469,6 @@ class SverchokPreferences(AddonPreferences): box_sub1_col = box_sub1.column(align=True) box_sub1_col.label(text='Render Scale & Location') - # box_sub1_col.prop(self, 'render_location_xy_multiplier', text='xy multiplier') - # box_sub1_col.prop(self, 'render_scale', text='scale') box_sub1_col.label(text=f'xy multiplier: {self.render_location_xy_multiplier}') box_sub1_col.label(text=f'render_scale : {self.render_scale}') diff --git a/utils/nodeview_time_graph_drawing.py b/utils/nodeview_time_graph_drawing.py index 579955d1f..fa579fbc4 100644 --- a/utils/nodeview_time_graph_drawing.py +++ b/utils/nodeview_time_graph_drawing.py @@ -231,5 +231,3 @@ def disable_time_graph(ng): def disable_node_times(ng): nvBGL2.callback_disable(f"{ng.tree_id}_node_time_info") - - -- GitLab From 40f1f159b7f3343aa57a398efd1aba0b54706b20 Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Sat, 22 May 2021 13:11:07 +0200 Subject: [PATCH 09/10] remove props that are not used --- settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.py b/settings.py index c301d6e50..9f98b9646 100644 --- a/settings.py +++ b/settings.py @@ -470,7 +470,7 @@ class SverchokPreferences(AddonPreferences): box_sub1_col.label(text='Render Scale & Location') box_sub1_col.label(text=f'xy multiplier: {self.render_location_xy_multiplier}') - box_sub1_col.label(text=f'render_scale : {self.render_scale}') + # box_sub1_col.label(text=f'render_scale : {self.render_scale}') box_sub1_col.label(text='Stethoscope') box_sub1_col.prop(self, 'stethoscope_view_scale', text='scale') -- GitLab From 57f8b56959ee5dd1c89580e08c72850ef922e4cc Mon Sep 17 00:00:00 2001 From: Dealga McArdle Date: Sat, 22 May 2021 16:04:46 +0200 Subject: [PATCH 10/10] make them use the same code --- nodes/viz/viewer_2d.py | 22 +++++++--------------- nodes/viz/viewer_waveform_output.py | 21 ++++++--------------- settings.py | 1 - 3 files changed, 13 insertions(+), 31 deletions(-) diff --git a/nodes/viz/viewer_2d.py b/nodes/viz/viewer_2d.py index c33dd5024..a3432897e 100644 --- a/nodes/viz/viewer_2d.py +++ b/nodes/viz/viewer_2d.py @@ -715,21 +715,13 @@ class SvViewer2D(bpy.types.Node, SverchCustomTreeNode): layout.label(text=socket.name+ '. ' + SvGetSocketInfo(socket)) def get_drawing_attributes(self): - """ - adjust render location based on preference multiplier setting - """ - try: - with sv_preferences() as prefs: - multiplier = prefs.render_location_xy_multiplier - scale = prefs.render_scale - except: - # print('did not find preferences - you need to save user preferences') - multiplier = 1.0 - scale = 1.0 - - # cache this. - self.location_theta = multiplier - return scale + """ obtain the dpi adjusted xy and scale factors, cache location_theta """ + from sverchok.settings import get_params + props = get_params({ + 'render_scale': 1.0, + 'render_location_xy_multiplier': 1.0}) + self.location_theta = props.render_location_xy_multiplier + return props.render_scale def get_offset(self): return [int(j) for j in (Vector(self.absolute_location) + Vector((self.width + 20, 0)))[:]] diff --git a/nodes/viz/viewer_waveform_output.py b/nodes/viz/viewer_waveform_output.py index d22526dbc..ec96da313 100644 --- a/nodes/viz/viewer_waveform_output.py +++ b/nodes/viz/viewer_waveform_output.py @@ -269,21 +269,12 @@ class SvWaveformViewer(bpy.types.Node, SverchCustomTreeNode): ... # if self.num_channels < MAX_SOCKETS def get_drawing_attributes(self): - """ - adjust render location based on preference multiplier setting - """ - try: - with sv_preferences() as prefs: - multiplier = prefs.render_location_xy_multiplier - scale = prefs.render_scale - except: - # print('did not find preferences - you need to save user preferences') - multiplier = 1.0 - scale = 1.0 - self.location_theta = multiplier - # x, y = [x * multiplier, y * multiplier] - - return scale + from sverchok.settings import get_params + props = get_params({ + 'render_scale': 1.0, + 'render_location_xy_multiplier': 1.0}) + self.location_theta = props.render_location_xy_multiplier + return props.render_scale activate: bpy.props.BoolProperty(name="show graph", update=updateNode) diff --git a/settings.py b/settings.py index 9f98b9646..fa8ce97e8 100644 --- a/settings.py +++ b/settings.py @@ -470,7 +470,6 @@ class SverchokPreferences(AddonPreferences): box_sub1_col.label(text='Render Scale & Location') box_sub1_col.label(text=f'xy multiplier: {self.render_location_xy_multiplier}') - # box_sub1_col.label(text=f'render_scale : {self.render_scale}') box_sub1_col.label(text='Stethoscope') box_sub1_col.prop(self, 'stethoscope_view_scale', text='scale') -- GitLab