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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWillian Padovani Germano <wpgermano@gmail.com>2006-01-29 22:17:53 +0300
committerWillian Padovani Germano <wpgermano@gmail.com>2006-01-29 22:17:53 +0300
commit4b01aa7aa57d144baf1739e4bcd65716f95dabfd (patch)
tree704a96276eab337b8be793cf1ba8679dcf7178dc /release/scripts/DirectX8Exporter.py
parent282fbcc763857cf5a6b81f65ddffd589462836b1 (diff)
Scripts:
The orange -> HEAD merge reverted some scripts to older versions. This only affected the ones that already existed before the orange branch. Minor issue, easy to fix. All in all, kudos to kaito, Hos and others for all the hard work in bringing (coding, merging) all these changes to the main branch.
Diffstat (limited to 'release/scripts/DirectX8Exporter.py')
-rw-r--r--release/scripts/DirectX8Exporter.py307
1 files changed, 162 insertions, 145 deletions
diff --git a/release/scripts/DirectX8Exporter.py b/release/scripts/DirectX8Exporter.py
index bfe6ccbdc88..0bb436ac86a 100644
--- a/release/scripts/DirectX8Exporter.py
+++ b/release/scripts/DirectX8Exporter.py
@@ -1,17 +1,16 @@
#!BPY
""" Registration info for Blender menus:
-Name: 'DirectX8(.x)...'
-Blender: 239
+Name: 'DirectX(.x)...'
+Blender: 240
Group: 'Export'
Submenu: 'Export all the scene' export
Submenu: 'Export selected obj' exportsel
-Tip: 'Export to DirectX8 text file format format.'
+Tip: 'Export to DirectX text file format format.'
"""
-
__author__ = "Arben (Ben) Omari"
__url__ = ("blender", "elysiun", "Author's site, http://www.omariben.too.it")
-__version__ = "1.0"
+__version__ = "2.0"
__bpydoc__ = """\
This script exports a Blender mesh with armature to DirectX 8's text file
@@ -21,8 +20,8 @@ Notes:<br>
Check author's site or the elYsiun forum for a new beta version of the
DX exporter.
"""
-# DirectX8Exporter.py version 1.0
-# Copyright (C) 2003 Arben OMARI -- omariarben@everyday.com
+# DirectXExporter.py version 2.0
+# Copyright (C) 2006 Arben OMARI -- omariarben@everyday.com
#
# 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
@@ -42,10 +41,17 @@ DX exporter.
import Blender
from Blender import Types, Object, NMesh, Material,Armature
from Blender.Mathutils import *
+import math
-global new_bon,mat_flip,index_list
+global mat_flip,index_list,space,bone_list,mat_dict
+bone_list =[]
index_list = []
-new_bon = {}
+mat_dict = {}
+space = 0
+ANIM = 1
+NORMAL = 1
+TEXCOORDS = 1
+TEXTURE = 1
mat_flip = Matrix([1, 0, 0, 0], [0, 1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1])
@@ -64,6 +70,7 @@ class xExport:
#Select Scene objects
#***********************************************
def SelectObjs(self):
+ global chld_obj
print "exporting..."
self.writeHeader()
for obj in Object.Get():
@@ -154,115 +161,117 @@ class xExport:
#Export Root Bone
#***********************************************
def writeRootBone(self,am_ob,child_obj):
- global new_bon,mat_flip
- space = 0
- arm = am_ob.getData()
- Blender.Set('curframe',1)
- mat_ob = mat_flip * am_ob.matrixWorld
- self.writeArmFrames(mat_ob, "RootFrame", 0)
- root_bon = arm.getBones()
- mat_r = self.writeCombineMatrix(root_bon[0])
- name_r = root_bon[0].getName()
- new_bon[name_r] = len(root_bon[0].getChildren())
- self.writeArmFrames(mat_r, name_r, 1)
- self.writeListOfChildrens(root_bon[0],2,arm)
- self.file.write("}\n")
- self.exportMeshArm(arm,am_ob,child_obj)
+ global mat_flip,space,root_bon,mat_ob
+ arms = am_ob.getData()
+ self.writeArmFrames(mat_flip, "RootFrame")
+ for bon in arms.bones.values():
+ if bon.hasParent():
+ pass
+ else:
+ root_bon = bon
+ space += 1
+ mat_rb = self.writeCombineMatrix(root_bon)
+ mat_r = mat_rb #* am_ob.matrixLocal
+ name_r = root_bon.name
+ name_f = name_r.replace(".","")
+ self.writeArmFrames(mat_r, name_f)
+ bon_c = self.findChildrens(root_bon)
+ self.writeChildren(bon_c)
+ self.file.write(" }\n")
+ self.exportMeshArm(arms,am_ob,child_obj)
#***********************************************
- #Export Children Bones
+ #Create Children structure
#***********************************************
- def writeListOfChildrens(self,bon,space,arm):
- global new_bon
- bon_c = bon.getChildren()
- Blender.Set('curframe',1)
- for n in range(len(bon_c)):
- name_h = bon_c[n].getName()
- chi_h = bon_c[n].getChildren()
- new_bon[name_h] = len(chi_h)
-
- if bon_c == [] :
- self.CloseBrackets(bon, new_bon, space, arm.getBones()[0])
+ def writeBon(self,bon):
+ global space
+ mat_r = self.writeCombineMatrix(bon)
+ name_r = bon.name
+ name_f = name_r.replace(".","")
+ self.writeArmFrames(mat_r, name_f)
- for nch in range(len(bon_c)):
- mat = self.writeCombineMatrix(bon_c[nch])
- name_ch = bon_c[nch].getName()
- self.writeArmFrames(mat, name_ch,space)
- self.findChildrens(bon_c[nch],space,arm)
+ def findChildrens(self,bon):
+ bon_c = bon.children
+ return bon_c
- #***********************************************
- #Create Children structure
- #***********************************************
- def CloseBrackets(self, bon, new_bon, space, root_bon):
+
+ def writeChildren(self,bon_c):
+ global space,bone_list
+ space += 1
+ if bon_c:
+ for bo in bon_c:
+ if bo.name not in bone_list:
+ self.writeBon(bo)
+ bone_list.append(bo.name)
+ bo_c = bo.children
+ self.writeChildren(bo_c)
+ self.closeBrackets()
+
+
+
+ def closeBrackets(self):
+ global space
+ space = space-1
tab = " "
- self.file.write("%s" % (tab * (space -1)))
+ self.file.write("%s" % (tab * space))
self.file.write("}\n")
- while bon.hasParent():
- if new_bon[bon.getName()] == 0:
- pare = bon.getParent()
- name_p = pare.getName()
- if new_bon[name_p] > 0:
- new_bon[name_p] = new_bon[name_p] - 1
- if new_bon[name_p] == 0 and pare != root_bon:
- self.file.write("%s" % (tab * (space-2)))
- self.file.write("}\n")
- space = space - 1
- bon = pare
- else:
- break
+
#***********************************************
- #Create Children structure
- #***********************************************
- def findChildrens(self,bon_c,space,arm):
- bon_cc = bon_c
- space += 1
- self.writeListOfChildrens(bon_cc,space,arm)
-
-
- #***********************************************
#Offset Matrix
#***********************************************
def writeMatrixOffset(self,bon):
- Blender.Set('curframe',1)
- mat_b = bon.getRestMatrix()
- mat_b.invert()
+ global chld_obj
+ Blender.Set('curframe', 1)
+ pose = chld_obj.getPose()
+ pos_b = pose.bones[bon.name]
+ mat_b = pos_b.poseMatrix
+ mat_b.invert()
return mat_b
-
-
#***********************************************
#Combine Matrix
#***********************************************
def writeCombineMatrix(self,bon):
- Blender.Set('curframe',1)
- mat_b = bon.getRestMatrix()
+ global chld_obj
+ Blender.Set('curframe', 1)
+ pose = chld_obj.getPose()
+ pos_b = pose.bones[bon.name]
+ mat_b = pos_b.poseMatrix
if bon.hasParent():
- pare = bon.getParent()
- mat_p = pare.getRestMatrix()
- else :
+ pare = bon.parent
+ pos_p = pose.bones[pare.name]
+ mat_p = pos_p.poseMatrix
+
+ else:
mat_p = Matrix([1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1])
mat_p.invert()
- mat_rb = mat_b * mat_p
- return mat_rb
-
+ mat_f = mat_b * mat_p
+
+ return mat_f
#***********************************************
#Combine Matrix
#***********************************************
- def writeCombineAnimMatrix(self,bon):
-
- mat_b = bon.getRestMatrix()
+ def writeAnimCombineMatrix(self,bon,fre):
+ global chld_obj
+ Blender.Set('curframe', fre)
+ pose = chld_obj.getPose()
+ pos_b = pose.bones[bon.name]
+ mat_b = pos_b.poseMatrix
if bon.hasParent():
- pare = bon.getParent()
- mat_p = pare.getRestMatrix()
- else :
+ pare = bon.parent
+ pos_p = pose.bones[pare.name]
+ mat_p = pos_p.poseMatrix
+
+ else:
mat_p = Matrix([1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1])
mat_p.invert()
- mat_rb = mat_b * mat_p
- return mat_rb
+ mat_f = mat_b * mat_p
+
+ return mat_f
#*********************************************************************************************************************************************
@@ -271,16 +280,23 @@ class xExport:
#***********************************************
def writeSkinWeights(self, arm, mesh):
global index_list
-
+ v_dict = {}
Blender.Set('curframe',1)
self.file.write(" XSkinMeshHeader {\n")
max_infl = 0
- for bo in arm.getBones() :
- name = bo.getName()
+ #this part supply the missing getVertexInfluences(index)
+ for v in index_list:
+ v_dict[v] = []
+ for bo in arm.bones.values() :
+ name = bo.name
+
try :
vertx_list = mesh.getVertsFromGroup(name,1)
+ for vn in vertx_list:
+ v_dict[vn[0]].append(name)
+ #---------------------------------------------------
for inde in vertx_list :
- vert_infl = mesh.getVertexInfluences(inde[0])
+ vert_infl = v_dict[inde[0]]
ln_infl = len(vert_infl)
if ln_infl > max_infl :
max_infl = ln_infl
@@ -288,20 +304,21 @@ class xExport:
except:
pass
- self.file.write(" %s; \n" % (max_infl))
- self.file.write(" %s; \n" % (max_infl * 3))
- self.file.write(" %s; \n" % (len(arm.getBones())))
+ self.file.write(" %d; \n" % (max_infl))
+ self.file.write(" %d; \n" % (max_infl * 3))
+ self.file.write(" %d; \n" % (len(arm.bones.values())))
self.file.write(" }\n")
- for bo in arm.getBones() :
+ for bo in arm.bones.values() :
bo_list = []
weight_list = []
- name = bo.getName()
+ name = bo.name
+ f_name = name.replace(".","")
try :
vert_list = mesh.getVertsFromGroup(name,1)
le = 0
for indx in vert_list:
- ver_infl = mesh.getVertexInfluences(indx[0])
+ ver_infl = v_dict[indx[0]]
len_infl = float(len(ver_infl))
infl = 1 / len_infl
i = -1
@@ -314,28 +331,27 @@ class xExport:
self.file.write(" SkinWeights {\n")
- self.file.write(' "%s"; \n' % (name))
- self.file.write(' %s; \n' % (le))
+ self.file.write(' "%s"; \n' % (f_name))
+ self.file.write(' %d; \n' % (le))
count = 0
for ind in bo_list :
count += 1
if count == len(bo_list):
- self.file.write(" %s; \n" % (ind))
+ self.file.write(" %d; \n" % (ind))
else :
- self.file.write(" %s, \n" % (ind))
+ self.file.write(" %d, \n" % (ind))
cou = 0
for wegh in weight_list :
cou += 1
if cou == len(weight_list):
- self.file.write(" %s; \n" % (round(wegh,6)))
+ self.file.write(" %f; \n" % (round(wegh,6)))
else :
- self.file.write(" %s, \n" % (round(wegh,6)))
+ self.file.write(" %f, \n" % (round(wegh,6)))
matx = self.writeMatrixOffset(bo)
-
- self.writeOffsFrames(matx, name, 1)
+ self.writeOffsFrames(matx, name)
except :
pass
self.file.write(" }\n")
@@ -344,7 +360,8 @@ class xExport:
#***********************************************
# Write Matrices
#***********************************************
- def writeArmFrames(self, matx, name, space):
+ def writeArmFrames(self, matx, name):
+ global space
tab = " "
self.file.write("%s" % (tab * space))
self.file.write("Frame ")
@@ -352,16 +369,16 @@ class xExport:
self.file.write("%s" % (tab * space))
self.file.write(" FrameTransformMatrix {\n")
self.file.write("%s" % (tab * space))
- self.file.write(" %s,%s,%s,%s,\n" %
+ self.file.write(" %f,%f,%f,%f,\n" %
(round(matx[0][0],4),round(matx[0][1],4),round(matx[0][2],4),round(matx[0][3],4)))
self.file.write("%s" % (tab * space))
- self.file.write(" %s,%s,%s,%s,\n" %
+ self.file.write(" %f,%f,%f,%f,\n" %
(round(matx[1][0],4),round(matx[1][1],4),round(matx[1][2],4),round(matx[1][3],4)))
self.file.write("%s" % (tab * space))
- self.file.write(" %s,%s,%s,%s,\n" %
+ self.file.write(" %f,%f,%f,%f,\n" %
(round(matx[2][0],4),round(matx[2][1],4),round(matx[2][2],4),round(matx[2][3],4)))
self.file.write("%s" % (tab * space))
- self.file.write(" %s,%s,%s,%s;;\n" %
+ self.file.write(" %f,%f,%f,%f;;\n" %
(round(matx[3][0],4),round(matx[3][1],4),round(matx[3][2],4),round(matx[3][3],6)))
self.file.write("%s" % (tab * space))
self.file.write(" }\n")
@@ -369,19 +386,20 @@ class xExport:
#***********************************************
# Write Matrices
#***********************************************
- def writeOffsFrames(self, matx, name, space):
+ def writeOffsFrames(self, matx, name):
+ space = 1
tab = " "
self.file.write("%s" % (tab * space))
- self.file.write(" %s,%s,%s,%s,\n" %
+ self.file.write(" %f,%f,%f,%f,\n" %
(round(matx[0][0],4),round(matx[0][1],4),round(matx[0][2],4),round(matx[0][3],4)))
self.file.write("%s" % (tab * space))
- self.file.write(" %s,%s,%s,%s,\n" %
+ self.file.write(" %f,%f,%f,%f,\n" %
(round(matx[1][0],4),round(matx[1][1],4),round(matx[1][2],4),round(matx[1][3],4)))
self.file.write("%s" % (tab * space))
- self.file.write(" %s,%s,%s,%s,\n" %
+ self.file.write(" %f,%f,%f,%f,\n" %
(round(matx[2][0],4),round(matx[2][1],4),round(matx[2][2],4),round(matx[2][3],4)))
self.file.write("%s" % (tab * space))
- self.file.write(" %s,%s,%s,%s;;\n" %
+ self.file.write(" %f,%f,%f,%f;;\n" %
(round(matx[3][0],4),round(matx[3][1],4),round(matx[3][2],4),round(matx[3][3],6)))
self.file.write("%s" % (tab * space))
self.file.write(" }\n")
@@ -445,7 +463,8 @@ template SkinWeights {\n\
mat_ob.invert()
mat = mat_arm * mat_ob
mat.invert()
- self.writeArmFrames(mat, name.name, 1)
+ name_f = name.name.replace(".","")
+ self.writeArmFrames(mat, name_f)
mesh = NMesh.GetRawFromObject(name.name)
self.file.write("Mesh {\n")
numface=len(mesh.faces)
@@ -461,8 +480,8 @@ template SkinWeights {\n\
for n in range(len(face.v)):
index_list.append(face.v[n].index)
vec_vert = Vector([face.v[n].co[0], face.v[n].co[1], face.v[n].co[2], 1])
- f_vec_vert = VecMultMat(vec_vert, mat)
- self.file.write("%s; %s; %s;" % (f_vec_vert[0], f_vec_vert[1], f_vec_vert[2]))
+ f_vec_vert = vec_vert * mat
+ self.file.write("%f; %f; %f;" % (round(f_vec_vert[0],4), round(f_vec_vert[1],4), round(f_vec_vert[2],4)))
if counter == numface :
if n == len(face.v)-1 :
self.file.write(";\n")
@@ -505,7 +524,8 @@ template SkinWeights {\n\
global index_list
#ROTATION
mat_ob = mat_flip * name.matrixWorld
- self.writeArmFrames(mat_ob, name.name, 0)
+ name_f = name.name.replace(".","")
+ self.writeArmFrames(mat_ob, name_f)
self.file.write("Mesh {\n")
numface=len(mesh.faces)
@@ -589,10 +609,9 @@ template SkinWeights {\n\
##MATERIAL NAME
for mat in Material.Get():
self.file.write(" Material")
- for a in range(0,len(mat.name)):
- if mat.name[a] == ".":
- print "WARNING:the material " + mat.name + " contains '.' within.Many viewers may refuse to read the exported file"
- self.file.write(" %s "% (mat.name))
+ name_m = mat.name
+ name_f = name_m.replace(".","")
+ self.file.write(" %s "% (name_f))
self.file.write("{\n")
self.file.write(" %s; %s; %s;" % (mat.R, mat.G, mat.B))
self.file.write("%s;;\n" % (mat.alpha))
@@ -609,7 +628,7 @@ template SkinWeights {\n\
self.file.write(" 1.0;\n")
self.file.write(" 1.0; 1.0; 1.0;;\n")
self.file.write(" 0.0; 0.0; 0.0;;\n")
- self.file.write(" TextureFilename {\n")
+ self.file.write(" TextureFilename {")
self.file.write(' "%s" ;'% (mat))
self.file.write(" }\n")
self.file.write(" }\n")
@@ -711,47 +730,45 @@ template SkinWeights {\n\
-
+
+
#***********************************************
#WRITE ANIMATION KEYS
#***********************************************
def writeAnimation(self,arm_ob):
+ global mat_dict
arm = arm_ob.getData()
act_list = arm_ob.getAction()
ip = act_list.getAllChannelIpos()
- for bon in arm.getBones() :
+ for bon in arm.bones.values() :
point_list = []
+ name = bon.name
+ name_f = name.replace(".", "")
try :
ip_bon_channel = ip[bon.name]
ip_bon_name = ip_bon_channel.getName()
-
+
ip_bon = Blender.Ipo.Get(ip_bon_name)
poi = ip_bon.getCurves()
+
for po in poi[3].getPoints():
a = po.getPoints()
point_list.append(int(a[0]))
- point_list.pop(0)
-
-
+ #point_list.pop(0)
+
self.file.write(" Animation { \n")
- self.file.write(" {%s}\n" %(bon.getName()))
+ self.file.write(" {%s}\n" %(name_f))
self.file.write(" AnimationKey { \n")
self.file.write(" 4;\n")
- self.file.write(" %s; \n" % (len(point_list)+1))
-
- self.file.write(" %s;" % (1))
- self.file.write("16;")
- mat = self.writeCombineMatrix(bon)
- self.writeFrames(mat)
- self.file.write(",\n")
+ self.file.write(" %s; \n" % (len(point_list)))
for fr in point_list:
+ mat = self.writeAnimCombineMatrix(bon,fr)
+
self.file.write(" %s;" % (fr))
self.file.write("16;")
- Blender.Set('curframe',fr)
- mat_new = self.writeCombineAnimMatrix(bon)
- self.writeFrames(mat_new)
+ self.writeFrames(mat)
if fr == point_list[len(point_list)-1]:
self.file.write(";\n")
@@ -864,8 +881,8 @@ arg = __script__['arg']
if arg == 'exportsel':
fname = Blender.sys.makename(ext = ".x")
- Blender.Window.FileSelector(my_callback_sel, "Export DirectX8", fname)
+ Blender.Window.FileSelector(my_callback_sel, "Export DirectX", fname)
else:
fname = Blender.sys.makename(ext = ".x")
- Blender.Window.FileSelector(my_callback, "Export DirectX8", fname)
-
+ Blender.Window.FileSelector(my_callback, "Export DirectX", fname)
+ \ No newline at end of file