[Bf-extensions-cvs] [68867dbb] master: support for udim textures and buttons for easily remove applink nodes

Kalle-Samuli Riihikoski noreply at git.blender.org
Wed Mar 6 14:56:34 CET 2019


Commit: 68867dbb2b2006411f3cdb87767756f768aaa561
Author: Kalle-Samuli Riihikoski
Date:   Wed Mar 6 15:54:46 2019 +0200
Branches: master
https://developer.blender.org/rBA68867dbb2b2006411f3cdb87767756f768aaa561

support for udim textures and buttons for easily remove applink nodes

===================================================================

M	io_coat3D/__init__.py
M	io_coat3D/data.json
M	io_coat3D/tex.py

===================================================================

diff --git a/io_coat3D/__init__.py b/io_coat3D/__init__.py
index 315de893..d8d086f5 100644
--- a/io_coat3D/__init__.py
+++ b/io_coat3D/__init__.py
@@ -210,7 +210,7 @@ def make_texture_list(texturefolder):
 #Updating objects MESH part ( Mesh, Vertex Groups, Vertex Colors )
 '''
 
-def updatemesh(objekti, proxy):
+def updatemesh(objekti, proxy, texturelist):
 
     # Vertex colors
     if(len(proxy.data.vertex_colors) > 0):
@@ -243,42 +243,35 @@ def updatemesh(objekti, proxy):
 
     # UV -Sets
 
+    udim_textures = False
+    if(texturelist[0][0].startswith('100')):
+        udim_textures =True
+
     proxy.select_set(True)
     objekti.select_set(True)
 
-    Create_uv = True
-    if(len(proxy.data.uv_layers) > 0):
-        for proxy_layer in proxy.data.uv_layers:
-            for objekti_layer in objekti.data.uv_layers:
-                uv_new_name = '3DC_' + proxy_layer.name
-                if(objekti_layer.name == uv_new_name):
-                    for poly in objekti.data.polygons:
-                        for indi in poly.loop_indices:
-                            objekti_layer.data[indi].uv[0] = proxy_layer.data[indi].uv[0]
-                            objekti_layer.data[indi].uv[1] = proxy_layer.data[indi].uv[1]
-                    Create_uv = False
-                    break
-            if(Create_uv):
-                name = '3DC_' + proxy_layer.name
-                objekti.data.uv_layers.new(name=name)
-                for poly in objekti.data.polygons:
-                    for indi in poly.loop_indices:
-                        objekti.data.uv_layers[-1].data[indi].uv[0] = proxy_layer.data[indi].uv[0]
-                        objekti.data.uv_layers[-1].data[indi].uv[1] = proxy_layer.data[indi].uv[1]
+    uv_count = len(proxy.data.uv_layers)
+    index = 0
+    while(index < uv_count):
+        for poly in proxy.data.polygons:
+            for indi in poly.loop_indices:
+                if(proxy.data.uv_layers[index].data[indi].uv[0] != -1):
+
+                    if(udim_textures):
+                        udim = proxy.data.uv_layers[index].name
+                        udim_index = int(udim[2:]) - 1
+
+                    objekti.data.uv_layers[0].data[indi].uv[0] = proxy.data.uv_layers[index].data[indi].uv[0]
+                    objekti.data.uv_layers[0].data[indi].uv[1] = proxy.data.uv_layers[index].data[indi].uv[1]
+                    if(udim_textures):
+                        objekti.data.uv_layers[0].data[indi].uv[0] += udim_index
+        index = index + 1
 
     # Mesh Copy
 
     for ind, v in enumerate(objekti.data.vertices):
         v.co = proxy.data.vertices[ind].co
 
-    '''
-    proxy.select_set(True)
-    obj_data = objekti.data.id_data
-    objekti.data = proxy.data.id_data
-    objekti.data.id_data.name = obj_data.name
-    if (bpy.data.meshes[obj_data.name].users == 0):
-        bpy.data.meshes.remove(obj_data)
-    '''
 def running():
     n=0# number of instances of the program running
     prog=[line.split() for line in subprocess.check_output("tasklist").splitlines()]
@@ -363,6 +356,170 @@ class SCENE_OT_opencoat(bpy.types.Operator):
 
         return {'FINISHED'}
 
+def deleteNodes(type):
+
+    deletelist = []
+    deleteimages = []
+    deletegroup =[]
+    delete_images = bpy.context.scene.coat3D.delete_images
+
+    if type == 'Material':
+        if(len(bpy.context.selected_objects) == 1):
+            material = bpy.context.selected_objects[0].active_material
+            if(material.use_nodes):
+                for node in material.node_tree.nodes:
+                    if(node.name.startswith('3DC')):
+                        if (node.type == 'GROUP'):
+                            deletegroup.append(node.node_tree.name)
+                        deletelist.append(node.name)
+                        if node.type == 'TEX_IMAGE' and delete_images == True:
+                            deleteimages.append(node.image.name)
+                if deletelist:
+                    for node in deletelist:
+                        material.node_tree.nodes.remove(material.node_tree.nodes[node])
+                if deleteimages:
+                    for image in deleteimages:
+                        bpy.data.images.remove(bpy.data.images[image])
+
+    elif type == 'Object':
+        if (len(bpy.context.selected_objects) > 0):
+            for objekti in bpy.context.selected_objects:
+                for material in objekti.material_slots:
+                    if (material.material.use_nodes):
+                        for node in material.material.node_tree.nodes:
+                            if (node.name.startswith('3DC')):
+                                if(node.type == 'GROUP'):
+                                    deletegroup.append(node.node_tree.name)
+                                deletelist.append(node.name)
+                                if node.type == 'TEX_IMAGE' and delete_images == True:
+                                    deleteimages.append(node.image.name)
+                    if deletelist:
+                        for node in deletelist:
+                            material.material.node_tree.nodes.remove(material.material.node_tree.nodes[node])
+                            deletelist = []
+
+                    if deleteimages:
+                        for image in deleteimages:
+                            bpy.data.images.remove(bpy.data.images[image])
+                            deleteimages = []
+
+    elif type == 'Collection':
+        for collection_object in bpy.context.view_layer.active_layer_collection.collection.all_objects:
+            if(collection_object.type == 'MESH'):
+                for material in collection_object.material_slots:
+                    if (material.material.use_nodes):
+                        for node in material.material.node_tree.nodes:
+                            if (node.name.startswith('3DC')):
+                                if (node.type == 'GROUP'):
+                                    deletegroup.append(node.node_tree.name)
+                                deletelist.append(node.name)
+                                if node.type == 'TEX_IMAGE' and delete_images == True:
+                                    deleteimages.append(node.image.name)
+
+                    if deletelist:
+                        for node in deletelist:
+                            material.material.node_tree.nodes.remove(material.material.node_tree.nodes[node])
+                            deletelist = []
+
+                    if deleteimages:
+                        for image in deleteimages:
+                            bpy.data.images.remove(bpy.data.images[image])
+                            deleteimages = []
+
+    elif type == 'Scene':
+        for collection in bpy.data.collections:
+            for collection_object in collection.all_objects:
+                if (collection_object.type == 'MESH'):
+                    for material in collection_object.material_slots:
+                        if (material.material.use_nodes):
+                            for node in material.material.node_tree.nodes:
+                                if (node.name.startswith('3DC')):
+                                    if (node.type == 'GROUP'):
+                                        deletegroup.append(node.node_tree.name)
+
+                                    deletelist.append(node.name)
+                                    if node.type == 'TEX_IMAGE' and delete_images == True:
+                                        deleteimages.append(node.image.name)
+                        if deletelist:
+                            for node in deletelist:
+                                material.material.node_tree.nodes.remove(material.material.node_tree.nodes[node])
+                                deletelist = []
+
+                        if deleteimages:
+                            for image in deleteimages:
+                                bpy.data.images.remove(bpy.data.images[image])
+                                deleteimages = []
+
+        if(deletelist):
+            for node in deletelist:
+                bpy.data.node_groups.remove(bpy.data.node_groups[node])
+
+        for image in bpy.data.images:
+            if (image.name.startswith('3DC') and image.name[6] == '_'):
+                deleteimages.append(image.name)
+
+
+    if(deletegroup):
+        for node in deletegroup:
+            bpy.data.node_groups.remove(bpy.data.node_groups[node])
+
+    if deleteimages:
+        for image in deleteimages:
+            bpy.data.images.remove(bpy.data.images[image])
+
+
+
+
+
+''' DELETE NODES BUTTONS'''
+
+class SCENE_OT_delete_material_nodes(bpy.types.Operator):
+    bl_idname = "delete_material_nodes.pilgway_3d_coat"
+    bl_label = "Delete material nodes"
+    bl_description = "Delete material nodes"
+    bl_options = {'UNDO'}
+
+    def invoke(self, context, event):
+        type = bpy.context.scene.coat3D.deleteMode = 'Material'
+        deleteNodes(type)
+        return {'FINISHED'}
+
+class SCENE_OT_delete_object_nodes(bpy.types.Operator):
+    bl_idname = "delete_object_nodes.pilgway_3d_coat"
+    bl_label = "Delete material nodes"
+    bl_description = "Delete material nodes"
+    bl_options = {'UNDO'}
+
+    def invoke(self, context, event):
+        type = bpy.context.scene.coat3D.deleteMode = 'Object'
+        deleteNodes(type)
+        return {'FINISHED'}
+
+class SCENE_OT_delete_collection_nodes(bpy.types.Operator):
+    bl_idname = "delete_collection_nodes.pilgway_3d_coat"
+    bl_label = "Delete material nodes"
+    bl_description = "Delete material nodes"
+    bl_options = {'UNDO'}
+
+    def invoke(self, context, event):
+        type = bpy.context.scene.coat3D.deleteMode = 'Collection'
+        deleteNodes(type)
+        return {'FINISHED'}
+
+class SCENE_OT_delete_scene_nodes(bpy.types.Operator):
+    bl_idname = "delete_scene_nodes.pilgway_3d_coat"
+    bl_label = "Delete material nodes"
+    bl_description = "Delete material nodes"
+    bl_options = {'UNDO'}
+
+    def invoke(self, context, event):
+        type = bpy.context.scene.coat3D.deleteMode = 'Scene'
+        deleteNodes(type)
+        return {'FINISHED'}
+
+
+''' TRANSFER AND

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list