From 8d8a0034807e1f8f05fd3913b2fb3f2a5ac1a53c Mon Sep 17 00:00:00 2001
From: Kalle-Samuli Riihikoski <haikalle@gmail.com>
Date: Mon, 6 Jun 2011 21:35:09 +0000
Subject: [PATCH] Update the script to work with latest trunk. Still some bugs
 when "remember position" = On, but much better than before.

---
 io_coat3D/__init__.py |  17 ++-
 io_coat3D/coat.py     | 285 ++++++++++++++++++++++--------------------
 io_coat3D/tex.py      |   4 +-
 3 files changed, 160 insertions(+), 146 deletions(-)

diff --git a/io_coat3D/__init__.py b/io_coat3D/__init__.py
index a9509c3be..cce54b787 100644
--- a/io_coat3D/__init__.py
+++ b/io_coat3D/__init__.py
@@ -57,13 +57,22 @@ def register():
         objectdir = StringProperty(name="ObjectPath", subtype="FILE_PATH")
         texturefolder = StringProperty(name="Texture folder:", subtype="DIR_PATH")
         path3b = StringProperty(name="3B Path", subtype="FILE_PATH")
+        export_on = BoolProperty(name="Export_On", description="Add Modifiers and export.",default= False)
 
 
     class SceneCoat3D(bpy.types.PropertyGroup):
-        exchangedir = StringProperty(
+
+        defaultfolder = StringProperty(
             name="FilePath",
             subtype="DIR_PATH",
         )
+        exchangedir = StringProperty(
+            name="FilePath",
+            subtype="DIR_PATH"
+        )
+
+    
+        
         wasactive = StringProperty(
             name="Pass active object",
         )
@@ -112,11 +121,7 @@ def register():
             description="Export Coarse.",
             default= True
         )
