[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11628] branches/particles/source/blender: *bugs fixed

Janne Karhu jhkarh at utu.fi
Thu Aug 16 23:31:52 CEST 2007


Revision: 11628
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11628
Author:   jhk
Date:     2007-08-16 23:31:51 +0200 (Thu, 16 Aug 2007)

Log Message:
-----------
*bugs fixed
	-object soft body duplicated itself on file load
	-keyed particles didn't update on key changes
*new things
	-unified baking now updates 3d window while baking
	-modifier editing is disabled in the stack if it effects a baked system
	-timing of keyed particles can be changed

Modified Paths:
--------------
    branches/particles/source/blender/blenkernel/BKE_dynamics_bake.h
    branches/particles/source/blender/blenkernel/BKE_particle.h
    branches/particles/source/blender/blenkernel/intern/DerivedMesh.c
    branches/particles/source/blender/blenkernel/intern/depsgraph.c
    branches/particles/source/blender/blenkernel/intern/dynamics_bake.c
    branches/particles/source/blender/blenkernel/intern/particle.c
    branches/particles/source/blender/blenkernel/intern/particle_system.c
    branches/particles/source/blender/blenloader/intern/readfile.c
    branches/particles/source/blender/makesdna/DNA_particle_types.h
    branches/particles/source/blender/src/buttons_editing.c
    branches/particles/source/blender/src/buttons_object.c

Modified: branches/particles/source/blender/blenkernel/BKE_dynamics_bake.h
===================================================================
--- branches/particles/source/blender/blenkernel/BKE_dynamics_bake.h	2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/blenkernel/BKE_dynamics_bake.h	2007-08-16 21:31:51 UTC (rev 11628)
@@ -70,6 +70,7 @@
 #define BSYS_BAKE_KEY	1
 #define BSYS_LAST_KEY	2
 
+int modifier_effects_baked(struct Object *ob, struct ModifierData *mod);
 int dynamicsbake_test();
 struct BakeableSystem *DB_find_bsys(struct ListBase *bakeable, void *system);
 struct BakeBase *DB_find_bbase(struct ListBase *bakeable, void *system);

Modified: branches/particles/source/blender/blenkernel/BKE_particle.h
===================================================================
--- branches/particles/source/blender/blenkernel/BKE_particle.h	2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/blenkernel/BKE_particle.h	2007-08-16 21:31:51 UTC (rev 11628)
@@ -94,7 +94,6 @@
 struct ParticleKey *psys_get_selected_key(struct ParticleSystem *psys, int pa_index, int *key_index);
 void psys_change_act(void *ob_v, void *act_v);
 struct Object *psys_get_lattice(struct BakeableSystem *bsys);
-int psys_is_after_modifier(struct ModifierData *tmd);
 void psys_disable_all(struct Object *ob);
 void psys_enable_all(struct Object *ob);
 

