#ifndef Geom1_RectTerrain_H
#define Geom1_RectTerrain_H
#include <Glasses/ZNode.h>
#include <Stones/ZColor.h>
#include <Glasses/RGBAPalette.h>
class ZImage;
class TringTvor;
#include <TH2.h>
class RectTerrain : public ZNode
{
MAC_RNR_FRIENDS(RectTerrain);
public:
enum RnrMode_e { RM_Histo, RM_SmoothSquare, RM_SmoothTring, RM_FlatTring };
enum BorderCond_e { BC_Zero, BC_Const, BC_External,
BC_Equal, BC_Sym, BC_ASym, BC_Wrap };
enum OriginMode_e { OM_Edge, OM_Border, OM_Center };
private:
void _init();
protected:
Int_t mNx;
Int_t mNy;
Float_t mDx;
Float_t mDy;
TMatrixF mP;
Float_t mMinZ;
Float_t mMaxZ;
ZColor mMinCol;
ZColor mMaxCol;
Float_t mColSep;
ZLink<RGBAPalette> mRibbon;
ZLink<ZImage> mTexture;
UChar_t mRnrMode;
UChar_t mBorderCond;
UChar_t mOriginMode;
Float_t mBValue;
Bool_t bBorder;
Float_t mSmoothFac;
Bool_t bStudySize;
TringTvor* pTTvor;
TimeStamp_t mTTvorStamp;
Bool_t bUseTringStrips;
Int_t mMaxTSVerts;
Bool_t bRndColTringStrips;
ZColor make_color(Float_t z);
static void color_filler(Float_t* v, UChar_t* c, void* rt);
public:
RectTerrain(const Text_t* n="RectTerrain", const Text_t* t=0) : ZNode(n,t) { _init(); }
virtual ~RectTerrain();
void ApplyBorderCondition();
void SetFromImage(ZImage* image, Float_t zfac=1);
void SetFromHisto(TH2* histo);
void Smooth(Float_t fac=0);
void RecalcMinMax();
void ReTring();
void Boobofy();
TringTvor* SpawnTringTvor(Bool_t smoothp, Bool_t flatp, Bool_t colp, Bool_t texp);
void MakeTringTvor();
Float_t GetMinX(Bool_t include_border=true) const;
Float_t GetMaxX(Bool_t include_border=true) const;
Float_t GetMinY(Bool_t include_border=true) const;
Float_t GetMaxY(Bool_t include_border=true) const;
static Float_t sMaxEpsilon;
#include "RectTerrain.h7"
ClassDef(RectTerrain, 1);
};
inline ZColor RectTerrain::make_color(Float_t z)
{
if(mColSep > 0) {
Float_t c = (z - mMinZ) * mColSep / (mMaxZ - mMinZ);
c -= (int)c;
if(mRibbon != 0) {
return mRibbon->MarkToCol(c);
} else {
return (1 - c)*mMinCol + c*mMaxCol;
}
} else {
return mMinCol;
}
}
#endif