ROOT logo
// $Id: RectTerrain.h 2363 2010-04-06 20:49:16Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

#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 <TMatrixF.h>
#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;	// X{gS}  7 ValOut(-join=>1)
  Int_t		mNy;	// X{gS}  7 ValOut()
  Float_t	mDx;	// X{gST} 7 Value(-range=>[0,1000,1,1000],-join=>1)
  Float_t	mDy;	// X{gST} 7 Value(-range=>[0,1000,1,1000])
  TMatrixF	mP;

  Float_t	mMinZ;	 // X{gS} 7 ValOut(-join=>1)
  Float_t	mMaxZ;	 // X{gS} 7 ValOut()

  ZColor         mMinCol;  // X{PGST} 7 ColorButt(-join=>1)
  ZColor         mMaxCol;  // X{PGST} 7 ColorButt()
  Float_t        mColSep;  // X{gST}  7 Value(-range=>[0,100,1,1000])
  ZLink<RGBAPalette> mRibbon;  // X{gST} L{}

  ZLink<ZImage>  mTexture; // X{gST} L{} RnrBits{4,0,5,0, 0,0,0,0}

  UChar_t       mRnrMode;     // X{gST} 7 PhonyEnum(-type=>RnrMode_e)
  UChar_t       mBorderCond;  // X{gS}  7 PhonyEnum(-type=>BorderCond_e)
  UChar_t       mOriginMode;  // X{gS}  7 PhonyEnum(-type=>OriginMode_e)
  Float_t	mBValue;      // X{gS}  7 Value(-range=>[-1000,1000,1,1000], -join=>1)
  Bool_t	bBorder;      // X{gST} 7 Bool()

  Float_t	mSmoothFac;   // X{gS}  7 Value(-range=>[0,1,1,1000])

  Bool_t	bStudySize;   // X{gS} 7 Bool()

  TringTvor*    pTTvor;          //! X{g}
  TimeStamp_t	mTTvorStamp;     //!
  Bool_t        bUseTringStrips; //  X{GST} 7 Bool(-join=>1)
  Int_t         mMaxTSVerts;     //  X{GST} 7 Value(-range=>[3,32767,1])
  Bool_t        bRndColTringStrips; //  X{GST} 7 Bool()

  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(); // X{E} 7 MButt()

  void SetFromImage(ZImage* image, Float_t zfac=1); // X{E} C{1} 7 MCWButt()
  void SetFromHisto(TH2* histo);                    // X{E}

  void Smooth(Float_t fac=0); // X{E} 7 MButt(-join=>1)
  void RecalcMinMax();        // X{E} 7 MButt()

  void ReTring(); // X{E} 7 MButt(-join=>1)
  void Boobofy(); // X{E} 7 MButt()

  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);
}; // endclass RectTerrain


/**************************************************************************/

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
 RectTerrain.h:1
 RectTerrain.h:2
 RectTerrain.h:3
 RectTerrain.h:4
 RectTerrain.h:5
 RectTerrain.h:6
 RectTerrain.h:7
 RectTerrain.h:8
 RectTerrain.h:9
 RectTerrain.h:10
 RectTerrain.h:11
 RectTerrain.h:12
 RectTerrain.h:13
 RectTerrain.h:14
 RectTerrain.h:15
 RectTerrain.h:16
 RectTerrain.h:17
 RectTerrain.h:18
 RectTerrain.h:19
 RectTerrain.h:20
 RectTerrain.h:21
 RectTerrain.h:22
 RectTerrain.h:23
 RectTerrain.h:24
 RectTerrain.h:25
 RectTerrain.h:26
 RectTerrain.h:27
 RectTerrain.h:28
 RectTerrain.h:29
 RectTerrain.h:30
 RectTerrain.h:31
 RectTerrain.h:32
 RectTerrain.h:33
 RectTerrain.h:34
 RectTerrain.h:35
 RectTerrain.h:36
 RectTerrain.h:37
 RectTerrain.h:38
 RectTerrain.h:39
 RectTerrain.h:40
 RectTerrain.h:41
 RectTerrain.h:42
 RectTerrain.h:43
 RectTerrain.h:44
 RectTerrain.h:45
 RectTerrain.h:46
 RectTerrain.h:47
 RectTerrain.h:48
 RectTerrain.h:49
 RectTerrain.h:50
 RectTerrain.h:51
 RectTerrain.h:52
 RectTerrain.h:53
 RectTerrain.h:54
 RectTerrain.h:55
 RectTerrain.h:56
 RectTerrain.h:57
 RectTerrain.h:58
 RectTerrain.h:59
 RectTerrain.h:60
 RectTerrain.h:61
 RectTerrain.h:62
 RectTerrain.h:63
 RectTerrain.h:64
 RectTerrain.h:65
 RectTerrain.h:66
 RectTerrain.h:67
 RectTerrain.h:68
 RectTerrain.h:69
 RectTerrain.h:70
 RectTerrain.h:71
 RectTerrain.h:72
 RectTerrain.h:73
 RectTerrain.h:74
 RectTerrain.h:75
 RectTerrain.h:76
 RectTerrain.h:77
 RectTerrain.h:78
 RectTerrain.h:79
 RectTerrain.h:80
 RectTerrain.h:81
 RectTerrain.h:82
 RectTerrain.h:83
 RectTerrain.h:84
 RectTerrain.h:85
 RectTerrain.h:86
 RectTerrain.h:87
 RectTerrain.h:88
 RectTerrain.h:89
 RectTerrain.h:90
 RectTerrain.h:91
 RectTerrain.h:92
 RectTerrain.h:93
 RectTerrain.h:94
 RectTerrain.h:95
 RectTerrain.h:96
 RectTerrain.h:97
 RectTerrain.h:98
 RectTerrain.h:99
 RectTerrain.h:100
 RectTerrain.h:101
 RectTerrain.h:102
 RectTerrain.h:103
 RectTerrain.h:104
 RectTerrain.h:105
 RectTerrain.h:106
 RectTerrain.h:107
 RectTerrain.h:108
 RectTerrain.h:109
 RectTerrain.h:110
 RectTerrain.h:111
 RectTerrain.h:112
 RectTerrain.h:113
 RectTerrain.h:114
 RectTerrain.h:115
 RectTerrain.h:116
 RectTerrain.h:117
 RectTerrain.h:118
 RectTerrain.h:119