[Bf-extensions-cvs] [018fdbdf] master: node_presets: moved back to officially supported add-ons repo
Campbell Barton
noreply at git.blender.org
Mon Dec 9 13:27:42 CET 2019
Commit: 018fdbdfe0c1a8da823503a7f0eec68fec4fab95
Author: Campbell Barton
Date: Mon Dec 9 23:26:32 2019 +1100
Branches: master
https://developer.blender.org/rBAC018fdbdfe0c1a8da823503a7f0eec68fec4fab95
node_presets: moved back to officially supported add-ons repo
===================================================================
D node_presets.py
===================================================================
diff --git a/node_presets.py b/node_presets.py
deleted file mode 100644
index 1837034b..00000000
--- a/node_presets.py
+++ /dev/null
@@ -1,220 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; version 2
-# of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-bl_info = {
- "name": "Node Presets",
- "description": "Useful and time-saving tools for rendering workflow",
- "author": "Campbell Barton",
- "version": (1, 1),
- "blender": (2, 80, 0),
- "location": "Node > Add Template",
- "description": "Adds node presets",
- "warning": "",
- "wiki_url": "",
- "tracker_url": "https://developer.blender.org/maniphest/task/edit/form/2/",
- "category": "Render"}
-
-
-import os
-import bpy
-from bpy.types import Operator, Menu, AddonPreferences
-from bpy.props import StringProperty
-
-
-# -----------------------------------------------------------------------------
-# Node Adding Operator
-
-
-def node_center(context):
- from mathutils import Vector
- loc = Vector((0.0, 0.0))
- node_selected = context.selected_nodes
- if node_selected:
- for node in node_selected:
- loc += node.location
- loc /= len(node_selected)
- return loc
-
-
-def node_template_add(context, filepath, node_group, ungroup, report):
- """ Main function
- """
-
- space = context.space_data
- node_tree = space.node_tree
- node_active = context.active_node
- node_selected = context.selected_nodes
-
- if node_tree is None:
- report({'ERROR'}, "No node tree available")
- return
-
- with bpy.data.libraries.load(filepath, link=False) as (data_from, data_to):
- assert(node_group in data_from.node_groups)
- data_to.node_groups = [node_group]
- node_group = data_to.node_groups[0]
-
- # add node!
- center = node_center(context)
-
- for node in node_tree.nodes:
- node.select = False
-
- node_type_string = {
- "ShaderNodeTree": "ShaderNodeGroup",
- "CompositorNodeTree": "CompositorNodeGroup",
- "TextureNodeTree": "TextureNodeGroup",
- }[type(node_tree).__name__]
-
- node = node_tree.nodes.new(type=node_type_string)
- node.node_tree = node_group
-
- is_fail = (node.node_tree is None)
- if is_fail:
- report({'WARNING'}, "Incompatible node type")
-
- node.select = True
- node_tree.nodes.active = node
- node.location = center
-
- if is_fail:
- node_tree.nodes.remove(node)
- else:
- if ungroup:
- bpy.ops.node.group_ungroup()
-
- #node_group.user_clear()
- #bpy.data.node_groups.remove(node_group)
-
-
-# -----------------------------------------------------------------------------
-# Node Template Prefs
-
-def node_search_path(context):
- preferences = context.preferences
- addon_prefs = preferences.addons[__name__].preferences
- dirpath = addon_prefs.search_path
- return dirpath
-
-
-class NodeTemplatePrefs(AddonPreferences):
- bl_idname = __name__
-
- search_path: StringProperty(
- name="Directory of blend files with node-groups",
- subtype='DIR_PATH',
- )
-
- def draw(self, context):
- layout = self.layout
- layout.prop(self, "search_path")
-
-
-class NODE_OT_template_add(Operator):
- """Add a node template"""
- bl_idname = "node.template_add"
- bl_label = "Add node group template"
- bl_description = "Add node group template"
- bl_options = {'REGISTER', 'UNDO'}
-
- filepath: StringProperty(
- subtype='FILE_PATH',
- )
- group_name: StringProperty(
- )
-
- def execute(self, context):
- node_template_add(context, self.filepath, self.group_name, True, self.report)
-
- return {'FINISHED'}
-
- def invoke(self, context, event):
- node_template_add(context, self.filepath, self.group_name, event.shift, self.report)
-
- return {'FINISHED'}
-
-# -----------------------------------------------------------------------------
-# node menu list
-
-def node_template_cache(context, reload=False):
- node_cache = node_template_cache._node_cache
- if reload:
- node_cache[:] = []
- if node_cache:
- return node_cache
-
- dirpath = node_search_path(context)
- for fn in os.listdir(dirpath):
- if fn.endswith(".blend"):
- filepath = os.path.join(dirpath, fn)
- with bpy.data.libraries.load(filepath) as (data_from, data_to):
- for group_name in data_from.node_groups:
- if not group_name.startswith('_'):
- node_cache.append((filepath, group_name))
-
- return node_cache
-node_template_cache._node_cache = []
-
-
-class NODE_MT_template_add(Menu):
- bl_label = "Node Template"
-
- def draw(self, context):
- layout = self.layout
-
- dirpath = node_search_path(context)
- if dirpath == "":
- layout.label(text="Set search dir in the addon-prefs")
- return
-
- for filepath, group_name in node_template_cache(context):
- props = layout.operator(NODE_OT_template_add.bl_idname,
- text=group_name)
- props.filepath = filepath
- props.group_name = group_name
-
-
-def add_node_button(self, context):
- self.layout.menu(
- NODE_MT_template_add.__name__,
- text="Template",
- icon="PLUGIN")
-
-
-classes = (
- NODE_OT_template_add,
- NODE_MT_template_add,
- NodeTemplatePrefs
- )
-
-
-def register():
- for cls in classes:
- bpy.utils.register_class(cls)
-
- bpy.types.NODE_MT_add.append(add_node_button)
-
-
-def unregister():
- for cls in classes:
- bpy.utils.unregister_class(cls)
-
- bpy.types.NODE_MT_add.remove(add_node_button)
-
-if __name__ == "__main__":
- register()
More information about the Bf-extensions-cvs
mailing list