Browse Source

FIX: ColladaLoader now skips empty init_from-Tags produced by C4D's heroic Collada exporter.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@496 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
aramis_acg 16 years ago
parent
commit
1b8c8561fd
3 changed files with 15 additions and 8 deletions
  1. 4 3
      code/ColladaLoader.cpp
  2. 10 4
      code/ColladaParser.cpp
  3. 1 1
      code/MD5Parser.cpp

+ 4 - 3
code/ColladaLoader.cpp

@@ -1270,15 +1270,16 @@ const aiString& ColladaLoader::FindFilenameForEffectTexture( const ColladaParser
 	// if this is an embedded texture image setup an aiTexture for it
 	if (imIt->second.mFileName.empty()) 
 	{
-		if (imIt->second.mImageData.empty()) 
+		if (imIt->second.mImageData.empty())  {
 			throw new ImportErrorException("Collada: Invalid texture, no data or file reference given");
+		}
 
 		aiTexture* tex = new aiTexture();
 
 		// setup format hint
-		if (imIt->second.mEmbeddedFormat.length() > 3)
+		if (imIt->second.mEmbeddedFormat.length() > 3) {
 			DefaultLogger::get()->warn("Collada: texture format hint is too long, truncating to 3 characters");
-
+		}
 		strncpy(tex->achFormatHint,imIt->second.mEmbeddedFormat.c_str(),3);
 
 		// and copy texture data

+ 10 - 4
code/ColladaParser.cpp

@@ -704,10 +704,16 @@ void ColladaParser::ReadImage( Collada::Image& pImage)
 			{
 				if (mFormat == FV_1_4_n) 
 				{
-					// element content is filename - hopefully
-					const char* sz = TestTextContent();
-					if (sz)pImage.mFileName = sz;
-					TestClosing( "init_from");
+					// FIX: C4D exporter writes empty <init_from/> tags
+					if (!mReader->isEmptyElement()) {
+						// element content is filename - hopefully
+						const char* sz = TestTextContent();
+						if (sz)pImage.mFileName = sz;
+						TestClosing( "init_from");
+					}
+					if (!pImage.mFileName.length()) {
+						pImage.mFileName = "unknown_texture";
+					}
 				}
 				else if (mFormat == FV_1_5_n) 
 				{

+ 1 - 1
code/MD5Parser.cpp

@@ -61,7 +61,7 @@ MD5Parser::MD5Parser(char* _buffer, unsigned int /*_fileSize*/ )
 	ai_assert(NULL != _buffer && 0 != _fileSize);
 
 	buffer = _buffer;
-	fileSize = fileSize;
+	fileSize = _fileSize;
 	lineNumber = 0;
 
 	DefaultLogger::get()->debug("MD5Parser begin");