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

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Nov 27 12:17:52 CET 2007


Revision: 12687
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12687
Author:   blendix
Date:     2007-11-27 12:17:52 +0100 (Tue, 27 Nov 2007)

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

Particles
=========

- Fix for bug #7840: adding particle system to nurbs, curves crashes.
  Now simply doesn't allow to add a particle system to a non-mesh
  object, the current code does not support it.
- Fix for bug #7834: deleting vertices of an object with a particle
  system crashes. Fixed by disabling particle display for objects in
  editmode.
- Fix for the particle add brush on subsurfed objects.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/modifier.c
    trunk/blender/source/blender/blenkernel/intern/particle.c
    trunk/blender/source/blender/blenkernel/intern/particle_system.c
    trunk/blender/source/blender/src/buttons_object.c
    trunk/blender/source/blender/src/drawobject.c
    trunk/blender/source/blender/src/editparticle.c

Modified: trunk/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/modifier.c	2007-11-27 09:59:18 UTC (rev 12686)
+++ trunk/blender/source/blender/blenkernel/intern/modifier.c	2007-11-27 11:17:52 UTC (rev 12687)
@@ -5164,8 +5164,6 @@
 		if(psmd->flag & eParticleSystemFlag_Loaded)
 			psmd->flag &= ~eParticleSystemFlag_Loaded;
 		else{
-			/* TODO PARTICLE - Added this so changing subsurf under hair updates it
-			should it be done elsewhere? - Campbell */
 			psys->recalc |= PSYS_RECALC_HAIR;
 			psys->recalc |= PSYS_DISTR;
 			psmd->flag |= eParticleSystemFlag_DM_changed;
@@ -5179,6 +5177,9 @@
 	}
 }
 
+/* disabled particles in editmode for now, until support for proper derivedmesh
+ * updates is coded */
+#if 0
 static void particleSystemModifier_deformVertsEM(
                 ModifierData *md, Object *ob, EditMesh *editData,
                 DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
@@ -5191,6 +5192,7 @@
 
 	if(!derivedData) dm->release(dm);
 }
+#endif
 
 /* Particle Instance */
 static void particleInstanceModifier_initData(ModifierData *md) 
@@ -6757,14 +6759,18 @@
 
 		mti = INIT_TYPE(ParticleSystem);
 		mti->type = eModifierTypeType_OnlyDeform;
-		mti->flags = eModifierTypeFlag_AcceptsMesh
+		mti->flags = eModifierTypeFlag_AcceptsMesh;
+#if 0
 					|eModifierTypeFlag_SupportsEditmode
 					|eModifierTypeFlag_EnableInEditmode;
+#endif
 		mti->initData = particleSystemModifier_initData;
 		mti->freeData = particleSystemModifier_freeData;
 		mti->copyData = particleSystemModifier_copyData;
 		mti->deformVerts = particleSystemModifier_deformVerts;
+#if 0
 		mti->deformVertsEM = particleSystemModifier_deformVertsEM;
+#endif
 		mti->requiredDataMask = particleSystemModifier_requiredDataMask;
 
 		mti = INIT_TYPE(ParticleInstance);

Modified: trunk/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle.c	2007-11-27 09:59:18 UTC (rev 12686)
+++ trunk/blender/source/blender/blenkernel/intern/particle.c	2007-11-27 11:17:52 UTC (rev 12687)
@@ -583,7 +583,7 @@
 	if(osface==NULL || origindex==NULL) {
 		/* Assume we dont need osface data */
 		if (index <totface) {
-			printf("\tNO CD_ORIGSPACE, assuming not needed\n");
+			//printf("\tNO CD_ORIGSPACE, assuming not needed\n");
 			return index;
 		} else {
 			printf("\tNO CD_ORIGSPACE, error out of range\n");
@@ -645,7 +645,7 @@
 		/* this works for meshes with deform verts only - constructive modifiers wont work properly*/
 		float temp1[3];
 
-		if(index_dmcache == DMCACHE_ISCHILD && index >= dm->getNumFaces(dm)) {
+		if(index >= dm->getNumFaces(dm)) {
 			PARTICLE_ERROR(nor, vec);
 			return;
 		}

Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c	2007-11-27 09:59:18 UTC (rev 12686)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c	2007-11-27 11:17:52 UTC (rev 12687)
@@ -4006,7 +4006,7 @@
 {
 	ParticleSettings *part = psys->part;
 
-	if(psys->recalc & PSYS_DISTR){
+	if(psys->recalc & PSYS_DISTR) {
 		/* need this for changing subsurf levels */
 		psys_calc_dmfaces(ob, psmd->dm, psys);
 	}

Modified: trunk/blender/source/blender/src/buttons_object.c
===================================================================
--- trunk/blender/source/blender/src/buttons_object.c	2007-11-27 09:59:18 UTC (rev 12686)
+++ trunk/blender/source/blender/src/buttons_object.c	2007-11-27 11:17:52 UTC (rev 12687)
@@ -4656,7 +4656,7 @@
 
 	ob=OBACT;
 
-	if(ob) {
+	if(ob && ob->type==OB_MESH) {
 		object_panel_particle_system(ob);
 
 		psys=psys_get_current(ob);

Modified: trunk/blender/source/blender/src/drawobject.c
===================================================================
--- trunk/blender/source/blender/src/drawobject.c	2007-11-27 09:59:18 UTC (rev 12686)
+++ trunk/blender/source/blender/src/drawobject.c	2007-11-27 11:17:52 UTC (rev 12687)
@@ -5038,7 +5038,7 @@
 	if(ob->pd && ob->pd->forcefield) draw_forcefield(ob);
 
 	/* code for new particle system */
-	if(warning_recursive==0 && (flag & DRAW_PICKING)==0){
+	if(warning_recursive==0 && (flag & DRAW_PICKING)==0 && ob!=G.obedit){
 		glDepthMask(GL_FALSE);
 		if(col || (ob->flag & SELECT)) cpack(0xFFFFFF);	/* for visibility, also while wpaint */
 		if(ob->particlesystem.first) {

Modified: trunk/blender/source/blender/src/editparticle.c
===================================================================
--- trunk/blender/source/blender/src/editparticle.c	2007-11-27 09:59:18 UTC (rev 12686)
+++ trunk/blender/source/blender/src/editparticle.c	2007-11-27 11:17:52 UTC (rev 12687)
@@ -2134,7 +2134,7 @@
 		/* warning, returns the derived mesh face */
 #if EXPERIMENTAL_DEFORM_ONLY_PAINTING
 		if(psys_intersect_dm(ob,dm,0,co1,co2,&min_d,&add_pars[n].num,add_pars[n].fuv,0,0,0,0)) {
-			add_pars[n].num_dmcache= psys_particle_dm_face_lookup(ob,dm,add_pars[n].num,add_pars[n].fuv,NULL);
+			add_pars[n].num_dmcache= psys_particle_dm_face_lookup(ob,psmd->dm,add_pars[n].num,add_pars[n].fuv,NULL);
 			n++;
 		}
 #else





More information about the Bf-blender-cvs mailing list