ROOT logo
// @(#)root/eve:$Id$
// Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include "TEveFrameBox.h"
#include "TColor.h"

//==============================================================================
// TEveFrameBox
//==============================================================================

//______________________________________________________________________________
//
// Description of a 2D or 3D frame that can be used to visually group
// a set of objects.

ClassImp(TEveFrameBox);

//______________________________________________________________________________
TEveFrameBox::TEveFrameBox() :
   fFrameType   (kFT_None),
   fFrameSize   (0),
   fFramePoints (0),

   fFrameWidth  (1),
   fFrameColor  (1),
   fBackColor   (0),
   fFrameFill   (kFALSE),
   fDrawBack    (kFALSE)
{
   // Default constructor.

   fFrameRGBA[0] = fFrameRGBA[1] = fFrameRGBA[2] = 0;   fFrameRGBA[3] = 255;
   fBackRGBA [0] = fBackRGBA [1] = fBackRGBA [2] = 255; fBackRGBA [3] = 255;
}

//______________________________________________________________________________
TEveFrameBox::~TEveFrameBox()
{
   // Destructor.

   delete [] fFramePoints;
}

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

//______________________________________________________________________________
void TEveFrameBox::SetAAQuadXY(Float_t x,  Float_t y, Float_t z,
                               Float_t dx, Float_t dy)
{
   // Setup for axis-aligned rectangle with one corner at x, y, z and
   // given sizes in x (dx) and y (dy).

   fFrameType = kFT_Quad;
   fFrameSize = 12;
   delete [] fFramePoints;
   fFramePoints = new Float_t [fFrameSize];
   Float_t* p = fFramePoints;
   p[0] = x;    p[1] = y;    p[2] = z; p += 3;
   p[0] = x+dx; p[1] = y;    p[2] = z; p += 3;
   p[0] = x+dx; p[1] = y+dy; p[2] = z; p += 3;
   p[0] = x ;   p[1] = y+dy; p[2] = z; p += 3;
}

//______________________________________________________________________________
void TEveFrameBox::SetAAQuadXZ(Float_t x,  Float_t y, Float_t z,
                               Float_t dx, Float_t dz)
{
   // Setup for axis-aligned rectangle with one corner at x, y, z and
   // given sizes in x (dx) and z (dz).

   fFrameType = kFT_Quad;
   fFrameSize = 12;
   delete [] fFramePoints;
   fFramePoints = new Float_t [fFrameSize];
   Float_t* p = fFramePoints;
   p[0] = x;    p[1] = y; p[2] = z;    p += 3;
   p[0] = x+dx; p[1] = y; p[2] = z;    p += 3;
   p[0] = x+dx; p[1] = y; p[2] = z+dz; p += 3;
   p[0] = x ;   p[1] = y; p[2] = z+dz; p += 3;
}

//______________________________________________________________________________
void TEveFrameBox::SetQuadByPoints(const Float_t* pointArr, Int_t nPoints)
{
   // Setup frame with explicitly given corner coordinates.
   // Arguments:
   //   pointArr - array containing the 3D points
   //   nPoint   - number of points, size of array divided by 3

   fFrameType = kFT_Quad;
   fFrameSize = 3*nPoints;
   delete [] fFramePoints;
   fFramePoints = new Float_t [fFrameSize];
   memcpy(fFramePoints, pointArr, fFrameSize*sizeof(Float_t));
}

//______________________________________________________________________________
void TEveFrameBox::SetAABox(Float_t x,  Float_t y,  Float_t z,
                            Float_t dx, Float_t dy, Float_t dz)
{
   // Setup for axis-aligned box with one corner at x, y, z and
   // given sizes in x (dx), y (dy) and z (dz).

   fFrameType = kFT_Box;
   fFrameSize = 24;
   delete [] fFramePoints;
   fFramePoints = new Float_t [fFrameSize];

   Float_t* p = fFramePoints;
   //bottom
   p[0] = x;       p[1] = y + dy;  p[2] = z;       p += 3;
   p[0] = x + dx;  p[1] = y + dy;  p[2] = z;       p += 3;
   p[0] = x + dx;  p[1] = y;       p[2] = z;       p += 3;
   p[0] = x;       p[1] = y;       p[2] = z;       p += 3;
   //top
   p[0] = x;       p[1] = y + dy;  p[2] = z + dz;  p += 3;
   p[0] = x + dx;  p[1] = y + dy;  p[2] = z + dz;  p += 3;
   p[0] = x + dx;  p[1] = y;       p[2] = z + dz;  p += 3;
   p[0] = x;       p[1] = y;       p[2] = z + dz;
}

