ROOT logo
// $Id: TriMeshField.h 2294 2009-12-22 21:06:53Z 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 Var1_TriMeshField_H
#define Var1_TriMeshField_H

#include <Glasses/ZGlass.h>

class RGBAPalette;
class TriMesh;

class TriMeshField : public ZGlass
{
  MAC_RNR_FRIENDS(TriMeshField);

private:
  void _init();

protected:
  // Field: definition mesh, dimensions, values.

  ZLink<TriMesh>     mMesh;     // X{GS} L{a}
  Int_t              mNVerts;   // X{G} 7 ValOut(-join=>1)
  Int_t              mDim;      // X{G} 7 ValOut()
  vector<Float_t>    mField;    //


  // Color mapping of field values.

  ZLink<RGBAPalette> mPalette;     // X{GS} L{a}
  TString            mFormula;     // X{GS} 7 Textor()
  Float_t            mMinValue;    // X{GS} 7 Value(-range=>[-1e6,1e6,1,100], -join=>1)
  Float_t            mMaxValue;    // X{GS} 7 Value(-range=>[-1e6,1e6,1,100])

  ZLink<ZGlass>      mColorArraySource; // X{GS} L{a}


  // Var

  void check_min_max(Float_t v);

public:
  TriMeshField(const Text_t* n="TriMeshField", const Text_t* t=0) :
    ZGlass(n,t) { _init(); }

  Float_t* FVec(Int_t i=0)          { return &mField[i*mDim]; }
  Float_t& F   (Int_t i, Int_t j=0) { return  mField[i*mDim + j]; }
  Float_t& operator[](Int_t idx)    { return  mField[idx]; }

  void Resize(Int_t nvert, Int_t dim=0); // X{E} 7 MCWButt(-join=>1)
  void ResizeToMesh(Int_t dim=-1);       // X{E} 7 MCWButt()

  void SetField(Float_t c0);
  void SetField(Float_t c0, Float_t c1);
  void SetField(Float_t c0, Float_t c1, Float_t c2);

  void FindMinMaxField();  // X{E} 7 MCWButt()
  void UpdateMinMaxField(set<Int_t> vertices);

  void ApplyColors(Bool_t regen_tring_cols=true);  // X{E} 7 MCWButt()
  void PartiallyApplyColors(set<Int_t> vertices, Bool_t regen_tring_cols=true);

  void FillByGaussBlobs(Bool_t  reset_field=true, Int_t   n_blobs=40,
                        Float_t A_min=5,          Float_t A_max=20,
                        Float_t sigma_min=2,      Float_t sigma_max=10,
                        Bool_t  minmax_p=false,   Bool_t  recolor_p=false); // X{ED} 7 MCWButt()

  void Diffuse(Float_t diff_const=1,  Float_t dt=0.1,
               Bool_t limit_df=false, Bool_t  recolor_p=false); // X{ED} 7 MCWButt()

#include "TriMeshField.h7"
  ClassDef(TriMeshField, 1); // N-dimensional field spawning over tri-mesh vertices.
}; // endclass TriMeshField


//------------------------------------------------------------------------------
// Inlines
//------------------------------------------------------------------------------

inline void TriMeshField::check_min_max(Float_t v)
{
  if (v < mMinValue) 
    mMinValue = v;
  else if (v > mMaxValue)
    mMaxValue = v;
}

#endif
 TriMeshField.h:1
 TriMeshField.h:2
 TriMeshField.h:3
 TriMeshField.h:4
 TriMeshField.h:5
 TriMeshField.h:6
 TriMeshField.h:7
 TriMeshField.h:8
 TriMeshField.h:9
 TriMeshField.h:10
 TriMeshField.h:11
 TriMeshField.h:12
 TriMeshField.h:13
 TriMeshField.h:14
 TriMeshField.h:15
 TriMeshField.h:16
 TriMeshField.h:17
 TriMeshField.h:18
 TriMeshField.h:19
 TriMeshField.h:20
 TriMeshField.h:21
 TriMeshField.h:22
 TriMeshField.h:23
 TriMeshField.h:24
 TriMeshField.h:25
 TriMeshField.h:26
 TriMeshField.h:27
 TriMeshField.h:28
 TriMeshField.h:29
 TriMeshField.h:30
 TriMeshField.h:31
 TriMeshField.h:32
 TriMeshField.h:33
 TriMeshField.h:34
 TriMeshField.h:35
 TriMeshField.h:36
 TriMeshField.h:37
 TriMeshField.h:38
 TriMeshField.h:39
 TriMeshField.h:40
 TriMeshField.h:41
 TriMeshField.h:42
 TriMeshField.h:43
 TriMeshField.h:44
 TriMeshField.h:45
 TriMeshField.h:46
 TriMeshField.h:47
 TriMeshField.h:48
 TriMeshField.h:49
 TriMeshField.h:50
 TriMeshField.h:51
 TriMeshField.h:52
 TriMeshField.h:53
 TriMeshField.h:54
 TriMeshField.h:55
 TriMeshField.h:56
 TriMeshField.h:57
 TriMeshField.h:58
 TriMeshField.h:59
 TriMeshField.h:60
 TriMeshField.h:61
 TriMeshField.h:62
 TriMeshField.h:63
 TriMeshField.h:64
 TriMeshField.h:65
 TriMeshField.h:66
 TriMeshField.h:67
 TriMeshField.h:68
 TriMeshField.h:69
 TriMeshField.h:70
 TriMeshField.h:71
 TriMeshField.h:72
 TriMeshField.h:73
 TriMeshField.h:74
 TriMeshField.h:75
 TriMeshField.h:76
 TriMeshField.h:77
 TriMeshField.h:78
 TriMeshField.h:79
 TriMeshField.h:80
 TriMeshField.h:81
 TriMeshField.h:82
 TriMeshField.h:83
 TriMeshField.h:84
 TriMeshField.h:85
 TriMeshField.h:86
 TriMeshField.h:87
 TriMeshField.h:88
 TriMeshField.h:89
 TriMeshField.h:90
 TriMeshField.h:91