52 #ifndef ACG_DRAW_MESH_HH
53 #define ACG_DRAW_MESH_HH
60 #include <OpenMesh/Core/Utils/Property.hh>
61 #include <OpenMesh/Core/IO/MeshIO.hh>
63 #include <ACG/Config/ACGDefines.hh>
65 #include <ACG/GL/GLState.hh>
67 #include <ACG/GL/IRenderer.hh>
103 template <
class Mesh>
108 #pragma pack(push, 1)
122 int equals(
const Vertex& r);
128 unsigned short pos[3];
141 unsigned long startIndex;
142 unsigned long numTris;
145 enum REBUILD_TYPE {REBUILD_NONE = 0, REBUILD_FULL = 1, REBUILD_GEOMETRY = 2, REBUILD_TOPOLOGY = 4, REBUILD_TEXTURES = 5};
182 void draw(std::map< int, GLuint>* _textureMap);
191 void addTriRenderObjects(IRenderer* _renderer,
const RenderObject* _baseObj, std::map< int, GLuint>* _textureMap);
211 unsigned int getNumTris()
const {
return numTris_;}
212 unsigned int getNumVerts()
const {
return numVerts_;}
213 unsigned int getNumSubsets()
const {
return numSubsets_;}
315 void createBigVertexBuf(Vertex* _dstVertexBuf,
unsigned int* _dstVertexMap,
const unsigned int* _indexBuf);
325 typename Mesh::VertexHandle _vh,
326 typename Mesh::HalfedgeHandle _hh,
327 typename Mesh::FaceHandle _fh);
332 void removeIsolatedVerts();
345 const Vertex* _srcVertexBuf,
346 unsigned int* _dstIndexBuf,
347 unsigned int* _dstVertexMap,
348 const unsigned int* _srcVertexMap,
349 std::list< std::pair<unsigned int, unsigned int> >& _duplicatesMap);
361 void sortTrisByMaterial(
unsigned int* _dstIndexBuf,
const unsigned int* _srcIndexBuf);
373 void optimizeTris(
unsigned int* _dstIndexBuf,
unsigned int* _srcIndexBuf);
388 const Vertex* _srcVertexBuf,
389 unsigned int* _inOutIndexBuf,
390 const unsigned int* _srcVertexMap);
432 std::cerr <<
"Illegal request to pickVertexColorBuffer when buffer is empty!" << std::endl;
449 std::cerr <<
"Illegal request to pickVertexBuffer when buffer is empty!" << std::endl;
485 if ( !pickEdgeBuf_.empty() )
486 return &(pickEdgeBuf_)[0];
488 std::cerr <<
"Illegal request to pickEdgeColorBuffer when buffer is empty!" << std::endl;
495 std::vector< ACG::Vec4uc > pickEdgeBuf_;
516 if ( !pickFaceColBuf_.empty() )
517 return &(pickFaceColBuf_)[0];
519 std::cerr <<
"Illegal request to pickFaceColorBuffer when buffer is empty!" << std::endl;
533 if ( !pickFaceVertexBuf_.empty() )
534 return &(pickFaceVertexBuf_)[0];
536 std::cerr <<
"Illegal request to pickFaceVertexBuffer when buffer is empty!" << std::endl;
543 std::vector< ACG::Vec3f > pickFaceVertexBuf_;
544 std::vector< ACG::Vec4uc > pickFaceColBuf_;
566 if ( !pickAnyFaceColBuf_.empty() )
567 return &(pickAnyFaceColBuf_)[0];
569 std::cerr <<
"Illegal request to pickAnyFaceColorBuffer when buffer is empty!" << std::endl;
583 if ( !pickAnyEdgeColBuf_.empty() )
584 return &(pickAnyEdgeColBuf_)[0];
586 std::cerr <<
"Illegal request to pickAnyEdgeColorBuffer when buffer is empty!" << std::endl;
600 if ( !pickAnyVertexColBuf_.empty() )
601 return &(pickAnyVertexColBuf_)[0];
603 std::cerr <<
"Illegal request to pickAnyVertexColorBuffer when buffer is empty!" << std::endl;
610 std::vector< ACG::Vec4uc > pickAnyFaceColBuf_;
611 std::vector< ACG::Vec4uc > pickAnyEdgeColBuf_;
612 std::vector< ACG::Vec4uc > pickAnyVertexColBuf_;
628 unsigned int countTris(
unsigned int* _pOutMaxPolyVerts = 0);
644 unsigned int numTris_, numVerts_;
662 unsigned int numSubsets_;
730 unsigned int* indicesTmp_;
828 int updatePerEdgeBuffers_;
829 std::vector<ACG::Vec3f> perEdgeVertexBuf_;
830 std::vector<ACG::Vec4f> perEdgeColorBuf_;
832 int updatePerHalfedgeBuffers_;
833 std::vector<ACG::Vec3f> perHalfedgeVertexBuf_;
834 std::vector<ACG::Vec4f> perHalfedgeColorBuf_;
843 typename Mesh::Point
halfedge_point(
const typename Mesh::HalfedgeHandle _heh);
852 #if defined(INCLUDE_TEMPLATES) && !defined(ACG_DRAW_MESH_C)
853 #define ACG_DRAW_MESH_TEMPLATES
854 #include "DrawMesh.cc"
857 #endif // ACG_DRAW_MESH_HH defined