diff options
author | Brendon Murphy <meta.androcto1@gmail.com> | 2010-11-06 01:15:04 +0300 |
---|---|---|
committer | Brendon Murphy <meta.androcto1@gmail.com> | 2010-11-06 01:15:04 +0300 |
commit | 3a2267df7f14641667ce498bd73fbffb6d5a8512 (patch) | |
tree | 8d2867373d9fc12dcbf67248ac55737316ca3221 /io_coat3D/tex.py | |
parent | 0d6f4cf43a8ce9570e2aa9a95c5a5002c3c447e6 (diff) |
added to trunk/py/scripts/addons/io_coat3D
this is the App Link Script which links 3d Coat & Blender for Texture & Model interchange.
Wiki page to be written.
Diffstat (limited to 'io_coat3D/tex.py')
-rw-r--r-- | io_coat3D/tex.py | 383 |
1 files changed, 383 insertions, 0 deletions
diff --git a/io_coat3D/tex.py b/io_coat3D/tex.py new file mode 100644 index 00000000..db74d1dc --- /dev/null +++ b/io_coat3D/tex.py @@ -0,0 +1,383 @@ +import bpy +import os +import filecmp + + +def objname(path): + + path2 = os.path.dirname(path) + os.sep + print("kalle:%s"%path2) + 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: + nimi = objname(coat3D.objectdir) + osoite = os.path.dirname(coat3D.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 + bpy.data.textures[name_tex].normal_space = 'TANGENT' + + + 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 + + + + 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') + + |