Modified: branches/particles/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/DerivedMesh.c	2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/blenkernel/intern/DerivedMesh.c	2007-08-16 21:31:51 UTC (rev 11628)
@@ -1815,7 +1815,7 @@
 			DM_set_only_copy(dm, (CustomDataMask)curr->link);
 
 			ndm = mti->applyModifier(md, ob, dm,
-									 psys_is_after_modifier(md)?0:useRenderParams,
+									 modifier_effects_baked(ob,md)?0:useRenderParams,
 			                         !inputVertexCos);
 
 			if(ndm) {

Modified: branches/particles/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/depsgraph.c	2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/blenkernel/intern/depsgraph.c	2007-08-16 21:31:51 UTC (rev 11628)
@@ -580,13 +580,7 @@
 			
 			dag_add_relation(dag, node, node, DAG_RL_OB_DATA);
 
-			//if(part->type==PART_REACTOR){
-			//	if(psys->target_ob && psys->target_psys <= psys->target_ob->totpart){
-			//		node2 = dag_get_node(dag, psys->target_ob);
-			//		dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA);
-			//	}
-			//}
-			if(part->phystype==PART_PHYS_KEYED && psys->keyed_ob && BLI_findlink(&psys->keyed_ob->particlesystem,psys->keyed_psys)){
+			if(part->phystype==PART_PHYS_KEYED && psys->keyed_ob && BLI_findlink(&psys->keyed_ob->particlesystem,psys->keyed_psys-1)){
 				node2 = dag_get_node(dag, psys->keyed_ob);
 				dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA);
 			}

Modified: branches/particles/source/blender/blenkernel/intern/dynamics_bake.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/dynamics_bake.c	2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/blenkernel/intern/dynamics_bake.c	2007-08-16 21:31:51 UTC (rev 11628)
@@ -13,6 +13,8 @@
 #include "DNA_object_types.h"
 #include "DNA_particle_types.h"
 #include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_space_types.h"
 
 #include "BKE_depsgraph.h"
 #include "BKE_DerivedMesh.h"
@@ -22,6 +24,7 @@
 #include "BKE_key.h"
 #include "BKE_lattice.h"
 #include "BKE_material.h"
+#include "BKE_modifier.h"
 #include "BKE_object.h"
 #include "BKE_particle.h"
 #include "BKE_scene.h"
@@ -34,6 +37,7 @@
 #include "BLI_rand.h"
 
 #include "BIF_screen.h"
+#include "BIF_space.h"
 #include "BIF_editbake.h"
 #include "BIF_resources.h"
 #include "BIF_toolbox.h"
@@ -41,6 +45,35 @@
 #include "blendef.h"
 
 #include "mydevice.h"
+
+int modifier_effects_baked(Object *ob, ModifierData *mod)
+{
+	ModifierTypeInfo *mti = modifierType_getInfo(mod->type);
+	ModifierData *md;
+
+	if(mti->type==eModifierTypeType_OnlyDeform)
+		return 0;
+
+	for(md=ob->modifiers.last; md; md=md->next){
+		if(mod==md) break;
+
+		if(md->type==eModifierType_ParticleSystem){
+			ParticleSystemModifierData *psmd=(ParticleSystemModifierData*)md;
+			BakeableSystem *bsys = DB_find_bsys(&ob->bakeable,psmd->psys);
+
+			if(bsys->flag & BSYS_DONE && (bsys->flag & BSYS_AUTOBAKE)==0)
+				return 1;
+		}
+		else if(md->type==eModifierType_Softbody){
+			BakeableSystem *bsys = DB_find_bsys(&ob->bakeable,ob->soft);
+
+			if(bsys->flag & BSYS_DONE && (bsys->flag & BSYS_AUTOBAKE)==0)
+				return 1;
+		}
+	}
+
+	return 0;
+}
 int dynamicsbake_test()
 {
 	BakeBase *bbase = OBACT->bakeable.first;
@@ -397,7 +430,7 @@
 	ParticleSystem *psys=0;
 	float birthtime=0.0, dietime=0.0;
 	float t, time, keytime, dfra=1.0, frs_sec=G.scene->r.frs_sec;
-	float col[3]={0.5f,0.5f,0.5f},alpha;
+	float col[3]={0.5f,0.5f,0.5f};
 	float vel_1st[3], rot_1st[4];
 	int k,i;
 	int steps=(int)pow(2.0,(double)bsys->draw_step);
@@ -1086,7 +1119,6 @@
 }
 static void psys_convert_dynamic_key(BakeableSystem *bsys, void *dynkey, BakeKey *bkey, float *ckey_f)
 {
-	ParticleSystem *psys=(ParticleSystem*)bsys->system;
 	BakeKeyParticle *ckey = (BakeKeyParticle*)(ckey_f);
 	ParticleKey *key = (ParticleKey*)dynkey;
 
@@ -1100,7 +1132,6 @@
 }
 static void psys_convert_bake_key(BakeableSystem *bsys, BakeKey *bkey, float *ckey_f, void *dynkey)
 {
-	ParticleSystem *psys=(ParticleSystem*)bsys->system;
 	BakeKeyParticle *ckey = (BakeKeyParticle*)(ckey_f);
 	ParticleKey *key = (ParticleKey*)dynkey;
 
@@ -1117,7 +1148,6 @@
 	Object *ob=bsys->ob;
 	ParticleSystem *psys=(ParticleSystem*)bsys->system;
 	ParticleSettings *part=psys->part;
-	ParticleSystemModifierData *psmd=psys_get_modifier(ob,psys);
 
 	if(psys->totpart==0) return 0;
 
@@ -1382,6 +1412,7 @@
 }
 void DB_unified_bake(ListBase *bakelist, int from_cfra, int autobake)
 {
+	ScrArea *sa;
 	Base *base;
 	BakeableSystem *bsys;
 	BakeableAccess *bacc;
@@ -1425,14 +1456,15 @@
 			object_handle_update(base->object);
 
 		/* update ui */
-		if(autobake==0)
+		if(autobake==0){
 			set_timecursor(CFRA);
-		//for(sa= G.curscreen->areabase.first; sa; sa= sa->next) {
-		//	if(sa->spacetype == SPACE_VIEW3D) {
-		//		scrarea_do_windraw(sa);
-		//	}
-		//}
-		//screen_swapbuffers();
+			for(sa= G.curscreen->areabase.first; sa; sa= sa->next) {
+				if(sa->spacetype == SPACE_VIEW3D) {
+					scrarea_do_windraw(sa);
+				}
+			}
+			screen_swapbuffers();
+		}
 		
 		for(bsys=bakelist->first; bsys; bsys=bsys->next){
 			bacc=access_BakeableSystem(bsys);

Modified: branches/particles/source/blender/blenkernel/intern/particle.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/particle.c	2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/blenkernel/intern/particle.c	2007-08-16 21:31:51 UTC (rev 11628)
@@ -254,18 +254,6 @@
 
 	return lattice;
 }
-int psys_is_after_modifier(ModifierData *tmd)
-{
-	ModifierData *md=tmd;
-
-	if(md){
-		for(md=md->next; md; md=md->next){
-			if(md->type==eModifierType_ParticleSystem) return 1;
-		}
-	}
-
-	return 0;
-}
 void psys_disable_all(Object *ob){
 	ParticleSystem *psys=ob->particlesystem.first;
 
@@ -1869,6 +1857,7 @@
 	part->totpart= 1000;
 	part->grid_res= 10;
 	part->timetweak= 1.0;
+	part->keyed_time= 0.5;
 	//part->userjit;
 	
 	part->integrator= PART_INT_MIDPOINT;

Modified: branches/particles/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/particle_system.c	2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/blenkernel/intern/particle_system.c	2007-08-16 21:31:51 UTC (rev 11628)
@@ -1472,6 +1472,7 @@
 	ParticleKey state;
 	int totbel=psys->totpart, i, k, totkeys=psys->totkeyed+1;
 	int csize=bacc->custom_size;
+	float prevtime, nexttime, keyedtime;
 
 	/* no proper targets so let's clear and bail out */
 	if(psys->totkeyed==0){
@@ -1503,7 +1504,20 @@
 		for(i=0,pa=psys->particles,bel=bsys->elements; i<totbel; i++,pa++,bel++){
 			psys_get_particle_state(kob,kpsys,i%kpsys->totpart,&state,1);
 			bacc->convert_dynamic_key(bsys,&state,bel->keys+k,(csize?bel->custom+csize*k:0));
-			(bel->keys+k)->time=pa->time + (float)k/(float)(totkeys-1)*pa->lifetime;
+			if(k==0)
+				(bel->keys)->time=pa->time;
+			else if(k==totkeys-1)
+				(bel->keys+k)->time=pa->time+pa->lifetime;
+			else{
+				if(psys->flag & PSYS_KEYED_TIME){
+					prevtime = (bel->keys+k-1)->time;
+					nexttime = pa->time+pa->lifetime;
+					keyedtime = kpsys->part->keyed_time;
+					(bel->keys+k)->time = (1.0f-keyedtime)*prevtime + keyedtime*nexttime;
+				}
+				else
+					(bel->keys+k)->time = pa->time + (float)k/(float)(totkeys-1)*pa->lifetime;
+			}
 		}
 		if(kpsys->keyed_ob){
 			kob=kpsys->keyed_ob;

Modified: branches/particles/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/particles/source/blender/blenloader/intern/readfile.c	2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/blenloader/intern/readfile.c	2007-08-16 21:31:51 UTC (rev 11628)
@@ -6759,8 +6759,10 @@
 			if(ob->soft){
 				SoftBody *sb=ob->soft;
 				BakeableSystem *bsys;
-				BLI_addhead(&ob->bakeable, DB_soft_to_BakeBase(ob,sb));
-				bsys=((BakeBase*)ob->bakeable.first)->bsys;
+				if((bsys=DB_find_bsys(&ob->bakeable,sb))==0){
+					BLI_addhead(&ob->bakeable, DB_soft_to_BakeBase(ob,sb));
+					bsys=((BakeBase*)ob->bakeable.first)->bsys;
+				}
 
 				if(sb->keys){
 					BakeElement *bel;

Modified: branches/particles/source/blender/makesdna/DNA_particle_types.h
===================================================================
--- branches/particles/source/blender/makesdna/DNA_particle_types.h	2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/makesdna/DNA_particle_types.h	2007-08-16 21:31:51 UTC (rev 11628)
@@ -70,7 +70,7 @@
 
 	/* general values */
 	float sta, end, lifetime, randlife;
-	float timetweak, jitfac;
+	float timetweak, jitfac, keyed_time, rt3;
 	int totpart, userjit, grid_res;
 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list