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

Janne Karhu janne.karhu at utu.fi
Wed Jun 20 12:24:33 CEST 2007


Revision: 10983
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=10983
Author:   jhk
Date:     2007-06-20 12:24:33 +0200 (Wed, 20 Jun 2007)

Log Message:
-----------
*bugs fixed
	-adding an e_size ipo (probably others too) crashed
	-baked particles didn't respect emitter object's time ipo
	-reactor particles crashed when exiting
	-adding particles followed by alt-a crashed on some systems
*new things
	-more comments & code cleanup
	-many warnings removed
	-reactor velocity variable
	-reactors handle velocity better
	-renamed particle tabs to fit the names better

Modified Paths:
--------------
    branches/particles/source/blender/blenkernel/BKE_particle.h
    branches/particles/source/blender/blenkernel/intern/modifier.c
    branches/particles/source/blender/blenkernel/intern/particle.c
    branches/particles/source/blender/blenkernel/intern/particle_edit.c
    branches/particles/source/blender/blenkernel/intern/particle_system.c
    branches/particles/source/blender/makesdna/DNA_particle_types.h
    branches/particles/source/blender/render/intern/source/convertblender.c
    branches/particles/source/blender/src/buttons_object.c
    branches/particles/source/blender/src/drawobject.c
    branches/particles/source/blender/src/editipo.c

Modified: branches/particles/source/blender/blenkernel/BKE_particle.h
===================================================================
--- branches/particles/source/blender/blenkernel/BKE_particle.h	2007-06-20 09:58:16 UTC (rev 10982)
+++ branches/particles/source/blender/blenkernel/BKE_particle.h	2007-06-20 10:24:33 UTC (rev 10983)
@@ -2,6 +2,7 @@
 #define BKE_PARTICLE_H
 
 #include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
 #include "DNA_particle_types.h"
 
 struct ParticleSystemModifierData;
@@ -241,4 +242,4 @@
 #define PSYS_BRUSH_WEIGHT	6
 #define PSYS_BRUSH_SMOOTH	7
 
-#endif
\ No newline at end of file
+#endif

Modified: branches/particles/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/modifier.c	2007-06-20 09:58:16 UTC (rev 10982)
+++ branches/particles/source/blender/blenkernel/intern/modifier.c	2007-06-20 10:24:33 UTC (rev 10983)
@@ -4916,309 +4916,6 @@
 
 	return dataMask;
 }
