[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18816] branches/blender2.5/blender/source /blender: * Added range function for Multires's level RNA

Nicholas Bishop nicholasbishop at gmail.com
Thu Feb 5 02:12:49 CET 2009


Revision: 18816
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18816
Author:   nicholasbishop
Date:     2009-02-05 02:12:47 +0100 (Thu, 05 Feb 2009)

Log Message:
-----------
* Added range function for Multires's level RNA
* Removed RNA for old multires in Mesh, the old mesh->mr struct should never be used (except for loading old files)
* Dealt with sculpt + render (just needed to force multires update)
* sculpt memory leaks fixed
* Entering editmode now always exits paint modes (previously, only happened if editmode was called from the header button)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
    branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_mesh.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_modifier.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c	2009-02-04 22:33:24 UTC (rev 18815)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c	2009-02-05 01:12:47 UTC (rev 18816)
@@ -1204,7 +1204,7 @@
 
 void multires_force_update(Object *ob)
 {
-	if(ob->derivedFinal) {
+	if(ob && ob->derivedFinal) {
 		ob->derivedFinal->needsFree =1;
 		ob->derivedFinal->release(ob->derivedFinal);
 		ob->derivedFinal = NULL;

Modified: branches/blender2.5/blender/source/blender/editors/object/object_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/object/object_edit.c	2009-02-04 22:33:24 UTC (rev 18815)
+++ branches/blender2.5/blender/source/blender/editors/object/object_edit.c	2009-02-05 01:12:47 UTC (rev 18816)
@@ -3101,6 +3101,8 @@
 	}
 	
 	if(flag & EM_WAITCURSOR) waitcursor(1);
+
+	ED_view3d_exit_paint_modes(C);
 	
 	if(ob->type==OB_MESH) {
 		Mesh *me= ob->data;

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2009-02-04 22:33:24 UTC (rev 18815)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2009-02-05 01:12:47 UTC (rev 18816)
@@ -45,6 +45,7 @@
 #include "BKE_idprop.h"
 #include "BKE_library.h"
 #include "BKE_main.h"
+#include "BKE_multires.h"
 #include "BKE_report.h"
 #include "BKE_screen.h"
 #include "BKE_utildefines.h"
@@ -2028,8 +2029,11 @@
 	
 	/* handle UI stuff */
 	WM_cursor_wait(1);
+
+	/* flush multires changes (for sculpt) */
+	multires_force_update(CTX_data_active_object(C));
 	
-	// get editmode results, sculpt mode results (no set sculptmode in end!)
+	// get editmode results
 	// store spare
 	// get view3d layer, local layer, make this nice api call to render
 	// store spare

Modified: branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c	2009-02-04 22:33:24 UTC (rev 18815)
+++ branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c	2009-02-05 01:12:47 UTC (rev 18816)
@@ -1083,6 +1083,8 @@
 	}
 
 	if(ss->totvert != ss->fmap_size) {
+		if(ss->fmap) MEM_freeN(ss->fmap);
+		if(ss->fmap_mem) MEM_freeN(ss->fmap_mem);
 		create_vert_face_map(&ss->fmap, &ss->fmap_mem, ss->mface, ss->totvert, ss->totface);
 		ss->fmap_size = ss->totvert;
 	}
@@ -1628,6 +1630,8 @@
 	ToolSettings *ts = CTX_data_tool_settings(C);
 
 	if(G.f & G_SCULPTMODE) {
+		multires_force_update(CTX_data_active_object(C));
+
 		/* Leave sculptmode */
 		G.f &= ~G_SCULPTMODE;
 

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c	2009-02-04 22:33:24 UTC (rev 18815)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c	2009-02-05 01:12:47 UTC (rev 18816)
@@ -140,8 +140,10 @@
 	else if(G.f & G_WEIGHTPAINT)
 		WM_operator_name_call(C, "VIEW3D_OT_wpaint_toggle", WM_OP_EXEC_REGION_WIN, NULL);
 
+	if(G.f & G_SCULPTMODE)
+		WM_operator_name_call(C, "SCULPT_OT_sculptmode_toggle", WM_OP_EXEC_REGION_WIN, NULL);
+
 //	if(G.f & G_TEXTUREPAINT) set_texturepaint();
-//	if(G.f & G_SCULPTMODE) set_sculptmode();
 	if(G.f & G_PARTICLEEDIT) PE_set_particle_edit(CTX_data_scene(C));
 	
 	G.f &= ~(G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT+G_SCULPTMODE+G_PARTICLEEDIT);
@@ -5427,7 +5429,6 @@
 		else if (v3d->modeselect == V3D_EDITMODE_SEL) {
 			if(!obedit) {
 				v3d->flag &= ~V3D_MODE;
-				ED_view3d_exit_paint_modes(C);
 				ED_object_enter_editmode(C, EM_WAITCURSOR);
 				ED_undo_push(C, "Original");	/* here, because all over code enter_editmode is abused */
 			}

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_mesh.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_mesh.c	2009-02-04 22:33:24 UTC (rev 18815)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_mesh.c	2009-02-05 01:12:47 UTC (rev 18816)
@@ -172,13 +172,6 @@
 		rna_iterator_array_begin(iter, NULL, 0, 0, NULL);
 }
 
-static void rna_MeshMultires_level_range(PointerRNA *ptr, int *min, int *max)
-{
-	Multires *mr= (Multires*)ptr->data;
-	*min= 1;
-	*max= mr->level_count;
-}
-
 static void rna_MeshFace_material_index_range(PointerRNA *ptr, int *min, int *max)
 {
 	Mesh *me= (Mesh*)ptr->id.data;
@@ -871,36 +864,6 @@
 	RNA_def_property_ui_text(prop, "Value", "");
 }
 
-static void rna_def_mmultires(BlenderRNA *brna)
-{
-	StructRNA *srna;
-	PropertyRNA *prop;
-
-	srna= RNA_def_struct(brna, "MeshMultires", NULL);
-	RNA_def_struct_sdna(srna, "Multires");
-	RNA_def_struct_ui_text(srna, "Mesh Multires", "Multiresolution mesh levels data in a Mesh datablock.");
-
-	prop= RNA_def_property(srna, "level", PROP_INT, PROP_NONE);
-	RNA_def_property_int_sdna(prop, NULL, "newlvl");
-	RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MeshMultires_level_range");
-	RNA_def_property_ui_text(prop, "Level", "");
-
-	prop= RNA_def_property(srna, "edge_level", PROP_INT, PROP_NONE);
-	RNA_def_property_int_sdna(prop, NULL, "edgelvl");
-	RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MeshMultires_level_range");
-	RNA_def_property_ui_text(prop, "Edge Level", "");
-
-	prop= RNA_def_property(srna, "pin_level", PROP_INT, PROP_NONE);
-	RNA_def_property_int_sdna(prop, NULL, "pinlvl");
-	RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MeshMultires_level_range");
-	RNA_def_property_ui_text(prop, "Pin Level", "Set level to apply modifiers to during render.");
-
-	prop= RNA_def_property(srna, "render_level", PROP_INT, PROP_NONE);
-	RNA_def_property_int_sdna(prop, NULL, "renderlvl");
-	RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MeshMultires_level_range");
-	RNA_def_property_ui_text(prop, "Render Level", "Set level to render.");
-}
-
 void rna_def_texmat_common(StructRNA *srna, const char *texspace_editable)
 {
 	PropertyRNA *prop;
@@ -1013,10 +976,6 @@
 	RNA_def_property_pointer_sdna(prop, NULL, "texcomesh");
 	RNA_def_property_ui_text(prop, "Texture Space Mesh", "Derive texture coordinates from another mesh");
 
-	prop= RNA_def_property(srna, "multires", PROP_POINTER, PROP_NONE);
-	RNA_def_property_pointer_sdna(prop, NULL, "mr");
-	RNA_def_property_ui_text(prop, "Multires", "");
-
 	prop= RNA_def_property(srna, "shape_keys", PROP_POINTER, PROP_NONE);
 	RNA_def_property_pointer_sdna(prop, NULL, "key");
 	RNA_def_property_ui_text(prop, "Shape Keys", "");
@@ -1035,7 +994,6 @@
 	rna_def_msticky(brna);
 	rna_def_mcol(brna);
 	rna_def_mproperties(brna);
-	rna_def_mmultires(brna);
 }
 
 #endif

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_modifier.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_modifier.c	2009-02-04 22:33:24 UTC (rev 18815)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_modifier.c	2009-02-05 01:12:47 UTC (rev 18816)
@@ -232,9 +232,17 @@
 	rna_object_uvlayer_name_set(ptr, value, wmd->uvlayer_name, sizeof(wmd->uvlayer_name));
 }
 
+static void rna_MultiresModifier_level_range(PointerRNA *ptr, int *min, int *max)
+{
+	MultiresModifierData *mmd = (MultiresModifierData*)ptr->data;
+
+	*min = 1;
+	*max = mmd->totlvl;
+}
+
 #else
 
-static void rna_def_property_subdivision_common(StructRNA *srna, const char type[], const char level[])
+static void rna_def_property_subdivision_common(StructRNA *srna, const char type[])
 {
 	static EnumPropertyItem prop_subdivision_type_items[] = {
 		{0, "CATMULL_CLARK", "Catmull-Clark", ""},
@@ -245,13 +253,6 @@
 	RNA_def_property_enum_sdna(prop, NULL, type);
 	RNA_def_property_enum_items(prop, prop_subdivision_type_items);
 	RNA_def_property_ui_text(prop, "Subdivision Type", "Selects type of subdivision algorithm.");
-
-	prop= RNA_def_property(srna, "levels", PROP_INT, PROP_NONE);
-	RNA_def_property_int_sdna(prop, NULL, level);
-	RNA_def_property_range(prop, 1, 20);
-	RNA_def_property_ui_range(prop, 1, 6, 1, 0);
-	RNA_def_property_ui_text(prop, "Levels", "Number of subdivisions to perform.");
-	RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update");
 }
 
 static void rna_def_modifier_subsurf(BlenderRNA *brna)
@@ -263,8 +264,15 @@
 	RNA_def_struct_ui_text(srna, "Subsurf Modifier", "Subdivision surface modifier.");
 	RNA_def_struct_sdna(srna, "SubsurfModifierData");
 
-	rna_def_property_subdivision_common(srna, "subdivType", "levels");
+	rna_def_property_subdivision_common(srna, "subdivType");
 
+	prop= RNA_def_property(srna, "levels", PROP_INT, PROP_NONE);
+	RNA_def_property_int_sdna(prop, NULL, "levels");
+	RNA_def_property_range(prop, 1, 20);
+	RNA_def_property_ui_range(prop, 1, 6, 1, 0);
+	RNA_def_property_ui_text(prop, "Levels", "Number of subdivisions to perform.");
+	RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update");
+
 	prop= RNA_def_property(srna, "render_levels", PROP_INT, PROP_NONE);
 	RNA_def_property_int_sdna(prop, NULL, "renderLevels");
 	RNA_def_property_range(prop, 1, 20);
@@ -285,12 +293,19 @@
 static void rna_def_modifier_multires(BlenderRNA *brna)
 {
 	StructRNA *srna;
+	PropertyRNA *prop;
 
 	srna= RNA_def_struct(brna, "MultiresModifier", "Modifier");
 	RNA_def_struct_ui_text(srna, "Multires Modifier", "Multiresolution mesh modifier.");
 	RNA_def_struct_sdna(srna, "MultiresModifierData");
 
-	rna_def_property_subdivision_common(srna, "simple", "lvl");
+	rna_def_property_subdivision_common(srna, "simple");
+
+	prop= RNA_def_property(srna, "levels", PROP_INT, PROP_NONE);
+	RNA_def_property_int_sdna(prop, NULL, "lvl");
+	RNA_def_property_ui_text(prop, "Levels", "");
+	RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MultiresModifier_level_range");
+	RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update");
 }
 
 static void rna_def_modifier_lattice(BlenderRNA *brna)




More information about the Bf-blender-cvs mailing list