29 #ifndef BOOST_FILESYSTEM_VERSION
30 #define BOOST_FILESYSTEM_VERSION 2
32 #include <boost/filesystem.hpp>
33 #include <boost/shared_ptr.hpp>
35 #include "../../common/WAssert.h"
36 #include "../../common/WIOTools.h"
37 #include "../WDataSetFiberVector.h"
38 #include "../exceptions/WDHIOFailure.h"
39 #include "WWriterFiberVTK.h"
42 :
WWriter( path.file_string(), overwrite )
53 fstream out(
m_fname.c_str(), fstream::out | fstream::in | fstream::trunc );
54 if( !out || out.bad() )
59 char lineDelimiter =
'\n';
61 out <<
"# vtk DataFile Version 3.0" << lineDelimiter;
62 out <<
"Fibers from OpenWalnut" << lineDelimiter;
63 out <<
"BINARY" << lineDelimiter;
64 out <<
"DATASET POLYDATA" << lineDelimiter;
65 unsigned int numPoints = 0;
66 unsigned int numLines = fiberDS->size();
67 for(
size_t i = 0; i < fiberDS->size(); ++i )
69 numPoints += (*fiberDS)[i].size();
71 out <<
"POINTS " << numPoints <<
" float" << lineDelimiter;
72 unsigned int *rawLineData =
new unsigned int[numPoints + numLines];
73 float *rawPointData =
new float[numPoints * 3];
75 unsigned int pntPosOffset = 0;
76 unsigned int lnsPosOffset = 0;
77 for(
size_t i = 0; i < fiberDS->size(); ++i )
79 const WFiber &fib = (*fiberDS)[i];
80 rawLineData[lnsPosOffset++] =
static_cast< unsigned int >( fib.
size() );
81 for(
size_t j = 0; j < fib.
size(); ++j )
84 WAssert( pntPosOffset % 3 == 0,
"(pOff % 3) was not equal to 0" );
85 WAssert( pntPosOffset / 3 < numPoints,
"pntPosOffset is to large." );
86 rawLineData[lnsPosOffset++] =
static_cast< unsigned int >( pntPosOffset / 3 );
87 rawPointData[pntPosOffset++] =
static_cast< float >( point[0] );
88 rawPointData[pntPosOffset++] =
static_cast< float >( point[1] );
89 rawPointData[pntPosOffset++] =
static_cast< float >( point[2] );
90 WAssert( pntPosOffset < ( ( numPoints * 3 ) + 1 ),
"pOff < #pts" );
93 switchByteOrderOfArray< float >( rawPointData, numPoints * 3 );
94 switchByteOrderOfArray< unsigned int >( rawLineData, numLines + numPoints );
95 out.write( reinterpret_cast< char* >( rawPointData ),
sizeof(
float ) * numPoints * 3 );
97 out <<
"LINES " << numLines <<
" " << numPoints + numLines << lineDelimiter;
98 out.write( reinterpret_cast< char* >( rawLineData ),
sizeof(
unsigned int ) * ( numPoints + numLines ) );