Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

vuSphLfFlt_FitAngle.cpp

Go to the documentation of this file.
00001 #include "vuSphLfFlt_FitAngle.h"
00002 
00003 template <int S, class T>
00004 vuSphLfFlt_FitAngle<S,T>::vuSphLfFlt_FitAngle(const vuString& filterName)
00005   : vuSphericFilter<S,T>(filterName)
00006 {
00007   m_Angle = 45.0;
00008 }
00009 
00010 
00011 template <int S, class T>
00012 void vuSphLfFlt_FitAngle<S,T>::setAngle(float angle)
00013 {
00014   if (angle <   0) angle =   0;
00015   if (angle > 180) angle = 180;
00016 
00017   m_Angle = angle;
00018 }
00019 
00020 template <int S, class T>
00021 float vuSphLfFlt_FitAngle<S,T>::getAngle()
00022 {
00023   return m_Angle;
00024 }
00025 
00026 template <int S, class T> void vuSphLfFlt_FitAngle<S,T>::
00027 calcFilteredViews(vuSphericView<S,T>**& views,dword& count)
00028 {
00029   CHECKNDELETE(views);
00030   count = 0;
00031 
00032   if (m_volume == NULL) return;
00033   
00034   float cosOfAngle = cos((m_Angle/180)*M_PI);
00035   dword numOfViews = m_volume->getNumberOfViews();
00036   vuVector lookAt  = m_volume->getCameraPtr()->getLookAtVector().makeUnit()*-1;
00037   dword  idxOfBest = 0;
00038   float  bestDot   = -1;
00039  
00040   if (numOfViews == 0) return;
00041 
00042   vuSphericView<S,T> **viewsTmp = NULL;
00043 
00044   viewsTmp = new vuSphericView<S,T>*[numOfViews];
00045 
00046   for (dword i=0; i<numOfViews; i++) {
00047     vuSphericView<S,T> *view = m_volume->getView(i);
00048     vuVector lookFrom = view->getLookFrom();
00049     float    dot      = lookFrom.dot(lookAt);
00050    
00051     if (dot > cosOfAngle) {
00052       viewsTmp[count] = view;
00053       count++;
00054     }
00055     if (bestDot < dot) {
00056       bestDot   = dot;
00057       idxOfBest = i;
00058     }
00059   }
00060 
00061   if (count == 0) {
00062     viewsTmp[count] = m_volume->getView(idxOfBest);
00063     count++;
00064   }
00065   
00066   views = new vuSphericView<S,T>*[count];
00067   for (dword i=0; i<count; i++) {
00068     views[i] =  viewsTmp[i];
00069   }
00070   CHECKNDELETE(viewsTmp);
00071 }
00072 

Generated on Wed Dec 15 21:20:37 2004 for vuVolume by  doxygen 1.3.9.1