[Bf-extensions-cvs] [27c5c32b] master: io_coat3D: Added realtime update + alpha link fix

Samuli Riihikoski noreply at git.blender.org
Fri Jul 26 22:47:19 CEST 2019


Commit: 27c5c32bad451a3b3c8a599edfdbaa7fb1462c05
Author: Samuli Riihikoski
Date:   Fri Jul 26 23:24:06 2019 +0300
Branches: master
https://developer.blender.org/rBA27c5c32bad451a3b3c8a599edfdbaa7fb1462c05

io_coat3D: Added realtime update + alpha link fix

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

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

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

diff --git a/io_coat3D/__init__.py b/io_coat3D/__init__.py
index 24e26328..72f55e6d 100644
--- a/io_coat3D/__init__.py
+++ b/io_coat3D/__init__.py
@@ -57,6 +57,9 @@ bpy.coat3D = dict()
 bpy.coat3D['active_coat'] = ''
 bpy.coat3D['status'] = 0
 
+run_background_update = False
+time_interval = 2.0
+
 def folder_size(path):
 
     folder_size_max = int(bpy.context.scene.coat3D.folder_size)
@@ -423,7 +426,7 @@ def deleteNodes(type):
 
 
 def delete_materials_from_end(keep_materials_count, objekti):
-    bpy.context.object.active_material_index = 0
+    #bpy.context.object.active_material_index = 0
     index_t = 0
     while (index_t < keep_materials_count):
         temp_len = len(objekti.material_slots)-1
@@ -487,6 +490,21 @@ class SCENE_OT_export(bpy.types.Operator):
     bl_options = {'UNDO'}
 
     def invoke(self, context, event):
+        bpy.ops.export_applink.pilgway_3d_coat()
+        global run_background_update
+        if run_background_update:
+            if bpy.app.timers.is_registered(run_import_periodically):
+                bpy.app.timers.unregister(run_import_periodically)
+                print('Disabling listener')
+            run_background_update = False
+        else:
+            if not bpy.app.timers.is_registered(run_import_periodically):
+                bpy.app.timers.register(run_import_periodically, persistent=True)
+                print('Enabling listener')
+            run_background_update = True
+        return {'FINISHED'}
+
+    def execute(self, context):
 
         for mesh in bpy.data.meshes:
             if (mesh.users == 0 and mesh.coat3D.name == '3DC'):
@@ -517,6 +535,15 @@ class SCENE_OT_export(bpy.types.Operator):
         coa = bpy.context.active_object.coat3D
         coat3D.exchangedir = set_exchange_folder()
 
+        kokeilu = coat3D.exchangedir[:-9]
+        print('export kokeilu:', kokeilu)
+        Blender_folder2 = ("%s%sExchange" % (kokeilu, os.sep))
+        Blender_folder2 += ('%sexport.txt' % (os.sep))
+        print('BB: ', Blender_folder2)
+
+        if (os.path.isfile(Blender_folder2)):
+            os.remove(Blender_folder2)
+
         if (not os.path.isdir(coat3D.exchangedir)):
             coat3D.exchange_found = False
             return {'FINISHED'}
@@ -761,6 +788,20 @@ class SCENE_OT_import(bpy.types.Operator):
     bl_options = {'UNDO'}
 
     def invoke(self, context, event):
+        global run_background_update
+        if run_background_update:
+            if bpy.app.timers.is_registered(run_import_periodically):
+                bpy.app.timers.unregister(run_import_periodically)
+                print('Disabling listener')
+            run_background_update = False
+        else:
+            if not bpy.app.timers.is_registered(run_import_periodically):
+                bpy.app.timers.register(run_import_periodically, persistent=True)
+                print('Enabling listener')
+            run_background_update = True
+        return {'FINISHED'}
+
+    def execute(self, context):
 
         for node_group in bpy.data.node_groups:
             if(node_group.users == 0):
@@ -829,6 +870,7 @@ class SCENE_OT_import(bpy.types.Operator):
         exportfile = coat3D.exchangedir
         exportfile += ('%sBlender' % (os.sep))
         exportfile += ('%sexport.txt' % (os.sep))
+        print('export:', exportfile)
         if (os.path.isfile(exportfile)):
             os.remove(exportfile)
 
@@ -957,7 +999,7 @@ class SCENE_OT_import(bpy.types.Operator):
 
                             elif objekti.coat3D.applink_firsttime == True:
                                 objekti.scale = (objekti.scale[0]/objekti.coat3D.applink_scale[0],objekti.scale[1]/objekti.coat3D.applink_scale[1],objekti.scale[2]/objekti.coat3D.applink_scale[2])
-                                bpy.ops.object.transforms_to_deltas(mode='SCALE')
+                                #bpy.ops.object.transforms_to_deltas(mode='SCALE')
                                 if(objekti.coat3D.applink_onlyone == False):
                                     objekti.rotation_euler = (0,0,0)
                                 objekti.coat3D.applink_firsttime = False
@@ -973,7 +1015,7 @@ class SCENE_OT_import(bpy.types.Operator):
                                 bpy.context.view_layer.objects.active = obj_proxy
                                 keep_materials_count = len(obj_proxy.material_slots) - len(objekti.material_slots)
 
-                                delete_materials_from_end(keep_materials_count, obj_proxy)
+                                #delete_materials_from_end(keep_materials_count, obj_proxy)
 
                                 for index, material in enumerate(objekti.material_slots):
                                     obj_proxy.material_slots[index-1].material = material.material
