[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13363] trunk/blender/source/blender/src/ buttons_object.c: soft body stuff

Jens Ole Wund (bjornmose) bjornmose at gmx.net
Wed Jan 23 01:04:59 CET 2008


Revision: 13363
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13363
Author:   bjornmose
Date:     2008-01-23 01:04:59 +0100 (Wed, 23 Jan 2008)

Log Message:
-----------
soft body stuff
got really tired of users asking "why this on the XXX panel'
so i did try sort it out 
looks like UI is not my friend 
tsk

Modified Paths:
--------------
    trunk/blender/source/blender/src/buttons_object.c

Modified: trunk/blender/source/blender/src/buttons_object.c
===================================================================
--- trunk/blender/source/blender/src/buttons_object.c	2008-01-22 23:24:55 UTC (rev 13362)
+++ trunk/blender/source/blender/src/buttons_object.c	2008-01-23 00:04:59 UTC (rev 13363)
@@ -3397,7 +3397,7 @@
 static char sbsolvers[] = "SOFT  step size controlled midpoint(1rst choice for real softbodies)%x0";
 #endif
 
-static void object_softbodies_II(Object *ob)
+static void object_softbodies_collision(Object *ob)
 {
 	SoftBody *sb=ob->soft;
 	uiBlock *block;
@@ -3412,9 +3412,9 @@
 		ob->pd->pdef_sbift  = 0.2f;
 		ob->pd->pdef_sboft  = 0.02f;
 	}
-	block= uiNewBlock(&curarea->uiblocks, "object_softbodies_II", UI_EMBOSS, UI_HELV, curarea->win);
-	uiNewPanelTabbed("Soft Body", "Physics");
-	if(uiNewPanel(curarea, block, "Soft Body Col&Solv", "Physics", 651, 0, 318, 204)==0) return;
+	block= uiNewBlock(&curarea->uiblocks, "object_softbodies_collision", UI_EMBOSS, UI_HELV, curarea->win);
+	// uiNewPanelTabbed("Soft Body", "Physics"); /*don't really want it tabbed first */
+	if(uiNewPanel(curarea, block, "Soft Body Collision", "Physics", 651, 0, 318, 204)==0) return;
 
 	uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
 
@@ -3487,9 +3487,10 @@
 			uiBlockEndAlign(block);
 			/*SOLVER SETTINGS*/
 			uiBlockBeginAlign(block);
+			/* done in another panel now*/
+			/*
 			uiDefButS(block, MENU, B_SOFTBODY_CHANGE, sbsolvers,10,100,50,20, &sb->solver_ID, 14.0, 0.0, 0, 0, "Select Solver");
-			/*some have adapive step size - some not*/
-			sb->solver_ID = 0; /* ugly hack to prepare peach freeze */
+			sb->solver_ID = 0; 
 			switch (sb->solver_ID) {
 			case 0:
 			case 1:
@@ -3518,6 +3519,7 @@
 				uiDefButS(block, NUM, B_DIFF, "Steps:", 10,80,100,20, &sb->minloops,  1.00,  30000.0, 10, 0, "Solver steps/frame ");
 				uiDefButS(block, NUM, B_DIFF, "Choke:", 210,80,100,20, &sb->choke, 0.00,  100.0, 10, 0, "'Viscosity' inside collision target ");
 			}
+			*/
 
 
 		}
@@ -3535,7 +3537,94 @@
 	}
 	uiBlockEndAlign(block);
 }
