29 #include "WMeshReaderFiberNavigator.h"
43 boost::filesystem::path file )
47 std::string fileName = file.string();
48 WAssert( !fileName.empty(),
"No filename specified." );
50 std::shared_ptr< WProgress > progress(
new WProgress(
"Read Mesh", 3 ) );
51 parentProgress->addSubProgress( progress );
54 ifs.open( fileName.c_str(), std::ifstream::in );
55 if( !ifs || ifs.bad() )
58 throw std::runtime_error(
"Problem during reading file. Probably file not found." );
62 std::vector< std::string > tokens;
66 std::getline( ifs, line );
67 tokens = su::tokenize( line );
68 if( tokens.size() > 1 && su::toLower( tokens.at( 0 ) ) ==
"point_data" )
72 numPoints = string_utils::fromString< size_t >( tokens.at( 1 ) );
75 catch(
const std::exception &e )
79 return std::shared_ptr< WTriangleMesh >();
84 std::vector< osg::Vec3 > points;
85 points.reserve( numPoints );
88 for(
unsigned int i = 0; i < numPoints; ++i )
90 std::getline( ifs, line );
91 tokens = su::tokenize( line );
95 points.push_back( osg::Vec3( string_utils::fromString< float >( tokens.at( 0 ) ),
96 string_utils::fromString< float >( tokens.at( 1 ) ),
97 string_utils::fromString< float >( tokens.at( 2 ) ) ) );
99 catch(
const std::exception &e )
103 return std::shared_ptr< WTriangleMesh >();
111 std::getline( ifs, line );
112 tokens = su::tokenize( line );
113 if( tokens.size() > 1 && su::toLower( tokens.at( 0 ) ) ==
"cells" )
117 numCells = string_utils::fromString< size_t >( tokens.at( 1 ) );
119 catch(
const std::exception &e )
123 return std::shared_ptr< WTriangleMesh >();
128 std::shared_ptr< WTriangleMesh > triMesh(
new WTriangleMesh( numPoints, numCells ) );
129 for(
unsigned int i = 0; i < numPoints; ++i )
131 triMesh->addVertex( points[i] );
136 for(
unsigned int i = 0; i < numCells; ++i )
138 std::getline( ifs, line );
139 tokens = su::tokenize( line );
143 triMesh->addTriangle( string_utils::fromString< size_t >( tokens.at( 1 ) ),
144 string_utils::fromString< size_t >( tokens.at( 2 ) ),
145 string_utils::fromString< size_t >( tokens.at( 3 ) ) );
147 catch(
const std::exception &e )
151 return std::shared_ptr< WTriangleMesh >();
void addLogMessage(std::string message, std::string source="", LogLevel level=LL_DEBUG)
Appends a log message to the logging queue.
static WLogger * getLogger()
Returns pointer to the currently running logger instance.
virtual ~WMeshReaderFiberNavigator()
Destructor.
virtual WTriangleMesh::SPtr operator()(WProgressCombiner::SPtr parentProgress, boost::filesystem::path file)
Load the dataset.
WMeshReaderFiberNavigator()
Constructor.
Define the interface which is injected into an WObjectNDIP.
This is a base class for everything which has a Name,Description,Icon and Properties (=NDIP).
std::shared_ptr< WProgressCombiner > SPtr
Abbreviate shared_ptr for this class.
Class managing progress inside of modules.
Triangle mesh data structure allowing for convenient access of the elements.
std::shared_ptr< WTriangleMesh > SPtr
Shared pointer.
Some utilities for string manipulation and output operations.