//______________________________________________________________________________
void TEveFrameBox::SetAABoxCenterHalfSize(Float_t x,  Float_t y,  Float_t z,
                                          Float_t dx, Float_t dy, Float_t dz)
{
   // Setup for axis-aligned box with center at x, y, z and given
   // half-sizes in x (dx), y (dy) and z (dz).

   fFrameType = kFT_Box;
   fFrameSize = 24;
   delete [] fFramePoints;
   fFramePoints = new Float_t [fFrameSize];

   Float_t* p = fFramePoints;
   //bottom
   p[0] = x - dx;  p[1] = y + dy;  p[2] = z - dz;  p += 3;
   p[0] = x + dx;  p[1] = y + dy;  p[2] = z - dz;  p += 3;
   p[0] = x + dx;  p[1] = y - dy;  p[2] = z - dz;  p += 3;
   p[0] = x - dx;  p[1] = y - dy;  p[2] = z - dz;  p += 3;
   //top
   p[0] = x - dx;  p[1] = y + dy;  p[2] = z + dz;  p += 3;
   p[0] = x + dx;  p[1] = y + dy;  p[2] = z + dz;  p += 3;
   p[0] = x + dx;  p[1] = y - dy;  p[2] = z + dz;  p += 3;
   p[0] = x - dx;  p[1] = y - dy;  p[2] = z + dz;
}

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

//______________________________________________________________________________
void TEveFrameBox::SetFrameColor(Color_t ci)
{
   // Set color of the frame.

   fFrameColor = ci;
   TEveUtil::ColorFromIdx(ci, fFrameRGBA, kTRUE);
}

//______________________________________________________________________________
void TEveFrameBox::SetFrameColorPixel(Pixel_t pix)
{
   // Set color of the frame.

   SetFrameColor(Color_t(TColor::GetColor(pix)));
}

//______________________________________________________________________________
void TEveFrameBox::SetFrameColorRGBA(UChar_t r, UChar_t g, UChar_t b, UChar_t a)
{
   // Set color of the frame.

   fFrameColor = Color_t(TColor::GetColor(r, g, b));
   fFrameRGBA[0] = r;
   fFrameRGBA[1] = g;
   fFrameRGBA[2] = b;
   fFrameRGBA[3] = a;
}

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

//______________________________________________________________________________
void TEveFrameBox::SetBackColor(Color_t ci)
{
   // Set color of the background polygon.

   fBackColor = ci;
   TEveUtil::ColorFromIdx(ci, fBackRGBA, kTRUE);
}

//______________________________________________________________________________
void TEveFrameBox::SetBackColorPixel(Pixel_t pix)
{
   // Set color of the background polygon.

   SetBackColor(Color_t(TColor::GetColor(pix)));
}

