<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" id="owaParaStyle"></style>
</head>
<body fpstyle="1" ocsi="0">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;"><span style="font-size: 13.3333px;">Hi there,</span><span style="font-size: 13.3333px;"></span>
<div style="font-size: 13.3333px;"><br>
</div>
<div style="font-size: 13.3333px;">I have assignment where data is produced in C, and i have to export it to a relevant file format that works with a visualisation software of my choice.</div>
<div style="font-size: 13.3333px;"><br>
</div>
<div style="font-size: 13.3333px;">I've chosen Paraview, because i know that CSV files work with this software. </div>
<div style="font-size: 13.3333px;"><br>
</div>
<div style="font-size: 13.3333px;">Rather than table to points, i want to be able to convert the points to a volumetric dataset... So i can have greater control over colour mapping. But i was told that the code that generates the dataset is missing some data,
 or i may have missed something in the way i export the file. </div>
<div style="font-size: 13.3333px;"><br>
</div>
<div style="font-size: 13.3333px;">I've included the code below; i would love some help with this. I'm only decent with coding in Java and my lecturer has really given the class a lot of support.</div>
<div style="font-size: 13.3333px;"><br>
</div>
<div style="font-size: 13.3333px;">Cheers</div>
<div style="font-size: 13.3333px;"><br>
</div>
<div style="font-size: 13.3333px;">
<div>#include<stdio.h></div>
<div>#include<math.h></div>
<div>#include<string.h></div>
<div>#include<stdlib.h></div>
<div><br>
</div>
<div>void gen_sally( int xs, int ys, int zs, int time, float *sally )</div>
<div>/*</div>
<div> *  Gen_Sally creates a vector field of dimension [xs,ys,zs,3] from</div>
<div> *  a proceedural function. By passing in different time arguements,</div>
<div> *  a slightly different and rotating field is created.</div>
<div> *</div>
<div> *  The magnitude of the vector field is highest at some funnel shape</div>
<div> *  and values range from 0.0 to around 0.4 (I think).</div>
<div> *</div>
<div> *  I just wrote these comments, 8 years after I wrote the function.</div>
<div> *  </div>
<div> *  Developed by Sally of Sally University</div>
<div> *</div>
<div> */</div>
<div>{</div>
<div>  float x, y, z;</div>
<div>  int ix, iy, iz;</div>
<div>  float r, xc, yc, scale, temp, z0;</div>
<div>  float r2 = 8;</div>
<div>  float SMALL = 0.00000000001;</div>
<div>  float xdelta = 1.0 / (xs-1.0);</div>
<div>  float ydelta = 1.0 / (ys-1.0);</div>
<div>  float zdelta = 1.0 / (zs-1.0);</div>
<div><br>
</div>
<div>  for( iz = 0; iz < zs; iz++ )</div>
<div>  {</div>
<div><span style="white-space: pre;"></span>z = iz * zdelta;                        // map z to 0->1</div>
<div><span style="white-space: pre;"></span>xc = 0.5 + 0.1*sin(0.04*time+10.0*z);   // For each z-slice, determine the spiral circle.</div>
<div><span style="white-space: pre;"></span>yc = 0.5 + 0.1*cos(0.03*time+3.0*z);    //    (xc,yc) determine the center of the circle.</div>
<div><span style="white-space: pre;"></span>r = 0.1 + 0.4 * z*z + 0.1 * z * sin(8.0*z); //  The radius also changes at each z-slice.</div>
<div><span style="white-space: pre;"></span>r2 = 0.2 + 0.1*z;                           //    r is the center radius, r2 is for damping</div>
<div><span style="white-space: pre;"></span>for( iy = 0; iy < ys; iy++ )</div>
<div><span style="white-space: pre;"></span>{</div>
<div><span style="white-space: pre;"></span>y = iy * ydelta;</div>
<div><span style="white-space: pre;"></span>for( ix = 0; ix < xs; ix++ )</div>
<div><span style="white-space: pre;"></span>{</div>
<div><span style="white-space: pre;"></span>x = ix * xdelta;</div>
<div><span style="white-space: pre;"></span>temp = sqrt( (y-yc)*(y-yc) + (x-xc)*(x-xc) );</div>
<div><span style="white-space: pre;"></span>scale = fabs( r - temp );</div>
<div>/*</div>
<div> *  I do not like this next line. It produces a discontinuity </div>
<div> *  in the magnitude. Fix it later.</div>
<div> *</div>
<div> */</div>
<div><span style="white-space: pre;"></span>   if ( scale > r2 )</div>
<div><span style="white-space: pre;"></span>  scale = 0.8 - scale;</div>
<div><span style="white-space: pre;"></span>   else</div>
<div><span style="white-space: pre;"></span>  scale = 1.0;</div>
<div><span style="white-space: pre;"></span>z0 = 0.1 * (0.1 - temp*z );</div>
<div><span style="white-space: pre;"></span>   if ( z0 < 0.0 )  z0 = 0.0;</div>
<div><span style="white-space: pre;"></span>   temp = sqrt( temp*temp + z0*z0 );</div>
<div><span style="white-space: pre;"></span>scale = (r + r2 - temp) * scale / (temp + SMALL);</div>
<div><span style="white-space: pre;"></span>scale = scale / (1+z);</div>
<div><span style="white-space: pre;"></span>   *sally++ = scale * (y-yc) + 0.1*(x-xc);</div>
<div><span style="white-space: pre;"></span>   *sally++ = scale * -(x-xc) + 0.1*(y-yc);</div>
<div><span style="white-space: pre;"></span>   *sally++ = scale * z0;</div>
<div><span style="white-space: pre;"></span>}</div>
<div><span style="white-space: pre;"></span>}</div>
<div>  }</div>
<div>}</div>
<div><br>
</div>
<div><br>
</div>
<div>void create_csv(char* filename,float *sally, int size){</div>
<div><span style="white-space: pre;"></span>printf("1");</div>
<div><span style="white-space: pre;"></span>printf("\n Creating %s.csv file",filename);</div>
<div><span style="white-space: pre;"></span>FILE *fp;</div>
<div><span style="white-space: pre;"></span>fp=fopen(filename,"w");</div>
<div><span style="white-space: pre;"></span>fprintf(fp,"X,Y,Z\n");</div>
<div><span style="white-space: pre;"></span>int i;</div>
<div><span style="white-space: pre;"></span>int counter = 0;</div>
<div><span style="white-space: pre;"></span>for(i = 0; i< size; i++){</div>
<div><span style="white-space: pre;"></span>if(sally[i] == 0){</div>
<div><span style="white-space: pre;"></span>fprintf(fp,"0");</div>
<div><span style="white-space: pre;"></span>}</div>
<div><span style="white-space: pre;"></span>else{</div>
<div><span style="white-space: pre;"></span>fprintf(fp,"%f",sally[i]);</div>
<div><span style="white-space: pre;"></span>}</div>
<div><span style="white-space: pre;"></span>counter++;</div>
<div><span style="white-space: pre;"></span>if(counter == 3){</div>
<div><span style="white-space: pre;"></span>fprintf(fp, "\n");</div>
<div><span style="white-space: pre;"></span>counter = 0;</div>
<div><span style="white-space: pre;"></span>}</div>
<div><span style="white-space: pre;"></span>else{</div>
<div><span style="white-space: pre;"></span>fprintf(fp,",");</div>
<div><span style="white-space: pre;"></span>}</div>
<div><span style="white-space: pre;"></span>}</div>
<div><span style="white-space: pre;"></span>fclose(fp);</div>
<div><span style="white-space: pre;"></span>printf("\n %sfile created",filename);</div>
<div>}</div>
<div>int main(int argc, char *argv[]){</div>
<div><span style="white-space: pre;"></span>printf("1\n");</div>
<div><span style="white-space: pre;"></span>//read from args</div>
<div><span style="white-space: pre;"></span>int xs;</div>
<div><span style="white-space: pre;"></span>int ys;</div>
<div><span style="white-space: pre;"></span>int zs;</div>
<div><span style="white-space: pre;"></span>int time;</div>
<div><span style="white-space: pre;"></span>sscanf(argv[1],"%d",&xs);</div>
<div><span style="white-space: pre;"></span>sscanf(argv[2],"%d",&ys);</div>
<div><span style="white-space: pre;"></span>sscanf(argv[3],"%d",&zs);</div>
<div><span style="white-space: pre;"></span>sscanf(argv[4],"%d",&time);</div>
<div><br>
</div>
<div><br>
</div>
<div><span style="white-space: pre;"></span>int arraySize = xs*ys*zs*3;</div>
<div><span style="white-space: pre;"></span>//allocate memeory for array. This is done so that stack memory doesn't run out.'</div>
<div><span style="white-space: pre;"></span>float* sally;</div>
<div><span style="white-space: pre;"></span>sally = (float*)malloc((arraySize) * sizeof(float));</div>
<div><br>
</div>
<div><span style="white-space: pre;"></span>//runs the code. One of the args is a pointer so no return type is needed. </div>
<div><span style="white-space: pre;"></span>gen_sally(xs,ys,zs,time,sally);</div>
<div><span style="white-space: pre;"></span>//create varibles for file generation</div>
<div><span style="white-space: pre;"></span>char filename[20] = "results.csv";</div>
<div><span style="white-space: pre;"></span>create_csv(filename, sally, arraySize);</div>
<div><br>
</div>
<div><span style="white-space: pre;"></span>free(sally);</div>
<div><span style="white-space: pre;"></span>return 0;</div>
<div>}</div>
<div><br>
</div>
</div>
</div>
</body>
</html>