[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12444] branches/particles/source/blender: -A possible fix for a crash with keyed particles (possible because I wasn' t able to reproduce error even before the fix).
Janne Karhu
jhkarh at utu.fi
Wed Oct 31 18:25:42 CET 2007
Revision: 12444
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12444
Author: jhk
Date: 2007-10-31 18:25:41 +0100 (Wed, 31 Oct 2007)
Log Message:
-----------
-A possible fix for a crash with keyed particles (possible because I wasn't able to reproduce error even before the fix).
-Scaling and rotating crashed in particle mode. Now they work again, but the transform center is still drawn wrong.
Modified Paths:
--------------
branches/particles/source/blender/blenkernel/intern/particle.c
branches/particles/source/blender/include/transform.h
branches/particles/source/blender/src/transform.c
branches/particles/source/blender/src/transform_conversions.c
Modified: branches/particles/source/blender/blenkernel/intern/particle.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/particle.c 2007-10-31 16:28:07 UTC (rev 12443)
+++ branches/particles/source/blender/blenkernel/intern/particle.c 2007-10-31 17:25:41 UTC (rev 12444)
@@ -1776,6 +1776,10 @@
float sel_col[3];
float nosel_col[3];
+ /* we don't have anything valid to create paths from so let's quit here */
+ if((psys->flag & PSYS_HAIR_DONE)==0 && (psys->flag & PSYS_KEYED)==0)
+ return;
+
if(G.rendering)
steps = (int)pow(2.0, (double)psys->part->ren_step);
else if(ob==OBACT && psys->edit && G.f & G_PARTICLEEDIT && psys->flag&PSYS_CURRENT){
Modified: branches/particles/source/blender/include/transform.h
===================================================================
--- branches/particles/source/blender/include/transform.h 2007-10-31 16:28:07 UTC (rev 12443)
+++ branches/particles/source/blender/include/transform.h 2007-10-31 17:25:41 UTC (rev 12444)
@@ -269,8 +269,7 @@
#define TD_VERSE_VERT 64
#endif
#define TD_TIMEONLY 128
-#define TD_ROTSIZE 256 /* used for rotating particle velocity vector */
-#define TD_NO_EXT 512 /* ext abused for bake key timing */
+#define TD_NO_EXT 256 /* ext abused for particle key timing */
/* transsnap->status */
#define SNAP_ON 1
Modified: branches/particles/source/blender/src/transform.c
===================================================================
--- branches/particles/source/blender/src/transform.c 2007-10-31 16:28:07 UTC (rev 12443)
+++ branches/particles/source/blender/src/transform.c 2007-10-31 17:25:41 UTC (rev 12444)
@@ -1965,11 +1965,6 @@
Mat3MulSerie(fmat, td->mtx, mat, td->smtx, 0, 0, 0, 0, 0);
Mat3ToQuat(fmat, quat); // Actual transform
- if(td->flag & TD_ROTSIZE){
- VECCOPY(td->ext->size,td->ext->isize);
- QuatMulVecf(quat, td->ext->size);
- }
-
if(td->ext->quat){
QuatMul(td->ext->quat, quat, td->ext->iquat);
@@ -2052,11 +2047,6 @@
if(td->flag & TD_USEQUAT) {
Mat3MulSerie(fmat, td->mtx, mat, td->smtx, 0, 0, 0, 0, 0);
Mat3ToQuat(fmat, quat); // Actual transform
-
- if(td->flag & TD_ROTSIZE){
- VECCOPY(td->ext->size,td->ext->isize);
- QuatMulVecf(quat, td->ext->size);
- }
QuatMul(td->ext->quat, quat, td->ext->iquat);
/* this function works on end result */
Modified: branches/particles/source/blender/src/transform_conversions.c
===================================================================
--- branches/particles/source/blender/src/transform_conversions.c 2007-10-31 16:28:07 UTC (rev 12443)
+++ branches/particles/source/blender/src/transform_conversions.c 2007-10-31 17:25:41 UTC (rev 12444)
@@ -1361,37 +1361,26 @@
{
TransData *td = NULL;
TransDataExtension *tx;
- Base *base=BASACT;
- Object *ob=OBACT;
- ParticleSystem *spsys=0, *psys=PE_get_current(ob);
- ParticleSystemModifierData *psmd=0;
- ParticleData *pa=0;
+ Base *base = BASACT;
+ Object *ob = OBACT;
+ ParticleSystem *spsys=0, *psys = PE_get_current(ob);
+ ParticleSystemModifierData *psmd = NULL;
+ ParticleData *pa = NULL;
ParticleEdit *edit;
ParticleEditKey *key;
float mat[4][4], imat[4][4], tmat[4][4];
int i,k, totpart;
- int count=0, countsel=0;
+ int count = 0, countsel = 0;
int propmode = t->flag & T_PROP_EDIT;
- int key_space=0, soft=0;
+ int key_space = 0, soft = 0;
- if(psys==0 || G.scene->selectmode==SCE_SELECT_PATH) return;
+ if(psys==NULL || G.scene->selectmode==SCE_SELECT_PATH) return;
- //key_space=bsys->key_space;
+ psmd = psys_get_modifier(ob,psys);
+ pa = psys->particles;
- psmd= psys_get_modifier(ob,psys);
- pa= psys->particles;
-
- //if(psys->soft){
- // sbsys = DB_find_bsys(&ob->bakeable, bsys->soft);
- // if((sbsys->flag&BSYS_DONE && (sbsys->flag&BSYS_AUTOBAKE)==0)
- // || (sbsys->flag & BSYS_HAS_START && sbsys->flag & BSYS_EDIT_START))
- // key_space=sbsys->key_space;
- // else
- // sbsys=0;
- //}
-
- edit=psys->edit;
- totpart=psys->totpart;
+ edit = psys->edit;
+ totpart = psys->totpart;
base->flag |= BA_HAS_RECALC_DATA;
for(i=0, pa=psys->particles; i<totpart; i++, pa++){
@@ -1410,9 +1399,13 @@
if(propmode) t->total = count;
else t->total = countsel;
- td = t->data= MEM_callocN(t->total*sizeof(TransData), "TransObData(Bake EditMode)");
- tx = t->ext = MEM_callocN(t->total*sizeof(TransDataExtension), "Bake_TransExtension");
+ td = t->data = MEM_callocN(t->total * sizeof(TransData), "TransObData(Particle Mode)");
+ if(t->mode == TFM_BAKE_TIME)
+ tx = t->ext = MEM_callocN(t->total * sizeof(TransDataExtension), "Particle_TransExtension");
+ else
+ tx = t->ext = NULL;
+
Mat4One(mat);
Mat4One(imat);
@@ -1429,65 +1422,45 @@
Mat4Invert(imat,mat);
for(k=0, key=edit->keys[i]; k<pa->totkey; k++, key++){
- if((key->flag&PEK_HIDE)==0 && (propmode || key->flag&PEK_SELECT)){
- //if(sbsys)
- // td->loc= EB_nearest_key(sbsys,bsys->bp_key_index[i]+k)->co;
- //else
- td->loc= key->co;
+ if((key->flag & PEK_HIDE)==0 && (propmode || key->flag & PEK_SELECT)) {
+
+ td->loc = key->co;
VECCOPY(td->iloc, td->loc);
VECCOPY(td->center, td->loc);
- //tx->size = key->vel;
- //VECCOPY(tx->isize, key->vel);
+ if(key->flag & PEK_SELECT) td->flag |= TD_SELECTED;
- //td->flag = TD_USEQUAT;
+ Mat3CpyMat4(td->mtx, mat);
+ Mat3CpyMat4(td->smtx, imat);
- if(key->flag&PEK_SELECT) td->flag |= TD_SELECTED;
-
- Mat3CpyMat4(td->mtx,mat);
- Mat3CpyMat4(td->smtx,imat);
-
- /* apply rotation to velocity vector */
- //if(edit->flag & PE_ROT_VEL)
- // td->flag |= TD_ROTSIZE;
-
- /* don't apply rotations to particle rotation */
- //if((edit->flag & PE_ROT_ROT)==0)
- // td->protectflag |= OB_LOCK_ROTX|OB_LOCK_ROTY|OB_LOCK_ROTZ;
-
/* don't allow moving roots */
- if(k==0 && edit->flag&PE_LOCK_FIRST)
+ if(k==0 && edit->flag & PE_LOCK_FIRST)
td->protectflag |= OB_LOCK_LOC;
- td->ext=tx;
- td->tdi=0;
- if(t->mode == TFM_BAKE_TIME){
- td->val=key->time;
- td->ival=*(key->time);
+ td->ext = tx;
+ td->tdi = NULL;
+ if(t->mode == TFM_BAKE_TIME) {
+ td->val = key->time;
+ td->ival = *(key->time);
/* abuse size and quat for min/max values */
td->flag |= TD_NO_EXT;
- if(k==0) tx->size=0;
- else tx->size=(key-1)->time;
+ if(k==0) tx->size = 0;
+ else tx->size = (key - 1)->time;
- if(k==pa->totkey-1) tx->quat=0;
- else tx->quat=(key+1)->time;
+ if(k == pa->totkey - 1) tx->quat = 0;
+ else tx->quat = (key + 1)->time;
}
- else if(key->rot){
- tx->quat = key->rot;
- QUATCOPY(tx->iquat,tx->quat);
- }
- tx->rot=0;
-
td++;
- tx++;
+ if(tx)
+ tx++;
tail++;
}
}
if (propmode && head != tail)
- calc_distanceCurveVerts(head, tail-1);
+ calc_distanceCurveVerts(head, tail - 1);
}
}
/* ********************* mesh ****************** */
More information about the Bf-blender-cvs
mailing list