[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12845] trunk/blender/source/blender:

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Dec 11 16:03:45 CET 2007


Revision: 12845
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12845
Author:   blendix
Date:     2007-12-11 16:03:45 +0100 (Tue, 11 Dec 2007)

Log Message:
-----------

Bugfixes for:
- Disabled particle modifiers in particle mode.
- Particle col option without material.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/particle.c
    trunk/blender/source/blender/include/butspace.h
    trunk/blender/source/blender/src/buttons_editing.c
    trunk/blender/source/blender/src/buttons_object.c
    trunk/blender/source/blender/src/editparticle.c

Modified: trunk/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle.c	2007-12-11 14:58:23 UTC (rev 12844)
+++ trunk/blender/source/blender/blenkernel/intern/particle.c	2007-12-11 15:03:45 UTC (rev 12845)
@@ -1730,7 +1730,7 @@
 			VECSUB((state-1)->vel,state->co,(state-2)->co);
 			VecMulf((state-1)->vel,0.5);
 
-			if(part->draw & PART_DRAW_MAT_COL)
+			if(ctx->ma && (part->draw & PART_DRAW_MAT_COL))
 				get_strand_normal(ctx->ma, ornor, cur_length, (state-1)->vel);
 		}
 
@@ -1754,7 +1754,7 @@
 			cur_length= 0.0f;
 		}
 
-		if(part->draw & PART_DRAW_MAT_COL) {
+		if(ctx->ma && (part->draw & PART_DRAW_MAT_COL)) {
 			VECCOPY(state->col, &ctx->ma->r)
 			get_strand_normal(ctx->ma, ornor, cur_length, state->vel);
 		}
@@ -1910,7 +1910,7 @@
 	
 	psys->lattice = psys_get_lattice(ob, psys);
 	ma= give_current_material(ob, psys->part->omat);
-	if(psys->part->draw & PART_DRAW_MAT_COL)
+	if(ma && (psys->part->draw & PART_DRAW_MAT_COL))
 		VECCOPY(col, &ma->r)
 
 	/*---first main loop: create all actual particles' paths---*/

Modified: trunk/blender/source/blender/include/butspace.h
===================================================================
--- trunk/blender/source/blender/include/butspace.h	2007-12-11 14:58:23 UTC (rev 12844)
+++ trunk/blender/source/blender/include/butspace.h	2007-12-11 15:03:45 UTC (rev 12845)
@@ -735,8 +735,8 @@
 #define B_PART_INIT_CHILD	3433
 #define B_PART_RECALC_CHILD	3434
 #define B_PART_EDITABLE		3435
-
 #define B_PART_REKEY		3436
+#define B_PART_ENABLE		3437
 
 #define B_MODIFIER_BUTS		3600
 

Modified: trunk/blender/source/blender/src/buttons_editing.c
===================================================================
--- trunk/blender/source/blender/src/buttons_editing.c	2007-12-11 14:58:23 UTC (rev 12844)
+++ trunk/blender/source/blender/src/buttons_editing.c	2007-12-11 15:03:45 UTC (rev 12845)
@@ -1643,10 +1643,13 @@
 {
 	ParticleSystemModifierData *psmd = (ParticleSystemModifierData*) md_v;
 
-	if(psmd->modifier.mode & eModifierMode_Realtime)
+	if(psmd->modifier.mode & eModifierMode_Realtime) {
 		psmd->psys->flag |= PSYS_ENABLED;
-	else
+	}
+	else {
 		psmd->psys->flag &= ~PSYS_ENABLED;
+		PE_free_particle_edit(psmd->psys);
+	}
 }
 
 static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco, int *yco, int index, int cageIndex, int lastCageIndex)

Modified: trunk/blender/source/blender/src/buttons_object.c
===================================================================
--- trunk/blender/source/blender/src/buttons_object.c	2007-12-11 14:58:23 UTC (rev 12844)
+++ trunk/blender/source/blender/src/buttons_object.c	2007-12-11 15:03:45 UTC (rev 12845)
@@ -2853,6 +2853,23 @@
 			allqueue(REDRAWOOPS, 0);
 		}
 		break;