-        export_on = BoolProperty(
-            name="Export_On",
-            description="Add Modifiers and export.",
-            default= False
-        )
+   
         smooth_on = BoolProperty(
             name="Auto Smooth",
             description="Add Modifiers and export.",
diff --git a/io_coat3D/coat.py b/io_coat3D/coat.py
index fc989dd6c..39d7c1a53 100644
--- a/io_coat3D/coat.py
+++ b/io_coat3D/coat.py
@@ -25,6 +25,7 @@ from bpy.props import *
 from io_coat3D import tex
 import os
 import linecache
+import math
 
 bpy.coat3D = dict()
 bpy.coat3D['active_coat'] = ''
@@ -61,12 +62,24 @@ class SCENE_PT_Main(ObjectButtonsPanel,bpy.types.Panel):
                 coat['status'] = 0
         else:
             coat['status'] = 0
+
+        if(coat['status'] == 1):
+            Blender_folder = ("%s%sBlender"%(coat3D.exchangedir,os.sep))
+            Blender_export = Blender_folder
+            path3b_now = coat3D.exchangedir
+            path3b_now += ('last_saved_3b_file.txt')
+            Blender_export += ('%sexport.txt'%(os.sep))
+
+            if(not(os.path.isdir(Blender_folder))):
+                os.makedirs(Blender_folder)
+                Blender_folder = os.path.join(Blender_folder,"run.txt")
+                file = open(Blender_folder, "w")
+                file.close()
+        
         #Here you add your GUI 
         row = layout.row()
         row.prop(coat3D,"type",text = "")
         row = layout.row()
-        colL = row.column()
-        colR = row.column()
         if(context.selected_objects):
             if(context.selected_objects[0].type == 'MESH'):
                 row.active = True
@@ -74,22 +87,31 @@ class SCENE_PT_Main(ObjectButtonsPanel,bpy.types.Panel):
                 row.active = False
         else:
             row.active = False
-        colL.operator("export_applink.pilgway_3d_coat", text="Export")
-        colL.label(text="Export Settings:")
-
-        colL.prop(coat3D,"exportover")
-        if(coat3D.exportover):
-            colL.prop(coat3D,"exportmod")
-        colL.prop(coat3D,"exportfile")
-        colL.prop(coat3D,"export_pos")
-            
-        colR.operator("import_applink.pilgway_3d_coat", text="Import")
-        colR.label(text="Import Settings:")
-        colR.prop(coat3D,"importmesh")
-        colR.prop(coat3D,"importmod")
-        colR.prop(coat3D,"smooth_on")
-        colR.prop(coat3D,"importtextures")
-        row = layout.row()
+
+        if(not(bpy.context.selected_objects) and os.path.isfile(Blender_export)):
+            row.active = True
+            row.operator("import3b_applink.pilgway_3d_coat", text="Bring from 3D-Coat")
+
+        else:
+            colL = row.column()
+            colR = row.column()
+        
+            colL.operator("export_applink.pilgway_3d_coat", text="Export")
+            colL.label(text="Export Settings:")
+
+            colL.prop(coat3D,"exportover")
+            if(coat3D.exportover):
+                colL.prop(coat3D,"exportmod")
+            colL.prop(coat3D,"exportfile")
+            colL.prop(coat3D,"export_pos")
+               
+            colR.operator("import_applink.pilgway_3d_coat", text="Import")
+            colR.label(text="Import Settings:")
+            colR.prop(coat3D,"importmesh")
+            colR.prop(coat3D,"importmod")
+            colR.prop(coat3D,"smooth_on")
+            colR.prop(coat3D,"importtextures")
+            row = layout.row()
         
         if(bpy.context.selected_objects):
             if(context.selected_objects[0].type == 'MESH'):
@@ -107,76 +129,6 @@ class SCENE_PT_Main(ObjectButtonsPanel,bpy.types.Panel):
                 row.prop(coa,"objectdir",text="")
                     
         row = layout.row()
-        
-        if(coat['status'] == 1):
-            Blender_folder = ("%s%sBlender"%(coat3D.exchangedir,os.sep))
-            Blender_export = Blender_folder
-            Blender_export = Blender_folder
-            path3b_now = coat3D.exchangedir
-            path3b_now += ('last_saved_3b_file.txt')
-            Blender_export += ('%sexport.txt'%(os.sep))
-
-            if(not(os.path.isdir(Blender_folder))):
-                os.makedirs(Blender_folder)
-                Blender_folder = os.path.join(Blender_folder,"run.txt")
-                file = open(Blender_folder, "w")
-                file.close()
-                
-            if(os.path.isfile(Blender_export)):
-                obj_path =''
-                obj_pathh = open(Blender_export)
-                for line in obj_pathh:
-                    obj_path = line
-                    break
-                obj_pathh.close()
-                export = obj_path
-                mod_time = os.path.getmtime(obj_path)
-                mtl_list = obj_path.replace('.obj','.mtl')
-                if(os.path.isfile(mtl_list)):
-                    os.remove(mtl_list)
-                    
-                if(os.path.isfile(path3b_now)):
-                    path3b_file = open(path3b_now)
-                    for lin in path3b_file:
-                        path_export = lin
-                        path_on = 1
-                    path3b_file.close()
-                    os.remove(path3b_now)
-                else:
-                    print("ei toimi")
-                    path_on = 0
-
-                for palikka in bpy.context.scene.objects:
-                    if(palikka.type == 'MESH'):
-                        if(palikka.coat3D.objectdir == export):
-                            import_no = 1
-                            target = palikka
-                            break
-
-                if(import_no):
-                    new_obj = palikka
-                    import_no = 0
-                else:
-                    bpy.ops.import_scene.obj(filepath=obj_path)
-                    new_obj = scene.objects[0]
-                    scene.objects[0].coat3D.objectdir = export
-                    if(path_on):
-                        scene.objects[0].coat3D.path3b = path_export
-                    
-                os.remove(Blender_export)
-                
-                bpy.context.scene.objects.active = new_obj
-
-                if(coat3D.smooth_on):
-                    bpy.ops.object.shade_smooth()
-                else:
-                    bpy.ops.object.shade_flat()
-
-                Blender_tex = ("%s%stextures.txt"%(coat3D.exchangedir,os.sep))
-                mat_list.append(new_obj.material_slots[0].material)
-                tex.gettex(mat_list, new_obj, scene,export)
-                
-
                 
         if(context.selected_objects):
             if(context.selected_objects[0].type == 'MESH'):
@@ -220,6 +172,11 @@ class SCENE_PT_Settings(ObjectButtonsPanel,bpy.types.Panel):
             row.label(text="3b path:")
             row = layout.row()
             row.prop(coa,"path3b",text="")
+            row = layout.row()
+            row.label(text="Default Folder:")
+            row = layout.row()
+            row.prop(coat3D,"defaultfolder",text="")
+            
         #colL = row.column()
         #colR = row.column()
         #colL.prop(coat3D,"export_box")
@@ -275,13 +232,16 @@ class SCENE_OT_export(bpy.types.Operator):
 
         if(not(os.path.isfile(checkname)) or coat3D.exportover):
             if(coat3D.export_pos):
+                bpy.ops.object.transform_apply(location=True,rotation=True,scale=True)
 
                 bpy.ops.export_scene.obj(filepath=checkname,use_selection=True,
                 use_apply_modifiers=coat3D.exportmod,use_blen_objects=False, group_by_material= True,
-                use_materials = False,keep_vertex_order = True)
+                use_materials = False,keep_vertex_order = True,axis_forward='Y',axis_up='Z')
+                bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY', center='MEDIAN')
 
