[Bf-extensions-cvs] [2c7e3137] blender2.8: Fixed if different objects has same material names

Kalle-Samuli Riihikoski noreply at git.blender.org
Tue Aug 28 16:40:14 CEST 2018


Commit: 2c7e3137a1c2b4c74b102aa18c7fa23af26b48e9
Author: Kalle-Samuli Riihikoski
Date:   Tue Aug 28 17:38:09 2018 +0300
Branches: blender2.8
https://developer.blender.org/rBA2c7e3137a1c2b4c74b102aa18c7fa23af26b48e9

Fixed if different objects has same material names

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

M	io_coat3D/__init__.py
M	io_coat3D/tex.py

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

diff --git a/io_coat3D/__init__.py b/io_coat3D/__init__.py
index 9a2e4bd0..f1dab798 100644
--- a/io_coat3D/__init__.py
+++ b/io_coat3D/__init__.py
@@ -223,15 +223,15 @@ class SCENE_OT_export(bpy.types.Operator):
     bl_options = {'UNDO'}
 
     def invoke(self, context, event):
-        '''
+
         for mesh in bpy.data.meshes:
-            if (mesh.users == 0):
+            if (mesh.users == 0 and mesh.coat3D.name == '3DC'):
                 bpy.data.meshes.remove(mesh)
 
         for material in bpy.data.materials:
-            if (material.users == 0):
+            if (material.users == 1 and material.coat3D.name == '3DC'):
                 bpy.data.materials.remove(material)
-        '''
+
         export_ok = False
         coat3D = bpy.context.scene.coat3D
 
@@ -304,6 +304,7 @@ class SCENE_OT_export(bpy.types.Operator):
             objekti.coat3D.applink_name = coa.applink_name
             objekti.coat3D.applink_firsttime = True
             objekti.coat3D.objecttime = str(os.path.getmtime(objekti.coat3D.applink_address))
+            objekti.data.coat3D.name = '3DC'
 
             if(objekti.material_slots.keys() != []):
                 for material in objekti.material_slots:
@@ -323,15 +324,24 @@ class SCENE_OT_import(bpy.types.Operator):
     bl_options = {'UNDO'}
 
     def invoke(self, context, event):
-        '''
+
         for mesh in bpy.data.meshes:
-            if(mesh.users == 0):
+            if(mesh.users == 0 and mesh.coat3D.name == '3DC'):
                 bpy.data.meshes.remove(mesh)
 
         for material in bpy.data.materials:
-            if (material.users == 0):
+            img_list = []
+            if (material.users == 1 and material.coat3D.name == '3DC'):
+                if material.use_nodes == True:
+                    for node in material.node_tree.nodes:
+                        if node.type == 'TEX_IMAGE' and node.name.startswith('3DC'):
+                            img_list.append(node.image)
+                if img_list != []:
+                    for del_img in img_list:
+                        bpy.data.images.remove(bpy.data.images[del_img])
+
                 bpy.data.materials.remove(material)
-        '''
+
         coat3D = bpy.context.scene.coat3D
         coat = bpy.coat3D
         coat3D.exchangedir = set_exchange_folder()
@@ -406,6 +416,9 @@ class SCENE_OT_import(bpy.types.Operator):
                 diff_mat = [i for i in new_materials if i not in old_materials]
                 diff_objects = [i for i in new_objects if i not in old_objects]
                 diff_images = [i for i in new_images if i not in old_images]
+
+                for mark_mesh in diff_objects:
+                    bpy.data.objects[mark_mesh].data.coat3D.name = '3DC'
                 for c_index in diff_mat:
                     bpy.data.materials.remove(bpy.data.materials[c_index])
                 for i in diff_images:
@@ -423,9 +436,46 @@ class SCENE_OT_import(bpy.types.Operator):
                         find_name = objekti.data.name + '-mesh'
                         find_name = find_name.replace('.', '_')
                     else:
-                        find_name = objekti.data.name + '.001'
+
+
+                        new_name = objekti.data.name
+                        print('Data nimi', objekti.data.name)
+                        name_boxs = new_name.split('.')
+                        if len(name_boxs) > 1:
+                            if len(name_boxs[-1]) == 3:
+                                luku = int(name_boxs[-1])
+                                luku +=1
+                                uusi_nimi = ("%s.%.3d" % (new_name[:-4], luku))
+                                find_name = uusi_nimi
+                        else:
+                            print('tuullekko tienna')
+                            find_name = objekti.data.name
+                            tosi = True
+                            luku = 1
+                            find_name = ("%s.%.3d" % (objekti.data.name, luku))
+                            loyty = False
+                            while tosi:
+                                print('etsitaan', find_name)
+                                for obj in bpy.data.meshes:
+                                    if (obj.name == find_name):
+                                        loyty = True
+                                        break
+                                if(loyty == True):
+                                    luku += 1
+                                    find_name = ("%s.%.3d" % (objekti.data.name, luku))
+                                    loyty = False
+                                else:
+                                    find_name = ("%s.%.3d" % (objekti.data.name, luku-1))
+                                    tosi = False
+
+
+
+
+
+
 
                     for proxy_objects in diff_objects:
