Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TEveFrameBox.cxx
Go to the documentation of this file.
1 // @(#)root/eve:$Id$
2 // Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #include "TEveFrameBox.h"
13 #include "TColor.h"
14 
15 /** \class TEveFrameBox
16 \ingroup TEve
17 Description of a 2D or 3D frame that can be used to visually group
18 a set of objects.
19 */
20 
21 ClassImp(TEveFrameBox);
22 
23 ////////////////////////////////////////////////////////////////////////////////
24 
25 TEveFrameBox::TEveFrameBox() :
26  fFrameType (kFT_None),
27  fFrameSize (0),
28  fFramePoints (0),
29 
30  fFrameWidth (1),
31  fFrameColor (1),
32  fBackColor (0),
33  fFrameFill (kFALSE),
34  fDrawBack (kFALSE)
35 {
36  // Default constructor.
37 
38  fFrameRGBA[0] = fFrameRGBA[1] = fFrameRGBA[2] = 0; fFrameRGBA[3] = 255;
39  fBackRGBA [0] = fBackRGBA [1] = fBackRGBA [2] = 255; fBackRGBA [3] = 255;
40 }
41 
42 ////////////////////////////////////////////////////////////////////////////////
43 /// Destructor.
44 
45 TEveFrameBox::~TEveFrameBox()
46 {
47  delete [] fFramePoints;
48 }
49 
50 ////////////////////////////////////////////////////////////////////////////////
51 /// Setup for axis-aligned rectangle with one corner at x, y, z and
52 /// given sizes in x (dx) and y (dy).
53 
54 void TEveFrameBox::SetAAQuadXY(Float_t x, Float_t y, Float_t z,
55  Float_t dx, Float_t dy)
56 {
57  fFrameType = kFT_Quad;
58  fFrameSize = 12;
59  delete [] fFramePoints;
60  fFramePoints = new Float_t [fFrameSize];
61  Float_t* p = fFramePoints;
62  p[0] = x; p[1] = y; p[2] = z; p += 3;
63  p[0] = x+dx; p[1] = y; p[2] = z; p += 3;
64  p[0] = x+dx; p[1] = y+dy; p[2] = z; p += 3;
65  p[0] = x ; p[1] = y+dy; p[2] = z; p += 3;
66 }
67 
68 ////////////////////////////////////////////////////////////////////////////////
69 /// Setup for axis-aligned rectangle with one corner at x, y, z and
70 /// given sizes in x (dx) and z (dz).
71 
72 void TEveFrameBox::SetAAQuadXZ(Float_t x, Float_t y, Float_t z,
73  Float_t dx, Float_t dz)
74 {
75  fFrameType = kFT_Quad;
76  fFrameSize = 12;
77  delete [] fFramePoints;
78  fFramePoints = new Float_t [fFrameSize];
79  Float_t* p = fFramePoints;
80  p[0] = x; p[1] = y; p[2] = z; p += 3;
81  p[0] = x+dx; p[1] = y; p[2] = z; p += 3;
82  p[0] = x+dx; p[1] = y; p[2] = z+dz; p += 3;
83  p[0] = x ; p[1] = y; p[2] = z+dz; p += 3;
84 }
85 
86 ////////////////////////////////////////////////////////////////////////////////
87 /// Setup frame with explicitly given corner coordinates.
88 /// Arguments:
89 /// - pointArr - array containing the 3D points
90 /// - nPoint - number of points, size of array divided by 3
91 
92 void TEveFrameBox::SetQuadByPoints(const Float_t* pointArr, Int_t nPoints)
93 {
94  fFrameType = kFT_Quad;
95  fFrameSize = 3*nPoints;
96  delete [] fFramePoints;
97  fFramePoints = new Float_t [fFrameSize];
98  memcpy(fFramePoints, pointArr, fFrameSize*sizeof(Float_t));
99 }
100 
101 ////////////////////////////////////////////////////////////////////////////////
102 /// Setup for axis-aligned box with one corner at x, y, z and
103 /// given sizes in x (dx), y (dy) and z (dz).
104 
105 void TEveFrameBox::SetAABox(Float_t x, Float_t y, Float_t z,
106  Float_t dx, Float_t dy, Float_t dz)
107 {
108  fFrameType = kFT_Box;
109  fFrameSize = 24;
110  delete [] fFramePoints;
111  fFramePoints = new Float_t [fFrameSize];
112 
113  Float_t* p = fFramePoints;
114  //bottom
115  p[0] = x; p[1] = y + dy; p[2] = z; p += 3;
116  p[0] = x + dx; p[1] = y + dy; p[2] = z; p += 3;
117  p[0] = x + dx; p[1] = y; p[2] = z; p += 3;
118  p[0] = x; p[1] = y; p[2] = z; p += 3;
119  //top
120  p[0] = x; p[1] = y + dy; p[2] = z + dz; p += 3;
121  p[0] = x + dx; p[1] = y + dy; p[2] = z + dz; p += 3;
122  p[0] = x + dx; p[1] = y; p[2] = z + dz; p += 3;
123  p[0] = x; p[1] = y; p[2] = z + dz;
124 }
125 
126 ////////////////////////////////////////////////////////////////////////////////
127 /// Setup for axis-aligned box with center at x, y, z and given
128 /// half-sizes in x (dx), y (dy) and z (dz).
129 
130 void TEveFrameBox::SetAABoxCenterHalfSize(Float_t x, Float_t y, Float_t z,
131  Float_t dx, Float_t dy, Float_t dz)
132 {
133  fFrameType = kFT_Box;
134  fFrameSize = 24;
135  delete [] fFramePoints;
136  fFramePoints = new Float_t [fFrameSize];
137 
138  Float_t* p = fFramePoints;
139  //bottom
140  p[0] = x - dx; p[1] = y + dy; p[2] = z - dz; p += 3;
141  p[0] = x + dx; p[1] = y + dy; p[2] = z - dz; p += 3;
142  p[0] = x + dx; p[1] = y - dy; p[2] = z - dz; p += 3;
143  p[0] = x - dx; p[1] = y - dy; p[2] = z - dz; p += 3;
144  //top
145  p[0] = x - dx; p[1] = y + dy; p[2] = z + dz; p += 3;
146  p[0] = x + dx; p[1] = y + dy; p[2] = z + dz; p += 3;
147  p[0] = x + dx; p[1] = y - dy; p[2] = z + dz; p += 3;
148  p[0] = x - dx; p[1] = y - dy; p[2] = z + dz;
149 }
150 
151 ////////////////////////////////////////////////////////////////////////////////
152 /// Set color of the frame.
153 
154 void TEveFrameBox::SetFrameColor(Color_t ci)
155 {
156  fFrameColor = ci;
157  TEveUtil::ColorFromIdx(ci, fFrameRGBA, kTRUE);
158 }
159 
160 ////////////////////////////////////////////////////////////////////////////////
161 /// Set color of the frame.
162 
163 void TEveFrameBox::SetFrameColorPixel(Pixel_t pix)
164 {
165  SetFrameColor(Color_t(TColor::GetColor(pix)));
166 }
167 
168 ////////////////////////////////////////////////////////////////////////////////
169 /// Set color of the frame.
170 
171 void TEveFrameBox::SetFrameColorRGBA(UChar_t r, UChar_t g, UChar_t b, UChar_t a)
172 {
173  fFrameColor = Color_t(TColor::GetColor(r, g, b));
174  fFrameRGBA[0] = r;
175  fFrameRGBA[1] = g;
176  fFrameRGBA[2] = b;
177  fFrameRGBA[3] = a;
178 }
179 
180 ////////////////////////////////////////////////////////////////////////////////
181 /// Set color of the background polygon.
182 
183 void TEveFrameBox::SetBackColor(Color_t ci)
184 {
185  fBackColor = ci;
186  TEveUtil::ColorFromIdx(ci, fBackRGBA, kTRUE);
187 }
188 
189 ////////////////////////////////////////////////////////////////////////////////
190 /// Set color of the background polygon.
191 
192 void TEveFrameBox::SetBackColorPixel(Pixel_t pix)
193 {
194  SetBackColor(Color_t(TColor::GetColor(pix)));
195 }
196 
197 ////////////////////////////////////////////////////////////////////////////////
198 /// Set color of the background polygon.
199 
200 void TEveFrameBox::SetBackColorRGBA(UChar_t r, UChar_t g, UChar_t b, UChar_t a)
201 {
202  fBackColor = Color_t(TColor::GetColor(r, g, b));
203  fBackRGBA[0] = r;
204  fBackRGBA[1] = g;
205  fBackRGBA[2] = b;
206  fBackRGBA[3] = a;
207 }