+static void object_softbodies_solver(Object *ob)
+{
+	SoftBody *sb=ob->soft;
+	uiBlock *block;
+	static int val;
+	short *softflag=&ob->softflag, psys_cur=0, adaptive_mode=0;
+	int ob_has_hair=psys_ob_has_hair(ob);
+    if(!_can_softbodies_at_all(ob)) return;
+	block= uiNewBlock(&curarea->uiblocks, "object_softbodies_solver", UI_EMBOSS, UI_HELV, curarea->win);
+	if(uiNewPanel(curarea, block, "Soft Body Solver", "Physics", 651, 0, 318, 204)==0) return;
 
+	uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
+    /* doubt that is really needed here but for now */ 
+	if(ob_has_hair) {
+		if(PE_get_current_num(ob) >= 0) {
+			ParticleSystem *psys = PE_get_current(ob);
+			if(psys) {
+				sb = psys->soft;
+				softflag = &psys->softflag;
+				psys_cur = 1;
+			}
+		}
+	}
+
+	if(psys_cur) {
+		if(*softflag & OB_SB_ENABLE)
+			val = 1;
+		else
+			val = 0;
+	}
+	else
+		val = modifiers_isSoftbodyEnabled(ob);
+
+	if(!val) { 
+		uiDefBut(block, LABEL, 0, "",10,10,1,2, NULL, 0.0, 0, 0, 0, ""); /* tell UI we go to 10,10*/
+		if(psys_cur){
+			uiDefBut(block, LABEL, 0, "Hair is not a softbody",10,190,300,20, NULL, 0.0, 0, 0, 0, ""); 
+		}
+		else {
+			uiDefBut(block, LABEL, 0, "Object is not a softbody",10,190,300,20, NULL, 0.0, 0, 0, 0, ""); 
+		}
+	}
+	else{ 
+		if ((ob->type==OB_MESH)||(ob->type==OB_CURVE) ) {
+			/*SOLVER SETTINGS*/
+			uiDefBut(block, LABEL, 0, "Solver:",10,120,80,20, NULL, 0.0, 0, 0, 0, ""); 
+			uiBlockBeginAlign(block);
+			uiDefButS(block, MENU, B_SOFTBODY_CHANGE, sbsolvers,90,120,220,20, &sb->solver_ID, 14.0, 0.0, 0, 0, "Select Solver (choose 1 of 1 i was working on some other but failed *sigh* BM) ");
+			/*some have adapive step size - some not*/
+			sb->solver_ID = 0; /* ugly hack to prepare peach freeze */
+			switch (sb->solver_ID) {
+			case 0:
+			case 1:
+				{adaptive_mode = 1; break;}
+			case 3:
+				{adaptive_mode = 0; break;}
+			default: printf("SB_solver?\n"); // should never happen
+			}
+			if(adaptive_mode){
+				uiBlockBeginAlign(block);
+				uiDefButF(block, NUM, B_DIFF, "Error Lim:",	10,100,170,20, &sb->rklimit , 0.001, 10.0, 10, 0, "The Runge-Kutta ODE solver error limit, low value gives more precision, high values speed");
+				uiDefButBitS(block, TOG, SBSO_OLDERR, B_DIFF,"O", 180,100,20,20, &sb->solverflags,  0,  0, 0, 0, "Old Error Calculation");
+				uiDefButS(block, NUM, B_DIFF, "Fuzzy:", 200,100,90,20, &sb->fuzzyness,  1.00,  100.0, 10, 0, "Fuzzyness while on collision, high values make collsion handling faster but less stable");
+				uiDefButBitS(block, TOG, SBSO_MONITOR, B_DIFF,"M", 290,100,20,20, &sb->solverflags,  0,  0, 0, 0, "Turn on SB diagnose console prints");
+				uiBlockEndAlign(block);
+				uiDefButS(block, NUM, B_DIFF, "MinS:", 10,80,100,20, &sb->minloops,  0.00,  30000.0, 10, 0, "Minimal # solver steps/frame ");
+				uiDefButS(block, NUM, B_DIFF, "MaxS:", 110,80,100,20, &sb->maxloops,  0.00,  30000.0, 10, 0, "Maximal # solver steps/frame ");
+				uiDefButS(block, NUM, B_DIFF, "Choke:", 210,80,100,20, &sb->choke, 0.00,  100.0, 10, 0, "'Viscosity' inside collision target ");
+				uiBlockEndAlign(block);
+			} 
+			else{
+				uiBlockEndAlign(block);
+				uiBlockBeginAlign(block);
+				uiDefButS(block, NUM, B_DIFF, "Fuzzy:", 210,100,90,20, &sb->fuzzyness,  1.00,  100.0, 10, 0, "Fuzzyness while on collision, high values make collsion handling faster but less stable");
+				uiDefButBitS(block, TOG, SBSO_MONITOR, B_DIFF,"M", 290,100,20,20, &sb->solverflags,  0,  0, 0, 0, "Turn on SB diagnose console prints");
+				uiBlockEndAlign(block);
+				uiDefButS(block, NUM, B_DIFF, "Steps:", 10,80,100,20, &sb->minloops,  1.00,  30000.0, 10, 0, "Solver steps/frame ");
+				uiDefButS(block, NUM, B_DIFF, "Choke:", 210,80,100,20, &sb->choke, 0.00,  100.0, 10, 0, "'Viscosity' inside collision target ");
+			}
+
+	uiBlockEndAlign(block);
+
+		}
+		//uiDefBut(block, LABEL, 0, "",10,10,1,2, NULL, 0.0, 0, 0, 0, ""); /* tell UI we go to 10,10*/
+	}
+	uiBlockEndAlign(block);
+}
+
 static void sb_clear_cache(void *ob_v, void *actsoft_v)
 {
 	Object *ob = ob_v;
@@ -4860,7 +4949,8 @@
 			object_panel_deflection(ob);
 		object_panel_fields(ob);
 		object_softbodies(ob);
-		object_softbodies_II(ob);
+		object_softbodies_collision(ob);
+		object_softbodies_solver(ob);
 		object_panel_fluidsim(ob);
 	}
 }





More information about the Bf-blender-cvs mailing list