-                coat3D.export_on = True
+                coa.export_on = True
             else:
+                bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY', center='MEDIAN')
                 coat3D.loca = obj.location
                 coat3D.rota = obj.rotation_euler
                 coat3D.scal = obj.scale
@@ -291,12 +251,12 @@ class SCENE_OT_export(bpy.types.Operator):
 
                 bpy.ops.export_scene.obj(filepath=checkname,use_selection=True,
                 use_apply_modifiers=coat3D.exportmod,use_blen_objects=False, group_by_material= True,
-                use_materials = False,keep_vertex_order = True)
+                use_materials = False,keep_vertex_order = True,axis_forward='Y',axis_up='Z')
 
                 obj.location = coat3D.loca
                 obj.rotation_euler = coat3D.rota
                 obj.scale = coat3D.scal
-                coat3D.export_on = True
+                coa.export_on = False
                     
 
 
@@ -364,61 +324,34 @@ class SCENE_OT_import(bpy.types.Operator):
                 os.remove(mtl)
 
             
-            bpy.ops.import_scene.obj(filepath=coa.objectdir)
+            bpy.ops.import_scene.obj(filepath=coa.objectdir,axis_forward='Y',axis_up='Z')
             obj_proxy = scene.objects[0]
+            bpy.ops.object.select_all(action='TOGGLE')
+            obj_proxy.select = True
+            if(coa.export_on):
+                bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY', center='MEDIAN')
+                
+            bpy.ops.object.transform_apply(rotation=True)
             proxy_mat = obj_proxy.material_slots[0].material
             obj_proxy.data.materials.pop(0)
             proxy_mat.user_clear()
             bpy.data.materials.remove(proxy_mat)
             bpy.ops.object.select_all(action='TOGGLE')
             
-            if(coat3D.export_pos):
-                scene.objects.active = objekti
-                objekti.select = True
-                coat3D.cursor = bpy.context.scene.cursor_location
-                bpy.context.scene.cursor_location = (0.0,0.0,0.0)
-                bpy.ops.object.origin_set(type='ORIGIN_CURSOR', center='MEDIAN')
-
-                scene.objects.active = obj_proxy
-                
-                obj_data = objekti.data.id_data
-                objekti.data = obj_proxy.data.id_data
-
-                if(coat3D.export_on):
-                    objekti.scale = (1,1,1)
-                    objekti.rotation_euler = (0,0,0)
-                    
-                if(bpy.data.meshes[obj_data.name].users == 0):
-                    bpy.data.meshes.remove(obj_data)
-                    objekti.data.id_data.name = obj_data.name
-
-                bpy.ops.object.select_all(action='TOGGLE')
-
-                obj_proxy.select = True
-                bpy.ops.object.delete()
-                objekti.select = True
-                bpy.context.scene.objects.active = objekti
-                if(coat3D.export_on):
-                    bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY', center='MEDIAN')
-                    coat3D.export_on = False
-
-                else:
-                    objekti.location = coat3D.loca
-                    objekti.rotation_euler = coat3D.rota
-                    bpy.ops.object.origin_set(type='GEOMETRY_ORIGIN', center='MEDIAN')
-            else:
-                scene.objects.active = obj_proxy
+          
+            
+            scene.objects.active = obj_proxy
 
-                obj_data = objekti.data.id_data
-                objekti.data = obj_proxy.data.id_data
-                if(bpy.data.meshes[obj_data.name].users == 0):
-                    bpy.data.meshes.remove(obj_data)
-                    objekti.data.id_data.name = obj_data.name
+            obj_data = objekti.data.id_data
+            objekti.data = obj_proxy.data.id_data
+            if(bpy.data.meshes[obj_data.name].users == 0):
+                bpy.data.meshes.remove(obj_data)
+                objekti.data.id_data.name = obj_data.name
 
