diff options
Diffstat (limited to 'io_coat3D')
-rw-r--r-- | io_coat3D/__init__.py | 239 | ||||
-rw-r--r-- | io_coat3D/coat.py | 532 | ||||
-rw-r--r-- | io_coat3D/tex.py | 379 |
3 files changed, 1150 insertions, 0 deletions
diff --git a/io_coat3D/__init__.py b/io_coat3D/__init__.py new file mode 100644 index 00000000..a9509c3b --- /dev/null +++ b/io_coat3D/__init__.py @@ -0,0 +1,239 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +bl_info = { + "name": "3D-Coat Applink", + "author": "Kalle-Samuli Riihikoski (haikalle)", + "version": (1, 7, 0), + "blender": (2, 5, 7), + "api": 35622, + "location": "Scene > 3D-Coat Applink", + "description": "Transfer data between 3D-Coat/Blender", + "warning": "", + "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/" \ + "Scripts/Import-Export/3dcoat_applink", + "tracker_url": "https://projects.blender.org/tracker/?"\ + "func=detail&aid=24446", + "category": "Import-Export"} + + + +if "bpy" in locals(): + import imp + imp.reload(coat) + imp.reload(tex) +else: + from . import coat + from . import tex + +import bpy +from bpy.props import * + + +def register(): + bpy.coat3D = dict() + bpy.coat3D['active_coat'] = '' + bpy.coat3D['status'] = 0 + bpy.coat3D['kuva'] = 1 + + class ObjectCoat3D(bpy.types.PropertyGroup): + objpath = StringProperty(name="Object_Path") + coatpath = StringProperty(name="Coat_Path") + objectdir = StringProperty(name="ObjectPath", subtype="FILE_PATH") + texturefolder = StringProperty(name="Texture folder:", subtype="DIR_PATH") + path3b = StringProperty(name="3B Path", subtype="FILE_PATH") + + + class SceneCoat3D(bpy.types.PropertyGroup): + exchangedir = StringProperty( + name="FilePath", + subtype="DIR_PATH", + ) + wasactive = StringProperty( + name="Pass active object", + ) + import_box = BoolProperty( + name="Import window", + description="Allows to skip import dialog.", + default= True + ) + export_box = BoolProperty( + name="Export window", + description="Allows to skip export dialog.", + default= True + ) + export_color = BoolProperty( + name="Export color", + description="Export color texture.", + default= True + ) + export_spec = BoolProperty( + name="Export specular", + description="Export specular texture.", + default= True + ) + export_normal = BoolProperty( + name="Export Normal", + description="Export normal texture.", + default= True + ) + export_disp = BoolProperty( + name="Export Displacement", + description="Export displacement texture.", + default= True + ) + export_position = BoolProperty( + name="Export Source Position", + description="Export source position.", + default= True + ) + export_zero_layer = BoolProperty( + name="Export from Layer 0", + description="Export mesh from Layer 0", + default= True + ) + export_coarse = BoolProperty( + name="Export Coarse", + 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.", + default= True + ) + exportfile = BoolProperty( + name="No Import File", + description="Add Modifiers and export.", + default= False + ) + importmod = BoolProperty( + name="Remove Modifiers", + description="Import and add modifiers.", + default= True + ) + exportmod = BoolProperty( + name="Modifiers", + description="Export modifiers.", + default= False + ) + export_pos = BoolProperty( + name="Remember Position", + description="Remember position.", + default= True + ) + importtextures = BoolProperty( + name="Bring Textures", + description="Import Textures.", + default= True + ) + exportover = BoolProperty( + name="Export Obj", + description="Import Textures.", + default= False + ) + importmesh = BoolProperty( + name="Mesh", + description="Import Mesh.", + default= True + ) + + # copy location + cursor = FloatVectorProperty( + name="Cursor", + description="Location.", + subtype="XYZ", + default=(0.0, 0.0, 0.0) + ) + loca = FloatVectorProperty( + name="location", + description="Location.", + subtype="XYZ", + default=(0.0, 0.0, 0.0) + ) + rota = FloatVectorProperty( + name="location", + description="Location.", + subtype="EULER", + default=(0.0, 0.0, 0.0) + ) + scal = FloatVectorProperty( + name="location", + description="Location.", + subtype="XYZ", + default=(0.0, 0.0, 0.0) + ) + dime = FloatVectorProperty( + name="dimension", + description="Dimension.", + subtype="XYZ", + default=(0.0, 0.0, 0.0) + ) + + type = EnumProperty( name= "Export Type", + description= "Diffrent Export Types.", + items=(("ppp", "Per-Pixel Painting", ""), + ("mv", "Microvertex Painting", ""), + ("ptex", "Ptex Painting", ""), + ("uv", "UV-Mapping", ""), + ("ref", "Reference Mesh", ""), + ("retopo", "Retopo mesh as new layer", ""), + ("vox", "Mesh As Voxel Object", ""), + ("alpha", "Mesh As New Pen Alpha", ""), + ("prim", "Mesh As Voxel Primitive", ""), + ("curv", "Mesh As a Curve Profile", ""), + ("autopo", "Mesh For Auto-retopology", ""), + ), + default= "ppp" + ) + + bpy.utils.register_module(__name__) + + bpy.types.Object.coat3D= PointerProperty( + name= "Applink Variables", + type= ObjectCoat3D, + description= "Applink variables" + ) + + bpy.types.Scene.coat3D= PointerProperty( + name= "Applink Variables", + type= SceneCoat3D, + description= "Applink variables" + ) + + +def unregister(): + import bpy + + del bpy.types.Object.coat3D + del bpy.types.Scene.coat3D + del bpy.coat3D + + bpy.utils.unregister_module(__name__) + + +if __name__ == "__main__": + register() + + + diff --git a/io_coat3D/coat.py b/io_coat3D/coat.py new file mode 100644 index 00000000..fc989dd6 --- /dev/null +++ b/io_coat3D/coat.py @@ -0,0 +1,532 @@ +# scene_blend_info.py Copyright (C) 2010, Mariano Hidalgo +# +# Show Information About the Blend. +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ***** END GPL LICENCE BLOCK ***** + +import bpy +from bpy.props import * +from io_coat3D import tex +import os +import linecache + +bpy.coat3D = dict() +bpy.coat3D['active_coat'] = '' +bpy.coat3D['status'] = 0 + + +class ObjectButtonsPanel(): + bl_space_type = 'PROPERTIES' + bl_region_type = 'WINDOW' + bl_context = "object" + +class SCENE_PT_Main(ObjectButtonsPanel,bpy.types.Panel): + bl_label = "3D-Coat Applink" + bl_space_type = "PROPERTIES" + bl_region_type = "WINDOW" + bl_context = "scene" + + def draw(self, context): + layout = self.layout + scene = context.scene + me = context.scene.objects + mat_list = [] + import_no = 0 + coat = bpy.coat3D + coat3D = bpy.context.scene.coat3D + if(bpy.context.scene.objects.active): + coa = bpy.context.scene.objects.active.coat3D + + if(os.path.isdir(coat3D.exchangedir)): + foldder = coat3D.exchangedir + if(foldder.rfind('Exchange') >= 0): + coat['status'] = 1 + else: + coat['status'] = 0 + else: + coat['status'] = 0 + #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 + else: + 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(bpy.context.selected_objects): + if(context.selected_objects[0].type == 'MESH'): + coa = context.selected_objects[0].coat3D + colL = row.column() + colR = row.column() + colL.label(text="Object Path:") + if(coa.path3b): + colR.active = True + else: + colR.active = False + + colR.operator("import_applink.pilgway_3d_coat_3b", text="Load 3b") + row = layout.row() + 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'): + coa = bpy.context.selected_objects[0].coat3D + row = layout.row() + row.label(text="Texture output folder:") + row = layout.row() + row.prop(coa,"texturefolder",text="") + row = layout.row() + if(coat['status'] == 0): + row.label(text="Exchange Folder: not connected") + else: + row.label(text="Exchange Folder: connected") + +class SCENE_PT_Settings(ObjectButtonsPanel,bpy.types.Panel): + bl_label = "Applink Settings" + bl_space_type = "PROPERTIES" + bl_region_type = "WINDOW" + bl_context = "scene" + + def draw(self, context): + layout = self.layout + scene = context.scene + coat3D = bpy.context.scene.coat3D + + + row = layout.row() + if(bpy.context.selected_objects): + if(context.selected_objects[0].type == 'MESH'): + row.active = True + else: + row.active = False + row.operator("import_applink.pilgway_3d_deltex",text="Delete Textures") + row = layout.row() + row.label(text="Exchange Folder:") + row = layout.row() + row.prop(coat3D,"exchangedir",text="") + if(bpy.context.scene.objects.active): + coa = bpy.context.scene.objects.active.coat3D + row = layout.row() + row.label(text="3b path:") + row = layout.row() + row.prop(coa,"path3b",text="") + #colL = row.column() + #colR = row.column() + #colL.prop(coat3D,"export_box") + #colR.prop(coat3D,"import_box") + #if(not(coat3D.export_box)): + # row = layout.row() + # colL.label(text="Export settings:") + # row = layout.row() + # colL = row.column() + # colR = row.column() + # colL.prop(coat3D,"export_color") + # colL.prop(coat3D,"export_spec") + # colL.prop(coat3D,"export_normal") + # colL.prop(coat3D,"export_disp") + # colR.prop(coat3D,"export_position") + # colR.prop(coat3D,"export_export_zero_layer") + # colR.prop(coat3D,"export_coarse") + #row = layout.row() + #colL = row.column() + #colR = row.column() + + + + + + +class SCENE_OT_export(bpy.types.Operator): + bl_idname = "export_applink.pilgway_3d_coat" + bl_label = "Export your custom property" + bl_description = "Export your custom property" + + + def invoke(self, context, event): + checkname = '' + coat3D = bpy.context.scene.coat3D + scene = context.scene + coat3D.export_on = False + activeobj = bpy.context.active_object.name + obj = scene.objects[activeobj] + coa = bpy.context.scene.objects.active.coat3D + + importfile = coat3D.exchangedir + texturefile = coat3D.exchangedir + importfile += ('%simport.txt'%(os.sep)) + texturefile += ('%stextures.txt'%(os.sep)) + if(os.path.isfile(texturefile)): + os.remove(texturefile) + + checkname = coa.objectdir + + if(coa.objectdir[-4:] != '.obj'): + checkname += ('%s.obj'%(activeobj)) + + if(not(os.path.isfile(checkname)) or coat3D.exportover): + if(coat3D.export_pos): + + 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) + + coat3D.export_on = True + else: + coat3D.loca = obj.location + coat3D.rota = obj.rotation_euler + coat3D.scal = obj.scale + obj.location = (0,0,0) + obj.rotation_euler = (0,0,0) + obj.scale = (1,1,1) + + 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) + + obj.location = coat3D.loca + obj.rotation_euler = coat3D.rota + obj.scale = coat3D.scal + coat3D.export_on = True + + + + if(coat3D.exportfile == False): + file = open(importfile, "w") + file.write("%s"%(checkname)) + file.write("\n%s"%(checkname)) + file.write("\n[%s]"%(coat3D.type)) + if(coa.texturefolder): + file.write("\n[TexOutput:%s"%(coa.texturefolder)) + + + + + + file.close() + coa.objectdir = checkname + + return('FINISHED') + + +class SCENE_OT_import(bpy.types.Operator): + bl_idname = "import_applink.pilgway_3d_coat" + bl_label = "import your custom property" + bl_description = "import your custom property" + + def invoke(self, context, event): + scene = context.scene + coat3D = bpy.context.scene.coat3D + coat = bpy.coat3D + activeobj = bpy.context.active_object.name + mat_list = [] + scene.objects[activeobj].select = True + objekti = scene.objects[activeobj] + coat3D.loca = objekti.location + coat3D.rota = objekti.rotation_euler + coa = bpy.context.scene.objects.active.coat3D + + exportfile = coat3D.exchangedir + path3b_n = coat3D.exchangedir + path3b_n += ('last_saved_3b_file.txt') + exportfile += ('%sexport.txt'%(os.sep)) + if(os.path.isfile(exportfile)): + export_file = open(exportfile) + for line in export_file: + if line.rfind('.3b'): + objekti.coat3D.coatpath = line + coat['active_coat'] = line + export_file.close() + os.remove(exportfile) + + + + + if(objekti.material_slots): + for obj_mat in objekti.material_slots: + mat_list.append(obj_mat.material) + act_mat_index = objekti.active_material_index + + + if(coat3D.importmesh and os.path.isfile(coa.objectdir)): + mtl = coa.objectdir + mtl = mtl.replace('.obj','.mtl') + if(os.path.isfile(mtl)): + os.remove(mtl) + + + bpy.ops.import_scene.obj(filepath=coa.objectdir) + obj_proxy = scene.objects[0] + 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 + + 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 + + + + + if(coat3D.smooth_on): + bpy.ops.object.shade_smooth() + else: + bpy.ops.object.shade_flat() + + if(os.path.isfile(path3b_n)): + path3b_fil = open(path3b_n) + for lin in path3b_fil: + objekti.coat3D.path3b = lin + path3b_fil.close() + os.remove(path3b_n) + + if(coat3D.importmesh and not(os.path.isfile(coa.objectdir))): + coat3D.importmesh = False + + if(mat_list and coat3D.importmesh): + for mat_one in mat_list: + objekti.data.materials.append(mat_one) + objekti.active_material_index = act_mat_index + + if(mat_list): + for obj_mate in objekti.material_slots: + for tex_slot in obj_mate.material.texture_slots: + if(hasattr(tex_slot,'texture')): + if(tex_slot.texture.type == 'IMAGE'): + tex_slot.texture.image.reload() + + + if(coat3D.importmod): + mod_list = [] + for mod_index in objekti.modifiers: + objekti.modifiers.remove(mod_index) + + + + if(coat3D.importtextures): + export = '' + tex.gettex(mat_list,objekti,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" + bl_description = "Loads 3b linked into object" + + + def invoke(self, context, event): + checkname = '' + coa = bpy.context.scene.objects.active.coat3D + if(coa.path3b): + coat3D = bpy.context.scene.coat3D + scene = context.scene + importfile = coat3D.exchangedir + importfile += ('%simport.txt'%(os.sep)) + + coat_path = bpy.context.active_object.coat3D.path3b + + file = open(importfile, "w") + file.write("%s"%(coat_path)) + file.write("\n%s"%(coat_path)) + file.write("\n[3B]") + file.close() + + + return('FINISHED') + +class SCENE_OT_deltex(bpy.types.Operator): + bl_idname = "import_applink.pilgway_3d_deltex" # XXX, name? + bl_label = "Picks Object's name into path" + bl_description = "Loads 3b linked into object" + + + def invoke(self, context, event): + if(bpy.context.selected_objects): + if(context.selected_objects[0].type == 'MESH'): + coat3D = bpy.context.scene.coat3D + coa = bpy.context.scene.objects.active.coat3D + scene = context.scene + nimi = tex.objname(coa.objectdir) + if(coa.texturefolder): + osoite = os.path.dirname(coa.texturefolder) + os.sep + else: + osoite = os.path.dirname(coa.objectdir) + os.sep + just_nimi = tex.justname(nimi) + just_nimi += '_' + + files = os.listdir(osoite) + for i in files: + if(i.rfind(just_nimi) >= 0): + del_osoite = osoite + i + os.remove(del_osoite) + + return('FINISHED') + +def register(): + bpy.utils.register_module(__name__) + + pass + +def unregister(): + bpy.utils.unregister_module(__name__) + + pass + +if __name__ == "__main__": + register() diff --git a/io_coat3D/tex.py b/io_coat3D/tex.py new file mode 100644 index 00000000..fd1792f2 --- /dev/null +++ b/io_coat3D/tex.py @@ -0,0 +1,379 @@ +import bpy +import os +import filecmp + + +def objname(path): + + path2 = os.path.dirname(path) + os.sep + pituus = len(path2) + nimi = path[pituus:] + + return nimi + +def justname(name): + monesko = name.rfind('.') + justname = name[:monesko] + return justname + +def setgallery(): + newname ='' + tex_name =[] + index_tex = 0 + for tt in bpy.data.textures: + tex_name.append(tt.name) + return tex_name + +def find_index(objekti): + luku = 0 + for tex in objekti.active_material.texture_slots: + if(not(hasattr(tex,'texture'))): + break + luku = luku +1 + + + return luku + +def gettex(mat_list, objekti, scene,export): + + coat3D = bpy.context.scene.coat3D + + + if(bpy.context.scene.render.engine == 'VRAY_RENDER' or bpy.context.scene.render.engine == 'VRAY_RENDER_PREVIEW'): + vray = True + else: + vray = False + + + + take_color = 0; + take_spec = 0; + take_normal = 0; + take_disp = 0; + + bring_color = 1; + bring_spec = 1; + bring_normal = 1; + bring_disp = 1; + + texcoat = {} + texcoat['color'] = [] + texcoat['specular'] = [] + texcoat['nmap'] = [] + texcoat['disp'] = [] + texu = [] + + if(export): + objekti.coat3D.objpath = export + nimi = objname(export) + osoite = os.path.dirname(export) + os.sep + for mate in objekti.material_slots: + for tex_slot in mate.material.texture_slots: + if(hasattr(tex_slot,'texture')): + if(tex_slot.texture.type == 'IMAGE'): + tex_slot.texture.image.reload() + else: + coa = bpy.context.scene.objects.active.coat3D + nimi = objname(coa.objectdir) + if(coa.texturefolder): + osoite = os.path.dirname(coa.texturefolder) + os.sep + else: + osoite = os.path.dirname(coa.objectdir) + os.sep + just_nimi = justname(nimi) + just_nimi += '_' + just_nimi_len = len(just_nimi) + + + if(len(objekti.material_slots) != 0): + for obj_tex in objekti.active_material.texture_slots: + if(hasattr(obj_tex,'texture')): + if(obj_tex.texture): + if(obj_tex.use_map_color_diffuse): + bring_color = 0; + if(obj_tex.use_map_specular): + bring_spec = 0; + if(obj_tex.use_map_normal): + bring_normal = 0; + if(obj_tex.use_map_displacement): + bring_disp = 0; + + files = os.listdir(osoite) + for i in files: + tui = i[:just_nimi_len] + if(tui == just_nimi): + texu.append(i) + + for yy in texu: + minimi = (yy.rfind('_'))+1 + maksimi = (yy.rfind('.')) + tex_name = yy[minimi:maksimi] + koko = '' + koko += osoite + koko += yy + texcoat[tex_name].append(koko) + #date = os.path.getmtime(texcoat[tex_name][0]) + + if((texcoat['color'] or texcoat['nmap'] or texcoat['disp'] or texcoat['specular']) and (len(objekti.material_slots)) == 0): + new_mat = ("%s_Material"%(objekti.name)) + bpy.data.materials.new(new_mat) + ki = bpy.data.materials[new_mat] + objekti.data.materials.append(ki) + + + + if(bring_color == 1 and texcoat['color']): + name_tex ='Color_' + num = [] + + index = find_index(objekti) + + + tex = bpy.ops.Texture + objekti.active_material.texture_slots.create(index) + total_mat = len(objekti.active_material.texture_slots.items()) + useold = '' + + for seekco in bpy.data.textures: + if((seekco.name[:6] == 'Color_') and (seekco.users_material == ())): + useold = seekco + + + + if(useold == ''): + + tex_name = setgallery() + + for num_tex in tex_name: + if(num_tex[:6] == 'Color_'): + num.append(num_tex) + luku_tex = len(num) + name_tex = ('Color_%s'%(luku_tex)) + + bpy.ops.image.new(name=name_tex) + bpy.data.images[name_tex].filepath = texcoat['color'][0] + bpy.data.images[name_tex].source = 'FILE' + + + bpy.data.textures.new(name_tex,type='IMAGE') + objekti.active_material.texture_slots[index].texture = bpy.data.textures[name_tex] + objekti.active_material.texture_slots[index].texture.image = bpy.data.images[name_tex] + + if(objekti.data.uv_textures.active): + objekti.active_material.texture_slots[index].texture_coords = 'UV' + objekti.active_material.texture_slots[index].uv_layer = objekti.data.uv_textures.active.name + + objekti.active_material.texture_slots[index].texture.image.reload() + + + elif(useold != ''): + + objekti.active_material.texture_slots[index].texture = useold + objekti.active_material.texture_slots[index].texture.image.filepath = texcoat['color'][0] + if(objekti.data.uv_textures.active): + objekti.active_material.texture_slots[index].texture_coords = 'UV' + objekti.active_material.texture_slots[index].uv_layer = objekti.data.uv_textures.active.name + + if(bring_normal == 1 and texcoat['nmap']): + name_tex ='Normal_' + num = [] + + index = find_index(objekti) + + + tex = bpy.ops.Texture + objekti.active_material.texture_slots.create(index) + total_mat = len(objekti.active_material.texture_slots.items()) + useold = '' + + for seekco in bpy.data.textures: + if((seekco.name[:7] == 'Normal_') and (seekco.users_material == ())): + useold = seekco + + + + if(useold == ''): + + tex_name = setgallery() + + for num_tex in tex_name: + if(num_tex[:7] == 'Normal_'): + num.append(num_tex) + luku_tex = len(num) + name_tex = ('Normal_%s'%(luku_tex)) + + bpy.ops.image.new(name=name_tex) + bpy.data.images[name_tex].filepath = texcoat['nmap'][0] + bpy.data.images[name_tex].source = 'FILE' + + + bpy.data.textures.new(name_tex,type='IMAGE') + objekti.active_material.texture_slots[index].texture = bpy.data.textures[name_tex] + objekti.active_material.texture_slots[index].texture.image = bpy.data.images[name_tex] + + if(objekti.data.uv_textures.active): + objekti.active_material.texture_slots[index].texture_coords = 'UV' + 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].texture.image.reload() + if(vray): + bpy.data.textures[name_tex].vray_slot.BRDFBump.map_type = 'TANGENT' + + 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 + + + + elif(useold != ''): + + objekti.active_material.texture_slots[index].texture = useold + objekti.active_material.texture_slots[index].texture.image.filepath = texcoat['nmap'][0] + if(objekti.data.uv_textures.active): + objekti.active_material.texture_slots[index].texture_coords = 'UV' + 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 + + + if(bring_spec == 1 and texcoat['specular']): + name_tex ='Specular_' + num = [] + + index = find_index(objekti) + + + tex = bpy.ops.Texture + objekti.active_material.texture_slots.create(index) + total_mat = len(objekti.active_material.texture_slots.items()) + useold = '' + + for seekco in bpy.data.textures: + if((seekco.name[:9] == 'Specular_') and (seekco.users_material == ())): + useold = seekco + + + + + if(useold == ''): + + tex_name = setgallery() + + for num_tex in tex_name: + if(num_tex[:9] == 'Specular_'): + num.append(num_tex) + luku_tex = len(num) + name_tex = ('Specular_%s'%(luku_tex)) + + bpy.ops.image.new(name=name_tex) + bpy.data.images[name_tex].filepath = texcoat['specular'][0] + bpy.data.images[name_tex].source = 'FILE' + + + bpy.data.textures.new(name_tex,type='IMAGE') + objekti.active_material.texture_slots[index].texture = bpy.data.textures[name_tex] + objekti.active_material.texture_slots[index].texture.image = bpy.data.images[name_tex] + + if(objekti.data.uv_textures.active): + objekti.active_material.texture_slots[index].texture_coords = 'UV' + 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_specular = True + + objekti.active_material.texture_slots[index].texture.image.reload() + + + elif(useold != ''): + + objekti.active_material.texture_slots[index].texture = useold + objekti.active_material.texture_slots[index].texture.image.filepath = texcoat['specular'][0] + if(objekti.data.uv_textures.active): + objekti.active_material.texture_slots[index].texture_coords = 'UV' + 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_specular = True + + if(bring_disp == 1 and texcoat['disp']): + name_tex ='Displacement_' + num = [] + + index = find_index(objekti) + + + tex = bpy.ops.Texture + objekti.active_material.texture_slots.create(index) + total_mat = len(objekti.active_material.texture_slots.items()) + useold = '' + + for seekco in bpy.data.textures: + if((seekco.name[:13] == 'Displacement_') and (seekco.users_material == ())): + useold = seekco + + + + + if(useold == ''): + + tex_name = setgallery() + + for num_tex in tex_name: + if(num_tex[:13] == 'Displacement_'): + num.append(num_tex) + luku_tex = len(num) + name_tex = ('Displacement_%s'%(luku_tex)) + + bpy.ops.image.new(name=name_tex) + bpy.data.images[name_tex].filepath = texcoat['disp'][0] + bpy.data.images[name_tex].source = 'FILE' + + + bpy.data.textures.new(name_tex,type='IMAGE') + objekti.active_material.texture_slots[index].texture = bpy.data.textures[name_tex] + objekti.active_material.texture_slots[index].texture.image = bpy.data.images[name_tex] + + if(objekti.data.uv_textures.active): + objekti.active_material.texture_slots[index].texture_coords = 'UV' + 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_displacement = True + + objekti.active_material.texture_slots[index].texture.image.reload() + + + elif(useold != ''): + + objekti.active_material.texture_slots[index].texture = useold + objekti.active_material.texture_slots[index].texture.image.filepath = texcoat['disp'][0] + if(objekti.data.uv_textures.active): + objekti.active_material.texture_slots[index].texture_coords = 'UV' + 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_displacement = True + + if(vray): + objekti.active_material.texture_slots[index].texture.use_interpolation = False + objekti.active_material.texture_slots[index].displacement_factor = 0.05 + + + else: + disp_modi = '' + for seek_modi in objekti.modifiers: + if(seek_modi.type == 'DISPLACE'): + disp_modi = seek_modi + break + if(disp_modi): + disp_modi.texture = objekti.active_material.texture_slots[index].texture + if(objekti.data.uv_textures.active): + disp_modi.texture_coords = 'UV' + disp_modi.uv_layer = objekti.data.uv_textures.active.name + else: + objekti.modifiers.new('Displace',type='DISPLACE') + objekti.modifiers['Displace'].texture = objekti.active_material.texture_slots[index].texture + if(objekti.data.uv_textures.active): + objekti.modifiers['Displace'].texture_coords = 'UV' + objekti.modifiers['Displace'].uv_layer = objekti.data.uv_textures.active.name + + return('FINISHED') |