ROOT logo
// $Id: TringuRep.h 2379 2010-05-26 20:38:45Z 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_TringuRep_H
#define Var1_TringuRep_H

#include <Glasses/ZNode.h>
#include "TriMesh.h"

class Tringula;
class TSPupilInfo;
class TriMeshField;
class TriMeshLightField;
class RGBAPalette;

class TringuRep : public ZNode,
		  public TriMeshColorArraySource
{
  MAC_RNR_FRIENDS(TringuRep);

private:
  void _init();

protected:
  ZLink<Tringula>          mTringula;    // X{GE} L{a}
  ZLink<TSPupilInfo>       mPupilInfo;   // X{GS} L{a}

  ZLink<TriMeshField>      mField;       // X{GE} L{a}
  ZLink<TriMeshLightField> mLightField;  // X{GE} L{a}

  ZLink<RGBAPalette>       mPalette;     // X{GS} L{a}

  Bool_t                   bSmoothShading; // X{GET} 7 Bool()
  Bool_t                   bTringStrips;   // X{GST} 7 Bool()

  std::vector<UChar_t>     mVertCols;    // Vertex colors, 4*NVert of tringula's mesh
  std::vector<UChar_t>     mTringCols;   // Triangle colors, 4*NTrings of tringula's mesh

  // Should have color array, or texture (1d for field, 2d to also put
  // intensity from light-field as v coordinate).

  GMutex        mFieldMutex;    //! Lock for field access - terminal.

  Float_t       mActionValue;   // X{GS} 7 Value(-range=>[-100,  100, 1,100], -tooltip=>"value to add to field/source", -join=>1)
  Float_t       mActionRadius;  // X{GS} 7 Value(-range=>[   0,  100, 1,100], -tooltip=>"distance of vertices for which to add field/source")
  Float_t       mActionBorder;  // X{GS} 7 Value(-range=>[   0,   10, 1,100], -tooltip=>"extra border where value falls off linearly")

  Bool_t        bSprayDLWasOn;  //!

  void update_triangle_color_array();
  void refresh_color_arrays();

public:
  TringuRep(const Text_t* n="TringuRep", const Text_t* t=0);
  virtual ~TringuRep();

  // Virtuals from TriMeshColorArraySource.
  virtual void     AssertVertexColorArray();
  virtual UChar_t* GetVertexColorArray();
  virtual UChar_t* GetTriangleColorArray();
  virtual void     ColorArraysModified();

  // Link setters -- need to be somewhat special.
  void SetTringula  (Tringula*          tring);
  void SetField     (TriMeshField*      field);
  void SetLightField(TriMeshLightField* lightfield);

  void SetSmoothShading(Bool_t ss);
  void SwitchSmoothShading(); // X{E}

  // Real setters for field links.
  void ActivateField     (TriMeshField*      field);      // X{ED} C{1} 7 MCWButt()
  void ActivateLightField(TriMeshLightField* lightfield); // X{ED} C{1} 7 MCWButt()
  void SwitchLightField  (TriMeshLightField* lightfield); // X{ED} C{1} 7 MCWButt()

  void ColorByTerrainProps(Int_t mode=0); // X{ED} 7 MCWButt()

  void AddField(const Float_t point[3], Int_t vertex, Float_t factor);
  void BeginSprayField();
  void EndSprayField();

#include "TringuRep.h7"
  ClassDef(TringuRep, 1);
}; // endclass TringuRep

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