Revision: 16323
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16323
Author:   migius
Date:     2008-09-01 01:30:42 +0200 (Mon, 01 Sep 2008)

Log Message:
-----------
collada 1.4 importer/exporter - some improvements:
 - added support for import IPOs interpolation type: LINEAR,BEZIER
 - include patch jointVertexWeight from Dmitri: 
http://projects.blender.org/tracker/index.php?func=detail&aid=17427
 - non-armature-animation export/import seams to work
 - still buggy: armature-position and armature-animation export&import

Modified Paths:
--------------
    trunk/blender/release/scripts/bpymodules/colladaImEx/collada.py
    trunk/blender/release/scripts/bpymodules/colladaImEx/helperObjects.py
    trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py

Modified: trunk/blender/release/scripts/bpymodules/colladaImEx/collada.py
===================================================================
--- trunk/blender/release/scripts/bpymodules/colladaImEx/collada.py     
2008-08-31 21:53:39 UTC (rev 16322)
+++ trunk/blender/release/scripts/bpymodules/colladaImEx/collada.py     
2008-08-31 23:30:42 UTC (rev 16323)
@@ -28,6 +28,8 @@
 from cutils import *
 from datetime import *
 
+debprn = 0 #False #--- print debug "print 'deb: ..."
+
 # The number of decimals to export floats to
 ROUND = 5
 
@@ -483,11 +485,11 @@
                self.target = xmlUtils.ReadAttribute(xmlNode, DaeSyntax.TARGET)
 
        def SaveToXml(self, daeDocument):
-#              if debprn: print 'deb:DaeChannel() self.source=', self.source 
#-------
-#              if debprn: print 'deb:DaeChannel() self.target=', self.target 
#-------
+               if debprn: print 'deb:DaeChannel() self.source=', self.source 
#-------
+               if debprn: print 'deb:DaeChannel() self.target=', self.target 
#-------
                node = super(DaeChannel, self).SaveToXml(daeDocument)
-#org           SetAttribute(node, DaeSyntax.SOURCE, 
StripString('#'+self.source.id))
-               SetAttribute(node, DaeSyntax.SOURCE, 
StripString('#'+self.source))
+               SetAttribute(node, DaeSyntax.SOURCE, 
StripString('#'+self.source.id))
+               ##SetAttribute(node, DaeSyntax.SOURCE, 
StripString('#'+self.source))
                SetAttribute(node, DaeSyntax.TARGET, self.target)
                return node
 
@@ -3503,4 +3505,4 @@
                                for daeTechnique in daeExtra.techniques:
                                        if daeTechnique.profile == 'Blender':
                                                return daeTechnique
-       return None
+       return None
\ No newline at end of file

Modified: trunk/blender/release/scripts/bpymodules/colladaImEx/helperObjects.py
===================================================================
--- trunk/blender/release/scripts/bpymodules/colladaImEx/helperObjects.py       
2008-08-31 21:53:39 UTC (rev 16322)
+++ trunk/blender/release/scripts/bpymodules/colladaImEx/helperObjects.py       
2008-08-31 23:30:42 UTC (rev 16323)
@@ -26,7 +26,7 @@
 import collada
 from Blender.Mathutils import *
 
-debprn = False #--- print debug "print 'deb: ..."
+debprn = 0 #False #--- print debug "print 'deb: ..."
 
 class Armature(object):
        # static vars
@@ -219,6 +219,9 @@
                                        types.append(Blender.Object.Pose.LOC)
                                elif ta[0] == collada.DaeSyntax.ROTATE and not 
Blender.Object.Pose.ROT in types:
                                        types.append(Blender.Object.Pose.ROT)
+                               #TODO: check if scale correct implemented
+                               elif ta[0] == collada.DaeSyntax.SCALE and not 
Blender.Object.Pose.SCALE in types:
+                                       types.append(Blender.Object.Pose.SCALE)
                return types
 
        def GetType(self, daeNode, target):
@@ -237,11 +240,16 @@
                                targetId = targetArray[1]
                                # Get the animationInfo object for this node 
(or create a new one)
                                animation = cls._animations.setdefault(nodeId, 
AnimationInfo(nodeId))
+                               #if debprn: print 'deb:helperObj.py:class 
AnimationInfo CreateAnimations() dir(animation)',  dir(animation) #----------
 
                                # loop trough all samplers
                                sampler = None
