[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42091] trunk/blender/source/blender: Added method clear to most of collections which supports new/remove.

Sergey Sharybin sergey.vfx at gmail.com
Wed Nov 23 17:12:11 CET 2011


Revision: 42091
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42091
Author:   nazgul
Date:     2011-11-23 16:12:11 +0000 (Wed, 23 Nov 2011)
Log Message:
-----------
Added method clear to most of collections which supports new/remove.

This method not added to animation-specific structures yet/

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_mesh.h
    trunk/blender/source/blender/editors/include/ED_object.h
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/object/object_modifier.c
    trunk/blender/source/blender/editors/object/object_vgroup.c
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
    trunk/blender/source/blender/makesrna/intern/rna_curve.c
    trunk/blender/source/blender/makesrna/intern/rna_meta.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/makesrna/intern/rna_object.c
    trunk/blender/source/blender/makesrna/intern/rna_scene.c
    trunk/blender/source/blender/makesrna/intern/rna_space.c

Modified: trunk/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_mesh.h	2011-11-23 15:44:20 UTC (rev 42090)
+++ trunk/blender/source/blender/editors/include/ED_mesh.h	2011-11-23 16:12:11 UTC (rev 42091)
@@ -205,6 +205,7 @@
 struct bDeformGroup		*ED_vgroup_add(struct Object *ob);
 struct bDeformGroup		*ED_vgroup_add_name(struct Object *ob, const char *name);
 void 					ED_vgroup_delete(struct Object *ob, struct bDeformGroup *defgroup);
+void					ED_vgroup_clear(struct Object *ob);
 void					ED_vgroup_select_by_name(struct Object *ob, const char *name);
 int						ED_vgroup_data_create(struct ID *id);
 int						ED_vgroup_give_array(struct ID *id, struct MDeformVert **dvert_arr, int *dvert_tot);

Modified: trunk/blender/source/blender/editors/include/ED_object.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_object.h	2011-11-23 15:44:20 UTC (rev 42090)
+++ trunk/blender/source/blender/editors/include/ED_object.h	2011-11-23 16:12:11 UTC (rev 42091)
@@ -139,6 +139,7 @@
 
 struct ModifierData *ED_object_modifier_add(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, const char *name, int type);
 int ED_object_modifier_remove(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, struct ModifierData *md);
+int ED_object_modifier_clear(struct Main *bmain, struct Scene *scene, struct Object *ob);
 int ED_object_modifier_move_down(struct ReportList *reports, struct Object *ob, struct ModifierData *md);
 int ED_object_modifier_move_up(struct ReportList *reports, struct Object *ob, struct ModifierData *md);
 int ED_object_modifier_convert(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, struct ModifierData *md);

Modified: trunk/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_view3d.h	2011-11-23 15:44:20 UTC (rev 42090)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h	2011-11-23 16:12:11 UTC (rev 42091)
@@ -292,5 +292,6 @@
 
 struct BGpic *ED_view3D_background_image_new(struct View3D *v3d);
 void ED_view3D_background_image_remove(struct View3D *v3d, struct BGpic *bgpic);
+void ED_view3D_background_image_clear(struct View3D *v3d);
 
 #endif /* ED_VIEW3D_H */

Modified: trunk/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_modifier.c	2011-11-23 15:44:20 UTC (rev 42090)
+++ trunk/blender/source/blender/editors/object/object_modifier.c	2011-11-23 16:12:11 UTC (rev 42091)
@@ -157,10 +157,9 @@
 	return new_md;
 }
 
