virtual_disp.h

Go to the documentation of this file.
00001 // Author: Justin Kinney
00002 // Date: Sep 2008
00003 
00004 #ifndef VIRTUAL_DISP_H
00005 #define VIRTUAL_DISP_H 1
00006 
00007 #include <cmath>
00008 
00009 #include "log.h"
00010 #include "controls.h"
00011 #include "meshmorph.h"
00012 
00013 typedef std::map<Vertex*,float,ltv>                                 map_d;
00014 typedef std::map<Vertex*,float,ltv>::iterator                       td_it;
00015 typedef std::multimap<float,Vertex*,ltd>                            map_v;
00016 typedef std::multimap<float,Vertex*,ltd>::iterator                  tv_it;
00017 typedef std::multimap<float,Vertex*,ltd>::reverse_iterator          tv_rit;
00018 typedef std::multimap<float,Vertex*,ltd>::const_reverse_iterator    tv_crit;
00019 typedef std::multimap<float,Vertex*,ltd>::const_iterator            tv_cit;
00020 
00021 typedef std::vector<std::string>::const_iterator                    s_cit;
00022 
00023 class Virtual_Disp
00024 {
00025 private:
00026   static Virtual_Disp * only_one;
00027   map_v   vd2_to_v; // map of virtual displacement squared to vertex*
00028   map_d   v_to_vd2; // map of vertex* to virtual displacement squared 
00029   tv_rit      seed; // virt disp map seed of vertex move collection
00030   //vec_d    seed_vd; // store virtual displacements of seed vertices
00031   vec_s    seed_vd; // store virtual displacements of seed vertices
00032                     // along with iteration number
00033   vec_s    seed_ad; // store actual displacements of seed vertices
00034                     // along with iteration number
00035   Virtual_Disp                          (void);
00036   Virtual_Disp                          (Virtual_Disp const &);
00037   Virtual_Disp & operator =             (Virtual_Disp const &);
00038   ~Virtual_Disp                         (void);
00039 public:
00040   static  Virtual_Disp & instance       (void);
00041   void    buildVirtDispMapComplement    (void);
00042   bool    findVirtDispToVertAssoc       (Vertex * const,float const &,tv_it &);
00043   void    buildVirtDispMap              (const int &);
00044   void    setVirtualDisp                (Vertex * const,float const &);
00045   void    updateVirtualDisp             (Vertex * const,bool const,float const &);
00046   void    removeVirtDispToVertAssoc     (Vertex * const,float const &);
00047   bool    getVertAndRank                (Vertex * const,tv_it &,int &);
00048   void    resetForNewGroup              (const int &);
00049   void    removeVertFromAllMaps         (Vertex *);
00050   void    validateVirtDispMapComplement (void);
00051   void    validateVirtDispMap2          (void);
00052   void    validateVirtDispMap           (void) const;
00053 
00057   void addAdToSeedAd (const int & count,double ad)
00058   {
00059     seed_ad.push_back(Log::instance().format("%d %g",count,ad));
00060   }
00061 
00065   void addVdToSeedVd (const int & count)
00066   {
00067     //double myvd = sqrt((*seed).first)/sqrt(Controls::instance().get_search_radius_sq());
00068     double myvd = sqrt((*seed).first);
00069     seed_vd.push_back(Log::instance().format("%d %g",count,myvd));
00070     //seed_vd.push_back((*seed).first);
00071   }
00072 
00078   //d_cit beginSeedActDisp (void)
00079   s_cit beginSeedActDisp (void)
00080   {
00081     return seed_ad.begin();
00082   }
00083 
00089   //d_cit endSeedActDisp (void)
00090   s_cit endSeedActDisp (void)
00091   {
00092     return seed_ad.end();
00093   }
00094 
00100   //d_cit beginSeedVirtDisp (void)
00101   s_cit beginSeedVirtDisp (void)
00102   {
00103     return seed_vd.begin();
00104   }
00105 
00111   //d_cit endSeedVirtDisp (void)
00112   s_cit endSeedVirtDisp (void)
00113   {
00114     return seed_vd.end();
00115   }
00116 
00121   tv_crit getSeed (void)
00122   {
00123     return seed;
00124   }
00125 
00130   int getNumVertsInVirtDispMap (void)
00131   {
00132     return vd2_to_v.size();
00133   }
00134 
00139   void advanceSeedToNextLargestVert (void)
00140   {
00141     seed++;
00142   }
00143 
00148   void resetSeedToLargestVert (void)
00149   {
00150     seed = vd2_to_v.rbegin();
00151   }
00152 
00158   tv_cit beginVirtDispMap (void)
00159   {
00160     return vd2_to_v.begin();
00161   }
00162 
00169   tv_crit rendVirtDispMap (void)
00170   {
00171     return vd2_to_v.rend();
00172   }
00173 
00180   tv_cit endVirtDispMap (void)
00181   {
00182     return vd2_to_v.end();
00183   }
00184 
00185 };
00186 
00187 #endif

Generated on Fri Feb 13 13:58:10 2009 for meshmorph by  doxygen 1.5.1