00001 #ifndef SBA_BUNDLER_FILE_H
00002 #define SBA_BUNDLER_FILE_H
00003 
00004 #ifndef EIGEN_USE_NEW_STDVECTOR
00005 #define EIGEN_USE_NEW_STDVECTOR
00006 #endif // EIGEN_USE_NEW_STDVECTOR
00007 
00008 
00009 
00010 #include <Eigen/Eigen>
00011 #include <vector>
00012 #include <iostream>
00013 #include <fstream>
00014 #include <iomanip>
00015 
00016 #include "sba/sba.h"
00017 
00018 namespace Eigen
00019 {
00020   typedef Matrix<double,11,1> Vector11d;
00021   typedef Matrix<double,5,1>  Vector5d;
00022 }
00023 
00024 namespace sba
00025 {
00026 
00036   int readBundlerFile(const char *filename, sba::SysSBA& sbaout);
00037 
00049   int writeBundlerFile(const char *filename, sba::SysSBA& sbain);
00050 
00052   int 
00053   ParseBundlerFile(const char *fin,     
00054                   std::vector< Eigen::Vector3d, Eigen::aligned_allocator<Eigen::Vector3d> > &camp, 
00055                   std::vector< Eigen::Matrix3d, Eigen::aligned_allocator<Eigen::Matrix3d> > &camR, 
00056                   std::vector< Eigen::Vector3d, Eigen::aligned_allocator<Eigen::Vector3d> > &camt, 
00057                   std::vector< Eigen::Vector3d, Eigen::aligned_allocator<Eigen::Vector3d> > &ptp, 
00058                   std::vector< Eigen::Vector3i, Eigen::aligned_allocator<Eigen::Vector3i> > &ptc, 
00059                   std::vector< std::vector< Eigen::Vector4d, Eigen::aligned_allocator<Eigen::Vector4d> > > &ptt 
00060     );
00061 
00068   int readGraphFile(const char *filename, sba::SysSBA& sbaout);
00069 
00071   int 
00072   ParseGraphFile(const char *fin,       
00073                   std::vector< Eigen::Vector5d, Eigen::aligned_allocator<Eigen::Vector5d> > &camps, 
00074                   std::vector< Eigen::Vector4d, Eigen::aligned_allocator<Eigen::Vector4d> > &camqs, 
00075                   std::vector< Eigen::Vector3d, Eigen::aligned_allocator<Eigen::Vector3d> > &camts, 
00076                   std::vector< Eigen::Vector3d, Eigen::aligned_allocator<Eigen::Vector3d> > &ptps, 
00077                   std::vector< std::vector< Eigen::Vector11d, Eigen::aligned_allocator<Eigen::Vector11d> > > &ptts 
00078     );
00079 
00080 
00082   void writeLourakisFile(const char *fname, SysSBA& sba);
00083   void writeA(const char *fname, SysSBA& sba); 
00084   void writeSparseA(const char *fname, SysSBA& sba); 
00085 
00091   int writeGraphFile(const char *filename, SysSBA& sba, bool mono=false);
00092 
00093 
00101   int readSPAGraphFile(const char *filename, SysSPA& spaout);
00102 
00104   int
00105   ParseSPAGraphFile(const char *fin, 
00106    std::vector< Eigen::Vector3d, Eigen::aligned_allocator<Eigen::Vector3d> > &ntrans, 
00107    std::vector< Eigen::Vector4d, Eigen::aligned_allocator<Eigen::Vector4d> > &nqrot,  
00108    std::vector< Eigen::Vector2i, Eigen::aligned_allocator<Eigen::Vector2i> > &cind,   
00109    std::vector< Eigen::Vector3d, Eigen::aligned_allocator<Eigen::Vector3d> > &ctrans, 
00110    std::vector< Eigen::Vector4d, Eigen::aligned_allocator<Eigen::Vector4d> > &cqrot,  
00111    std::vector< Eigen::Matrix<double,6,6>, Eigen::aligned_allocator<Eigen::Matrix<double,6,6> > > &cvar); 
00112 
00113 }; 
00114 
00115 #endif