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:
authorChris Foster <cdbfoster@gmail.com>2011-07-03 04:56:42 +0400
committerChris Foster <cdbfoster@gmail.com>2011-07-03 04:56:42 +0400
commit91a1998ddecfc5048b7c3639ec247c2c8bc27c92 (patch)
treed78fd29412ec71f0dff71343346e43a182182e25 /io_export_directx_x.py
parent7358107bb9ce9dd8d4d2dc9d69cee0288a9030a8 (diff)
- File was somehow reverted to a ways back. Fixed now.
- Fix for relative texture paths that contain folders in them.
Diffstat (limited to 'io_export_directx_x.py')
-rw-r--r--io_export_directx_x.py65
1 files changed, 40 insertions, 25 deletions
diff --git a/io_export_directx_x.py b/io_export_directx_x.py
index e426befb..010baa80 100644
--- a/io_export_directx_x.py
+++ b/io_export_directx_x.py
@@ -16,13 +16,13 @@
# ***** GPL LICENSE BLOCK *****
bl_info = {
- "name": "Export DirectX Model Format (.x)",
+ "name": "DirectX Model Format (.x)",
"author": "Chris Foster (Kira Vakaan)",
- "version": (2, 1),
+ "version": (2, 1, 2),
"blender": (2, 5, 8),
"api": 37702,
- "location": "File > Export",
- "description": "Export to the DirectX Model Format (.x)",
+ "location": "File > Export > DirectX (.x)",
+ "description": "Export DirectX Model Format (.x)",
"warning": "",
"wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/"\
"Scripts/Import-Export/DirectX_Exporter",
@@ -66,8 +66,15 @@ class DirectXExporterSettings:
def LegalName(Name):
- NewName = Name.replace(".", "_")
- NewName = NewName.replace(" ", "_")
+
+ def ReplaceSet(String, OldSet, NewChar):
+ for OldChar in OldSet:
+ String = String.replace(OldChar, NewChar)
+ return String
+
+ import string
+
+ NewName = ReplaceSet(Name, string.punctuation, "_")
if NewName[0].isdigit() or NewName in ["ARRAY",
"DWORD",
"UCHAR",
@@ -97,7 +104,7 @@ def ExportDirectX(Config):
print("Done")
if Config.Verbose:
- print("Generating Object list for export...")
+ print("Generating Object list for export... (Root parents only)")
if Config.ExportMode == 1:
Config.ExportList = [Object for Object in Config.context.scene.objects
if Object.type in ("ARMATURE", "EMPTY", "MESH")
@@ -108,7 +115,7 @@ def ExportDirectX(Config):
Config.ExportList = [Object for Object in ExportList
if Object.parent not in ExportList]
if Config.Verbose:
- print("Done")
+ print(" List: {}\nDone".format(Config.ExportList))
if Config.Verbose:
print("Setting up...")
@@ -146,6 +153,9 @@ def ExportDirectX(Config):
Config.Whitespace -= 1
Config.File.write("{}}} //End of Root Frame\n".format(" " * Config.Whitespace))
+
+ if Config.Verbose:
+ print("Objects Exported: {}".format(Config.ExportList))
if Config.ExportAnimation:
if Config.IncludeFrameRate:
@@ -189,7 +199,7 @@ def GetMaterialTexture(Material):
#Create a list of Textures that have type "IMAGE"
ImageTextures = [Material.texture_slots[TextureSlot].texture for TextureSlot in Material.texture_slots.keys() if Material.texture_slots[TextureSlot].texture.type == "IMAGE"]
#Refine a new list with only image textures that have a file source
- ImageFiles = [os.path.basename(Texture.image.filepath) for Texture in ImageTextures if Texture.image.source == "FILE"]
+ ImageFiles = [os.path.basename(Texture.image.filepath[2:]) for Texture in ImageTextures if Texture.image.source == "FILE"]
if ImageFiles:
return ImageFiles[0]
return None
@@ -256,8 +266,11 @@ def WriteObjects(Config, ObjectList):
WriteArmatureBones(Config, Object, ParentList)
if Config.Verbose:
print(" Done")
-
+
ChildList = GetObjectChildren(Object)
+ if Config.ExportMode == 2: #Selected Objects Only
+ ChildList = [Child for Child in ChildList
+ if Child in Config.context.selected_objects]
if Config.Verbose:
print(" Writing Children...")
WriteObjects(Config, ChildList)
@@ -274,11 +287,11 @@ def WriteObjects(Config, ObjectList):
Object2 = Object.copy()
for Modifier in [Modifier for Modifier in Object2.modifiers if Modifier.type == "ARMATURE"]:
Object2.modifiers.remove(Modifier)
- Mesh = Object2.create_mesh(bpy.context.scene, True, "PREVIEW")
+ Mesh = Object2.to_mesh(bpy.context.scene, True, "PREVIEW")
else:
- Mesh = Object.create_mesh(bpy.context.scene, True, "PREVIEW")
+ Mesh = Object.to_mesh(bpy.context.scene, True, "PREVIEW")
else:
- Mesh = Object.create_mesh(bpy.context.scene, False, "PREVIEW")
+ Mesh = Object.to_mesh(bpy.context.scene, False, "PREVIEW")
if Config.Verbose:
print(" Done")
print(" Writing Mesh...")
@@ -489,20 +502,20 @@ def WriteMaterial(Config, Material=None):
Config.File.write("{}Material {} {{\n".format(" " * Config.Whitespace, LegalName(Material.name)))
Config.Whitespace += 1
- Diffuse = list(Material.diffuse_color)
+ Diffuse = list(Vector(Material.diffuse_color) * Material.diffuse_intensity)
Diffuse.append(Material.alpha)
- Specularity = Material.specular_intensity
- Specular = list(Material.specular_color)
+ Specularity = 1000 * (Material.specular_hardness - 1.0) / (511.0 - 1.0) # Map Blender's range of 1 - 511 to 0 - 1000
+ Specular = list(Vector(Material.specular_color) * Material.specular_intensity)
Config.File.write("{}{:9f};{:9f};{:9f};{:9f};;\n".format(" " * Config.Whitespace, Diffuse[0], Diffuse[1], Diffuse[2], Diffuse[3]))
- Config.File.write("{}{:9f};\n".format(" " * Config.Whitespace, 2 * (1.0 - Specularity)))
+ Config.File.write("{} {:9f};\n".format(" " * Config.Whitespace, Specularity))
Config.File.write("{}{:9f};{:9f};{:9f};;\n".format(" " * Config.Whitespace, Specular[0], Specular[1], Specular[2]))
else:
Config.File.write("{}Material Default_Material {{\n".format(" " * Config.Whitespace))
Config.Whitespace += 1
- Config.File.write("{} 1.000000; 1.000000; 1.000000; 1.000000;;\n".format(" " * Config.Whitespace))
- Config.File.write("{} 1.500000;\n".format(" " * Config.Whitespace))
- Config.File.write("{} 1.000000; 1.000000; 1.000000;;\n".format(" " * Config.Whitespace))
+ Config.File.write("{} 0.800000; 0.800000; 0.800000; 0.800000;;\n".format(" " * Config.Whitespace))
+ Config.File.write("{} 96.078431;\n".format(" " * Config.Whitespace)) # 1000 * (50 - 1) / (511 - 1)
+ Config.File.write("{} 0.500000; 0.500000; 0.500000;;\n".format(" " * Config.Whitespace))
Config.File.write("{} 0.000000; 0.000000; 0.000000;;\n".format(" " * Config.Whitespace))
if Config.ExportTextures:
Texture = GetMaterialTexture(Material)
@@ -1193,10 +1206,8 @@ class DirectXExporter(bpy.types.Operator):
Verbose = BoolProperty(name="Verbose", description="Run the exporter in debug mode. Check the console for output.", default=False)
def execute(self, context):
- #Append .x if needed
- FilePath = self.filepath
- if not FilePath.lower().endswith(".x"):
- FilePath += ".x"
+ #Append .x
+ FilePath = os.path.splitext(self.filepath)[0] + ".x"
Config = DirectXExporterSettings(context,
FilePath,
@@ -1225,12 +1236,16 @@ def menu_func(self, context):
def register():
+ bpy.utils.register_module(__name__)
+
bpy.types.INFO_MT_file_export.append(menu_func)
def unregister():
+ bpy.utils.unregister_module(__name__)
+
bpy.types.INFO_MT_file_export.remove(menu_func)
if __name__ == "__main__":
- register() \ No newline at end of file
+ register()