本文整理汇总了Python中importlib.machinery.SourceFileLoader.get_node_group方法的典型用法代码示例。如果您正苦于以下问题:Python SourceFileLoader.get_node_group方法的具体用法?Python SourceFileLoader.get_node_group怎么用?Python SourceFileLoader.get_node_group使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类importlib.machinery.SourceFileLoader
的用法示例。
在下文中一共展示了SourceFileLoader.get_node_group方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: execute
# 需要导入模块: from importlib.machinery import SourceFileLoader [as 别名]
# 或者: from importlib.machinery.SourceFileLoader import get_node_group [as 别名]
def execute(self, context):
# find group names created by Blender Tools with
# dynamic importing of all modules from "internals/shaders" folder
# and checking if module has "get_node_group" functions which indicates that
# module creates node group
groups_to_remove = [
"AddEnvGroup", # from v0.6
"FresnelGroup", # from v0.6
"LampmaskMixerGroup", # from v0.6
"ReflectionNormalGroup", # from v0.6
]
for root, dirs, files in os.walk(_path_utils.get_addon_installation_paths()[0] + os.sep + "internals/shaders"):
for file in files:
if not file.endswith(".py"):
continue
module = SourceFileLoader(root + os.sep + file, root + os.sep + file).load_module()
if "get_node_group" in dir(module):
ng = module.get_node_group()
groups_to_remove.append(ng.name)
# 1. clear nodes on materials
for mat in bpy.data.materials:
if not mat.node_tree:
continue
if mat.scs_props.active_shader_preset_name == "<none>":
nodes_to_remove = []
# check for possible leftover usage of our node groups
for node in mat.node_tree.nodes:
# filter out nodes which are not node group and node groups without node tree
if node.type != "GROUP" or not node.node_tree:
continue
if node.node_tree.name in groups_to_remove:
nodes_to_remove.append(node.node_tree.name)
# remove possible leftover used node group nodes
for node_name in nodes_to_remove:
mat.node_tree.nodes.remove(mat.node_tree.nodes[node_name])
continue
mat.node_tree.nodes.clear()
# 2. clear nodes on node groups
for ng_name in groups_to_remove:
if ng_name not in bpy.data.node_groups:
continue
ng = bpy.data.node_groups[ng_name]
ng.nodes.clear()
# 3. remove node groups from blender data blocks
for ng_name in groups_to_remove:
if ng_name not in bpy.data.node_groups:
continue
bpy.data.node_groups.remove(bpy.data.node_groups[ng_name])
# 4. finally set preset to material again, which will update nodes and possible input interface changes
for mat in bpy.data.materials:
if mat.scs_props.active_shader_preset_name == "<none>":
continue
material_textures = {}
if "scs_shader_attributes" in mat and "textures" in mat["scs_shader_attributes"]:
for texture in mat["scs_shader_attributes"]["textures"].values():
tex_id = texture["Tag"].split(":")[1]
tex_value = texture["Value"]
material_textures[tex_id] = tex_value
(preset_name, preset_section) = _material_utils.find_preset(mat.scs_props.mat_effect_name, material_textures)
if preset_section:
_material_utils.set_shader_data_to_material(mat, preset_section)
return {'FINISHED'}