+                               if debprn: print 'deb:helperObj.py:class 
AnimationInfo CreateAnimations() \ndeb: channel.source= ',  channel.source 
#----------
                                for s in daeAnimation.samplers:
-                                       if s.id == channel.source[1:]:
+                                       #if debprn: print 'deb: sampler.id      
  = ', s.id #----------
+                                       #if debprn: print 'deb: 
channel.source[1:]= ', channel.source[1:] #----------
+#org                                   if s.id == channel.source[1:]:
+                                       if s.id == channel.source:
                                                sampler = s
 
                                # Get the values for all the inputs
@@ -249,18 +257,41 @@
                                        input = sampler.GetInput("INPUT")
                                        inputSource = 
daeAnimation.GetSource(input.source)
                                        if 
inputSource.techniqueCommon.accessor.HasParam("TIME") and 
len(inputSource.techniqueCommon.accessor.params) == 1:
+                                               if debprn: print 'deb: DDDDD 
getting target' #----------
                                                output = 
sampler.GetInput("OUTPUT")
                                                outputSource = 
daeAnimation.GetSource(output.source)
                                                outputAccessor = 
outputSource.techniqueCommon.accessor
                                                accessorCount = 
outputAccessor.count
                                                accessorStride = 
outputAccessor.stride
+                                               interpolations = 
sampler.GetInput("INTERPOLATION")
+                                               interpolationsSource = 
daeAnimation.GetSource(interpolations.source)
+                                               if 0: #because probably 
interpolationsAccessor is identical to outputAccessor
+                                                       interpolationsAccessor 
= interpolationsSource.techniqueCommon.accessor
+                                                       accessorCount = 
interpolationsAccessor.count
+                                                       accessorStride = 
interpolationsAccessor.stride
+
+                                               if debprn: print 'deb: 
outputSource.source.data: ',  outputSource.source.data #----------
+                                               #if debprn: print 'deb: 
dir(outputAccessor.params): ',  dir(outputAccessor.params) #----------
+                                               #if debprn: print 'deb: 
dir(outputAccessor.params[0]): ',  str(outputAccessor.params[0]) #----------
                                                times = [x*fps for x in 
inputSource.source.data]
-
+                                               if debprn: print 'deb: times=', 
times #---------
                                                for timeIndex in 
range(len(times)):
                                                        time = 
animation.times.setdefault(times[timeIndex], dict())
                                                        target = 
time.setdefault(targetId, dict())
+                                                       #interp = 
time.setdefault(targetId, dict())
+                                                       #if debprn: print 'deb: 
accessorStride=', accessorStride #---------
+                                                       value = []
                                                        for j in 
range(accessorStride):
-                                                               
target[outputAccessor.params[j]] = 
outputSource.source.data[timeIndex*accessorStride + j]
+                                                               #if debprn: 
print 'deb: timeIndex,j,data=',timeIndex, j, 
outputSource.source.data[timeIndex*accessorStride + j] #---------
+                                                               #if debprn: 
print 'deb: outputAccessor.params[j]=',outputAccessor.params[j] #---------
+                                                               
#target[outputAccessor.params[j]] = 
outputSource.source.data[timeIndex*accessorStride + j]
+                                                               
value.append(outputSource.source.data[timeIndex*accessorStride + j])
+                                                       if debprn: print 'deb: 
value=', value #---------
+                                                       
target[outputAccessor.params[0]] = value
+                                                       
#interp[outputAccessor.params[j]] = 
interpolationsSource.source.data[timeIndex*accessorStride + j]
+                                                       if debprn: print 'deb: 
time=', time #---------
+                                                       if debprn: print 'deb: 
target=', target #---------
+                                       #if debprn: print 'deb:helperObj.py: X 
X X X X X X X X class AnimationInfo CreateAnimations() animation=',  animation 
#----------
 
        CreateAnimations = classmethod(CreateAnimations)
 

Modified: trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py
===================================================================
--- trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py  
2008-08-31 21:53:39 UTC (rev 16322)
+++ trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py  
2008-08-31 23:30:42 UTC (rev 16323)
@@ -24,6 +24,11 @@
 # --------------------------------------------------------------------------
 
 # History
