462
470
// load vertex velocities, if they exist...
463
471
// TODO? use generate flag as loading flag as well?
464
472
// warning, needs original .bobj.gz mesh loading filename
466
473
if(displaymode==3)
468
readVelgz(targetFile, srcob);
475
fluidsim_read_vel_cache(fluidmd, dm, targetFile);
472
// no data for preview, only clear...
474
for(i=0; i<mesh->totvert;i++) { for(j=0; j<3; j++) { srcob->fluidsimSettings->meshSurfNormals[i].co[j] = 0.; }}
479
if(fss->meshSurfNormals)
480
MEM_freeN(fss->meshSurfNormals);
482
fss->meshSurfNormals = NULL;
489
/* read zipped fluidsim velocities into the co's of the fluidsimsettings normals struct */
490
void fluidsim_read_vel_cache(FluidsimModifierData *fluidmd, DerivedMesh *dm, char *filename)
495
FluidsimSettings *fss = fluidmd->fss;
496
int len = strlen(filename);
497
int totvert = dm->getNumVerts(dm);
498
float *velarray = NULL;
500
// mesh and vverts have to be valid from loading...
502
if(fss->meshSurfNormals)
503
MEM_freeN(fss->meshSurfNormals);
510
if(fss->domainNovecgen>0) return;
512
// abusing pointer to hold an array of 3d-velocities
513
fss->meshSurfNormals = MEM_callocN(sizeof(float)*3*dm->getNumVerts(dm), "Fluidsim_velocities");
514
// abusing pointer to hold an INT
515
fss->meshSurface = SET_INT_IN_POINTER(totvert);
517
velarray = (float *)fss->meshSurfNormals;
519
// .bobj.gz , correct filename
521
filename[len-6] = 'v';
522
filename[len-5] = 'e';
523
filename[len-4] = 'l';
525
gzf = gzopen(filename, "rb");
528
MEM_freeN(fss->meshSurfNormals);
529
fss->meshSurfNormals = NULL;
533
gzread(gzf, &wri, sizeof( wri ));
536
MEM_freeN(fss->meshSurfNormals);
537
fss->meshSurfNormals = NULL;
541
for(i=0; i<totvert;i++)
545
gzread(gzf, &wrf, sizeof( wrf ));
546
velarray[3*i + j] = wrf;
480
553
void fluid_get_bb(MVert *mvert, int totvert, float obmat[][4],
481
554
/*RET*/ float start[3], /*RET*/ float size[3] )
586
/* read zipped fluidsim velocities into the co's of the fluidsimsettings normals struct */
587
void readVelgz(char *filename, Object *srcob)
592
MVert *vverts = srcob->fluidsimSettings->meshSurfNormals;
593
int len = strlen(filename);
594
Mesh *mesh = srcob->data;
595
// mesh and vverts have to be valid from loading...
597
// clean up in any case
598
for(i=0; i<mesh->totvert;i++)
602
vverts[i].co[j] = 0.;
605
if(srcob->fluidsimSettings->domainNovecgen>0) return;
612
// .bobj.gz , correct filename
614
filename[len-6] = 'v';
615
filename[len-5] = 'e';
616
filename[len-4] = 'l';
618
gzf = gzopen(filename, "rb");
622
gzread(gzf, &wri, sizeof( wri ));
623
if(wri != mesh->totvert)
628
for(i=0; i<mesh->totvert;i++)
632
gzread(gzf, &wrf, sizeof( wrf ));
633
vverts[i].co[j] = wrf;
641
659
#endif // DISABLE_ELBEEM