-                obj_proxy.select = True
-                bpy.ops.object.delete()
-                objekti.select = True
-                bpy.context.scene.objects.active = objekti
+            obj_proxy.select = True
+            bpy.ops.object.delete()
+            objekti.select = True
+            bpy.context.scene.objects.active = objekti
 
                 
                 
@@ -464,6 +397,82 @@ class SCENE_OT_import(bpy.types.Operator):
         
         return('FINISHED')
 
+class SCENE_OT_import3b(bpy.types.Operator):
+    bl_idname = "import3b_applink.pilgway_3d_coat"
+    bl_label = "Brings mesh from 3D-Coat"
+    bl_description = "Bring 3D-Coat Mesh"
+
+    
+    def invoke(self, context, event):
+
+        coat3D = bpy.context.scene.coat3D
+        scene = context.scene
+        
+        Blender_folder = ("%s%sBlender"%(coat3D.exchangedir,os.sep))
+        Blender_export = Blender_folder
+        path3b_now = coat3D.exchangedir
+        path3b_now += ('last_saved_3b_file.txt')
+        Blender_export += ('%sexport.txt'%(os.sep))
+
+        import_no = 0
+        mat_list = []
+        obj_path =''
+
+        obj_pathh = open(Blender_export)
+        for line in obj_pathh:
+            obj_path = line
+            break
+        obj_pathh.close()
+        export = obj_path
+        mod_time = os.path.getmtime(obj_path)
+        mtl_list = obj_path.replace('.obj','.mtl')
+        if(os.path.isfile(mtl_list)):
+            os.remove(mtl_list)
+            
+        if(os.path.isfile(path3b_now)):
+            path3b_file = open(path3b_now)
+            for lin in path3b_file:
+                path_export = lin
+                path_on = 1
+            path3b_file.close()
+            os.remove(path3b_now)
+        else:
+            print("ei toimi")
+            path_on = 0
+
+        for palikka in bpy.context.scene.objects:
+            if(palikka.type == 'MESH'):
+                if(palikka.coat3D.objectdir == export):
+                    import_no = 1
+                    target = palikka
+                    break
+
+        if(import_no):
+            new_obj = palikka
+            import_no = 0
+        else:
+            bpy.ops.import_scene.obj(filepath=obj_path,axis_forward='Y',axis_up='Z')
+            new_obj = scene.objects[0]
+            scene.objects[0].coat3D.objectdir = export
+            if(path_on):
+                scene.objects[0].coat3D.path3b = path_export
+            
+        os.remove(Blender_export)
+        
+        bpy.context.scene.objects.active = new_obj
+
+        if(coat3D.smooth_on):
+            bpy.ops.object.shade_smooth()
+        else:
+            bpy.ops.object.shade_flat()
+
+        Blender_tex = ("%s%stextures.txt"%(coat3D.exchangedir,os.sep))
+        mat_list.append(new_obj.material_slots[0].material)
+        tex.gettex(mat_list, new_obj, scene,export)
+
+
+        return('FINISHED')
+
 class SCENE_OT_load3b(bpy.types.Operator):
     bl_idname = "import_applink.pilgway_3d_coat_3b"
     bl_label = "Loads 3b linked into object"
diff --git a/io_coat3D/tex.py b/io_coat3D/tex.py
index fd1792f21..14e265083 100644
--- a/io_coat3D/tex.py
+++ b/io_coat3D/tex.py
@@ -223,7 +223,7 @@ def gettex(mat_list, objekti, scene,export):
             else:
                 bpy.data.textures[name_tex].use_normal_map = True
                 objekti.active_material.texture_slots[index].normal_map_space = 'TANGENT'
-                objekti.active_material.texture_slots[index].normal_factor = -1
+                objekti.active_material.texture_slots[index].normal_factor = 1
 
             
 
@@ -236,7 +236,7 @@ def gettex(mat_list, objekti, scene,export):
                 objekti.active_material.texture_slots[index].uv_layer = objekti.data.uv_textures.active.name
             objekti.active_material.texture_slots[index].use_map_color_diffuse = False
             objekti.active_material.texture_slots[index].use_map_normal = True
-            objekti.active_material.texture_slots[index].normal_factor = -1
+            objekti.active_material.texture_slots[index].normal_factor = 1
 
 
     if(bring_spec == 1 and texcoat['specular']):
-- 
GitLab