00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "TFElement.h"
00021 #include <limits>
00022
00023 using namespace STF;
00024 using namespace std;
00025 using namespace gutz;
00026
00027 typedef tfSType TFT;
00028
00029 #if 0
00030
00031 template<class T>
00032 void TFElement::rasterize2D(Nrro::NrroIter<T> ni,
00033 const gutz::vec2i &posIdx,
00034 const STF::tfRangeIdx &valIdx) const
00035 {
00036
00037 vec2<T> mmm;
00038
00039 if(numeric_limits<T>::epsilon())
00040 {
00041 mmm = vec2<T>(T(0.0),T(1.0));
00042 }
00043 else
00044 {
00045 mmm = vec2<T>(numeric_limits<T>::min(), numeric_limits<T>::max());
00046 }
00047
00048
00049 const PosType bmin = getMinBox();
00050 const PosType bmax = getMaxBox();
00051
00052
00053 const int minX = clamp(0, int(bmin[posIdx.x] * ni->dim(1)), ni->dim(1));
00054 const int minY = clamp(0, int(bmin[posIdx.y] * ni->dim(2)), ni->dim(2));
00055 const int maxX = clamp(0, int(bmax[posIdx.x] * ni->dim(1)), ni->dim(1));
00056 const int maxY = clamp(0, int(bmax[posIdx.y] * ni->dim(2)), ni->dim(2));
00057
00058
00059 const STF::tfSType px = minX/float(ni->dim(1));
00060 const STF::tfSType py = minY/float(ni->dim(2));
00061 const STF::tfSType dx = 1.0f/float(ni->dim(1));
00062 const STF::tfSType dy = 1.0f/float(ni->dim(2));
00063
00064
00065 tfSType u;
00066 ValType o;
00067 tfVec2 pos(px,py);
00068
00069
00070 for(int y = minY; y<= maxY; ++y, pos.y+=dy)
00071 {
00072 for(int x = minX; x<= maxX; ++x, pos.x+=dx)
00073 {
00074
00075 o = eval(pos, posIdx);
00076 #if 1
00077
00078 for(int i=0; i<ni->dim(0); ++i)
00079 {
00080
00081 u = g_affine(T(mmm.x), ni(i,x,y), T(mmm.y), TFT(0.0), TFT(1.0));
00082
00083
00084
00085 ni(i,x,y) = g_affine(TFT(0.0), o[valIdx[i]], TFT(1.0), T(mmm.x), T(mmm.y));
00086 }
00087 #endif
00088 }
00089 pos.x = px;
00090 }
00091
00092 }
00093
00094
00095
00096 #define genRasterize2D(T) \
00097 template \
00098 void TFElement::rasterize2D(Nrro::NrroIter<##T##> ni, \
00099 const gutz::vec2i &posIdx, \
00100 const STF::tfRangeIdx &valIdx) const
00101
00102
00103
00104 genRasterize2D(char);
00105 genRasterize2D(unsigned char);
00106 genRasterize2D(short);
00107 genRasterize2D(unsigned short);
00108 genRasterize2D(int);
00109 genRasterize2D(unsigned int);
00110 genRasterize2D(float);
00111 genRasterize2D(double);
00112
00113
00114
00115
00116 #endif