@@ -1023,6 +1065,7 @@ class SCENE_OT_import(bpy.types.Operator):
             if(import_list):
                 for del_obj in diff_objects:
 
+
                     if(bpy.context.collection.all_objects[del_obj].coat3D.type == 'vox' and bpy.context.collection.all_objects[del_obj].coat3D.delete_proxy_mesh == False):
                         bpy.context.collection.all_objects[del_obj].select_set(True)
                         objekti = bpy.context.collection.all_objects[del_obj]
@@ -1042,14 +1085,21 @@ class SCENE_OT_import(bpy.types.Operator):
                         bpy.context.collection.all_objects[del_obj].select_set(False)
 
                     else:
+                        print('del_obj', del_obj)
                         bpy.context.collection.all_objects[del_obj].select_set(True)
-                        bpy.ops.object.delete()
+                        bpy.data.objects.remove(bpy.data.objects[del_obj])
 
             if (coat3D.bring_retopo or coat3D.bring_retopo_path):
                 if(os.path.isfile(coat3D.bring_retopo_path)):
                     bpy.ops.import_scene.fbx(filepath=coat3D.bring_retopo_path, global_scale=1, axis_forward='X', use_custom_normals=False)
                     os.remove(coat3D.bring_retopo_path)
 
+            kokeilu = coat3D.exchangedir[:-9]
+            Blender_folder2 = ("%s%sExchange" % (kokeilu, os.sep))
+            Blender_folder2 += ('%sexport.txt' % (os.sep))
+            if (os.path.isfile(Blender_folder2)):
+                os.remove(Blender_folder2)
+
         else:
 
             '''
@@ -1175,6 +1225,39 @@ class SCENE_OT_import(bpy.types.Operator):
 
         return {'FINISHED'}
 
+def run_import_periodically():
+    # print("Runing timers update check")
+    coat3D = bpy.context.scene.coat3D
+    kokeilu = coat3D.exchangedir[:-9]
+    Blender_folder2 = ("%s%sExchange" % (kokeilu, os.sep))
+    Blender_folder2 += ('%sexport.txt' % (os.sep))
+    print('Blender_folder2:', Blender_folder2)
+    global run_background_update
+
+    try:
+        os.path.isfile(Blender_folder2)
+    except Exception as e:
+        print(e)
+        run_background_update = False
+        if bpy.app.timers.is_registered(run_import_periodically):
+            bpy.app.timers.unregister(run_import_periodically)
+        return time_interval
+
+    if  os.path.isfile(Blender_folder2):
+        # ! cant get proper context from timers for now. Override context: https://developer.blender.org/T62074
+        window = bpy.context.window_manager.windows[0]
+        ctx = {'window': window, 'screen': window.screen, 'workspace': window.workspace}
+        bpy.ops.import_applink.pilgway_3d_coat()
+    else:
+        # print("GOZ: Nothing to update")
+        return time_interval
+
+    if not run_background_update and bpy.app.timers.is_registered(run_import_periodically):
+        bpy.app.timers.unregister(run_import_periodically)
+    return time_interval
+
+
+
 from bpy import *
 from mathutils import Vector, Matrix
 
@@ -1272,6 +1355,7 @@ class SCENE_PT_Material_Import(MaterialButtonsPanel, bpy.types.Panel):
         col.prop(coat3D, "coat3D_normal", text="NormalMap")
         col.prop(coat3D, "coat3D_displacement", text="Displacement")
         col.prop(coat3D, "coat3D_emissive", text="Emissive")
+        col.prop(coat3D, "coat3D_alpha", text="Alpha")
 
 
 
@@ -1800,6 +1884,11 @@ def register():
         description="Import diffuse texture",
         default=True
     )
+    bpy.types.Material.coat3D_alpha = BoolProperty(
+        name="Import alpha texture",
+        description="Import alpha texture",
+        default=True
+    )
 
 
     from bpy.utils import register_class
@@ -1832,6 +1921,7 @@ def unregister():
     bpy.types.Material.coat3D_normal
     bpy.types.Material.coat3D_displacement
     bpy.types.Material.coat3D_emissive
+    bpy.types.Material.coat3D_alpha
     del bpy.coat3D
 
     kc = bpy.context.window_manager.keyconfigs.addon
diff --git a/io_coat3D/tex.py b/io_coat3D/tex.py
index eaed3302..42cc300f 100644
--- a/io_coat3D/tex.py
+++ b/io_coat3D/tex.py
@@ -234,7 +234,7 @@ def readtexturefolder(objekti, mat_list, texturelist, is_new, udim_textures): #r
                             else:
                                 os.remove(texture_info[3])
                         elif texture_info[2] == 'alpha' or texture_info[2] == 'opacity':
-                            if (index_mat.material.coat3D_metalness):
+                            if (index_mat.material.coat3D_alpha):
                                 texcoat['alpha'].append(texture_info[3])
                                 create_nodes = True
                             else:
@@ -293,7 +293,7 @@ def readtexturefolder(objekti, mat_list, texturelist, is_new, udim_textures): #r
                             else:
                                 os.remove(texture_info[3])
                         elif texture_info[2] == 'alpha' or texture_info[2] == 'opacity':
-                            if (index_mat.material.coat3D_metalness):
+                            if (index_mat.material.coat3D_alpha):
                                 texcoat['alpha'].append(texture_info[3])
                                 create_nodes = True
                             else:
@@ -334,6 +334,7 @@ def readtexturefolder(objekti, mat_list, texturelist, is_new, udim_textures): #r
                     create_nodes = True
                 create_group_node = True
 
+        print('texc

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list