diff --git a/core/handlers.py b/core/handlers.py index 6deff67cc88bb276c85f7a60057993aaec4c1fb1..7053a709ededf463806ebf6c20e023aadd94367b 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 b11ee952b3a6cd4af74881468a15706be070b487..6517ca8d07f5a4d8fe4eb97f67b6710d9567a5ba 100644 --- a/node_tree.py +++ b/node_tree.py @@ -120,6 +120,22 @@ 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. + + 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 + 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 ''' @@ -605,24 +621,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): # 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, - 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) - @post_load_call def add_use_fake_user_to_trees(): diff --git a/nodes/number/easing.py b/nodes/number/easing.py index 98b21eb425e44aeb0a0234eee619bfca1db55ed7..c991de4f0e93f22c826dfcade5aa7f0fd510b916 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)))[:]] @@ -195,21 +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: - # 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 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 @@ -283,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/nodes/text/stethoscope_v28.py b/nodes/text/stethoscope_v28.py index acdf626e2068f208b4b8d49ed4c9047de2116028..b72e64b01c12364c8e3a160b7e29a0e0f5a5fcf1 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 91d7e50baf63aa247c37ca9adac00ef6e83ba0e5..9753ad396d0096d99a76b01c0bdd3bf05d5cfe09 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 f3d98d689a5c866776b827baead8cc1ce2102437..a3432897e469e41f7e62a55eca28c04813fcb42f 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): @@ -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_texture.py b/nodes/viz/viewer_texture.py index 380b0a780ff6b267f01e74d2833f5532ac8834e9..af2ecf912f789185851c1ed925a6bbdc26781bf0 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 2fc96c1b7ced5bb40d6db9ee25caafadb4eb0307..d7919e3a5dd0a4e86a7fc475dfa9195bae3333e3 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 ec9a5172cad99300b9ea0cb025a2201e84a98a39..ec96da313d2f4d0ab78daadff5c13a07601509f7 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) @@ -327,7 +318,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): diff --git a/settings.py b/settings.py index 89ef2249441292c386190b0592a0a9eee6fd3d44..fa8ce97e8ad5202e07491aae95f6cd2592ee16c1 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() + 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}') ## @@ -472,10 +469,7 @@ 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}') box_sub1_col.label(text='Stethoscope') box_sub1_col.prop(self, 'stethoscope_view_scale', text='scale') diff --git a/utils/nodeview_time_graph_drawing.py b/utils/nodeview_time_graph_drawing.py index ce23a8ea33a62027baba70b543769a010ee46462..fa579fbc4e33031f5eb30ca91b6f7cd473661f94 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 @@ -48,16 +47,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 +201,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 +212,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, @@ -244,5 +231,3 @@ def disable_time_graph(ng): def disable_node_times(ng): nvBGL2.callback_disable(f"{ng.tree_id}_node_time_info") - -