-static int dm_from_curve(Object *ob, float (*vertexCos)[3], DerivedMesh *dm)
-{
-	//ParticleSystemModifierData *psmd= (ParticleSystemModifierData*) md;
-	//ParticleSystem * psys=0;
-	Curve *cu = ob->data;
-	Nurb *nu=0;
-	DispList *dl=0;
-	MVert *mvert=0;
-	MEdge *medge=0;
-	static int totvert=0,totedge=0,totface=0;
-	static int ntotvert=0,ntotedge=0,ntotface=0;
-	static int curvecount=0, totcurve=0;
-	int i, c, ctotvert=0, ctotedge=0;
-	float co[3],nor[3];
-
-	if(curvecount==0){
-		ntotvert=0;
-		ntotedge=0;
-		ntotface=0;
-		totcurve=0;
-		for(dl=cu->disp.first, nu=cu->nurb.first; dl; dl=dl->next, nu=nu->next){
-			ntotvert+=dl->nr;
-			ntotedge+=dl->nr-1;
-			if(nu && nu->flagu & CU_CYCLIC)
-				ntotedge++;
-			totcurve++;
-		}
-
-		/* make new dm */
-		dm=CDDM_new(ntotvert,ntotedge,ntotface);
-		dm->needsFree = 1;
-	}
-
-	/* get to the current curve */
-	dl=cu->disp.first;
-	nu=cu->nurb.first;
-	for(c=0; c<curvecount; c++){
-		ctotvert+=dl->nr;
-		ctotedge+=dl->nr-1;
-		if(nu && nu->flagu & CU_CYCLIC)
-			ctotedge++;
-		if(dl->next){
-			dl=dl->next;
-			if(nu)
-				nu=nu->next;
-		}
-	}
-
-	mvert=dm->getVertArray(dm);
-	medge=dm->getEdgeArray(dm);
-
-	mvert+=ctotvert;
-	medge+=ctotedge;
-
-	for(i=0; i<dl->nr; i++,mvert++){
-		VECCOPY(mvert->co,vertexCos[i]);
-		if(i){
-			if(i-1<dl->nr){
-				VECSUB(nor,vertexCos[i-1],vertexCos[i+1]);
-			}
-			else{
-				VECSUB(nor,vertexCos[i-1],vertexCos[i]);
-			}
-		}
-		else{
-			VECSUB(nor,vertexCos[i],vertexCos[i+1]);
-		}
-		Normalize(nor);
-
-		mvert->no[0]= (short int)(nor[0]*32767.0);
-		mvert->no[1]= (short int)(nor[1]*32767.0);
-		mvert->no[2]= (short int)(nor[2]*32767.0);
-
-		if(i){
-			medge->v1=ctotvert+i-1;
-			medge->v2=ctotvert+i;
-			medge++;
-		}
-	}
-	if(nu && nu->flagu & CU_CYCLIC){
-		medge->v1=ctotvert+dl->nr-1;
-		medge->v2=ctotvert;
-		mvert=dm->getVertArray(dm);
-		VECSUB(mvert->no,vertexCos[1],vertexCos[dl->nr-1]);
-		Normalize(mvert->no);
-		mvert+=dl->nr-1;
-		VECSUB(mvert->no,vertexCos[0],vertexCos[dl->nr-2]);
-		Normalize(mvert->no);
-	}
-
-	curvecount++;
-
-	if(curvecount==totcurve){
-		curvecount=0;
-		return 1;
-	}
-
-	return 0;
-}
-static int dm_from_nurbs(Object *ob, float (*vertexCos)[3], DerivedMesh *dm)
-{
-	Curve *cu = ob->data;
-	static int curvecount=0, totcurve=0;
-
-	if(curvecount==0){
-		DispList *dl;
-
-		totcurve=0;
-		for(dl=cu->disp.first; dl; dl=dl->next){
-			totcurve++;
-		}
-	}
-
-	curvecount++;
-
-	if(curvecount==totcurve){
-		Object *ob1;
-		DispList *dl;
-		Mesh *me;
-		Curve *cu;
-		MVert *mvert;
-		MFace *mface;
-		float *data;
-		int a, b, ofs, vertcount, startvert, totvert=0, totvlak=0;
-		int p1, p2, p3, p4, *index;
-
-		cu= ob->data;
-
-		/* count */
-		dl= cu->disp.first;
-		while(dl) {
-			if(dl->type==DL_SEGM) {
-				totvert+= dl->parts*dl->nr;
-				totvlak+= dl->parts*(dl->nr-1);
-			}
-			else if(dl->type==DL_POLY) {
-				/* cyclic polys are filled. except when 3D */
-				if(cu->flag & CU_3D) {
-					totvert+= dl->parts*dl->nr;
-					totvlak+= dl->parts*dl->nr;
-				}
-			}
-			else if(dl->type==DL_SURF) {
-				totvert+= dl->parts*dl->nr;
-				totvlak+= (dl->parts-1+((dl->flag & DL_CYCL_V)==2))*(dl->nr-1+(dl->flag & DL_CYCL_U));
-			}
-			else if(dl->type==DL_INDEX3) {
-				totvert+= dl->nr;
-				totvlak+= dl->parts;
-			}
-			dl= dl->next;
-		}
-		if(totvert==0) {
-			error("didn't work :(");
-			return 0;
-		}
-
-				/* make new dm */
-		dm=CDDM_new(totvert,0,totvlak);
-		dm->needsFree = 1;
-
-		mvert=dm->getVertArray(dm);
-		mface=dm->getFaceArray(dm);
-
-		/* verts and faces */
-		vertcount= 0;
-
-		dl= cu->disp.first;
-		while(dl) {
-			if(dl->type==DL_SEGM) {
-				startvert= vertcount;
-				a= dl->parts*dl->nr;
-				data= dl->verts;
-				while(a--) {
-					VECCOPY(mvert->co, data);
-					data+=3;
-					vertcount++;
-					mvert++;
-				}
-
-				for(a=0; a<dl->parts; a++) {
-					ofs= a*dl->nr;
-					for(b=1; b<dl->nr; b++) {
-						mface->v1= startvert+ofs+b-1;
-						mface->v2= startvert+ofs+b;
-						mface++;
-					}
-				}
-
-			}
-			else if(dl->type==DL_POLY) {
-				/* 3d polys are not filled */
-				if(cu->flag & CU_3D) {
-					startvert= vertcount;
-					a= dl->parts*dl->nr;
-					data= dl->verts;
-					while(a--) {
-						VECCOPY(mvert->co, data);
-						data+=3;
-						vertcount++;
-						mvert++;
-					}
-		
-					for(a=0; a<dl->parts; a++) {
-						ofs= a*dl->nr;
-						for(b=0; b<dl->nr; b++) {
-							mface->v1= startvert+ofs+b;
-							if(b==dl->nr-1) mface->v2= startvert+ofs;
-							else mface->v2= startvert+ofs+b+1;
-							mface++;
-						}
-					}
-				}
-			}
-			else if(dl->type==DL_INDEX3) {
-				startvert= vertcount;
-				a= dl->nr;
-				data= dl->verts;
-				while(a--) {
-					VECCOPY(mvert->co, data);
-					data+=3;
-					vertcount++;
-					mvert++;
-				}
-
-				a= dl->parts;
-				index= dl->index;
-				while(a--) {
-					mface->v1= startvert+index[0];
-					mface->v2= startvert+index[1];
-					mface->v3= startvert+index[2];
-					mface->v4= 0;
-					test_index_face(mface, NULL, 0, 3);
-					
-					mface++;
-					index+= 3;
-				}
-		
-		
-			}
-			else if(dl->type==DL_SURF) {
-				startvert= vertcount;
-				a= dl->parts*dl->nr;
-				data= dl->verts;
-				while(a--) {
-					VECCOPY(mvert->co, data);
-					data+=3;
-					vertcount++;
-					mvert++;
-				}
-
-				for(a=0; a<dl->parts; a++) {
-
-					if( (dl->flag & DL_CYCL_V)==0 && a==dl->parts-1) break;
-
-					if(dl->flag & DL_CYCL_U) {			/* p2 -> p1 -> */
-						p1= startvert+ dl->nr*a;	/* p4 -> p3 -> */
-						p2= p1+ dl->nr-1;		/* -----> next row */
-						p3= p1+ dl->nr;
-						p4= p2+ dl->nr;
-						b= 0;
-					}
-					else {
-						p2= startvert+ dl->nr*a;
-						p1= p2+1;
-						p4= p2+ dl->nr;
-						p3= p1+ dl->nr;
-						b= 1;
-					}
-					if( (dl->flag & DL_CYCL_V) && a==dl->parts-1) {
-						p3-= dl->parts*dl->nr;
-						p4-= dl->parts*dl->nr;
-					}
-
-					for(; b<dl->nr; b++) {
-						mface->v1= p1;
-						mface->v2= p3;
-						mface->v3= p4;
-						mface->v4= p2;
-						mface->mat_nr= (unsigned char)dl->col;
-						test_index_face(mface, NULL, 0, 4);
-						mface++;
-
-						p4= p3; 
-						p3++;
-						p2= p1; 
-						p1++;
-					}
-				}
-
-			}
-
-			dl= dl->next;
-		}
-
-		CDDM_calc_edges(dm);
-		CDDM_calc_normals(dm);
-
-		curvecount=0;
-		return 1;
-	}
-	else return 0;
-}
 static int is_last_displist(Object *ob)
 {
 	Curve *cu = ob->data;
@@ -5262,7 +4959,7 @@
 			needsFree=1;
 		}
 		else if(ELEM3(ob->type,OB_FONT,OB_CURVE,OB_SURF)){
-			Object *tmpobj, *editob=0;
+			Object *tmpobj;
 			Curve *tmpcu;
 
 			if(is_last_displist(ob)){
@@ -5282,12 +4979,6 @@
 
 				free_libblock_us( &G.main->object, tmpobj );
 
-				//free_object(tmpobj);
-
-				/* we need to gather all curve parts so if not finished the first time */
-				/* bail out and wait for more parts */
-				//if(dm_from_nurbs(ob,(float(*)[3]) vertexCos, dm)==0) return;
-
 				needsFree=1;
 			}
 			else return;
@@ -5485,7 +5176,7 @@
 		if(psys->flag & PSYS_BAKED && pimd->flag & eParticleInstanceFlag_Path){
 			state.time=(mv->co[0]-min_co)/(max_co-min_co);
 			if(trackneg)
-				state.time=1.0-state.time;
+				state.time=1.0f-state.time;
 			get_particle_on_path(pimd->ob,psys,first_particle + i/totvert,&state,1);
 		}
 		else{
@@ -6176,15 +5867,13 @@
 {
 	DerivedMesh *explode, *dm=to_explode;
 	MFace *mf=0;
-	//*mface=CDDM_get_faces(dm);
 	MVert *dupvert=0;
 	ParticleSettings *part=psmd->psys->part;
 	ParticleData *pa, *pars=psmd->psys->particles;
 	ParticleKey state;
-	//ListBase *lb;
 	float *vertco=0, imat[4][4];
-	float loc0[3], nor[3], axis_rot[4], axis[3], quat1[4]={1.0,0.0,0.0,0.0};
-	float rotfac, timefac, timestep, angle, cfra=bsystem_time(ob,0,(float)G.scene->r.cfra,0.0);
+	float loc0[3], nor[3], axis_rot[4], quat1[4]={1.0,0.0,0.0,0.0};
+	float timefac, timestep, cfra=bsystem_time(ob,0,(float)G.scene->r.cfra,0.0);
 	int *facepa=emd->facepa, *vertpa=0;
 	int totdup=0,totvert=0,totface=0,totpart=0;
 	int i, j, v, mindex=0;

Modified: branches/particles/source/blender/blenkernel/intern/particle.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/particle.c	2007-06-20 09:58:16 UTC (rev 10982)
+++ branches/particles/source/blender/blenkernel/intern/particle.c	2007-06-20 10:24:33 UTC (rev 10983)
@@ -208,10 +208,10 @@
 	short newact = ob->partact;
 
 	if(G.f & G_PARTICLEEDIT){
-		ob->partact = oldact;
+		ob->partact = (char)oldact;
 		set_particleedit(); /* end old particle system edit */
 
-		ob->partact = newact;
+		ob->partact = (char)newact;
 		set_particleedit(); /* start new particle system edit */
 	}
 }
@@ -254,25 +254,6 @@
 		psys->totcached=0;
 	}
 }