+# 2008.08.31 by migius:
+# - added support for import IPOs interpolation type: LINEAR,BEZIER
+# - include patch jointVertexWeight from Dmitri: 
http://projects.blender.org/tracker/index.php?func=detail&aid=17427
+# - non-armature-animation export/import seams to work
+# - still buggy: armatures-position and armature-animation export&import
 # 2008.08.04 by migius:
 # - bugfix/refactor localTransformMatrix usage in hierarchies:
 #   it preserves local orientation for each child, so imported IPOs are 
correct working
@@ -37,7 +42,8 @@
 import datetime
 from helperObjects import *
 
-debprn = False #--- print debug "print 'deb: ..."
+debprn = 0 #--- print debug "print 'deb: ..."
+dmitri = 0 #switch for testing patch from Dmitri
 
 class Translator(object):
        isImporter = False
@@ -102,44 +108,6 @@
        scenesLibrary = None
        fps = 25
 
-       def CreateID(self, name, typeName=None):
-               if len(name) > 0 and not name[0].isalpha():
-                       name = "i"+name
-
-               if not (name in self.ids):
-                       self.ids.append(name)
-                       return name
-               else:
-                       tempName = name
-                       if not(typeName is None) and name.rfind(typeName) >= 0:
-                               # Check for existing number at the end?
-                               return self.IncrementString(tempName, True)
-                       else:
-                               # First check if no Blender Object exists with 
the name 'tempName + typeName'
-                               if (tempName + typeName) in 
self.allBlenderNames:
-                                       return self.IncrementString(tempName + 
typeName, True)
-                               else:
-                                       return self.CreateID(tempName+typeName, 
typeName)
-
-       def IncrementString(self, name, checkName):
-               tempName = name
-               if name.rfind('.') >= 0:
-                       while tempName[-1:].isdigit():
-                               tempName =      tempName[:-1]
-                       digitStr = name[-(len(name)-len(tempName)):]
-                       digit = 1
-                       if len(digitStr) > 0 and len(digitStr) != len(name):
-                               digit = int(digitStr)+1
-                       newName = tempName+str(digit).zfill(3)
-               else:
-                       newName = name+'.001'
-
-               if not (newName in self.ids) and (not checkName or not (newName 
in self.allBlenderNames)):
-                       self.ids.append(newName)
-                       return newName
-               else:
-                       return self.IncrementString(newName, checkName)
-
        def __init__(self, fileName):
                global waitingControllers, armatures
                # Keep track of the controller that are waiting to be applied
@@ -182,7 +150,45 @@
                self.inverseAxisTransformMatrix  = Matrix()
                self.orgAxiss = ["X","Y","Z"]
 
+       def CreateID(self, name, typeName=None):
+               if len(name) > 0 and not name[0].isalpha():
+                       name = "i"+name
 
+               if not (name in self.ids):
+                       self.ids.append(name)
+                       return name
+               else:
+                       tempName = name
+                       if not(typeName is None) and name.rfind(typeName) >= 0:
+                               # Check for existing number at the end?
+                               return self.IncrementString(tempName, True)
+                       else:
+                               # First check if no Blender Object exists with 
the name 'tempName + typeName'
+                               if (tempName + typeName) in 
self.allBlenderNames:
+                                       return self.IncrementString(tempName + 
typeName, True)
+                               else:
+                                       return self.CreateID(tempName+typeName, 
typeName)
+
+       def IncrementString(self, name, checkName):
+               tempName = name
+               if name.rfind('.') >= 0:
+                       while tempName[-1:].isdigit():
+                               tempName =      tempName[:-1]
+                       digitStr = name[-(len(name)-len(tempName)):]
+                       digit = 1
+                       if len(digitStr) > 0 and len(digitStr) != len(name):
+                               digit = int(digitStr)+1
+                       newName = tempName+str(digit).zfill(3)
+               else:
+                       newName = name+'.001'
+
+               if not (newName in self.ids) and (not checkName or not (newName 
in self.allBlenderNames)):
+                       self.ids.append(newName)
+                       return newName
+               else:
+                       return self.IncrementString(newName, checkName)
+
+
        def CreateNameForObject(self, name, replace, myType):
                if not replace:
                        return name
@@ -274,12 +280,11 @@
 
                self.inverseAxisTransformMatrix = 
Matrix(self.axisTransformMatrix).invert()
 
-
-

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to