[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