TrkFileIO contains reader and writer for *.trk file defined in http://www.trackvis.org/docs/?subsect=fileformat
Compiler support for C++11
optional:
You can open the *.pro file with Qt Creator and build it. But it is not required. You can just copy source file defs.h
, trkfileio.h
and trkfileio.cpp
to your project folder and complie them with whatever you want.
Just copy defs.h
, trkfileio.h
and trkfileio.cpp
to your project.
Following code does 0.1% random sampling on input track file.
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include "trkfileio.h"
using namespace std;
int main()
{
/// input & output filename
string strInputFilePath = "/path/to/input.trk";
string strOutputFilePath = "/path/to/output.trk";
/// create reader and open file
TrkFileReader cReader(strInputFilePath);
if( !cReader.open() )
return EXIT_FAILURE;
/// create writer and create an empty new file
TrkFileWriter cWriter(strOutputFilePath);
cWriter.copyHeader(cReader.getHeader()); /// Copy header from the input file, beacuse the coordinates system (LPS/RAS/..) is defined in header.
if( !cWriter.create() )
return EXIT_FAILURE;
/// random sampling (0.1%)
vector<float> cTrk;
int iTotalTrackNum = cReader.getTotalTrkNum(); /// total number of tracks in input file
srand(time(nullptr)); /// random seed
for(int i = 0; i < iTotalTrackNum; i++)
{
if( rand() % 1000 < 998 ) /// 0.1% random sampling
continue;
cTrk.clear();
cReader.readTrack(i, cTrk); /// read one track from input
cWriter.appendTrack(cTrk); /// write it back to output
}
/// close input and output file
cWriter.close();
cReader.close();
cout << "Finished" << endl;
return EXIT_SUCCESS;
}