[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35567] trunk/blender/source/blender: api function added for [#26481] Export to X3D of IndexedFaceSet should use X3D 's DEF USE mechanism

Campbell Barton ideasman42 at gmail.com
Wed Mar 16 09:53:36 CET 2011


Revision: 35567
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35567
Author:   campbellbarton
Date:     2011-03-16 08:53:35 +0000 (Wed, 16 Mar 2011)
Log Message:
-----------
api function added for [#26481] Export to X3D of IndexedFaceSet should use X3D 's DEF USE mechanism

Object.is_modified(scene, 'PREVIEW') function for python exporters to check if any modifiers or shape keys are applied (weather the original mesh can be used for exporters).

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_object.h
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/makesrna/intern/rna_object_api.c

Modified: trunk/blender/source/blender/blenkernel/BKE_object.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_object.h	2011-03-16 01:16:43 UTC (rev 35566)
+++ trunk/blender/source/blender/blenkernel/BKE_object.h	2011-03-16 08:53:35 UTC (rev 35567)
@@ -136,6 +136,8 @@
 // void object_delete_ptcache(struct Object *ob, int index);
 struct KeyBlock *object_insert_shape_key(struct Scene *scene, struct Object *ob, const char *name, int from_mix);
 
+int object_is_modified(struct Scene *scene, struct Object *ob);
+
 void object_camera_matrix(
 		struct RenderData *rd, struct Object *camera, int winx, int winy, short field_second,
 		float winmat[][4], struct rctf *viewplane, float *clipsta, float *clipend, float *lens, float *ycor,

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2011-03-16 01:16:43 UTC (rev 35566)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2011-03-16 08:53:35 UTC (rev 35567)
@@ -3061,3 +3061,24 @@
 	else									 return NULL;
 }
 
+/* most important if this is modified it should _always_ return True, in certain
+ * cases false positives are hard to avoid (shape keys for eg)
+ */
+int object_is_modified(Scene *scene, Object *ob)
+{
+	int flag= 0;
+
+	if(ob_get_key(ob)) {
+		flag |= eModifierMode_Render | eModifierMode_Render;
+	}
+	else {
+		ModifierData *md;
+		/* cloth */
+		for(md=modifiers_getVirtualModifierList(ob); md && (flag != (eModifierMode_Render | eModifierMode_Realtime)); md=md->next) {
+			if((flag & eModifierMode_Render) == 0	&& modifier_isEnabled(scene, md, eModifierMode_Render))		flag |= eModifierMode_Render;
+			if((flag & eModifierMode_Realtime) == 0	&& modifier_isEnabled(scene, md, eModifierMode_Realtime))	flag |= eModifierMode_Realtime;
+		}
+	}
+
+	return flag;
+}

Modified: trunk/blender/source/blender/makesrna/intern/rna_object_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_object_api.c	2011-03-16 01:16:43 UTC (rev 35566)
+++ trunk/blender/source/blender/makesrna/intern/rna_object_api.c	2011-03-16 08:53:35 UTC (rev 35567)
@@ -39,6 +39,7 @@
 #include "RNA_define.h"
 
 #include "DNA_object_types.h"
+#include "DNA_modifier_types.h"
 
 // #include "BLO_sys_types.h" /* needed for intptr_t used in ED_mesh.h */
 
@@ -82,7 +83,7 @@
 	Mesh *tmpmesh;
 	Curve *tmpcu = NULL;
 	Object *tmpobj = NULL;
-	int render = settings, i;
+	int render = settings == eModifierMode_Render, i;
 	int cage = !apply_modifiers;
 
 	/* perform the mesh extraction based on type */
@@ -421,6 +422,11 @@
 	base->lay= base->object->lay= v3d->lay;
 }
 
+int rna_Object_is_modified(Object *ob, Scene *scene, int settings)
+{
+	return object_is_modified(scene, ob) & settings;
+}
+
 #else
 
 void RNA_api_object(StructRNA *srna)
@@ -429,8 +435,8 @@
 	PropertyRNA *parm;
 
 	static EnumPropertyItem mesh_type_items[] = {
-		{0, "PREVIEW", 0, "Preview", "Apply modifier preview settings"},
-		{1, "RENDER", 0, "Render", "Apply modifier render settings"},
+		{eModifierMode_Realtime, "PREVIEW", 0, "Preview", "Apply modifier preview settings"},
+		{eModifierMode_Render, "RENDER", 0, "Render", "Apply modifier render settings"},
 		{0, NULL, 0, NULL, NULL}
 	};
 
@@ -500,8 +506,18 @@
 	RNA_def_function_ui_description(func, "Determine if object is visible in a given scene.");
 	parm= RNA_def_pointer(func, "scene", "Scene", "", "");
 	RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
-	parm= RNA_def_boolean(func, "is_visible", 0, "", "Object visibility.");
+	parm= RNA_def_boolean(func, "result", 0, "", "Object visibility.");
 	RNA_def_function_return(func, parm);
+
+	/* utility function for checking if the object is modified */
+	func= RNA_def_function(srna, "is_modified", "rna_Object_is_modified");
+	RNA_def_function_ui_description(func, "Determine if this object is modified from the base mesh data.");
+	parm= RNA_def_pointer(func, "scene", "Scene", "", "");
+	RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+	parm= RNA_def_enum(func, "settings", mesh_type_items, 0, "", "Modifier settings to apply.");
+	RNA_def_property_flag(parm, PROP_REQUIRED);
+	parm= RNA_def_boolean(func, "result", 0, "", "Object visibility.");
+	RNA_def_function_return(func, parm);
 }
 
 




More information about the Bf-blender-cvs mailing list