Revision: 16638
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16638
Author:   migius
Date:     2008-09-20 18:30:14 +0200 (Sat, 20 Sep 2008)

Log Message:
-----------
collada importer
 - bugfix meshes with more than 16 materials: material index bigger than 15 
replaced with 15.

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

Modified: trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py
===================================================================
--- trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py  
2008-09-20 15:10:06 UTC (rev 16637)
+++ trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py  
2008-09-20 16:30:14 UTC (rev 16638)
@@ -1,3608 +1,3629 @@
-# --------------------------------------------------------------------------
-# Illusoft Collada 1.4 plugin for Blender
-# --------------------------------------------------------------------------
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# Copyright (C) 2006: Illusoft - [EMAIL PROTECTED]
-#    - 2008.08: multiple bugfixes by migius (AKA Remigiusz Fiedler)
-#
-# 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
-# the Free Software Foundation; either version 2 of the License,
-# or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ***** END GPL LICENCE BLOCK *****
-# --------------------------------------------------------------------------
-
-# 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
-# 2008.05.08 by migius: modif. for debug mode
-
-from cutils import *
-import collada
-import Blender
-from Blender.Mathutils import *
-import math
-import datetime
-from helperObjects import *
-
-debprn = 0 #--- print debug "print 'deb: ..."
-dmitri = 0 #switch for testing patch from Dmitri
-
-class Translator(object):
-       isImporter = False
-
-       def __init__(self, isImporter, version, debugM, fileName, 
_useTriangles, _usePolygons, _bakeMatrices, _exportSelection, _createNewScene, 
_clearScene, _lookAt, _exportPhysics, _exportCurrentScene, 
_exportRelativePaths, _useUV, _sampleAnimation, _onlyMainScene):
-               global __version__, debugMode, usePhysics, useTriangles, 
usePolygons, bakeMatrices, exportSelection, createNewScene, clearScene, lookAt, 
replaceNames, exportPhysics, exportCurrentScene, useRelativePaths, useUV, 
sampleAnimation, onlyMainScene
-               #if debprn: print 'deb:class_Translator isImporter=', 
isImporter #deb---------
-               __version__ = version
-               debugMode = debugM
-               usePhysics = None
-               useTriangles = _useTriangles
-               usePolygons = _usePolygons
-               bakeMatrices = _bakeMatrices
-               exportSelection = _exportSelection
-               createNewScene = _createNewScene
-               clearScene = _clearScene
-               lookAt = _lookAt
-               exportPhysics = _exportPhysics
-               usePhysics = _exportPhysics
-               exportCurrentScene = _exportCurrentScene
-               useRelativePaths = _exportRelativePaths
-               useUV = _useUV
-               sampleAnimation = _sampleAnimation
-               onlyMainScene= _onlyMainScene
-
-               replaceNames = clearScene
-
-               self.isImporter = isImporter
-               self.fileName = ''
-               #if debprn: print 'deb:class_Translator fileName=', fileName 
#deb---------
-               if self.isImporter:
-                       self.__Import(fileName)
-               else:
-                       self.__Export(fileName)
-
-       def __Import(self,fileName=''):
-               #if debprn: print 'deb:translator__Import fileName=', fileName 
#deb---------
-               documentTranslator = DocumentTranslator(fileName)
-               documentTranslator.Import(fileName)
-
-       def __Export(self,filename=''):
-               documentTranslator = DocumentTranslator(filename)
-               documentTranslator.Export(filename)
-
-
-class DocumentTranslator(object):
-       isImport = None
-       ids = []
-       sceneGraph = None
-
-       # Keep track of the layers on import
-       layers = None
-
-       cameraLibrary = None
-##       geometryLibrary = None
-       controllersLibrary = None
-       animationsLibrary = None
-##       materialLibrary = None
-       texturesLibrary = None
-       lampsLibrary = None
-       colladaDocument = None
-       scenesLibrary = None
-       fps = 25
-
-       def __init__(self, fileName):
-               global waitingControllers, armatures
-               # Keep track of the controller that are waiting to be applied
-               waitingControllers = dict()
-               # Keep track of the armatures created
-               armatures = dict()
-
-               self.isImport = False
-               self.scenesLibrary = ScenesLibrary(self)
-               self.sceneGraph = SceneGraph(self)
-               self.lampsLibrary = LampsLibrary(self)
-               self.colladaDocument = None
-               self.texturesLibrary = TexturesLibrary(self)
-               self.camerasLibrary = CamerasLibrary(self)
-               self.materialsLibrary = MaterialsLibrary(self)
-               self.meshLibrary = MeshLibrary(self)
-               self.animationsLibrary = AnimationsLibrary(self)
-               self.controllersLibrary = ControllersLibrary(self)
-
-               self.filename = None
-               self.filePath = ''
-
-
-               self.currentBScene = Blender.Scene.GetCurrent()
-
-               self.progressCount = 0.4
-               self.progressField = (1.0 - self.progressCount)
-               self.progressStep = 0.0
-               self.progressPartCount = 0.0
-
-               self.tMatOLD = Matrix()
-               self._zUpMatrix = Matrix()
-               self._yUpMatrix = Matrix(
-               [0,0,1,0],
-               [1,0,0,0],
-               [0,1,0,0],
-               [0,0,0,1])
-
-               self.axisTransformMatrix = Matrix()
-               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
-
-               if myType == 'object':
-                       try:
-                               ob = Blender.Object.Get(name)
-                               ob.name = 
self.CreateNameForObject(self.IncrementString(ob.name, False), True, 'object')
-                       except ValueError:
-                               pass
-               elif myType == 'mesh':
-                       try:
-                               mesh = Blender.Mesh.Get(name)
-                               if not mesh is None:
-                                       mesh.name = 
self.CreateNameForObject(self.IncrementString(mesh.name, False), True, 'mesh')
-                       except ValueError:
-                               pass
-               elif myType == 'armature':
-                       try:
-                               armature = Blender.Armature.Get(str(name))
-                               if not armature is None:
-                                       armature.name = 
self.CreateNameForObject(self.IncrementString(armature.name, False), True, 
'armature')
-                       except ValueError:
-                               pass
-               elif myType == 'camera':
-                       try:
-                               camera = Blender.Camera.Get(str(name))
-                               if not camera is None:
-                                       camera.name = 
self.CreateNameForObject(self.IncrementString(camera.name, False), True, 
'camera')
-                       except NameError:
-                               pass
-               elif myType == 'lamp':
-                       try:
-                               lamp = Blender.Lamp.Get(str(name))
-                               if not lamp is None:
-                                       lamp.name = 
self.CreateNameForObject(self.IncrementString(lamp.name, False), True, 'lamp')
-                       except NameError:
-                               pass
-
-               return name
-
-       def Import(self, fileName):
-               global debugMode, createNewScene
-               #if debprn: print 'deb:DocumentTranslator_Import fileName', 
fileName #deb---------
-               self.filename = fileName
-               self.filePath = Blender.sys.dirname(self.filename) + 
Blender.sys.sep
-               self.isImport = True
-               Blender.Window.EditMode(0)
-               Blender.Window.DrawProgressBar(0.0, 'Starting Import')
-
-               # Keep track of the 20 layers
-               self.layers = [None for x in range(20)]
-
-               if createNewScene:
-                       self.currentBScene = Blender.Scene.New('Scene')
-                       self.currentBScene.makeCurrent()
-               else:
-                       self.currentBScene = Blender.Scene.GetCurrent()
-
-               # Create a new Collada document
-               Blender.Window.DrawProgressBar(0.1, 'Get Collada Document')
-               self.colladaDocument = collada.DaeDocument(debugMode)
-
-               # Setup the libraries
-               
self.camerasLibrary.SetDaeLibrary(self.colladaDocument.camerasLibrary)
-               
self.lampsLibrary.SetDaeLibrary(self.colladaDocument.lightsLibrary)
-               
self.texturesLibrary.SetDaeLibrary(self.colladaDocument.imagesLibrary)
-               
self.materialsLibrary.SetDaeLibrary(self.colladaDocument.materialsLibrary)
-               
self.meshLibrary.SetDaeLibrary(self.colladaDocument.geometriesLibrary)
-               
self.animationsLibrary.SetDaeLibrary(self.colladaDocument.animationsLibrary)
-               
self.controllersLibrary.SetDaeLibrary(self.colladaDocument.controllersLibrary)
-
-               # Parse the COLLADA file
-               self.colladaDocument.LoadDocumentFromFile(fileName)
-
-               self.axiss = ["X", "Y", "Z"]
-               if self.colladaDocument.asset.upAxis == collada.DaeSyntax.Y_UP:
-                       self.tMatOLD[0][0] = 0
-                       self.tMatOLD[1][1] = 0
-                       self.tMatOLD[2][2] = 0
-                       self.tMatOLD[0][1] = 1
-                       self.tMatOLD[1][2] = 1
-                       self.tMatOLD[2][0] = 1
-                       self.axiss = ["Y", "Z", "X"]
-
-               if self.colladaDocument.asset.upAxis == collada.DaeSyntax.Y_UP:
-                       self.axisTransformMatrix = Matrix(self._yUpMatrix)
-                       self.axiss = ["Y", "Z", "X"]
-
-               self.inverseAxisTransformMatrix = 
Matrix(self.axisTransformMatrix).invert()
-
-               self.progressStep = 
self.progressField/(self.colladaDocument.GetItemCount()+1)
-
-               # Get the animation info
-               #TODO: for what is this good? (migius)
-               if 0:   animations = 
AnimationInfo.CreateAnimations(self.animationsLibrary, self.fps, self.axiss)
-

@@ 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