[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50047] branches/soc-2012-bratwurst/source /blender: - bf_assimp, bf_fbx: make assimp and fbx import settings accessible from the UI / add them to SRNA.

Alexander Gessler alexander.gessler at gmx.net
Mon Aug 20 16:28:21 CEST 2012


Revision: 50047
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50047
Author:   aramis_acg
Date:     2012-08-20 14:28:21 +0000 (Mon, 20 Aug 2012)
Log Message:
-----------
- bf_assimp, bf_fbx: make assimp and fbx import settings accessible from the UI / add them to SRNA.

Modified Paths:
--------------
    branches/soc-2012-bratwurst/source/blender/assimp/MeshImporter.cpp
    branches/soc-2012-bratwurst/source/blender/assimp/SceneImporter.cpp
    branches/soc-2012-bratwurst/source/blender/assimp/bassimp.cpp
    branches/soc-2012-bratwurst/source/blender/assimp/bassimp.h
    branches/soc-2012-bratwurst/source/blender/fbx/bfbx.cpp
    branches/soc-2012-bratwurst/source/blender/fbx/bfbx.h
    branches/soc-2012-bratwurst/source/blender/windowmanager/intern/wm_operators.c

Modified: branches/soc-2012-bratwurst/source/blender/assimp/MeshImporter.cpp
===================================================================
--- branches/soc-2012-bratwurst/source/blender/assimp/MeshImporter.cpp	2012-08-20 14:03:19 UTC (rev 50046)
+++ branches/soc-2012-bratwurst/source/blender/assimp/MeshImporter.cpp	2012-08-20 14:28:21 UTC (rev 50047)
@@ -63,7 +63,9 @@
 	// XXX copypaste from collada
 	mesh->id.us--; // is already 1 here, but will be set later in set_mesh
 
-	reverseMatIDs.reserve(16);
+	if(scene_imp.get_settings().read_materials) {
+		reverseMatIDs.reserve(16);
+	}
 }
 
 
@@ -118,9 +120,11 @@
 	// give up ownership of the mesh object
 	mesh = NULL;
 
-	// assign materials
-	for (size_t i = 0; i < reverseMatIDs.size(); ++i) {
-		assign_material(ob,scene_imp.get_material(reverseMatIDs[i]).get_material(),ob->totcol + 1, BKE_MAT_ASSIGN_OBDATA);
+	if(scene_imp.get_settings().read_materials) {
+		// assign materials
+		for (size_t i = 0; i < reverseMatIDs.size(); ++i) {
+			assign_material(ob,scene_imp.get_material(reverseMatIDs[i]).get_material(),ob->totcol + 1, BKE_MAT_ASSIGN_OBDATA);
+		}
 	}
 
 	return ob;
@@ -449,6 +453,10 @@
 			}
 		}
 
+		if(!scene_imp.get_settings().read_materials) {
+			continue;
+		}
+
 		if (matIDs.find(m.mMaterialIndex) == matIDs.end()) {
 			matIDs[m.mMaterialIndex] = reverseMatIDs.size();
 			reverseMatIDs.push_back(m.mMaterialIndex);

Modified: branches/soc-2012-bratwurst/source/blender/assimp/SceneImporter.cpp
===================================================================
--- branches/soc-2012-bratwurst/source/blender/assimp/SceneImporter.cpp	2012-08-20 14:03:19 UTC (rev 50046)
+++ branches/soc-2012-bratwurst/source/blender/assimp/SceneImporter.cpp	2012-08-20 14:28:21 UTC (rev 50047)
@@ -136,6 +136,7 @@
 {
 	unsigned int flags = aiProcess_JoinIdenticalVertices;
 
+	// needed for AI_CONFIG_PP_SBP_REMOVE
 	if (settings.nolines) {
 		flags |= aiProcess_SortByPType;
 
@@ -185,7 +186,9 @@
 	handle_coordinate_space();
 	handle_scale();
 
-	convert_materials();
+	if(settings.read_materials) {
+		convert_materials();
+	}
 
 	// check if there are bones present because this changes
 	// the way how the assimp node hierarchy is imported.
@@ -198,10 +201,16 @@
 	}
 
 	convert_node(*scene->mRootNode,NULL);
-	convert_armature();
-	convert_skin();
-	convert_animations();
 
+	if(settings.read_armature) {
+		convert_armature();
+		convert_skin();
+	}
+
+	if(settings.read_animations) {
+		convert_animations();
+	}
+
 	verbose("conversion to blender Scene ok");
 	return true;
 }
@@ -391,7 +400,7 @@
 	}
 
 	// attach lights (these are located in the global aiScene and referenced by name)
