Main Page   Class Overview   Pixels   Images   Geometry   Quick Index  

HxImgFtorRgb3d Class Template Reference

Instantiation of generic algorithm for display of 3d images. More...

#include <HxImgFtorRgb3d.h>

Inheritance diagram for HxImgFtorRgb3d::

HxImgFtorI1Cast HxImgFtorI1 HxImgFunctor List of all members.

Public Types

typedef HxImgFtorRgbKey KeyType
 The key type of this class. More...


Public Methods

 HxImgFtorRgb3d ()
 Constructor. More...

virtual ~HxImgFtorRgb3d ()
 Destructor. More...


Protected Methods

virtual void doIt (ImgDataPtrType ptr, HxSizes size, HxTagList &tags, HxImgFtorDescription *=0)
 The actual operation. More...


Detailed Description

template<class ImgSigT, class RgbT>
class HxImgFtorRgb3d< ImgSigT, RgbT >

Instantiation of generic algorithm for display of 3d images.


Member Typedef Documentation

template<class ImgSigT, class RgbT>
typedef HxImgFtorRgbKey HxImgFtorRgb3d::KeyType
 

The key type of this class.

Reimplemented from HxImgFtorI1Cast.


Constructor & Destructor Documentation

template<class ImgSigT, class RgbT>
HxImgFtorRgb3d< ImgSigT, RgbT >::HxImgFtorRgb3d   [inline]
 

Constructor.

00019     : HxImgFtorI1Cast<ImgSigT>(HxImgFtorRgbKey(HxClassName<ImgSigT>(),
00020                                HxClassName<RgbT>()))
00021 {
00022 #ifdef CD_TRACE
00023     HxEnvironment::instance()->outputStream()
00024         << "HxImgFtorRgb3d::HxImgFtorRgb3d()" << STD_ENDL;
00025 #endif
00026     static HxRegKey* surKey
00027         = HxRegistry::instance().insertKey("/imagefunctortable/rgb");
00028 
00029     HxRegKey* k = surKey->insertKey(HxClassName<RgbT>());
00030     k = k->insertKey("imagetype");
00031     k->insertValue(
00032         HxClassName<ImgSigT>(), HxRegData(HxClassName<ImgSigT>()));
00033 }

template<class ImgSigT, class RgbT>
HxImgFtorRgb3d< ImgSigT, RgbT >::~HxImgFtorRgb3d   [virtual]
 

Destructor.

00037 {
00038 #ifdef CD_TRACE
00039     HxEnvironment::instance()->outputStream()
00040         << "HxImgFtorRgb3d::~HxImgFtorRgb3d()" << STD_ENDL;
00041 #endif
00042 }


Member Function Documentation

template<class ImgSigT, class RgbT>
void HxImgFtorRgb3d< ImgSigT, RgbT >::doIt ImgDataPtrType    ptr,
HxSizes    size,
HxTagList   tags,
HxImgFtorDescription   description = 0
[protected, virtual]
 

The actual operation.

Reimplemented from HxImgFtorI1Cast.

00048 {
00049     int* pixels = HxGetTag<int*>(tags, "pixels");
00050     int dimension = HxGetTag<int>(tags, "dimension");
00051     int coordinate = HxGetTag<int>(tags, "coordinate");
00052     int resWidth = HxGetTag<int>(tags, "resWidth");
00053     int resHeight = HxGetTag<int>(tags, "resHeight");
00054     HxGeoIntType gi = HxGetTag<HxGeoIntType>(tags, "gi");
00055 
00056     RgbT rgbOp(tags);
00057 
00058     int x, y, z;
00059     HxSizes planeSize;
00060     switch (dimension) {
00061     case 1:
00062         planeSize = HxSizes(size.y(), size.z(), 1);
00063         break;
00064     case 2:
00065         planeSize = HxSizes(size.x(), size.z(), 1);
00066         break;
00067     case 3:
00068         planeSize = HxSizes(size.x(), size.y(), 1);
00069         break;
00070     }
00071 
00072     if (((resWidth == -1) && (resHeight == -1)) ||
00073             ((resWidth == planeSize.x()) && (resHeight == planeSize.y()))) {
00074         ImgDataPtrType p = ptr;
00075         switch (dimension) {
00076         case 1:
00077             for (z=0 ; z<size.z() ; z++) {
00078                 p = ptr;
00079                 p.incXYZ(coordinate, 0, z);
00080                 for (y=0 ; y<size.y() ; y++) {
00081                     *pixels++ = rgbOp.doIt(p.read());
00082                     p.incY();
00083                 }
00084             }
00085             break;
00086         case 2:
00087             for (z=0 ; z<size.z() ; z++) {
00088                 p = ptr;
00089                 p.incXYZ(0, coordinate, z);
00090                 for (x=0 ; x<size.x() ; x++) {
00091                     *pixels++ = rgbOp.doIt(p.read());
00092                     p.incX();
00093                 }
00094             }
00095             break;
00096         case 3:
00097             ptr.incZ(coordinate);
00098             int nPix = size.x() * size.y();
00099             while (--nPix >= 0) {
00100                 *pixels++ = rgbOp.doIt(ptr.read());
00101                 ptr.incX();
00102             }
00103             break;
00104         }
00105         return;
00106     }
00107 
00108     double sx = (double) planeSize.x() / resWidth;
00109     double sy = (double) planeSize.y() / resHeight;
00110     TYPENAME ImgSigT::ArithTypeDouble result;
00111     switch (dimension) {
00112     case 1:
00113         for (y=0 ; y<resHeight ; y++) {
00114             for (x=0 ; x<resWidth ; x++) {
00115                 result = HxFunc3dSample(ptr, result, coordinate, sx * x, sy * y, gi);
00116                 *pixels++ = rgbOp.doItDouble(result);
00117             }
00118         }
00119         break;
00120     case 2:
00121         for (y=0 ; y<resHeight ; y++) {
00122             for (x=0 ; x<resWidth ; x++) {
00123                 result = HxFunc3dSample(ptr, result, sx * x, coordinate, sy * y, gi);
00124                 *pixels++ = rgbOp.doItDouble(result);
00125             }
00126         }
00127         break;
00128     case 3:
00129         for (y=0 ; y<resHeight ; y++) {
00130             for (x=0 ; x<resWidth ; x++) {
00131                 result = HxFunc3dSample(ptr, result, sx * x, sy * y, coordinate, gi);
00132                 *pixels++ = rgbOp.doItDouble(result);
00133             }
00134         }
00135         break;
00136     }
00137 }


The documentation for this class was generated from the following files:
Generated on Tue Jan 8 13:59:30 2002 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001