00001 #include <iostream>
00002 #include <fstream>
00003 #include <unistd.h>
00004 #include <errno.h>
00005 #include <stdlib.h>
00006 #include "vuFileHelper.h"
00007 #include "Volume/Regular/Unimodal/3d/2B/2B.h"
00008 #include "Volume/Regular/Unimodal/3d/1B/1B.h"
00009 #include "vuHistogram.h"
00010
00011 using namespace std;
00012
00013 void usage(const char* exe);
00014 bool readnumber(const char* str, int& number);
00015
00016 int main(int argc, char ** argv)
00017 {
00018 if(argc != 3) {
00019 usage(argv[0]);
00020 return -1;
00021 }
00022
00023 vuString outfileName = argv[2];
00024 vuString fileName = argv[1];
00025 vuString fileType = vuFileHelper::getFileType(fileName);
00026 vu1112 *volume = NULL;
00027 if (fileType.isEmpty()) {
00028 cout << "Error: Wrong filetype." << endl;
00029 return -1;
00030 } else if(fileType == "11121") volume = new vu11121;
00031 else if(fileType == "11122") volume = new vu11122;
00032 else {
00033 cout << "Error: Unsupported volume type " << fileType << endl;
00034 return -1;
00035 }
00036
00037
00038 cout << "loading" << endl;
00039 volume->setFileName(fileName);
00040 if(!((vu1*)volume)->read()) {
00041 cout << "Error: Could not load file " << fileName << "." << endl;
00042 return -1;
00043 }
00044 cout << "calculating histogram" << endl;
00045 vuHistogram hist(vuHistogram::TYPE_INTENSITY);
00046 volume->createHistogram(hist);
00047 ofstream hf(outfileName);
00048 hf << hist;
00049 hf.close();
00050 cout << "done." << endl;
00051 return 0;
00052 }
00053
00054 void usage(const char* exe)
00055 {
00056 const char *file = strrchr(exe,'/');
00057 if(!file)
00058 {
00059 file = strrchr(exe,'\\');
00060 if(file) file++;
00061 else file = exe;
00062 } else file++;
00063
00064 cout << "usage: " << file << " inputfile outputfile "
00065 << endl << endl;
00066 cout << "inputfile name of vud file including extension"<<endl;
00067 cout << "outputfile name of histogram file to ouput"<<endl;
00068 }
00069
00070 bool readnumber(const char* str, int& number)
00071 {
00072 char *endp;
00073 errno = 0;
00074 number = strtol(str,&endp,10);
00075 if(errno ||
00076 endp != str+strlen(str)) return false;
00077 return true;
00078 }
00079