-int ED_object_modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md)
+static int object_modifier_remove(Object *ob, ModifierData *md, int *sort_depsgraph)
 {
 	ModifierData *obmd;
-	int sort_depsgraph = 0;
 
 	/* It seems on rapid delete it is possible to
 	 * get called twice on same modifier, so make
@@ -168,11 +167,9 @@
 	for(obmd=ob->modifiers.first; obmd; obmd=obmd->next)
 		if(obmd==md)
 			break;
-	
-	if(!obmd) {
-		BKE_reportf(reports, RPT_ERROR, "Modifier '%s' not in object '%s'", ob->id.name, md->name);
+
+	if(!obmd)
 		return 0;
-	}
 
 	/* special cases */
 	if(md->type == eModifierType_ParticleSystem) {
@@ -193,13 +190,13 @@
 		if(ob->pd)
 			ob->pd->deflect= 0;
 
-		sort_depsgraph = 1;
+		*sort_depsgraph = 1;
 	}
 	else if(md->type == eModifierType_Surface) {
 		if(ob->pd && ob->pd->shape == PFIELD_SHAPE_SURFACE)
 			ob->pd->shape = PFIELD_SHAPE_PLANE;
 
-		sort_depsgraph = 1;
+		*sort_depsgraph = 1;
 	}
 	else if(md->type == eModifierType_Smoke) {
 		ob->dt = OB_TEXTURE;
@@ -238,6 +235,21 @@
 	BLI_remlink(&ob->modifiers, md);
 	modifier_free(md);
 
+	return 1;
+}
+
+int ED_object_modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md)
+{
+	int sort_depsgraph = 0;
+	int ok;
+
+	ok= object_modifier_remove(ob, md, &sort_depsgraph);
+
+	if(!ok) {
+		BKE_reportf(reports, RPT_ERROR, "Modifier '%s' not in object '%s'", ob->id.name, md->name);
+		return 0;
+	}
+
 	DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
 
 	/* sorting has to be done after the update so that dynamic systems can react properly */
@@ -247,6 +259,33 @@
 	return 1;
 }
 
+int ED_object_modifier_clear(Main *bmain, Scene *scene, Object *ob)
+{
+	ModifierData *md =ob->modifiers.first;
+	int sort_depsgraph = 0;
+
+	if(!md)
+		return 0;
+
+	while(md) {
+		ModifierData *next_md;
+
+		next_md= md->next;
+
+		object_modifier_remove(ob, md, &sort_depsgraph);
+
+		md= next_md;
+	}
+
+	DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+
+	/* sorting has to be done after the update so that dynamic systems can react properly */
+	if(sort_depsgraph)
+		DAG_scene_sort(bmain, scene);
+
+	return 1;
+}
+
 int ED_object_modifier_move_up(ReportList *reports, Object *ob, ModifierData *md)
 {
 	if(md->prev) {

Modified: trunk/blender/source/blender/editors/object/object_vgroup.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_vgroup.c	2011-11-23 15:44:20 UTC (rev 42090)
+++ trunk/blender/source/blender/editors/object/object_vgroup.c	2011-11-23 16:12:11 UTC (rev 42091)
@@ -138,6 +138,23 @@
 		vgroup_delete_object_mode(ob, dg);
 }
 
+void ED_vgroup_clear(Object *ob)
+{
+	bDeformGroup *dg= (bDeformGroup *)ob->defbase.first;
+	int edit_mode= ED_vgroup_object_is_edit_mode(ob);
+
+	while (dg) {
+		bDeformGroup *next_dg= dg->next;
+
+		if(edit_mode)
+			vgroup_delete_edit_mode(ob, dg);
+		else
+			vgroup_delete_object_mode(ob, dg);
+
+		dg= next_dg;
+	}
+}
+
 int ED_vgroup_data_create(ID *id)
 {
 	/* create deform verts */

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2011-11-23 15:44:20 UTC (rev 42090)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2011-11-23 16:12:11 UTC (rev 42091)
@@ -3547,7 +3547,7 @@
 	return bgpic;
 }
 
-void ED_view3D_background_image_remove(struct View3D *v3d, struct BGpic *bgpic)
+void ED_view3D_background_image_remove(View3D *v3d, BGpic *bgpic)
 {
 	BLI_remlink(&v3d->bgpicbase, bgpic);
 
@@ -3559,3 +3559,16 @@
 
 	MEM_freeN(bgpic);
 }
+
+void ED_view3D_background_image_clear(View3D *v3d)
+{
+	BGpic *bgpic= v3d->bgpicbase.first;
+
+	while(bgpic) {
+		BGpic *next_bgpic= bgpic->next;
+
+		ED_view3D_background_image_remove(v3d, bgpic);
+
+		bgpic= next_bgpic;
+	}
+}

Modified: trunk/blender/source/blender/makesrna/intern/rna_curve.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_curve.c	2011-11-23 15:44:20 UTC (rev 42090)
+++ trunk/blender/source/blender/makesrna/intern/rna_curve.c	2011-11-23 16:12:11 UTC (rev 42091)
@@ -588,8 +588,21 @@
 
 	freeNurb(nu);
 	/* invalidate pointer!, no can do */
+
+	DAG_id_tag_update(&cu->id, OB_RECALC_DATA);
+	WM_main_add_notifier(NC_GEOM|ND_DATA, NULL);
 }
 
