[Bf-committers] Convert Menu Patch

Johnny Matthews johnny.matthews at gmail.com
Tue Mar 1 18:26:52 CET 2005


Here is a patch that adds an option to converting Subsurfs and Metas. 
Instead of just Convert to "Mesh (Keep Original)" it adds "Mesh (Delete 
Original)" to the pupmenu. Can someone who knows better check my code to 
see if I am deleteing the objects in the proper manner. It did not crash 
my system and seemed to work correctly, but I have been known to break 
stuff before :)

Please give me some feedback and thoughts on this feature in general. It 
is handy when you have a large amount of meshs that you are going to 
join and some are subsurf and some not, then you can select them all, 
convert the subsurf ones to mesh (deleting orig) and then join.

Also, Ton, who would this fall under, You I would guess.

Johnny Matthews
guitarGeek



-------------- next part --------------
Index: source/blender/src/editobject.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/editobject.c,v
retrieving revision 1.163
diff -u -r1.163 editobject.c
--- source/blender/src/editobject.c	25 Feb 2005 17:40:03 -0000	1.163
+++ source/blender/src/editobject.c	1 Mar 2005 17:09:23 -0000
@@ -2081,7 +2081,7 @@
 
 void convertmenu(void)
 {
-	Base *base, *basen, *basact;
+	Base *base, *basen, *basact, *basedel=NULL;
 	Object *ob, *ob1;
 	Curve *cu;
 	MetaBall *mb;
@@ -2102,7 +2102,7 @@
 		if(nr>0) ok= 1;
 	}
 	else if(ob->type==OB_MBALL) {
-		nr= pupmenu("Convert Metaball to%t|Mesh (keep original)");
+		nr= pupmenu("Convert Metaball to%t|Mesh (keep original)%x1|Mesh (Delete Original)%x2");
 		if(nr>0) ok= 1;
 	}
 	else if(ob->type==OB_CURVE) {
@@ -2114,7 +2114,7 @@
 		if(nr>0) ok= 1;
 	}
 	else if(ob->type==OB_MESH && mesh_uses_displist((Mesh*) ob->data)) {
-		nr= pupmenu("Convert SubSurf to%t|Mesh (Keep Original)");
+		nr= pupmenu("Convert SubSurf to%t|Mesh (Keep Original)%x1|Mesh (Delete Original)%x2");
 		if(nr>0) ok= 1;
 	}
 	if(ok==0) return;
@@ -2143,6 +2143,8 @@
 				if (mesh_uses_displist(oldme)) {
 					DispListMesh *dlm;
 
+					basedel = base;
+
 					ob->flag |= OB_DONE;
 
 					ob1= copy_object(ob);
@@ -2176,6 +2178,7 @@
 					enter_editmode();
 					exit_editmode(1); // freedata, but no undo
 					BASACT= basact;
+					
 				}
 			}
 			else if(ob->type==OB_FONT) {
@@ -2220,10 +2223,11 @@
 			}
 			else if(ob->type==OB_MBALL) {
 			
-				if(nr==1) {
+				if(nr==1 || nr == 2) {
 					ob= find_basis_mball(ob);
 					
 					if(ob->disp.first && !(ob->flag&OB_DONE)) {
+						basedel = base;
 					
 						ob->flag |= OB_DONE;
 
@@ -2256,8 +2260,11 @@
 			}
 		}
 		base= base->next;
+		if(basedel != NULL && nr == 2)
+			free_and_unlink_base(basedel);	
+		basedel = NULL;				
 	}
-	
+	countall();
 	allqueue(REDRAWVIEW3D, 0);
 	allqueue(REDRAWOOPS, 0);
 	allqueue(REDRAWBUTSEDIT, 0);


More information about the Bf-committers mailing list