00001 /*===========================================================================*\ 00002 * * 00003 * OpenFlipper * 00004 * Copyright (C) 2001-2009 by Computer Graphics Group, RWTH Aachen * 00005 * www.openflipper.org * 00006 * * 00007 *---------------------------------------------------------------------------* 00008 * This file is part of OpenFlipper. * 00009 * * 00010 * OpenFlipper 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 * OpenFlipper 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 OpenFlipper. If not, * 00031 * see <http://www.gnu.org/licenses/>. * 00032 * * 00033 \*===========================================================================*/ 00034 00035 /*===========================================================================*\ 00036 * * 00037 * $Revision: 8520 $ * 00038 * $Author: moebius $ * 00039 * $Date: 2010-02-10 15:56:59 +0100 (Mi, 10. Feb 2010) $ * 00040 * * 00041 \*===========================================================================*/ 00042 00043 00044 00045 00046 //============================================================================= 00047 // 00048 // CLASS TriangleBSPT 00049 // 00050 //============================================================================= 00051 00052 #ifndef MB_TRIANGLEBSP_HH 00053 #define MB_TRIANGLEBSP_HH 00054 00055 00056 //== INCLUDES ================================================================= 00057 00058 #include "TriangleBSPCoreT.hh" 00059 #include "BSPImplT.hh" 00060 //#include "Distance.hh" 00061 #include <ACG/Geometry/Algorithms.hh> 00062 00063 00064 //== CLASS DEFINITION ========================================================= 00065 00066 00067 template <class BSPTraits> 00068 class TriangleBSPT : public BSPImplT< TriangleBSPCoreT<BSPTraits> > 00069 { 00070 public: 00071 typedef BSPImplT< TriangleBSPCoreT<BSPTraits> > Base; 00072 TriangleBSPT(const BSPTraits& _traits) : Base(_traits) {} 00073 }; 00074 00075 00076 //== CLASS DEFINITION ========================================================= 00077 00078 00079 template <class Mesh> 00080 class OpenMeshTriangleBSPTraits 00081 { 00082 public: 00083 00084 typedef typename Mesh::Scalar Scalar; 00085 typedef typename Mesh::Point Point; 00086 typedef typename Mesh::FaceHandle Handle; 00087 00088 OpenMeshTriangleBSPTraits(const Mesh& _mesh) : mesh_(_mesh) {} 00089 00090 void points(Handle _h, Point& _p0, Point& _p1, Point& _p2) const 00091 { 00092 typename Mesh::CFVIter fv_it(mesh_.cfv_iter(_h)); 00093 _p0 = mesh_.point(fv_it); ++fv_it; 00094 _p1 = mesh_.point(fv_it); ++fv_it; 00095 _p2 = mesh_.point(fv_it); 00096 } 00097 00098 Scalar sqrdist(Handle _h, const Point& _p) const 00099 { 00100 Point p0, p1, p2, q; 00101 points(_h, p0, p1, p2); 00102 return ACG::Geometry::distPointTriangleSquared(_p, p0, p1, p2, q); 00103 } 00104 00105 private: 00106 00107 const Mesh& mesh_; 00108 }; 00109 00110 00111 //== CLASS DEFINITION ========================================================= 00112 00113 00114 template <class Mesh> 00115 class OpenMeshTriangleBSPT 00116 : public TriangleBSPT<OpenMeshTriangleBSPTraits<Mesh> > 00117 { 00118 public: 00119 typedef OpenMeshTriangleBSPTraits<Mesh> Traits; 00120 typedef TriangleBSPT<Traits> Base; 00121 OpenMeshTriangleBSPT(const Mesh& _mesh) : Base(Traits(_mesh)) {} 00122 }; 00123 00124 00125 //============================================================================= 00126 #endif // MB_TRIANGLEBSP_HH defined 00127 //=============================================================================