Exemple #1
0
 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)
Exemple #2
0
    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'}
Exemple #3
0
    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'}
Exemple #5
0
 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)
Exemple #6
0
    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"}
Exemple #7
0
 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())
Exemple #8
0
 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)
Exemple #9
0
 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)
Exemple #10
0
 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 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'}
Exemple #13
0
    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)