-	if(scene->mNumLights) {
+	if(scene->mNumLights && settings.read_lights) {
 		for (unsigned int i = 0, c = scene->mNumLights; i < c; ++i) {
 			const aiLight* const light = scene->mLights[i];
 
@@ -407,7 +416,7 @@
 	}
 
 	// attach cameras (these are located in the global aiScene and referenced by name)
-	if(scene->mNumCameras) {
+	if(scene->mNumCameras && settings.read_cameras) {
 		for (unsigned int i = 0, c = scene->mNumCameras; i < c; ++i) {
 			const aiCamera* const cam = scene->mCameras[i];
 

Modified: branches/soc-2012-bratwurst/source/blender/assimp/bassimp.cpp
===================================================================
--- branches/soc-2012-bratwurst/source/blender/assimp/bassimp.cpp	2012-08-20 14:03:19 UTC (rev 50046)
+++ branches/soc-2012-bratwurst/source/blender/assimp/bassimp.cpp	2012-08-20 14:28:21 UTC (rev 50047)
@@ -84,6 +84,23 @@
 	}
 
 
+	void bassimp_import_set_defaults(bassimp_import_settings* defaults_out)
+	{
+		assert(defaults_out);
+
+		defaults_out->enableAssimpLog = 0;
+		defaults_out->reports = NULL;
+		defaults_out->nolines = 0;
+		defaults_out->triangulate = 0;
+
+		defaults_out->read_animations = 1;
+		defaults_out->read_armature = 1;
+		defaults_out->read_cameras = 1;
+		defaults_out->read_lights = 1;
+		defaults_out->read_materials = 1;
+	}
+
+
 	int bassimp_import(bContext *C, const char *filepath, const bassimp_import_settings* settings)
 	{
 		assert(C);
@@ -91,10 +108,7 @@
 
 		bassimp_import_settings defaults;
 		if (!settings) {
-			defaults.enableAssimpLog = 0;
-			defaults.reports = NULL;
-			defaults.nolines = 0;
-			defaults.triangulate = 0;
+			bassimp_import_set_defaults(&defaults);
 			settings = &defaults;
 		}
 

Modified: branches/soc-2012-bratwurst/source/blender/assimp/bassimp.h
===================================================================
--- branches/soc-2012-bratwurst/source/blender/assimp/bassimp.h	2012-08-20 14:03:19 UTC (rev 50046)
+++ branches/soc-2012-bratwurst/source/blender/assimp/bassimp.h	2012-08-20 14:28:21 UTC (rev 50047)
@@ -66,11 +66,23 @@
 		 * the scene is scaled to */
 		float maximum_size;
 
+
+		/* flags to specify which parts of the scene to import */
+		int read_animations;
+		int read_cameras;
+		int read_lights;
+		int read_armature;
+		int read_materials;
+
 	} bassimp_import_settings;
 
 
+	/* obtain default settings for bassimp_import() */
+	void bassimp_import_set_defaults(bassimp_import_settings* defaults_out);
 
-	/* import a scene using assimp. settings are optional.
+
+	/* import a scene using assimp. settings are optional, bassimp_import_set_defaults
+	 * will be used if NULL is specified.
 	 * returns 1 on success, 0 on error
 	 */
 	int bassimp_import(bContext *C, const char *filepath, const bassimp_import_settings* settings);

Modified: branches/soc-2012-bratwurst/source/blender/fbx/bfbx.cpp
===================================================================
--- branches/soc-2012-bratwurst/source/blender/fbx/bfbx.cpp	2012-08-20 14:03:19 UTC (rev 50046)
+++ branches/soc-2012-bratwurst/source/blender/fbx/bfbx.cpp	2012-08-20 14:28:21 UTC (rev 50047)
@@ -34,10 +34,23 @@
 #include "BKE_scene.h"
 #include "BKE_context.h"
 
-/* make dummy file */
 #include "BLI_fileops.h"
 #include "BLI_path_util.h"
 
+
+	void bfbx_import_set_defaults(bfbx_import_settings* defaults_out)
+	{
+		assert(defaults_out);
+
+		bassimp_import_set_defaults(&defaults_out->assimp_settings);
+
+		defaults_out->all_geo_layers = 1;
+		defaults_out->drop_dummy_anims = 1;
+		defaults_out->preserve_pivot_nodes = 0;
+		defaults_out->strict_mode = 0;
+	}
+
+
 	int bfbx_import(bContext *C, const char *filepath, const bfbx_import_settings* settings)
 	{
 		assert(C);
@@ -45,12 +58,8 @@
 
 		bfbx_import_settings defaults;
 
-		defaults.assimp_settings.enableAssimpLog = 0;
-		defaults.assimp_settings.reports = NULL;
-		defaults.assimp_settings.nolines = 0;
-		defaults.assimp_settings.triangulate = 0;
-
 		if(!settings) {
+			bfbx_import_set_defaults(&defaults);
 			settings = &defaults;
 		}
 

Modified: branches/soc-2012-bratwurst/source/blender/fbx/bfbx.h
===================================================================
--- branches/soc-2012-bratwurst/source/blender/fbx/bfbx.h	2012-08-20 14:03:19 UTC (rev 50046)
+++ branches/soc-2012-bratwurst/source/blender/fbx/bfbx.h	2012-08-20 14:28:21 UTC (rev 50047)
@@ -59,7 +59,12 @@
 	} bfbx_import_settings;
 
 
-	/* import/export functions
+	/* obtain default settings for bfbx_import() */
+	void bfbx_import_set_defaults(bfbx_import_settings* defaults_out);
+
+
+	/* import/export functions, settings are optional, bfbx_import_set_defaults()
+	 * will be used to get default settings if NULL is specified.
 	 * both return 1 on success, 0 on error
 	 */
 	int bfbx_import(bContext *C, const char *filepath, const bfbx_import_settings* settings);

Modified: branches/soc-2012-bratwurst/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- branches/soc-2012-bratwurst/source/blender/windowmanager/intern/wm_operators.c	2012-08-20 14:03:19 UTC (rev 50046)
+++ branches/soc-2012-bratwurst/source/blender/windowmanager/intern/wm_operators.c	2012-08-20 14:28:21 UTC (rev 50047)
@@ -2205,10 +2205,20 @@
 	RNA_string_get(op->ptr, "filepath", filename);
 
 	settings.reports = op->reports;
-	settings.triangulate = 0;
-	settings.nolines = 0;
-	settings.enableAssimpLog = 1;
 
+	settings.enableAssimpLog = RNA_boolean_get(op->ptr, "enable_log");
+	settings.triangulate = RNA_boolean_get(op->ptr, "triangulate");
+	settings.nolines = !RNA_boolean_get(op->ptr, "read_lines");
+
+	settings.read_animations = RNA_boolean_get(op->ptr, "read_animations");
+	settings.read_armature = RNA_boolean_get(op->ptr, "read_armature");
+	settings.read_lights = RNA_boolean_get(op->ptr, "read_lights");
+	settings.read_cameras = RNA_boolean_get(op->ptr, "read_cameras");
+	settings.read_materials = RNA_boolean_get(op->ptr, "read_materials");
+
+	settings.unit_scaling = RNA_boolean_get(op->ptr, "scale_to_fit");
+	settings.maximum_size = RNA_float_get(op->ptr, "scale_to_fit_extents");
+
 	if (bassimp_import(C, filename, &settings)) {
 		return OPERATOR_FINISHED;
 	}
@@ -2217,6 +2227,46 @@
 	return OPERATOR_FINISHED;
 }
 
+/* utility function used by WM_OT_assimp_import and WM_OT_fbx_import */
+static void def_assimp_rna_props(StructRNA* srna)
+{
+	RNA_def_boolean(srna, "enable_log", 1, "Import Logging", 
+		"Show Open Asset Import Library's log in Blender");
+
+	RNA_def_boolean(srna, "triangulate", 0, "Triangulate",
+		"Run Open Asset Import Library's builtin triangulation");
+
+	RNA_def_boolean(srna, "scale_to_fit", 0, "Scale To Fit",
+		"Scale imported scene to fit into a cube of the given extents");
+
+	RNA_def_float(srna, "scale_to_fit_extents", 
+		1.0f, 
+		0.0f, 
+		FLT_MAX, 
+		"Maximum Extents",
+		"If Scale-To-Fit is checked, specifies the extents the scene will be fitted into",
+		0.0f, 100.0f);
+
+	RNA_def_boolean(srna, "read_lines", 0, "Import Lines",
+		"Import single lines not connected to any polygons");
+
+	RNA_def_boolean(srna, "read_animations", 1, "Import Animations",
+		"Import animations");
+
+	RNA_def_boolean(srna, "read_cameras", 1, "Import Cameras",
+		"Import cameras and camera settings");
+
+	RNA_def_boolean(srna, "read_lights", 1, "Import Lights",
+		"Import light sources");
+
+	RNA_def_boolean(srna, "read_armature", 1, "Import Armature",
+		"Import armature and deform groups");
+
+	RNA_def_boolean(srna, "read_materials", 1, "Import Materials",
+		"Import materials and material assignments, if not checked a default material will be used");
+}
+
+
 static void WM_OT_assimp_import(wmOperatorType *ot)
 {
 	ot->name = "Import Open Asset Import Library (assimp)";
@@ -2228,6 +2278,7 @@
 	ot->poll = WM_operator_winactive;
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list