OpenMesh
OpenMesh/Core/IO/exporter/BaseExporter.hh
00001 /*===========================================================================*\
00002  *                                                                           *
00003  *                               OpenMesh                                    *
00004  *      Copyright (C) 2001-2011 by Computer Graphics Group, RWTH Aachen      *
00005  *                           www.openmesh.org                                *
00006  *                                                                           *
00007  *---------------------------------------------------------------------------* 
00008  *  This file is part of OpenMesh.                                           *
00009  *                                                                           *
00010  *  OpenMesh is free software: you can redistribute it and/or modify         * 
00011  *  it under the terms of the GNU Lesser General Public License as           *
00012  *  published by the Free Software Foundation, either version 3 of           *
00013  *  the License, or (at your option) any later version with the              *
00014  *  following exceptions:                                                    *
00015  *                                                                           *
00016  *  If other files instantiate templates or use macros                       *
00017  *  or inline functions from this file, or you compile this file and         *
00018  *  link it with other files to produce an executable, this file does        *
00019  *  not by itself cause the resulting executable to be covered by the        *
00020  *  GNU Lesser General Public License. This exception does not however       *
00021  *  invalidate any other reasons why the executable file might be            *
00022  *  covered by the GNU Lesser General Public License.                        *
00023  *                                                                           *
00024  *  OpenMesh is distributed in the hope that it will be useful,              *
00025  *  but WITHOUT ANY WARRANTY; without even the implied warranty of           *
00026  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            *
00027  *  GNU Lesser General Public License for more details.                      *
00028  *                                                                           *
00029  *  You should have received a copy of the GNU LesserGeneral Public          *
00030  *  License along with OpenMesh.  If not,                                    *
00031  *  see <http://www.gnu.org/licenses/>.                                      *
00032  *                                                                           *
00033 \*===========================================================================*/ 
00034 
00035 /*===========================================================================*\
00036  *                                                                           *             
00037  *   $Revision: 362 $                                                         *
00038  *   $Date: 2011-01-26 10:21:12 +0100 (Mi, 26 Jan 2011) $                   *
00039  *                                                                           *
00040 \*===========================================================================*/
00041 
00042 
00043 //=============================================================================
00044 //
00045 //  Implements the baseclass for MeshWriter exporter modules
00046 //
00047 //=============================================================================
00048 
00049 
00050 #ifndef __BASEEXPORTER_HH__
00051 #define __BASEEXPORTER_HH__
00052 
00053 
00054 //=== INCLUDES ================================================================
00055 
00056 
00057 // STL
00058 #include <vector>
00059 
00060 // OpenMesh
00061 #include <OpenMesh/Core/System/config.h>
00062 #include <OpenMesh/Core/Geometry/VectorT.hh>
00063 #include <OpenMesh/Core/Mesh/BaseKernel.hh>
00064 
00065 
00066 //=== NAMESPACES ==============================================================
00067 
00068 
00069 namespace OpenMesh {
00070 namespace IO {
00071 
00072 
00073 //=== EXPORTER ================================================================
00074 
00075 
00082 class BaseExporter
00083 {
00084 public:
00085 
00086   virtual ~BaseExporter() { }
00087    
00088 
00089   // get vertex data
00090   virtual Vec3f  point(VertexHandle _vh)    const = 0;
00091   virtual Vec3f  normal(VertexHandle _vh)   const = 0;
00092   virtual Vec3uc color(VertexHandle _vh)    const = 0;
00093   virtual Vec4uc colorA(VertexHandle _vh)   const = 0;
00094   virtual Vec2f  texcoord(VertexHandle _vh) const = 0;
00095 
00096   
00097   // get face data
00098   virtual unsigned int 
00099   get_vhandles(FaceHandle _fh, 
00100                std::vector<VertexHandle>& _vhandles) const=0;
00101   virtual Vec3f  normal(FaceHandle _fh)      const = 0;
00102   virtual Vec3uc color (FaceHandle _fh)      const = 0;
00103   virtual Vec4uc colorA(FaceHandle _fh)      const = 0;  
00104   
00105   // get edge data
00106   virtual Vec3uc color(EdgeHandle _eh)    const = 0;
00107   virtual Vec4uc colorA(EdgeHandle _eh)   const = 0;
00108 
00109   // get reference to base kernel
00110   virtual const BaseKernel* kernel() { return 0; }
00111 
00112 
00113   // query number of faces, vertices, normals, texcoords
00114   virtual size_t n_vertices()   const = 0;
00115   virtual size_t n_faces()      const = 0;
00116   virtual size_t n_edges()      const = 0;
00117 
00118 
00119   // property information
00120   virtual bool is_triangle_mesh()     const { return false; }
00121   virtual bool has_vertex_normals()   const { return false; }
00122   virtual bool has_vertex_colors()    const { return false; }
00123   virtual bool has_vertex_texcoords() const { return false; }
00124   virtual bool has_edge_colors()      const { return false; }      
00125   virtual bool has_face_normals()     const { return false; }
00126   virtual bool has_face_colors()      const { return false; }
00127 };
00128 
00129 
00130 //=============================================================================
00131 } // namespace IO
00132 } // namespace OpenMesh
00133 //=============================================================================
00134 #endif
00135 //=============================================================================
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines