POV-Ray : Newsgroups : povray.programming : DF3 utility : DF3 utility Server Time
8 May 2024 07:40:14 EDT (-0400)
  DF3 utility  
From: Woody
Date: 25 Jan 2008 08:35:01
Message: <web.4799e4c49ec55a3e94e61a50@news.povray.org>
I'm trying to create a utility that converts a text file (testdata.txt) into a
df3 file (testdata.df3). It takes a file that might look like

3 3 3
0 1 2 255
0 2 0 128

(first 3 characters are the dimensions,
next 3 characters are the index, next character is the value,
next 3 characters are the index, next character is the value,
etc.)

No matter what I try, and no matter what values I use in the input file, when it
comes time to render I either get an interior of completely filled, or empty.

I'm not proficient enough with C++ to know what I'm doing wrong. The source code
for using vc++ is as follows



#include <iostream>
#include <fstream>

using namespace std;
// max min functions
float max(float n1, float n2){
 if(n1>=n2){return n1;}
 else{return n2;}
}

float min(float n1, float n2){
 if(n1>=n2){return n2;}
 else{return n1;}

}


int main(){


int nx_size, ny_size, nz_size, nt; // dimensions
int vx, vy, vz;
float vt;
int s;
char dxb, dxe, dyb, dye, dzb, dze;
char char_send;
char curr='t';
float ***new_arr;
float themin=1e32,themax=-1e32;
char v;
float float_send;







ifstream inFile; // On the stack
ofstream outFile; // On the stack

outFile.open( "testdata.df3", ios::binary );
inFile.open( "testdata.txt", ios::binary );


// Create Array
inFile >> nx_size >> ny_size >> nz_size ;
new_arr = new float**[nx_size];
 for(int i=0;i<nx_size;i++)
  new_arr[i]=new float*[ny_size];
 for(int i=0;i<nx_size;i++)
  for(int j=0;j<ny_size;j++)
   new_arr[i][j] = new float[nz_size];
// Write headers
        dxb = (nx_size >> 8);
        dxe = (nx_size & 0xff);
        dyb = (ny_size >> 8);
        dye = (ny_size & 0xff);
        dzb = (nz_size >> 8);
        dze = (nz_size & 0xff);
        outFile.write( &dxb, sizeof(dxb) );
        outFile.write( &dxe, sizeof(dxe) );
        outFile.write( &dxb, sizeof(dyb) );
        outFile.write( &dxe, sizeof(dye) );
        outFile.write( &dxb, sizeof(dzb) );
        outFile.write( &dxe, sizeof(dze) );

// Initialize with 0s
for(int i=0;i<nx_size;i++)
  for(int j=0;j<ny_size;j++)
   for(int k=0;k<nz_size;k++)
   new_arr[i][j][k]=0;



// Get data
while(inFile){

 inFile >> s;

 if(inFile){
  switch(curr){
   case 'x': curr='y'; break;
   case 'y': curr='z'; break;
   case 'z': curr='t'; break;
   case 't': curr='x'; break;

  }

  switch(curr){
   case 'x':
    vx=s; break;
   case 'y':
    vy=s; break;
   case 'z':
    vz=s; break;
   case 't':
    vt=s;
    new_arr[vx][vy][vz]=vt;
    break;
  }

 }
 else{
  if(curr!='t'){
   cout << "missing parameter"<< endl;
  }
 }



}

// Write Data
   for (int i=0;i<nx_size;i++) {
      for (int j=0;j<ny_size;j++) {
         for (int k=0;k<nz_size;k++) {
            themax = max(themax,new_arr[i][j][k]);
            themin = min(themin,new_arr[i][j][k]);
         }
      }
   }
   if (themin >= themax) {
       themax = themin + 1;
       themin -= 1;
   }
   for (int k=0;k<nz_size;k++) {
      for (int j=0;j<ny_size;j++) {
         for (int i=0;i<nx_size;i++) {
 v = (char)(255 * (new_arr[i][j][k]-themin)/(themax-themin));
    outFile.write( &v, sizeof(v) );
         }
      }
   }


 outFile.close();
 inFile.close();
 return 0;
}


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.