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");
}
Beispiel #2
0
static bool channelSimplifyVecT(AnimChannel<VEC> &channel) {
	int   size = channel.getSize();
	if(size<=1) return false;
	float *nchannel = new float[4*size];
	// convert to array
	for(size_t i=0; i<channel.accessValues().size(); i++) {
		nchannel[i*4 + 0] = (float)channel.accessValues()[i][0];
		nchannel[i*4 + 1] = (float)channel.accessValues()[i][1];
		nchannel[i*4 + 2] = (float)channel.accessValues()[i][2];
		nchannel[i*4 + 3] = (float)channel.accessTimes()[i];
	}
	bool ret = elbeemSimplifyChannelVec3(nchannel, &size);
	if(ret) {
		vector<VEC> vals;
		vector<double> times;
		for(int i=0; i<size; i++) {
			vals.push_back(  VEC(nchannel[i*4 + 0], nchannel[i*4 + 1], nchannel[i*4 + 2] ) );
			times.push_back( (double)(nchannel[i*4 + 3]) );
		}
		channel = AnimChannel<VEC>(vals, times);
	}
	delete [] nchannel;
	return ret;
}