static void fluidsimPrintChannel(FILE *file, float *channel, int paramsize, char *str, int entries) { int i, j; int channelSize = paramsize; if (entries == 3) { elbeemSimplifyChannelVec3(channel, &channelSize); } else if (entries == 1) { elbeemSimplifyChannelFloat(channel, &channelSize); } else { /* invalid, cant happen? */ } fprintf(file, " CHANNEL %s =\n", str); for (i=0; i < channelSize; i++) { fprintf(file, " "); for (j=0;j <= entries;j++) { // also print time value fprintf(file, " %f ", channel[i*(entries + 1) + j]); if (j == entries-1) { fprintf(file, " "); } } fprintf(file, "\n"); } fprintf(file, " ;\n"); }
static bool channelSimplifyScalarT(AnimChannel<SCALAR> &channel) { int size = channel.getSize(); if(size<=1) return false; float *nchannel = new float[2*size]; // convert to array for(size_t i=0; i<channel.accessValues().size(); i++) { nchannel[i*2 + 0] = (float)channel.accessValues()[i]; nchannel[i*2 + 1] = (float)channel.accessTimes()[i]; } bool ret = elbeemSimplifyChannelFloat(nchannel, &size); if(ret) { vector<SCALAR> vals; vector<double> times; for(int i=0; i<size; i++) { vals.push_back( (SCALAR)(nchannel[i*2 + 0]) ); times.push_back( (double)(nchannel[i*2 + 1]) ); } channel = AnimChannel<SCALAR>(vals, times); } delete [] nchannel; return ret; }