[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