-static void free_particle_keys(ParticleSystem *psys)
-{
-	int p,totpart;
-	ParticleKey **keys;
-
-	if(psys==NULL)
-		return;
-
-	if(psys->keys==NULL)
-		return;
-
-	totpart= psys->totpart;
-	keys=psys->keys;
-
-	for(p=0; p<totpart; p++){
-		if(keys[p]) MEM_freeN(keys[p]);
-	}
-	if(psys->keys) MEM_freeN(psys->keys);
-}
 void particle_system_free_bake(ParticleSystem *psys)
 {
 	ParticleData *pa;
@@ -390,10 +371,11 @@
 /* by place number or pointer */
 void remove_from_particle_list(Object *ob, short nbr, ParticleSystem *psys)
 {
-	ListBase *lb;
-	pNewEffectorCache *ec;
-	Object *eob;
-	ParticleSystem *epsys, *opsys=0;
+	//ListBase *lb;
+	//pNewEffectorCache *ec;
+	//Object *eob;
+	//ParticleSystem *epsys;
+	ParticleSystem *opsys=0;
 	short i;
 
 	if(ob==0) return;
@@ -409,18 +391,19 @@
 		if(psys==0)
 			opsys=ob->particleSystem[nbr];
 
-		/* correct particle & reactor effectors */
-		lb=&opsys->effectors;
-		if(lb->first) for(ec = lb->first; ec; ec= ec->next){

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list