[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54399] trunk/blender/source/blender/ collada: fixed: [#34080] import of COLLADA breaks on '#' in filepath

Gaia Clary gaia.clary at machinimatrix.org
Sat Feb 9 01:24:00 CET 2013


Revision: 54399
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54399
Author:   gaiaclary
Date:     2013-02-09 00:23:59 +0000 (Sat, 09 Feb 2013)
Log Message:
-----------
fixed: [#34080] import of COLLADA breaks on '#' in filepath

Modified Paths:
--------------
    trunk/blender/source/blender/collada/DocumentImporter.cpp
    trunk/blender/source/blender/collada/collada_utils.cpp
    trunk/blender/source/blender/collada/collada_utils.h

Modified: trunk/blender/source/blender/collada/DocumentImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/DocumentImporter.cpp	2013-02-08 19:52:02 UTC (rev 54398)
+++ trunk/blender/source/blender/collada/DocumentImporter.cpp	2013-02-09 00:23:59 UTC (rev 54399)
@@ -131,7 +131,8 @@
 	// deselect all to select new objects
 	BKE_scene_base_deselect_all(CTX_data_scene(mContext));
 
-	if (!root.loadDocument(mFilename)) {
+	const std::string encodedFilename = bc_url_encode(mFilename);
+	if (!root.loadDocument(encodedFilename)) {
 		fprintf(stderr, "COLLADAFW::Root::loadDocument() returned false on 1st pass\n");
 		return false;
 	}
@@ -146,7 +147,7 @@
 	COLLADASaxFWL::Loader loader2;
 	COLLADAFW::Root root2(&loader2, this);
 	
-	if (!root2.loadDocument(mFilename)) {
+	if (!root2.loadDocument(encodedFilename)) {
 		fprintf(stderr, "COLLADAFW::Root::loadDocument() returned false on 2nd pass\n");
 		return false;
 	}
@@ -1235,3 +1236,4 @@
 	return false;
 
 }
+

Modified: trunk/blender/source/blender/collada/collada_utils.cpp
===================================================================
--- trunk/blender/source/blender/collada/collada_utils.cpp	2013-02-08 19:52:02 UTC (rev 54398)
+++ trunk/blender/source/blender/collada/collada_utils.cpp	2013-02-09 00:23:59 UTC (rev 54399)
@@ -286,3 +286,20 @@
 	Mesh *me = (Mesh *)ob->data;
 	return CustomData_get_active_layer_index(&me->fdata, CD_MTFACE);
 }
+
+std::string bc_url_encode(std::string data) {
+	/* XXX We probably do not need to do a full encoding.
+	   But in case that is necessary,then it can be added here.
+	*/
+	return bc_replace_string(data,"#", "%23");
+}
+
+std::string bc_replace_string(std::string data, const std::string& pattern,
+                          const std::string& replacement) {
+    size_t pos = 0;
+    while((pos = data.find(pattern, pos)) != std::string::npos) {
+         data.replace(pos, pattern.length(), replacement);
+         pos += replacement.length();
+    }
+    return data;
+}
\ No newline at end of file

Modified: trunk/blender/source/blender/collada/collada_utils.h
===================================================================
--- trunk/blender/source/blender/collada/collada_utils.h	2013-02-08 19:52:02 UTC (rev 54398)
+++ trunk/blender/source/blender/collada/collada_utils.h	2013-02-09 00:23:59 UTC (rev 54399)
@@ -77,4 +77,7 @@
 extern bool bc_is_root_bone(Bone *aBone, bool deform_bones_only);
 extern int  bc_get_active_UVLayer(Object *ob);
 
+extern std::string bc_replace_string(std::string data, const std::string& pattern, const std::string& replacement); 
+extern std::string bc_url_encode(std::string data); 
+
 #endif




More information about the Bf-blender-cvs mailing list