25 #include "WMarchingLegoAlgorithm.h"
100 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id2, pt2 ) );
106 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id3, pt3 ) );
112 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id4, pt4 ) );
132 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id1, pt1 ) );
138 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id2, pt2 ) );
144 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id3, pt3 ) );
150 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id4, pt4 ) );
170 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id1, pt1 ) );
176 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id2, pt2 ) );
182 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id3, pt3 ) );
188 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id4, pt4 ) );
208 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id1, pt1 ) );
214 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id2, pt2 ) );
220 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id3, pt3 ) );
226 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id4, pt4 ) );
246 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id1, pt1 ) );
252 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id2, pt2 ) );
258 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id3, pt3 ) );
264 m_idToVertices.insert( ID2WMLPointXYZId::value_type( id4, pt4 ) );
290 const std::vector< size_t >* vals,
293 WAssert( vals,
"No value set provided." );
304 size_t nX = nbCoordsX;
305 size_t nY = nbCoordsY;
307 size_t nPointsInSlice = nX * nY;
316 if( ( *vals )[ z * nPointsInSlice + y * nX + x ] != isoValue )
321 if( x > 0 && ( ( *vals )[ z * nPointsInSlice + y * nX + x - 1 ] != isoValue ) )
325 if( x < m_nCellsX - 1 && ( ( *vals )[ z * nPointsInSlice + y * nX + x + 1 ] != isoValue ) )
330 if( y > 0 && ( ( *vals )[ z * nPointsInSlice + ( y - 1 ) * nX + x ] != isoValue ) )
335 if( y < m_nCellsY - 1 && ( ( *vals )[ z * nPointsInSlice + ( y + 1 ) * nX + x ] != isoValue ) )
340 if( z > 0 && ( ( *vals )[ ( z - 1 ) * nPointsInSlice + y * nX + x ] != isoValue ) )
345 if( z < m_nCellsZ - 1 && ( ( *vals )[ ( z + 1 ) * nPointsInSlice + y * nX + x ] != isoValue ) )
354 if( x == m_nCellsX - 1 )
364 if( y == m_nCellsY - 1 )
374 if( z == m_nCellsZ - 1 )
381 unsigned int nextID = 0;
389 mapIterator->second.y / nbCoordsY,
390 mapIterator->second.z / nbCoordsZ );
393 WPosition pos =
WPosition( mapIterator->second.x, mapIterator->second.y, mapIterator->second.z );
395 std::vector< double > resultPos4D( 4 );
401 ( *mapIterator ).second.newID = nextID;
402 triMesh->addVertex( resultPos4D[0] / resultPos4D[3],
403 resultPos4D[1] / resultPos4D[3],
404 resultPos4D[2] / resultPos4D[3] );
405 triMesh->addTextureCoordinate( texCoord );
414 for(
unsigned int i = 0; i < 3; i++ )
416 unsigned int newID =
m_idToVertices[( *vecIterator ).pointID[i]].newID;
417 ( *vecIterator ).pointID[i] = newID;
419 triMesh->addTriangle( ( *vecIterator ).pointID[0], ( *vecIterator ).pointID[1], ( *vecIterator ).pointID[2] );