+static void rna_Curve_spline_clear(Curve *cu)
+{
+	ListBase *nurbs= BKE_curve_nurbs(cu);
+
+	freeNurblist(nurbs);
+
+	DAG_id_tag_update(&cu->id, OB_RECALC_DATA);
+	WM_main_add_notifier(NC_GEOM|ND_DATA, NULL);
+}
+
 static PointerRNA rna_Curve_active_spline_get(PointerRNA *ptr)
 {
 	Curve *cu= (Curve*)ptr->data;
@@ -1200,6 +1213,9 @@
 	parm= RNA_def_pointer(func, "spline", "Spline", "", "The spline to remove");
 	RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
 
+	func= RNA_def_function(srna, "clear", "rna_Curve_spline_clear");
+	RNA_def_function_ui_description(func, "Remove all spline from a curve");
+
 	prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
 	RNA_def_property_struct_type(prop, "Object");
 	RNA_def_property_pointer_funcs(prop, "rna_Curve_active_spline_get", "rna_Curve_active_spline_set", NULL, NULL);

Modified: trunk/blender/source/blender/makesrna/intern/rna_meta.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_meta.c	2011-11-23 15:44:20 UTC (rev 42090)
+++ trunk/blender/source/blender/makesrna/intern/rna_meta.c	2011-11-23 16:12:11 UTC (rev 42091)
@@ -147,6 +147,17 @@
 	}
 }
 
+static void rna_MetaBall_elements_clear(MetaBall *mb)
+{
+	BLI_freelistN(&mb->elems);
+
+	/* cheating way for importers to avoid slow updates */
+	if(mb->id.us > 0) {
+		DAG_id_tag_update(&mb->id, 0);
+		WM_main_add_notifier(NC_GEOM|ND_DATA, &mb->id);
+	}
+}
+
 #else
 
 static void rna_def_metaelement(BlenderRNA *brna)
@@ -234,17 +245,20 @@
 	RNA_def_struct_ui_text(srna, "Meta Elements", "Collection of metaball elements");
 
 	func= RNA_def_function(srna, "new", "rna_MetaBall_elements_new");
-	RNA_def_function_ui_description(func, "Add a new spline to the curve");
+	RNA_def_function_ui_description(func, "Add a new element to the metaball");
 	RNA_def_enum(func, "type", metaelem_type_items, MB_BALL, "", "type for the new meta-element");
 	parm= RNA_def_pointer(func, "element", "MetaElement", "", "The newly created meta-element");
 	RNA_def_function_return(func, parm);
 
 	func= RNA_def_function(srna, "remove", "rna_MetaBall_elements_remove");
-	RNA_def_function_ui_description(func, "Remove a spline from a curve");
+	RNA_def_function_ui_description(func, "Remove an element from the metaball");
 	RNA_def_function_flag(func, FUNC_USE_REPORTS);
 	parm= RNA_def_pointer(func, "element", "MetaElement", "", "The element to remove");
 	RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
 
+	func= RNA_def_function(srna, "clear", "rna_MetaBall_elements_clear");
+	RNA_def_function_ui_description(func, "Remove all elements from the metaball");
+
 	prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
 	RNA_def_property_pointer_sdna(prop, NULL, "lastelem");
 	RNA_def_property_ui_text(prop, "Active Element", "Last selected element");

Modified: trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2011-11-23 15:44:20 UTC (rev 42090)

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list