def update_nodes(self, nodes): """This method expects to get list of its nodes which should be updated""" if len(nodes) == 1: # this function actually doing something different unlike `process_from_nodes` function # the difference is that process_from_nodes can also update other outdated nodes process_from_node(nodes[0]) process_from_nodes(nodes)
def modal(self, context, event): if not context.scene.SvShowIn3D_active: self.cancel(context) return {'FINISHED'} if not (event.type == 'TIMER'): return {'PASS_THROUGH'} objects_nodes_set = { 'ObjectsNode', 'ObjectsNodeMK2', 'SvObjectsNodeMK3', 'SvExNurbsInNode', 'SvBezierInNode' } obj_nodes = [] for ng in bpy.data.node_groups: if ng.bl_idname == 'SverchCustomTreeType': if ng.sv_process: nodes = [] for n in ng.nodes: if n.bl_idname in objects_nodes_set: nodes.append(n) if nodes: obj_nodes.append(nodes) ''' reaches here only if event is TIMER and self.active ''' for n in obj_nodes: # print('calling process on:', n.name, n.id_data) process_from_nodes(n) return {'PASS_THROUGH'}
def on_draft_mode_changed(self, context): """ This is triggered when Draft mode of the tree is toggled. """ draft_nodes = [] for node in self.nodes: if hasattr(node, 'does_support_draft_mode' ) and node.does_support_draft_mode(): draft_nodes.append(node) node.on_draft_mode_changed(self.sv_draft) # From the user perspective, some of node parameters # got new parameter values, so the setup should be recalculated; # but techically, node properties were not changed # (only other properties were shown in UI), so enabling/disabling # of draft mode does not automatically trigger tree update. # Here we trigger it manually. if draft_nodes: try: bpy.context.window.cursor_set("WAIT") was_frozen = self.is_frozen() self.unfreeze(hard=True) process_from_nodes(draft_nodes) finally: if was_frozen: self.freeze(hard=True) bpy.context.window.cursor_set("DEFAULT")
def modal(self, context, event): if not context.scene.SvShowIn3D_active: self.cancel(context) return {'FINISHED'} if not (event.type == 'TIMER'): return {'PASS_THROUGH'} obj_nodes = [] for ng in bpy.data.node_groups: if ng.bl_idname == 'SverchCustomTreeType': if ng.sv_process: nodes = [] for n in ng.nodes: if n.bl_idname == 'ObjectsNode': nodes.append(n) if nodes: obj_nodes.append(nodes) ''' reaches here only if event is TIMER and self.active ''' for n in obj_nodes: # print('calling process on:', n.name, n.id_data) process_from_nodes(n) return {'PASS_THROUGH'}
def animation_update(self): animated_nodes = [] for node in self.nodes: if hasattr(node, 'is_animatable'): if node.is_animatable: animated_nodes.append(node) process_from_nodes(animated_nodes)
def modal(self, context, event): if not context.scene.SvShowIn3D_active: self.cancel(context) return {"FINISHED"} if not (event.type == "TIMER"): return {"PASS_THROUGH"} obj_nodes = [] for ng in bpy.data.node_groups: if ng.bl_idname == "SverchCustomTreeType": if ng.sv_process: nodes = [] for n in ng.nodes: if n.bl_idname in objects_nodes_set: nodes.append(n) if nodes: obj_nodes.append(nodes) """ reaches here only if event is TIMER and self.active """ for n in obj_nodes: # print('calling process on:', n.name, n.id_data) process_from_nodes(n) return {"PASS_THROUGH"}
def sv_update(self): self.update_sv_links() if self.links_have_changed(): self.has_changed = True build_update_list(self) process_from_nodes(self.get_nodes()) self.store_links_cache() else: process_from_nodes(self.get_groups())
def update_nodes(self, nodes): """This method expects to get list of its nodes which should be updated""" if self.id_data.skip_tree_update: # this can be called by node groups which do not know whether the tree is throttled return if len(nodes) == 1: # this function actually doing something different unlike `process_from_nodes` function # the difference is that process_from_nodes can also update other outdated nodes process_from_node(nodes[0]) process_from_nodes(nodes)
def sv_update(self): """ the method checks if anything changed inside the tree and update it if necessary """ self.sv_links.create_new_links(self) if self.sv_links.links_have_changed(self): self.has_changed = True build_update_list(self) process_from_nodes(self.sv_links.get_nodes(self)) self.sv_links.store_links_cache(self)
def sv_update(self): """ the method checks if anything changed inside the normal tree or monad and update them if necessary """ self.sv_links.create_new_links(self) if self.sv_links.links_have_changed(self): self.has_changed = True build_update_list(self) process_from_nodes(self.sv_links.get_nodes(self)) self.sv_links.store_links_cache(self) else: process_from_nodes(self.get_groups())
def execute(self, context): obj_nodes = [] for ng in bpy.data.node_groups: if ng.bl_idname == 'SverchCustomTreeType': if ng.sv_process: nodes = [] for n in ng.nodes: if n.bl_idname == 'ObjectsNode': nodes.append(n) if nodes: obj_nodes.append(nodes) for n in obj_nodes: process_from_nodes(n) return {'FINISHED'}
def on_draft_mode_changed(self, context): """ This is triggered when Draft mode of the tree is toggled. """ draft_nodes = [] for node in self.nodes: if hasattr(node, 'does_support_draft_mode') and node.does_support_draft_mode(): draft_nodes.append(node) node.on_draft_mode_changed(self.sv_draft) # From the user perspective, some of node parameters # got new parameter values, so the setup should be recalculated; # but techically, node properties were not changed # (only other properties were shown in UI), so enabling/disabling # of draft mode does not automatically trigger tree update. # Here we trigger it manually. if draft_nodes: process_from_nodes(draft_nodes)