Browse Source

Temporary fix: collada loader strips 'file://' from paths now.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@289 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
aramis_acg 16 years ago
parent
commit
84f8e3c68c
2 changed files with 21 additions and 1 deletions
  1. 18 1
      code/ColladaLoader.cpp
  2. 3 0
      code/ColladaLoader.h

+ 18 - 1
code/ColladaLoader.cpp

@@ -382,6 +382,23 @@ const aiString& ColladaLoader::FindFilenameForEffectTexture( const ColladaParser
 		throw new ImportErrorException( boost::str( boost::format( "Unable to resolve effect texture entry \"%s\", ended up at ID \"%s\".") % pName % name));
 		throw new ImportErrorException( boost::str( boost::format( "Unable to resolve effect texture entry \"%s\", ended up at ID \"%s\".") % pName % name));
 
 
 	static aiString result;
 	static aiString result;
-	result.Set( imIt->second.mFileName);
+	result.Set( imIt->second.mFileName );
+	ConvertPath(result);
 	return result;
 	return result;
 }
 }
+
+// ------------------------------------------------------------------------------------------------
+// Convert a path read from a collada file to the usual representation
+void ColladaLoader::ConvertPath (aiString& ss)
+{
+	// TODO: collada spec, p 22. Handle URI correctly.
+	// For the moment we're just stripping the file:// away to make it work.
+	// Windoes doesn't seem to be able to find stuff like
+	// 'file://..\LWO\LWO2\MappingModes\earthSpherical.jpg'
+	if (0 == ::strncmp(ss.data,"file://",7)) 
+	{
+		ss.length -= 7;
+		::memmove(ss.data,ss.data+7,ss.length);
+		ss.data[ss.length] = '\0';
+	}
+}

+ 3 - 0
code/ColladaLoader.h

@@ -121,6 +121,9 @@ protected:
 	/** Resolves the texture name for the given effect texture entry */
 	/** Resolves the texture name for the given effect texture entry */
 	const aiString& FindFilenameForEffectTexture( const ColladaParser& pParser, const Collada::Effect& pEffect, const std::string& pName);
 	const aiString& FindFilenameForEffectTexture( const ColladaParser& pParser, const Collada::Effect& pEffect, const std::string& pName);
 
 
+	/** Converts a path read from a collada file to the usual representation */
+	void ConvertPath (aiString& ss);
+
 protected:
 protected:
 	/** Filename, for a verbose error message */
 	/** Filename, for a verbose error message */
 	std::string mFileName;
 	std::string mFileName;