From 888a9cb883455467e0dc59136bf3cd8be88a1f94 Mon Sep 17 00:00:00 2001 From: zeffii Date: Wed, 15 Mar 2017 12:31:13 +0100 Subject: [PATCH 1/7] add operators to jump frames --- nodes/scene/frame_info_mk2.py | 4 ++++ ui/nodeview_keymaps.py | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/nodes/scene/frame_info_mk2.py b/nodes/scene/frame_info_mk2.py index 332922105..17ad7fc15 100644 --- a/nodes/scene/frame_info_mk2.py +++ b/nodes/scene/frame_info_mk2.py @@ -47,6 +47,10 @@ class SvFrameInfoNodeMK2(bpy.types.Node, SverchCustomTreeNode): row.prop(scene, "frame_preview_start", text="Start") row.prop(scene, "frame_preview_end", text="End") + row = layout.row(align=True) + row.operator('node.sv_push_current_frame', text='-1').direction=-1 + row.operator('node.sv_push_current_frame', text='+1').direction=1 + row = layout.row(align=True) row.operator("screen.frame_jump", text="", icon='REW').end = False # row.operator("screen.keyframe_jump", text="", icon='PREV_KEYFRAME').next = False diff --git a/ui/nodeview_keymaps.py b/ui/nodeview_keymaps.py index c5c0e15b1..7f1fa884a 100644 --- a/ui/nodeview_keymaps.py +++ b/ui/nodeview_keymaps.py @@ -19,6 +19,26 @@ import bpy + +class SvPushCurrentframe(bpy.types.Operator): + + bl_idname = "node.sv_push_current_frame" + bl_label = "Push current_frame" + + direction = bpy.props.IntProperty(default=1) + + def execute(self, context): + ntree = context.space_data.edit_tree + scn = context.scene + ntree.has_changed = True + context.scene.frame_current += self.direction + # bpy.ops.node.sverchok_update_current(node_group=ntree.bl_idname) + + return {'FINISHED'} + + + + nodeview_keymaps = [] def add_keymap(): @@ -62,7 +82,9 @@ def remove_keymap(): def register(): + bpy.utils.register_class(SvPushCurrentframe) add_keymap() def unregister(): remove_keymap() + bpy.utils.unregister_class(SvPushCurrentframe) -- GitLab From f035b422b08f382fd3ffccc98519670d9637b802 Mon Sep 17 00:00:00 2001 From: zeffii Date: Wed, 15 Mar 2017 12:47:28 +0100 Subject: [PATCH 2/7] remove comment --- ui/nodeview_keymaps.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/ui/nodeview_keymaps.py b/ui/nodeview_keymaps.py index 7f1fa884a..d35e213e4 100644 --- a/ui/nodeview_keymaps.py +++ b/ui/nodeview_keymaps.py @@ -31,14 +31,10 @@ class SvPushCurrentframe(bpy.types.Operator): ntree = context.space_data.edit_tree scn = context.scene ntree.has_changed = True - context.scene.frame_current += self.direction - # bpy.ops.node.sverchok_update_current(node_group=ntree.bl_idname) - + scn.frame_current += self.direction return {'FINISHED'} - - nodeview_keymaps = [] def add_keymap(): -- GitLab From 042c3d643883e070a84753ba0650cc8d0cf73ce9 Mon Sep 17 00:00:00 2001 From: zeffii Date: Wed, 15 Mar 2017 12:48:07 +0100 Subject: [PATCH 3/7] reshuffle code --- ui/nodeview_keymaps.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ui/nodeview_keymaps.py b/ui/nodeview_keymaps.py index d35e213e4..dd7a14f84 100644 --- a/ui/nodeview_keymaps.py +++ b/ui/nodeview_keymaps.py @@ -29,9 +29,11 @@ class SvPushCurrentframe(bpy.types.Operator): def execute(self, context): ntree = context.space_data.edit_tree - scn = context.scene ntree.has_changed = True + + scn = context.scene scn.frame_current += self.direction + return {'FINISHED'} -- GitLab From f3a03d4022879fc4df02b57d28b9a3b0add0f89c Mon Sep 17 00:00:00 2001 From: zeffii Date: Wed, 15 Mar 2017 13:31:45 +0100 Subject: [PATCH 4/7] ads get/set to curr_frame, but does not listen to keyframe update from arrow keys --- nodes/scene/frame_info_mk2.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/nodes/scene/frame_info_mk2.py b/nodes/scene/frame_info_mk2.py index 17ad7fc15..db6745d39 100644 --- a/nodes/scene/frame_info_mk2.py +++ b/nodes/scene/frame_info_mk2.py @@ -19,6 +19,14 @@ import bpy from sverchok.node_tree import SverchCustomTreeNode +from sverchok.data_structure import updateNode + + +def get_int(self): + return bpy.context.scene.frame_current + +def set_int(self, value): + bpy.context.scene.frame_current = value class SvFrameInfoNodeMK2(bpy.types.Node, SverchCustomTreeNode): @@ -27,7 +35,14 @@ class SvFrameInfoNodeMK2(bpy.types.Node, SverchCustomTreeNode): bl_label = 'Frame infoMK2' bl_icon = 'OUTLINER_OB_EMPTY' + + def wrapUpdate(self, context): + updateNode(self, context) + + curr_frame = bpy.props.IntProperty(get=get_int, set=set_int, update=wrapUpdate) + def sv_init(self, context): + # self.curr_frame = context.scene.frame_current outputs = self.outputs outputs.new('StringsSocket', "Current Frame") outputs.new('StringsSocket', "Start Frame") @@ -63,7 +78,7 @@ class SvFrameInfoNodeMK2(bpy.types.Node, SverchCustomTreeNode): sub.operator("screen.animation_play", text="", icon='PAUSE') # row.operator("screen.keyframe_jump", text="", icon='NEXT_KEYFRAME').next = True row.operator("screen.frame_jump", text="", icon='FF').end = True - row.prop(scene, "frame_current", text="") + row.prop(self, "curr_frame", text="Current Frame") def process(self): scene = bpy.context.scene -- GitLab From de9088a4d9e673b2cf82f027c77aee9705b04e5c Mon Sep 17 00:00:00 2001 From: zeffii Date: Wed, 15 Mar 2017 16:44:02 +0100 Subject: [PATCH 5/7] could work... --- core/handlers.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/handlers.py b/core/handlers.py index f65bcf2b5..0fb8408c5 100644 --- a/core/handlers.py +++ b/core/handlers.py @@ -17,6 +17,8 @@ from sverchok.ui import ( color_def ) +_stats = {'frame': None} + def sverchok_trees(): for ng in bpy.data.node_groups: @@ -29,15 +31,21 @@ def sv_update_handler(scene): """ Update sverchok node groups on frame change events. """ + last_frame = _stats['frame'] + _stats['frame'] = scene.frame_current + current_frame = scene.frame_current + if last_frame == current_frame: + return + screen = bpy.context.screen if screen and not screen.is_animation_playing: # manual scrub causes this to be triggered twice, # - once with is_animation_playing True # - once with is_animation_playing False - # print('sv_update_handler : returns early') + print('sv_update_handler : returns early') return - # print('sv_update_handler') + print('sv_update_handler') for ng in sverchok_trees(): try: ng.process_ani() -- GitLab From 5e3735b4e768c56f81de0df70923efb575787523 Mon Sep 17 00:00:00 2001 From: zeffii Date: Wed, 15 Mar 2017 16:44:40 +0100 Subject: [PATCH 6/7] removes print --- core/handlers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/handlers.py b/core/handlers.py index 0fb8408c5..1cf821678 100644 --- a/core/handlers.py +++ b/core/handlers.py @@ -42,10 +42,10 @@ def sv_update_handler(scene): # manual scrub causes this to be triggered twice, # - once with is_animation_playing True # - once with is_animation_playing False - print('sv_update_handler : returns early') + # print('sv_update_handler : returns early') return - print('sv_update_handler') + # print('sv_update_handler') for ng in sverchok_trees(): try: ng.process_ani() -- GitLab From 72e04955427bfd538e6f7135200ceb7db340d0d7 Mon Sep 17 00:00:00 2001 From: zeffii Date: Wed, 15 Mar 2017 19:22:47 +0100 Subject: [PATCH 7/7] push ugly stuff to a function --- core/handlers.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/core/handlers.py b/core/handlers.py index 1cf821678..c8296e1bb 100644 --- a/core/handlers.py +++ b/core/handlers.py @@ -19,6 +19,12 @@ from sverchok.ui import ( _stats = {'frame': None} +def has_frame_changed(scene): + last_frame = _stats['frame'] + _stats['frame'] = scene.frame_current + current_frame = scene.frame_current + return not last_frame == current_frame + def sverchok_trees(): for ng in bpy.data.node_groups: @@ -31,10 +37,7 @@ def sv_update_handler(scene): """ Update sverchok node groups on frame change events. """ - last_frame = _stats['frame'] - _stats['frame'] = scene.frame_current - current_frame = scene.frame_current - if last_frame == current_frame: + if not has_frame_changed(scene): return screen = bpy.context.screen -- GitLab