[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32416] trunk/blender/source/blender/ collada/DocumentExporter.cpp: COLLADA

Nathan Letwory nathan at letworyinteractive.com
Mon Oct 11 14:38:52 CEST 2010


Revision: 32416
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32416
Author:   jesterking
Date:     2010-10-11 14:38:52 +0200 (Mon, 11 Oct 2010)

Log Message:
-----------
COLLADA

Export unit system and scale instead of hard-coded 1 decimeter.

Modified Paths:
--------------
    trunk/blender/source/blender/collada/DocumentExporter.cpp

Modified: trunk/blender/source/blender/collada/DocumentExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/DocumentExporter.cpp	2010-10-11 11:00:28 UTC (rev 32415)
+++ trunk/blender/source/blender/collada/DocumentExporter.cpp	2010-10-11 12:38:52 UTC (rev 32416)
@@ -69,6 +69,8 @@
 #include "BLI_string.h"
 #include "BLI_listbase.h"
 
+#include "RNA_access.h"
+
 #include "COLLADASWAsset.h"
 #include "COLLADASWLibraryVisualScenes.h"
 #include "COLLADASWNode.h"
@@ -901,19 +903,66 @@
 
 void DocumentExporter::exportCurrentScene(Scene *sce, const char* filename)
 {
+	PointerRNA sceneptr, unit_settings;
+	PropertyRNA *system, *scale;
+
 	clear_global_id_map();
 	
 	COLLADABU::NativeString native_filename =
 		COLLADABU::NativeString(std::string(filename));
 	COLLADASW::StreamWriter sw(native_filename);
 
-	// open <Collada>
+	// open <collada>
 	sw.startDocument();
 
 	// <asset>
 	COLLADASW::Asset asset(&sw);
-	// XXX ask blender devs about this?
-	asset.setUnit("decimetre", 0.1);
+
+	RNA_id_pointer_create(&(sce->id), &sceneptr);
+	unit_settings = RNA_pointer_get(&sceneptr, "unit_settings");
+	system = RNA_struct_find_property(&unit_settings, "system");
+	//scale = RNA_struct_find_property(&unit_settings, "scale_length");
+
+	std::string unitname = "meter";
+	float linearmeasure = 1.0f;
+
+	linearmeasure = RNA_float_get(&unit_settings, "scale_length");
+
+	switch(RNA_property_enum_get(&unit_settings, system)) {
+		case USER_UNIT_NONE:
+		case USER_UNIT_METRIC:
+			if(linearmeasure == 0.001f) {
+				unitname = "millimeter";
+			}
+			else if(linearmeasure == 0.01f) {
+				unitname = "centimeter";
+			}
+			else if(linearmeasure == 0.1f) {
+				unitname = "decimeter";
+			}
+			else if(linearmeasure == 1.0f) {
+				unitname = "meter";
+			}
+			else if(linearmeasure == 1000.0f) {
+				unitname = "kilometer";
+			}
+			break;
+		case USER_UNIT_IMPERIAL:
+			if(linearmeasure == 0.0254f) {
+				unitname = "inch";
+			}
+			else if(linearmeasure == 0.3048f) {
+				unitname = "foot";
+			}
+			else if(linearmeasure == 0.9144f) {
+				unitname = "yard";
+			}
+			break;
+		default:
+			break;
+	}
+
+	asset.setUnit(unitname, linearmeasure);
 	asset.setUpAxisType(COLLADASW::Asset::Z_UP);
 	// TODO: need an Author field in userpref
 	if(strlen(U.author) > 0) {





More information about the Bf-blender-cvs mailing list