//______________________________________________________________________________
void TEveFrameBox::SetBackColorRGBA(UChar_t r, UChar_t g, UChar_t b, UChar_t a)
{
   // Set color of the background polygon.

   fBackColor = Color_t(TColor::GetColor(r, g, b));
   fBackRGBA[0] = r;
   fBackRGBA[1] = g;
   fBackRGBA[2] = b;
   fBackRGBA[3] = a;
}
 TEveFrameBox.cxx:1
 TEveFrameBox.cxx:2
 TEveFrameBox.cxx:3
 TEveFrameBox.cxx:4
 TEveFrameBox.cxx:5
 TEveFrameBox.cxx:6
 TEveFrameBox.cxx:7
 TEveFrameBox.cxx:8
 TEveFrameBox.cxx:9
 TEveFrameBox.cxx:10
 TEveFrameBox.cxx:11
 TEveFrameBox.cxx:12
 TEveFrameBox.cxx:13
 TEveFrameBox.cxx:14
 TEveFrameBox.cxx:15
 TEveFrameBox.cxx:16
 TEveFrameBox.cxx:17
 TEveFrameBox.cxx:18
 TEveFrameBox.cxx:19
 TEveFrameBox.cxx:20
 TEveFrameBox.cxx:21
 TEveFrameBox.cxx:22
 TEveFrameBox.cxx:23
 TEveFrameBox.cxx:24
 TEveFrameBox.cxx:25
 TEveFrameBox.cxx:26
 TEveFrameBox.cxx:27
 TEveFrameBox.cxx:28
 TEveFrameBox.cxx:29
 TEveFrameBox.cxx:30
 TEveFrameBox.cxx:31
 TEveFrameBox.cxx:32
 TEveFrameBox.cxx:33
 TEveFrameBox.cxx:34
 TEveFrameBox.cxx:35
 TEveFrameBox.cxx:36
 TEveFrameBox.cxx:37
 TEveFrameBox.cxx:38
 TEveFrameBox.cxx:39
 TEveFrameBox.cxx:40
 TEveFrameBox.cxx:41
 TEveFrameBox.cxx:42
 TEveFrameBox.cxx:43
 TEveFrameBox.cxx:44
 TEveFrameBox.cxx:45
 TEveFrameBox.cxx:46
 TEveFrameBox.cxx:47
 TEveFrameBox.cxx:48
 TEveFrameBox.cxx:49
 TEveFrameBox.cxx:50
 TEveFrameBox.cxx:51
 TEveFrameBox.cxx:52
 TEveFrameBox.cxx:53
 TEveFrameBox.cxx:54
 TEveFrameBox.cxx:55
 TEveFrameBox.cxx:56
 TEveFrameBox.cxx:57
 TEveFrameBox.cxx:58
 TEveFrameBox.cxx:59
 TEveFrameBox.cxx:60
 TEveFrameBox.cxx:61
 TEveFrameBox.cxx:62
 TEveFrameBox.cxx:63
 TEveFrameBox.cxx:64
 TEveFrameBox.cxx:65
 TEveFrameBox.cxx:66
 TEveFrameBox.cxx:67
 TEveFrameBox.cxx:68
 TEveFrameBox.cxx:69
 TEveFrameBox.cxx:70
 TEveFrameBox.cxx:71
 TEveFrameBox.cxx:72
 TEveFrameBox.cxx:73
 TEveFrameBox.cxx:74
 TEveFrameBox.cxx:75
 TEveFrameBox.cxx:76
 TEveFrameBox.cxx:77
 TEveFrameBox.cxx:78
 TEveFrameBox.cxx:79
 TEveFrameBox.cxx:80
 TEveFrameBox.cxx:81
 TEveFrameBox.cxx:82
 TEveFrameBox.cxx:83
 TEveFrameBox.cxx:84
 TEveFrameBox.cxx:85
 TEveFrameBox.cxx:86
 TEveFrameBox.cxx:87
 TEveFrameBox.cxx:88
 TEveFrameBox.cxx:89
 TEveFrameBox.cxx:90
 TEveFrameBox.cxx:91
 TEveFrameBox.cxx:92
 TEveFrameBox.cxx:93
 TEveFrameBox.cxx:94
 TEveFrameBox.cxx:95
 TEveFrameBox.cxx:96
 TEveFrameBox.cxx:97
 TEveFrameBox.cxx:98
 TEveFrameBox.cxx:99
 TEveFrameBox.cxx:100
 TEveFrameBox.cxx:101
 TEveFrameBox.cxx:102
 TEveFrameBox.cxx:103
 TEveFrameBox.cxx:104
 TEveFrameBox.cxx:105
 TEveFrameBox.cxx:106
 TEveFrameBox.cxx:107
 TEveFrameBox.cxx:108
 TEveFrameBox.cxx:109
 TEveFrameBox.cxx:110
 TEveFrameBox.cxx:111
 TEveFrameBox.cxx:112
 TEveFrameBox.cxx:113
 TEveFrameBox.cxx:114
 TEveFrameBox.cxx:115
 TEveFrameBox.cxx:116
 TEveFrameBox.cxx:117
 TEveFrameBox.cxx:118
 TEveFrameBox.cxx:119
 TEveFrameBox.cxx:120
 TEveFrameBox.cxx:121
 TEveFrameBox.cxx:122
 TEveFrameBox.cxx:123
 TEveFrameBox.cxx:124
 TEveFrameBox.cxx:125
 TEveFrameBox.cxx:126
 TEveFrameBox.cxx:127
 TEveFrameBox.cxx:128
 TEveFrameBox.cxx:129
 TEveFrameBox.cxx:130
 TEveFrameBox.cxx:131
 TEveFrameBox.cxx:132
 TEveFrameBox.cxx:133
 TEveFrameBox.cxx:134
 TEveFrameBox.cxx:135
 TEveFrameBox.cxx:136
 TEveFrameBox.cxx:137
 TEveFrameBox.cxx:138
 TEveFrameBox.cxx:139
 TEveFrameBox.cxx:140
 TEveFrameBox.cxx:141
 TEveFrameBox.cxx:142
 TEveFrameBox.cxx:143
 TEveFrameBox.cxx:144
 TEveFrameBox.cxx:145
 TEveFrameBox.cxx:146
 TEveFrameBox.cxx:147
 TEveFrameBox.cxx:148
 TEveFrameBox.cxx:149
 TEveFrameBox.cxx:150
 TEveFrameBox.cxx:151
 TEveFrameBox.cxx:152
 TEveFrameBox.cxx:153
 TEveFrameBox.cxx:154
 TEveFrameBox.cxx:155
 TEveFrameBox.cxx:156
 TEveFrameBox.cxx:157
 TEveFrameBox.cxx:158
 TEveFrameBox.cxx:159
 TEveFrameBox.cxx:160
 TEveFrameBox.cxx:161
 TEveFrameBox.cxx:162
 TEveFrameBox.cxx:163
 TEveFrameBox.cxx:164
 TEveFrameBox.cxx:165
 TEveFrameBox.cxx:166
 TEveFrameBox.cxx:167
 TEveFrameBox.cxx:168
 TEveFrameBox.cxx:169
 TEveFrameBox.cxx:170
 TEveFrameBox.cxx:171
 TEveFrameBox.cxx:172
 TEveFrameBox.cxx:173
 TEveFrameBox.cxx:174
 TEveFrameBox.cxx:175
 TEveFrameBox.cxx:176
 TEveFrameBox.cxx:177
 TEveFrameBox.cxx:178
 TEveFrameBox.cxx:179
 TEveFrameBox.cxx:180
 TEveFrameBox.cxx:181
 TEveFrameBox.cxx:182
 TEveFrameBox.cxx:183
 TEveFrameBox.cxx:184
 TEveFrameBox.cxx:185
 TEveFrameBox.cxx:186
 TEveFrameBox.cxx:187
 TEveFrameBox.cxx:188
 TEveFrameBox.cxx:189
 TEveFrameBox.cxx:190
 TEveFrameBox.cxx:191
 TEveFrameBox.cxx:192
 TEveFrameBox.cxx:193
 TEveFrameBox.cxx:194
 TEveFrameBox.cxx:195
 TEveFrameBox.cxx:196
 TEveFrameBox.cxx:197
 TEveFrameBox.cxx:198
 TEveFrameBox.cxx:199
 TEveFrameBox.cxx:200
 TEveFrameBox.cxx:201
 TEveFrameBox.cxx:202
 TEveFrameBox.cxx:203
 TEveFrameBox.cxx:204
 TEveFrameBox.cxx:205
 TEveFrameBox.cxx:206
 TEveFrameBox.cxx:207
 TEveFrameBox.cxx:208
 TEveFrameBox.cxx:209
 TEveFrameBox.cxx:210
 TEveFrameBox.cxx:211
 TEveFrameBox.cxx:212
 TEveFrameBox.cxx:213
 TEveFrameBox.cxx:214
 TEveFrameBox.cxx:215