00001 #ifndef DEF_VPROP_DISTANCE 00002 #define DEF_VPROP_DISTANCE 00003 00004 00005 #include "Common.hh" 00006 00007 #include <Tools/Utils/HeapT.hh> 00008 00009 00015 class DijkstraInterface : public OpenMesh::Utils::HeapInterfaceT<Vertex> 00016 { 00017 public: 00018 00019 /* Static pointeur sur le mesh dans lequel se trouve les noeuds stockés dans le heap 00020 * 00021 * On utilise les trois static pointeurs dans cette classe pour avoir accès au mesh 00022 * et les propiétés des noeuds mémorisés dedont qui déterminent l'ordre dans le heap. 00023 * 00024 * Doivent être initialisé avant utiliser un OpenMesh::HeapT avec cet interface 00025 * 00026 * @see vprop_distance 00027 * @see vprop_heappos 00028 * 00029 */ 00030 static OriginalMesh* mesh; 00031 00035 static OpenMesh::VPropHandleT< double >* vprop_distance; 00036 00041 static OpenMesh::VPropHandleT< int >* vprop_heappos; 00042 00043 DijkstraInterface() 00044 {} 00045 00047 bool less (const Vertex& e1, const Vertex& e2 ) 00048 { 00049 return (float) mesh->property(*vprop_distance, e1) < (float) mesh->property(*vprop_distance, e2); 00050 } 00051 00053 bool greater (const Vertex& e1, const Vertex& e2) 00054 { 00055 return (float) mesh->property(*vprop_distance, e1) > (float) mesh->property(*vprop_distance, e2); 00056 } 00057 00061 int get_heap_position (const Vertex& e) 00062 { 00063 return mesh->property(*vprop_heappos, e); 00064 } 00065 00069 void set_heap_position (Vertex &e, int _i) 00070 { 00071 mesh->property(*vprop_heappos,e) = _i; 00072 } 00073 00074 }; 00075 00076 00077 00078 #endif