29 #include "WMeshReaderDIP.h"
46 boost::filesystem::path file )
50 std::string fileName = file.string();
51 WAssert( !fileName.empty(),
"No filename specified." );
53 std::shared_ptr< WProgress > progress(
new WProgress(
"Read Mesh", 3 ) );
54 parentProgress->addSubProgress( progress );
57 ifs.open( fileName.c_str(), std::ifstream::in );
58 if( !ifs || ifs.bad() )
61 throw std::runtime_error(
"Problem during reading file. Probably file not found." );
67 std::vector< std::string > tokens;
72 std::getline( ifs, line );
73 tokens = su::tokenize( line );
74 if( tokens.size() == 2 && su::toLower( tokens.at( 0 ) ) ==
"numberpositions=" )
78 numPoints = string_utils::fromString< size_t >( tokens.at( 1 ) );
80 catch(
const std::exception &e )
84 return std::shared_ptr< WTriangleMesh >();
87 if( tokens.size() == 2 && su::toLower( tokens.at( 0 ) ) ==
"numberpolygons=" )
91 numCells = string_utils::fromString< size_t >( tokens.at( 1 ) );
93 catch(
const std::exception &e )
97 return std::shared_ptr< WTriangleMesh >();
100 if( tokens.size() == 2 && su::toLower( tokens.at( 0 ) ) ==
"typepolygons=" )
104 typeCells = string_utils::fromString< size_t >( tokens.at( 1 ) );
106 catch(
const std::exception &e )
110 return std::shared_ptr< WTriangleMesh >();
116 return std::shared_ptr< WTriangleMesh >();
120 wlog::debug(
"Read Mesh" ) <<
"Positions: " << numPoints <<
" Cells: " << numCells;
124 ifs.open( fileName.c_str(), std::ifstream::in );
125 wlog::debug(
"Read Mesh" ) <<
"current position: " << ifs.tellg();
128 std::getline( ifs, line );
129 tokens = su::tokenize( line );
130 if( tokens.size() == 1 && su::toLower( tokens.at( 0 ) ) ==
"positionsfixed" )
132 wlog::debug(
"Read Mesh" ) <<
"found vertex info at file position: " << ifs.tellg();
140 return std::shared_ptr< WTriangleMesh >();
143 std::vector< osg::Vec3 > points;
144 points.reserve( numPoints );
146 wlog::debug(
"Read Mesh" ) <<
"Start reading vertex info";
147 for(
unsigned int i = 0; i < numPoints; ++i )
149 std::getline( ifs, line );
150 tokens = su::tokenize( line );
154 points.push_back( osg::Vec3( string_utils::fromString< float >( tokens.at( 1 ) ) + (
m_propDatasetSizeX->get(
true )/2.0 ),
155 string_utils::fromString< float >( tokens.at( 0 ) ) + (
m_propDatasetSizeY->get(
true )/2.0 ),
156 string_utils::fromString< float >( tokens.at( 2 ) ) + (
m_propDatasetSizeZ->get(
true )/2.0 ) ) );
158 catch(
const std::exception &e )
162 return std::shared_ptr< WTriangleMesh >();
165 wlog::debug(
"Read Mesh" ) <<
"Finished reading vertex info";
167 std::shared_ptr< WTriangleMesh > triMesh(
new WTriangleMesh( numPoints, numCells ) );
169 for(
unsigned int i = 0; i < numPoints; ++i )
171 triMesh->addVertex( points[i] );
178 ifs.open( fileName.c_str(), std::ifstream::in );
181 std::getline( ifs, line );
182 tokens = su::tokenize( line );
183 if( tokens.size() == 1 && su::toLower( tokens.at( 0 ) ) ==
"polygons" )
185 wlog::debug(
"Read Mesh" ) <<
"found polygon info at file postion: " << ifs.tellg();
193 return std::shared_ptr< WTriangleMesh >();
197 wlog::debug(
"Read Mesh" ) <<
"Start reading polygon info";
198 for(
unsigned int i = 0; i < numCells; ++i )
200 std::getline( ifs, line );
201 tokens = su::tokenize( line );
205 triMesh->addTriangle( string_utils::fromString< size_t >( tokens.at( 0 ) ),
206 string_utils::fromString< size_t >( tokens.at( 1 ) ),
207 string_utils::fromString< size_t >( tokens.at( 2 ) ) );
209 catch(
const std::exception &e )
213 return std::shared_ptr< WTriangleMesh >();
216 wlog::debug(
"Read Mesh" ) <<
"Finished reading polygon info";
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.
WMeshReaderDIP()
Constructor.
WPropInt m_propDatasetSizeY
Size of the dataset (Y)
virtual ~WMeshReaderDIP()
Destructor.
WPropInt m_propDatasetSizeX
Size of the dataset (X)
WPropInt m_propDatasetSizeZ
Size of the dataset (Z)
virtual WTriangleMesh::SPtr operator()(WProgressCombiner::SPtr parentProgress, boost::filesystem::path file)
Load the dataset.
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).
WProperties::SPtr m_properties
the properties of the object.
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.
WStreamedLogger debug(const std::string &source)
Logging a debug message.