00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 #ifndef LOADEDGES_3D_H
00018 #define LOADEDGES_3D_H
00019 
00020 #include <set>
00021 #include <iostream>
00022 
00023 #include "hogman_minimal/math/transformation.h"
00024 
00025 namespace AISNavigation {
00026 
00027   struct LoadedEdge3D
00028   {
00029     int id1, id2;
00030     Transformation3 mean;
00031     Matrix6 informationMatrix;
00032   };
00033 
00034   struct LoadedEdgeComparator3D
00035   {
00036     inline bool operator()(const LoadedEdge3D& e1, const LoadedEdge3D& e2){
00037       int i11=e1.id1, i12=e1.id2;
00038       if (i11>i12){
00039         i11=e1.id2;
00040       i12=e1.id1;
00041       }
00042       int i21=e2.id1, i22=e2.id2;
00043       if (i21>i22){
00044         i21=e2.id2;
00045         i22=e2.id1;
00046       }
00047       if (i12<i22)
00048         return true;
00049       if (i12>i22)
00050         return false;
00051       return (i11<i21);
00052     }
00053   };
00054 
00055   typedef std::set<LoadedEdge3D, LoadedEdgeComparator3D> LoadedEdgeSet3D;
00056 
00057   void loadEdges3D(LoadedEdgeSet3D& edges, std::istream& is, bool overrideCovariances = false);
00058 
00059 }
00060 
00061 #endif