[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11497] trunk/blender/release/scripts/ bpymodules/colladaImEx/translator.py: hmm just tested and with it removed it seems to fail so adding it back for now until i get more clarification from the Collada devs ...

Tom Musgrove LetterRip at gmail.com
Mon Aug 6 00:45:36 CEST 2007


Revision: 11497
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11497
Author:   letterrip
Date:     2007-08-06 00:45:25 +0200 (Mon, 06 Aug 2007)

Log Message:
-----------
hmm just tested and with it removed it seems to fail so adding it back for now until i get more clarification from the Collada devs...

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

Added: trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py
===================================================================
--- trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py	                        (rev 0)
+++ trunk/blender/release/scripts/bpymodules/colladaImEx/translator.py	2007-08-05 22:45:25 UTC (rev 11497)
@@ -0,0 +1,3448 @@
+# --------------------------------------------------------------------------
+# Illusoft Collada 1.4 plugin for Blender
+# --------------------------------------------------------------------------
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# Copyright (C) 2006: Illusoft - colladablender at illusoft.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
+# 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 *****
+# --------------------------------------------------------------------------
+
+from cutils import *
+import collada
+import Blender
+from Blender.Mathutils import *
+import math
+import datetime
+from helperObjects import *
+
+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
+		__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 self.isImporter:
+			self.__Import(fileName)
+		else:
+			self.__Export(fileName)
+	
+	def __Import(self,fileName=''):
+		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 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
+		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 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
+		
+		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
+		animations = AnimationInfo.CreateAnimations(self.animationsLibrary, self.fps, self.axiss)
+		
+		# Read the COLLADA stucture and build the scene in Blender.
+		Blender.Window.DrawProgressBar(0.4, 'Translate Collada 2 Blender')
+		self.sceneGraph.LoadFromCollada(self.colladaDocument.visualScenesLibrary.items, self.colladaDocument.scene)
+		
+		self.Progress()
+	
+	def CalcVector(self, vector):
+		if self.colladaDocument.asset.upAxis == collada.DaeSyntax.Y_UP:
+			return Vector(vector[2], vector[0], vector[1])
+		else:
+			return vector
+
+	
+	# Calculate the correct transform matrix dependent of the current UP axis.
+	# When Up axis is Yup:
+	# orgTrans * vecYup = newVecYup
+	# newTrans * vecZup = newVecZup
+	# vecZup = tMat * vecYUp
+	# vecYup = invtMat * vecZup
+	# newVecYup = orgTrans * vecYup = orgTrans * (invtMat * vecZup)
+	# newVecZup = tMat * newVecYup = tMat * (orgTrans * (invtMat * vecZup))
+	# newTrans = tMat * orgTrans * invtMat
+	def CalcMatrix(self, matrix):
+		if self.colladaDocument.asset.upAxis == collada.DaeSyntax.Y_UP:
+			return self.axisTransformMatrix * matrix * self.inverseAxisTransformMatrix 
+		else:
+			return matrix
+

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list