+                        print('ovatko samoja',bpy.data.objects[proxy_objects].data.name,find_name)
                         if (bpy.data.objects[proxy_objects].data.name == find_name):
                             obj_proxy = bpy.data.objects[proxy_objects]
                             break
@@ -545,8 +595,26 @@ class SCENE_OT_import(bpy.types.Operator):
             mat_list = []
             nimi = ''
 
+            old_materials = bpy.data.materials.keys()
+            old_objects = bpy.data.objects.keys()
+
             bpy.ops.wm.collada_import(filepath=new_applink_address)
 
+            new_materials = bpy.data.materials.keys()
+            new_objects = bpy.data.objects.keys()
+
+            diff_mat = [i for i in new_materials if i not in old_materials]
+            diff_objects = [i for i in new_objects if i not in old_objects]
+
+            for mark_mesh in diff_mat:
+                bpy.data.materials[mark_mesh].coat3D.name = '3DC'
+                bpy.data.materials[mark_mesh].use_fake_user = True
+            laskuri = 0
+            for c_index in diff_objects:
+                bpy.data.objects[c_index].data.coat3D.name = '3DC'
+                bpy.data.objects[c_index].material_slots[0].material = bpy.data.materials[diff_mat[laskuri]]
+                laskuri += 1
+
             bpy.ops.object.select_all(action='DESELECT')
             for new_obj in bpy.context.collection.objects:
 
@@ -867,6 +935,11 @@ class MeshCoat3D(PropertyGroup):
         name="ApplinkAddress",
         subtype="APPLINK_ADDRESS",
     )
+class MaterialCoat3D(PropertyGroup):
+    name: StringProperty(
+        name="ApplinkAddress",
+        subtype="APPLINK_ADDRESS",
+    )
 
 
 classes = (
@@ -881,6 +954,7 @@ classes = (
     ObjectCoat3D,
     SceneCoat3D,
     MeshCoat3D,
+    MaterialCoat3D,
     )
 
 def register():
@@ -896,6 +970,7 @@ def register():
     bpy.types.Object.coat3D = PointerProperty(type=ObjectCoat3D)
     bpy.types.Scene.coat3D = PointerProperty(type=SceneCoat3D)
     bpy.types.Mesh.coat3D = PointerProperty(type=MeshCoat3D)
+    bpy.types.Material.coat3D = PointerProperty(type=MaterialCoat3D)
 
     kc = bpy.context.window_manager.keyconfigs.addon
 
diff --git a/io_coat3D/tex.py b/io_coat3D/tex.py
index b682c8df..59e41a61 100644
--- a/io_coat3D/tex.py
+++ b/io_coat3D/tex.py
@@ -46,11 +46,19 @@ def readtexturefolder(objekti,is_new): #read textures from texture file
     files = os.listdir(files_dir)
     materiaali_muutos = objekti.active_material.name
     uusin_mat = materiaali_muutos.replace('Material.','Material_')
+    print('tassa pitaisi olla jotain outoo')
+    print(obj_coat.applink_name + '_' + uusin_mat)
+    new_name = (obj_coat.applink_name + '_' + uusin_mat)
+    name_boxs = new_name.split('.')
+    if len(name_boxs) > 1:
+        if len(name_boxs[-1]) == 3:
+            new_name = new_name[:-4]
     for i in files:
-        if(i.startswith(obj_coat.applink_name + '_' + uusin_mat)):
+        if(i.startswith(new_name)):
             koko_osoite = files_dir + os.sep + i
             listed = re.split(r'[_.]', i)
             tex_name = listed[-2]
+            print('koko osoite', koko_osoite)
             texcoat[tex_name].append(koko_osoite)
 
     createnodes(objekti, texcoat)
@@ -77,6 +85,7 @@ def createnodes(objekti,texcoat): #luo nodes palikat ja linkittaa tekstuurit nii
 
     for node in act_material.node_tree.nodes:
         if(node.type == 'TEX_IMAGE'):
+            print('hhheeetkinen')
             if(node.name == '3DC_color'):
                 bring_color = False
                 node.image.reload()



More information about the Bf-extensions-cvs mailing list