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

vuSliceFilter.cpp

Go to the documentation of this file.
00001 #include "vuSliceFilter.h"
00002 
00003 #define SQRT_THREE 1.7320508
00004 
00005 // this constructor should not be called!!!
00006 vuSliceFilter::vuSliceFilter()
00007 {
00008   m_FilterWidth   = 1;
00009   m_FilterKind    = 0;   // separable filter
00010   m_Callback      = NULL;
00011   m_LowPassFactor = 1.0; // no low pass filtering (100%)
00012 }
00013 
00014 vuSliceFilter::vuSliceFilter(vuSliceFilterCB cb, const vuString& filterName)
00015   : vuFilter(filterName)
00016 {
00017   m_FilterWidth   = 1;
00018   m_FilterKind    = 0; // separable filter
00019   m_Callback      = cb;
00020   m_LowPassFactor = 1.0; // no low pass filtering (100%)
00021 }
00022 
00023 vuSliceFilter::~vuSliceFilter()
00024 {
00025 }
00026   
00027 void vuSliceFilter::setWidth(dword width)
00028 {
00029   m_FilterWidth = width;
00030 }
00031 
00032 dword vuSliceFilter::getWidth()
00033 {
00034   return m_FilterWidth;
00035 }
00036 
00037 // 0 ... separable filters
00038 // 1 ... spheric   filters
00039 void vuSliceFilter::setKind(byte kind)
00040 {
00041   m_FilterKind = kind;
00042   if (m_FilterKind > 1) m_FilterKind = 0;
00043 }
00044 
00045 byte vuSliceFilter::getKind()
00046 {
00047   return m_FilterKind;
00048 }
00049 
00050 void vuSliceFilter::setLowPassFactor(float lowPass)
00051 {
00052   if (lowPass >  1.0) lowPass = 1.0;
00053   if (lowPass <= 0.0) lowPass = 0.01;
00054 
00055   m_LowPassFactor = lowPass;
00056 }
00057 
00058 float vuSliceFilter::getLowPassFactor()
00059 {
00060   return m_LowPassFactor;
00061 }
00062 
00063 void vuSliceFilter::getFilterNames(vuString* &names, dword& num)
00064 {
00065   static const dword    count         = 5;
00066   static const vuString result[count] = { "box",
00067                                           "linear",
00068                                           "quadratic",
00069                                           "cubic",
00070                                           "gaussian" };
00071   
00072   names = (vuString *)result;
00073   num   = count;
00074 }
00075 
00076 vuSliceFilter *vuSliceFilter::getFilter(const vuString &filterName)
00077 {
00078   if (filterName == "box")
00079     return new vuSliceFilter(vuSliceFilter_box, "box");
00080   else if (filterName == "linear")
00081     return new vuSliceFilter(vuSliceFilter_linear, "linear");
00082   else if (filterName == "quadratic")
00083     return new vuSliceFilter(vuSliceFilter_quadratic, "quadratic");
00084   else if (filterName == "cubic")
00085     return new vuSliceFilter(vuSliceFilter_cubic, "cubic");
00086   else if (filterName == "gaussian")
00087     return new vuSliceFilter(vuSliceFilter_gaussian, "gaussian");
00088   else
00089     return NULL;
00090 }
00091 
00092 /* ************************************************************************ */
00093 /* *** filter callbacks *************************************************** */
00094 /* ************************************************************************ */
00095 
00096 float vuSliceFilter_box(float x)
00097 {
00098   return 1.0f;
00099 }
00100 
00101 float vuSliceFilter_linear(float x)
00102 {
00103   return 1.0f - fabs(x);
00104 }
00105 
00106 float vuSliceFilter_quadratic(float x)
00107 {
00108   return 1.0f - x*x;
00109 }
00110 
00111 float vuSliceFilter_cubic(float x)
00112 {
00113   return 1.0f - fabs(x*x*x);
00114 }
00115 
00116 float vuSliceFilter_gaussian(float x)
00117 {
00118   return exp(-x*x/2);
00119 }
00120 
00121 /* ************************************************************************ */
00122 /* *** filter callbacks *************************************************** */
00123 /* ************************************************************************ */

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