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:
authorKalle-Samuli Riihikoski <haikalle@gmail.com>2011-09-05 18:08:00 +0400
committerKalle-Samuli Riihikoski <haikalle@gmail.com>2011-09-05 18:08:00 +0400
commit6efe8ccf551e9c3dd7354387da3cf6256dac5bf8 (patch)
treea91557223cc0ad729515b8dd2a7a36c27735283b /io_coat3D
parentbc9b0b19ff61eee9b008cd60bcd27137c51712a4 (diff)
Cleaning the code. Also added support for multres objects.
Diffstat (limited to 'io_coat3D')
-rw-r--r--io_coat3D/__init__.py11
-rw-r--r--io_coat3D/coat.py83
-rw-r--r--io_coat3D/tex.py156
3 files changed, 88 insertions, 162 deletions
diff --git a/io_coat3D/__init__.py b/io_coat3D/__init__.py
index 268bab8b..5041034c 100644
--- a/io_coat3D/__init__.py
+++ b/io_coat3D/__init__.py
@@ -121,12 +121,6 @@ def register():
description="Export Coarse.",
default= True
)
-
- smooth_on = BoolProperty(
- name="Auto Smooth",
- description="Add Modifiers and export.",
- default= True
- )
exportfile = BoolProperty(
name="No Import File",
description="Add Modifiers and export.",
@@ -147,6 +141,11 @@ def register():
description="Remember position.",
default= True
)
+ multires = BoolProperty(
+ name="Multires. Levels",
+ description="Saves Multiresolution data.",
+ default= True
+ )
importtextures = BoolProperty(
name="Bring Textures",
description="Import Textures.",
diff --git a/io_coat3D/coat.py b/io_coat3D/coat.py
index 930efb3f..67571353 100644
--- a/io_coat3D/coat.py
+++ b/io_coat3D/coat.py
@@ -27,7 +27,6 @@ bpy.coat3D = dict()
bpy.coat3D['active_coat'] = ''
bpy.coat3D['status'] = 0
-
class ObjectButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
@@ -106,8 +105,8 @@ class SCENE_PT_Main(ObjectButtonsPanel,bpy.types.Panel):
colR.label(text="Import Settings:")
colR.prop(coat3D,"importmesh")
colR.prop(coat3D,"importmod")
- colR.prop(coat3D,"smooth_on")
colR.prop(coat3D,"importtextures")
+ colR.prop(coat3D,"multires")
row = layout.row()
if(bpy.context.selected_objects):
@@ -199,7 +198,6 @@ class SCENE_OT_export(bpy.types.Operator):
bl_description = "Export your custom property"
bl_options = {'UNDO'}
-
def invoke(self, context, event):
checkname = ''
coat3D = bpy.context.scene.coat3D
@@ -266,7 +264,6 @@ class SCENE_OT_export(bpy.types.Operator):
return {'FINISHED'}
-
class SCENE_OT_import(bpy.types.Operator):
bl_idname = "import_applink.pilgway_3d_coat"
bl_label = "import your custom property"
@@ -281,6 +278,7 @@ class SCENE_OT_import(bpy.types.Operator):
act_first = bpy.context.scene.objects.active
for act_name in test:
if act_name.type == 'MESH' and os.path.isfile(act_name.coat3D.objectdir):
+ multires_on = False
activeobj = act_name.name
mat_list = []
scene.objects[activeobj].select = True
@@ -289,6 +287,18 @@ class SCENE_OT_import(bpy.types.Operator):
coat3D.rota = objekti.rotation_euler
coa = act_name.coat3D
+ if(coat3D.multires):
+ for modifiers in objekti.modifiers:
+ if modifiers.type == 'MULTIRES' and (modifiers.total_levels > 0):
+ bpy.ops.object.multires_external_pack()
+ multires = coat3D.exchangedir
+ multires += ('%stemp.btx'%(os.sep))
+ bpy.ops.object.multires_external_save(filepath=multires)
+ #bpy.ops.object.multires_external_pack()
+ multires_on = True
+ multires_name = modifiers.name
+ break
+
exportfile = coat3D.exchangedir
path3b_n = coat3D.exchangedir
path3b_n += ('last_saved_3b_file.txt')
@@ -303,11 +313,19 @@ class SCENE_OT_import(bpy.types.Operator):
os.remove(exportfile)
if(objekti.material_slots):
+ act_mat_index = objekti.active_material_index
+ if(not(hasattr(objekti.active_material,'texture_slots'))):
+ materials_old = bpy.data.materials.keys()
+ bpy.ops.material.new()
+ materials_new = bpy.data.materials.keys()
+ new_ma = list(set(materials_new).difference(set(materials_old)))
+ new_mat = new_ma[0]
+ ki = bpy.data.materials[new_mat]
+ objekti.material_slots[act_mat_index].material = ki
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')
@@ -342,11 +360,6 @@ class SCENE_OT_import(bpy.types.Operator):
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:
@@ -364,23 +377,36 @@ class SCENE_OT_import(bpy.types.Operator):
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'):
- if tex_slot.texture.image is not None:
- tex_slot.texture.image.reload()
+ if(hasattr(obj_mate.material,'texture_slots')):
+ for tex_slot in obj_mate.material.texture_slots:
+ if(hasattr(tex_slot,'texture')):
+ if(tex_slot.texture.type == 'IMAGE'):
+ if tex_slot.texture.image is not None:
+ tex_slot.texture.image.reload()
-
if(coat3D.importmod):
for mod_index in objekti.modifiers[:]:
objekti.modifiers.remove(mod_index)
-
-
if(coat3D.importtextures):
export = ''
tex.gettex(mat_list,objekti,scene,export)
-
+
+ if(multires_on):
+ temp_file = coat3D.exchangedir
+ temp_file += ('%stemp2.btx'%(os.sep))
+ if(objekti.modifiers[multires_name].levels == 0):
+ objekti.modifiers[multires_name].levels = 1
+ bpy.ops.object.multires_external_save(filepath=temp_file)
+ objekti.modifiers[multires_name].filepath = multires
+ objekti.modifiers[multires_name].levels = 0
+
+ else:
+ bpy.ops.object.multires_external_save(filepath=temp_file)
+ objekti.modifiers[multires_name].filepath = multires
+ #bpy.ops.object.multires_external_pack()
+ bpy.ops.object.shade_smooth()
+
for act_name in test:
act_name.select = True
bpy.context.scene.objects.active = act_first
@@ -393,7 +419,6 @@ class SCENE_OT_import3b(bpy.types.Operator):
bl_description = "Bring 3D-Coat Mesh"
bl_options = {'UNDO'}
-
def invoke(self, context, event):
coat3D = bpy.context.scene.coat3D
@@ -452,16 +477,12 @@ class SCENE_OT_import3b(bpy.types.Operator):
bpy.context.scene.objects.active = new_obj
- if(coat3D.smooth_on):
- bpy.ops.object.shade_smooth()
- else:
- bpy.ops.object.shade_flat()
-
+ bpy.ops.object.shade_smooth()
+
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):
@@ -487,7 +508,6 @@ class SCENE_OT_load3b(bpy.types.Operator):
file.write("\n[3B]")
file.close()
-
return {'FINISHED'}
class SCENE_OT_deltex(bpy.types.Operator):
@@ -495,7 +515,6 @@ class SCENE_OT_deltex(bpy.types.Operator):
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'):
@@ -518,11 +537,9 @@ class SCENE_OT_deltex(bpy.types.Operator):
return {'FINISHED'}
-
from bpy import *
from mathutils import Vector, Matrix
-
# 3D-Coat Dynamic Menu
class VIEW3D_MT_Coat_Dynamic_Menu(bpy.types.Menu):
bl_label = "3D-Coat Applink Menu"
@@ -584,9 +601,6 @@ class VIEW3D_MT_Coat_Dynamic_Menu(bpy.types.Menu):
layout.operator("import3b_applink.pilgway_3d_coat", text="Bring from 3D-Coat")
layout.separator()
-
-
-
class VIEW3D_MT_ImportMenu(bpy.types.Menu):
bl_label = "Import Settings"
@@ -634,7 +648,6 @@ def register():
kmi = km.keymap_items.new('wm.call_menu2', 'Q', 'PRESS')
kmi.properties.name = "VIEW3D_MT_Coat_Dynamic_Menu"
-
def unregister():
bpy.utils.unregister_module(__name__)
diff --git a/io_coat3D/tex.py b/io_coat3D/tex.py
index d3b5f56d..816dacd3 100644
--- a/io_coat3D/tex.py
+++ b/io_coat3D/tex.py
@@ -20,26 +20,6 @@
import bpy
import os
-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:
@@ -52,7 +32,6 @@ 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:
@@ -77,7 +56,7 @@ def gettex(mat_list, objekti, scene,export):
if(export):
objekti.coat3D.objpath = export
- nimi = objname(export)
+ nimi = os.path.split(export)[1]
osoite = os.path.dirname(export) + os.sep
for mate in objekti.material_slots:
for tex_slot in mate.material.texture_slots:
@@ -87,13 +66,12 @@ def gettex(mat_list, objekti, scene,export):
tex_slot.texture.image.reload()
else:
coa = objekti.coat3D
- nimi = objname(coa.objectdir)
+ nimi = os.path.split(coa.objectdir)[1]
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 = os.path.splitext(nimi)[0] + '_'
just_nimi_len = len(just_nimi)
if(len(objekti.material_slots) != 0):
@@ -123,69 +101,40 @@ def gettex(mat_list, objekti, scene,export):
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):
- index = 0
- tuli = False
- lasku = False
- while(lasku == False):
- tuli = False
- new_mat = ("Material.%03d"%(index))
- for i in bpy.data.materials:
- if(i.name == new_mat):
- tuli = True
- break
- if(tuli):
- index += 1
- else:
- lasku = True
- bpy.data.materials.new(new_mat)
+ materials_old = bpy.data.materials.keys()
+ bpy.ops.material.new()
+ materials_new = bpy.data.materials.keys()
+ new_ma = list(set(materials_new).difference(set(materials_old)))
+ new_mat = new_ma[0]
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 == ())):
+ if((seekco.name[:5] == 'Color') and (seekco.users_material == ())):
useold = seekco
if(useold == ''):
- indexx = 0
- tuli = False
- lasku = False
- while(lasku == False):
- tuli = False
- name_tex = ("Color_%s"%(indexx))
- for i in bpy.data.textures:
- if(i.name == name_tex):
- tuli = True
- break
- if(tuli):
- indexx += 1
- else:
- lasku = True
-
+ textures_old = bpy.data.textures.keys()
+ bpy.data.textures.new('Color',type='IMAGE')
+ textures_new = bpy.data.textures.keys()
+ name_te = list(set(textures_new).difference(set(textures_old)))
+ name_tex = name_te[0]
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]
@@ -207,9 +156,6 @@ def gettex(mat_list, objekti, scene,export):
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)
@@ -217,38 +163,28 @@ def gettex(mat_list, objekti, scene,export):
useold = ''
for seekco in bpy.data.textures:
- if((seekco.name[:7] == 'Normal_') and (seekco.users_material == ())):
+ if((seekco.name[:6] == 'Normal') and (seekco.users_material == ())):
useold = seekco
if(useold == ''):
- indexx = 0
- tuli = False
- lasku = False
- while(lasku == False):
- tuli = False
- name_tex = ("Normal_%s"%(indexx))
- for i in bpy.data.textures:
- if(i.name == name_tex):
- tuli = True
- break
- if(tuli):
- indexx += 1
- else:
- lasku = True
+ textures_old = bpy.data.textures.keys()
+ bpy.data.textures.new('Normal',type='IMAGE')
+ textures_new = bpy.data.textures.keys()
+ name_te = list(set(textures_new).difference(set(textures_old)))
+ name_tex = name_te[0]
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
@@ -277,7 +213,6 @@ def gettex(mat_list, objekti, scene,export):
if(bring_spec == 1 and texcoat['specular']):
- name_tex ='Specular_'
index = find_index(objekti)
@@ -285,38 +220,28 @@ def gettex(mat_list, objekti, scene,export):
useold = ''
for seekco in bpy.data.textures:
- if((seekco.name[:9] == 'Specular_') and (seekco.users_material == ())):
+ if((seekco.name[:8] == 'Specular') and (seekco.users_material == ())):
useold = seekco
if(useold == ''):
- indexx = 0
- tuli = False
- lasku = False
- while(lasku == False):
- tuli = False
- name_tex = ("Specular_%s"%(indexx))
- for i in bpy.data.textures:
- if(i.name == name_tex):
- tuli = True
- break
- if(tuli):
- indexx += 1
- else:
- lasku = True
+ textures_old = bpy.data.textures.keys()
+ bpy.data.textures.new('Specular',type='IMAGE')
+ textures_new = bpy.data.textures.keys()
+ name_te = list(set(textures_new).difference(set(textures_old)))
+ name_tex = name_te[0]
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
@@ -335,7 +260,6 @@ def gettex(mat_list, objekti, scene,export):
objekti.active_material.texture_slots[index].use_map_specular = True
if(bring_disp == 1 and texcoat['disp']):
- name_tex ='Displacement_'
index = find_index(objekti)
@@ -344,38 +268,28 @@ def gettex(mat_list, objekti, scene,export):
useold = ''
for seekco in bpy.data.textures:
- if((seekco.name[:13] == 'Displacement_') and (seekco.users_material == ())):
+ if((seekco.name[:12] == 'Displacement') and (seekco.users_material == ())):
useold = seekco
if useold == "":
- indexx = 0
- tuli = False
- lasku = False
- while(lasku == False):
- tuli = False
- name_tex = ("Displacement_%s"%(indexx))
- for i in bpy.data.textures:
- if(i.name == name_tex):
- tuli = True
- break
- if(tuli):
- indexx += 1
- else:
- lasku = True
+ textures_old = bpy.data.textures.keys()
+ bpy.data.textures.new('Displacement',type='IMAGE')
+ textures_new = bpy.data.textures.keys()
+ name_te = list(set(textures_new).difference(set(textures_old)))
+ name_tex = name_te[0]
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