Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'io_coat3D/tex.py')
-rw-r--r--io_coat3D/tex.py371
1 files changed, 371 insertions, 0 deletions
diff --git a/io_coat3D/tex.py b/io_coat3D/tex.py
new file mode 100644
index 00000000..a420f6f5
--- /dev/null
+++ b/io_coat3D/tex.py
@@ -0,0 +1,371 @@
+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:
+ 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')