arbeit
Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Namespace Members | Compound Members | File Members

nrroProbe.cpp

Go to the documentation of this file.
00001 //------------------------------------------------------------------------
00002 //
00003 //   Joe Kniss
00004 //     4-1-03
00005 //                   ________    ____   ___ 
00006 //                  |        \  /    | /  /
00007 //                  +---+     \/     |/  /
00008 //                  +--+|  |\    /|     < 
00009 //                  |  ||  | \  / |  |\  \ 
00010 //                  |      |  \/  |  | \  \ 
00011 //                   \_____|      |__|  \__\
00012 //                       Copyright  2003 
00013 //                      Joe Michael Kniss
00014 //                   <<< jmk@cs.utah.edu >>>
00015 //               "All Your Base are Belong to Us"
00016 //-------------------------------------------------------------------------
00017 
00018 //nrroProbe.cpp
00019 
00020 #include "nrroProbe.h"
00021 #include <iostream>
00022 
00023 using namespace std;
00024 
00025 
00026 
00027 
00028 
00029 ///////////////////////////////////////////////////////////////////////////
00030 ///////////////////////////////////////////////////////////////////////////
00031 /// NrroProbe
00032 ///////////////////////////////////////////////////////////////////////////
00033 ///////////////////////////////////////////////////////////////////////////
00034 
00035 NrroProbe::NrroProbe(bool multiChannel, const NrroKernel &nk)
00036 : _ctx(0), _nk(nk), _multi(multiChannel)
00037 {
00038    _ctx = gageContextNew();
00039    setKernel();
00040 }
00041 
00042 
00043 NrroProbe::~NrroProbe()
00044 {
00045    gageContextNix(_ctx);
00046 }
00047 
00048 ///////////////////////////////////////////////////////////////////////////
00049 /// set kernel
00050 ///////////////////////////////////////////////////////////////////////////
00051 void NrroProbe::setKernel()
00052 {
00053    gageKernelSet(_ctx, 
00054       _nk.getGageKernelType(NrroKernel::VALUE), 
00055       _nk.getNrrdKernel(NrroKernel::VALUE), 
00056       const_cast<double*>(_nk.getParams(NrroKernel::VALUE)));   
00057 
00058    gageKernelSet(_ctx, 
00059       _nk.getGageKernelType(NrroKernel::DERIV), 
00060       _nk.getNrrdKernel(NrroKernel::DERIV), 
00061       const_cast<double*>(_nk.getParams(NrroKernel::DERIV)));
00062 
00063    gageKernelSet(_ctx, 
00064       _nk.getGageKernelType(NrroKernel::DERIV2), 
00065       _nk.getNrrdKernel(NrroKernel::DERIV2), 
00066       const_cast<double*>(_nk.getParams(NrroKernel::DERIV2)));
00067 }
00068 
00069 ///////////////////////////////////////////////////////////////////////////
00070 /// add nrro
00071 ///////////////////////////////////////////////////////////////////////////
00072 void NrroProbe::addNrro(const Nrro *n, int probeType)
00073 {
00074    //// need to get the right kind
00075    PKIND pk = getProbeKind(*n);
00076    gagePerVolume *gpv = gagePerVolumeNew(n->getNrrd(), pk);     
00077    gagePerVolumeAttach(_ctx, gpv);
00078    _nvec.push_back(NrroSP(new Nrro(*n)));
00079    gageQuerySet(gpv, nrro2GageType(*n,probeType,pk));
00080 
00081    //_ansv = gageAnswerPointer(gpv, gageSclValue);
00082 
00083    update();
00084 }
00085 
00086 
00087 ///////////////////////////////////////////////////////////////////////////
00088 /// get nrro
00089 ///////////////////////////////////////////////////////////////////////////
00090 NrroSP NrroProbe::getNrro(unsigned int i)
00091 {
00092    if(i<_nvec.size())
00093       return _nvec[i];
00094 
00095    return NrroSP();
00096 }
00097 
00098 ///////////////////////////////////////////////////////////////////////////
00099 /// probe ()
00100 ///////////////////////////////////////////////////////////////////////////
00101 NrroProbe::TYPE *NrroProbe::operator() (float x, float y, float z)
00102 {
00103    gageProbe(_ctx,x,y,z);       
00104 
00105    return 0;
00106    //return gageAnswerPointer(gpv, gageSclValue);
00107    //return *_ansv;
00108 }
00109 
00110 ///////////////////////////////////////////////////////////////////////////
00111 /// update
00112 ///////////////////////////////////////////////////////////////////////////
00113 void NrroProbe::update()
00114 {       
00115    gageUpdate(_ctx);
00116 }
00117 
00118 ///////////////////////////////////////////////////////////////////////////
00119 /// get Probe Kind
00120 ///////////////////////////////////////////////////////////////////////////
00121 NrroProbe::PKIND NrroProbe::getProbeKind(const Nrro &n)
00122 {
00123    return gageKindScl;
00124 }
00125 
00126 ///////////////////////////////////////////////////////////////////////////
00127 /// get Probe Type
00128 ///////////////////////////////////////////////////////////////////////////
00129 unsigned int NrroProbe::nrro2GageType(const Nrro &n, int pt, PKIND kind) const
00130 {
00131    ///////////////////////////////////
00132    /// convert to gauge types
00133    unsigned int ret = 0;
00134 
00135    if(kind == gageKindScl)
00136    {            
00137       if(pt & VALUE)
00138          ret |= GAGE_SCL_VALUE_BIT;
00139       if(pt & GRAD)
00140          ret |= GAGE_SCL_GRADVEC_BIT;
00141       if(pt & GRADMAG)
00142          ret |= GAGE_SCL_GRADMAG_BIT;
00143       if(pt & GRAD_EVAL)
00144          ret |= GAGE_SCL_GRADMAG_BIT;
00145       if(pt & GRAD_EVEC)
00146          ret |= GAGE_SCL_GRADVEC_BIT;
00147       if(pt & NORMAL)
00148          ret |= GAGE_SCL_NORMAL_BIT;
00149       if(pt & HESS)
00150          ret |= GAGE_SCL_HESSIAN_BIT;
00151       if(pt & HESS_EVAL)
00152          ret |= GAGE_SCL_HESSEVAL_BIT;
00153       if(pt & HESS_EVEC)
00154          ret |= GAGE_SCL_HESSEVEC_BIT;
00155       if(pt & LAPLAC)
00156          ret |= GAGE_SCL_LAPLACIAN_BIT;
00157       if(pt & DD2)
00158          ret |= GAGE_SCL_2NDDD_BIT;
00159       if(pt & GEOM_TENS)
00160          ret |= GAGE_SCL_GEOMTENS_BIT;
00161       if(pt & K1)
00162          ret |= GAGE_SCL_K1_BIT;
00163       if(pt & K2)
00164          ret |= GAGE_SCL_K2_BIT;
00165       if(pt & CURVE)
00166          ret |= GAGE_SCL_CURVEDNESS_BIT;
00167 
00168       if(ret == 0)
00169       {
00170          cerr << "NrroProbe::nrro2gage, error: type unknown" << endl;
00171       }
00172    }
00173 
00174    return ret;
00175 }
00176 
00177 unsigned int  NrroProbe::getProbeType(int vol) const
00178 {
00179    unsigned int pt = 0;
00180    if(vol < GAGE_PERVOLUME_NUM)
00181       pt = _ctx->pvl[vol]->query;
00182    return gage2NrroType(pt, _ctx->pvl[vol]->kind);
00183 
00184 }
00185 
00186 void NrroProbe::setProbeType(unsigned int ptype, int vol)
00187 {
00188 
00189 }
00190 
00191 
00192 unsigned int NrroProbe::gage2NrroType(unsigned int pt, PKIND kind) const 
00193 {
00194 
00195    ///////////////////////////////////
00196    /// convert to gauge types
00197    unsigned int ret = 0;
00198 
00199    if(kind == gageKindScl)
00200    {            
00201       if(pt & GAGE_SCL_VALUE_BIT)
00202          ret |= VALUE;
00203       if(pt & GAGE_SCL_GRADVEC_BIT)
00204          ret |= GRAD;
00205       if(pt & GAGE_SCL_GRADMAG_BIT)
00206          ret |= GRADMAG;
00207       if(pt & GAGE_SCL_GRADMAG_BIT)
00208          ret |= GRAD_EVAL;
00209       if(pt & GAGE_SCL_GRADVEC_BIT)
00210          ret |= GRAD_EVEC;
00211       if(pt & GAGE_SCL_NORMAL_BIT)
00212          ret |= NORMAL;
00213       if(pt & GAGE_SCL_HESSIAN_BIT)
00214          ret |= HESS;
00215       if(pt & GAGE_SCL_HESSEVAL_BIT)
00216          ret |= HESS_EVAL;
00217       if(pt & GAGE_SCL_HESSEVEC_BIT)
00218          ret |= HESS_EVEC;
00219       if(pt & GAGE_SCL_LAPLACIAN_BIT)
00220          ret |= LAPLAC;
00221       if(pt & GAGE_SCL_2NDDD_BIT)
00222          ret |= DD2;
00223       if(pt & GAGE_SCL_GEOMTENS_BIT)
00224          ret |= GEOM_TENS;
00225       if(pt & GAGE_SCL_K1_BIT)
00226          ret |= K1;
00227       if(pt & GAGE_SCL_K2_BIT)
00228          ret |= K2;
00229       if(pt & GAGE_SCL_CURVEDNESS_BIT)
00230          ret |= CURVE;
00231 
00232       if(ret == 0)
00233       {
00234          cerr << "NrroProbe::gage2NrroType, error: type unknown" << endl;
00235       }
00236    }
00237 
00238    return ret;
00239 }
00240 

Send questions, comments, and bug reports to:
jmk