Не подтверждена Коммит de996f63 создал по автору Dealga McArdle's avatar Dealga McArdle Зафиксировано автором GitHub
Просмотр файлов

update gl drawing info from nodetree (#4115)

* step one, it's a nodetree function, not node specific

* remove all calls to old get_and_set_gl_scale_info

* remove function get_and_set_gl_scale_info

* elaborate update_gl_scale_info docstring

* time to cleanup

* adjust comment reflects intent

* calling get_dpi_factor here may be sufficient

* restage

* remove props that are not used

* make them use the same code
владелец 39e95465
......@@ -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'):
......
......@@ -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():
......
......@@ -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)
......
......@@ -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
......
......@@ -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)
......
......@@ -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)))[:]]
......
......@@ -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):
......
......@@ -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)
......
......@@ -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):
......
......@@ -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')
......
......@@ -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")
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать