25 #ifndef WTRIANGLEMESH_H
26 #define WTRIANGLEMESH_H
34 #include "../common/math/linearAlgebra/WLinearAlgebra.h"
35 #include "../common/WAssert.h"
36 #include "../common/WColor.h"
37 #include "../common/WTransferable.h"
50 typedef boost::shared_ptr< WTriangleMesh >
SPtr;
55 typedef boost::shared_ptr< const WTriangleMesh >
ConstSPtr;
71 WTriangleMesh( osg::ref_ptr< osg::Vec3Array > vertices,
const std::vector< size_t >& triangles );
90 virtual const std::string
getName()
const;
113 void addVertex(
float x,
float y,
float z );
145 void addTriangle(
size_t vert0,
size_t vert1,
size_t vert2 );
154 void addTriangle( osg::Vec3 vert0, osg::Vec3 vert1, osg::Vec3 vert2 );
162 void setVertex(
size_t index, osg::Vec3 vert );
268 osg::Vec3
getVertex(
size_t index )
const;
285 osg::Vec3
getTriVert(
size_t triId,
size_t vertNum );
347 void addMesh( boost::shared_ptr<WTriangleMesh> mesh,
float xOff = 0.,
float yOff = 0.,
float zOff = 0. );
428 osg::Vec3
calcNormal( osg::Vec3 vert0, osg::Vec3 vert1, osg::Vec3 vert2 );
449 size_t getNeighbor(
const size_t coVert1,
const size_t coVert2,
const size_t triangleNum );
491 void loopSetTriangle(
size_t triId,
size_t vertId1,
size_t vertId2,
size_t vertId3 );
532 size_t loopCalcEdgeVert(
size_t triId,
size_t edgeV1,
size_t edgeV2,
size_t V3 );
558 size_t loopGetThirdVert(
size_t coVert1,
size_t coVert2,
size_t triangleNum );
655 return "WTriangleMesh";
660 return "Triangle mesh data structure allowing for convenient access of the elements.";
665 WAssert( triId <
m_countTriangles,
"set tri vert 0: triangle id out of range" );
666 WAssert( vertId <
m_countVerts,
"vertex id out of range" );
672 WAssert( triId <
m_countTriangles,
"set tri vert 1: triangle id out of range" );
673 WAssert( vertId <
m_countVerts,
"vertex id out of range" );
679 WAssert( triId <
m_countTriangles,
"set tri vert 2: triangle id out of range" );
680 WAssert( vertId <
m_countVerts,
"vertex id out of range" );
692 WAssert( triId <
m_countTriangles,
"get tri vert id 0: triangle id out of range" );
698 WAssert( triId <
m_countTriangles,
"get tri vert id 1: triangle id out of range" );
704 WAssert( triId <
m_countTriangles,
"get tri vert id 2: triangle id out of range" );
710 ( *m_verts )[index] = vert;
713 #endif // WTRIANGLEMESH_H