+	case B_PART_ENABLE:
+		if(psys) {
+			ParticleSystemModifierData *psmd= psys_get_modifier(ob, psys);
+			if(psys->flag & PSYS_ENABLED) {
+				psmd->modifier.mode |= eModifierMode_Realtime;
+			}
+			else {
+				psmd->modifier.mode &= ~eModifierMode_Realtime;
+				PE_free_particle_edit(psys);
+			}
+
+			DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
+			allqueue(REDRAWVIEW3D, 0);
+			allqueue(REDRAWBUTSOBJECT, 0);
+			allqueue(REDRAWBUTSEDIT, 0);
+		}
+		break;
 	case B_PART_RECALC:
 	case B_PART_RECALC_CHILD:
 		if(psys){
@@ -4200,7 +4217,7 @@
 	butx=0;
 	buty-=5;
 	
-	uiDefButBitI(block, TOG, PSYS_ENABLED, B_PART_REDRAW, "Enabled",	 0,(buty-=buth),100,buth, &psys->flag, 0, 0, 0, 0, "Sets particle system to be calculated and shown");
+	uiDefButBitI(block, TOG, PSYS_ENABLED, B_PART_ENABLE, "Enabled",	 0,(buty-=buth),100,buth, &psys->flag, 0, 0, 0, 0, "Sets particle system to be calculated and shown");
 
 	if(part->type == PART_HAIR){
 		if(psys->flag & PSYS_EDITED)

Modified: trunk/blender/source/blender/src/editparticle.c
===================================================================
--- trunk/blender/source/blender/src/editparticle.c	2007-12-11 14:58:23 UTC (rev 12844)
+++ trunk/blender/source/blender/src/editparticle.c	2007-12-11 15:03:45 UTC (rev 12845)
@@ -155,9 +155,12 @@
 	if(act>=0){
 		if((psys=BLI_findlink(&ob->particlesystem,act))) {
 			psys->flag |= PSYS_CURRENT;
-			if(G.f & G_PARTICLEEDIT && !psys->edit)
-				PE_create_particle_edit(ob, psys);
-			PE_recalc_world_cos(ob, psys);
+
+			if(psys->flag & PSYS_ENABLED) {
+				if(G.f & G_PARTICLEEDIT && !psys->edit)
+					PE_create_particle_edit(ob, psys);
+				PE_recalc_world_cos(ob, psys);
+			}
 		}
 	}
 }
@@ -182,7 +185,7 @@
 		psys->flag |= PSYS_CURRENT;
 	}
 
-	if(psys && ob == OBACT && (G.f & G_PARTICLEEDIT))
+	if(psys && (psys->flag & PSYS_ENABLED) && ob == OBACT && (G.f & G_PARTICLEEDIT))
 		if(psys->part->type == PART_HAIR && psys->flag & PSYS_EDITED)
 			if(psys->edit == NULL)
 				PE_create_particle_edit(ob, psys);
@@ -1098,9 +1101,11 @@
 
 	if((G.f & G_PARTICLEEDIT)==0){
 		if(psys && psys->part->type == PART_HAIR && psys->flag & PSYS_EDITED) {
-			if(psys->edit==0)
-				PE_create_particle_edit(ob, psys);
-			PE_recalc_world_cos(ob, psys);
+			if(psys->flag & PSYS_ENABLED) {
+				if(psys->edit==0)
+					PE_create_particle_edit(ob, psys);
+				PE_recalc_world_cos(ob, psys);
+			}
 		}
 
 		G.f |= G_PARTICLEEDIT;
@@ -2582,6 +2587,7 @@
 				if(pset->brushtype == PE_BRUSH_ADD && (pset->flag & PE_X_MIRROR))
 					PE_mirror_x(1);
 				PE_recalc_world_cos(ob,psys);
+				psys_free_path_cache(psys);
 				DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
 			}
 			else





More information about the Bf-blender-cvs mailing list