--- /dev/null
+// $Header$
+
+#include <Reve/FrameBox.h>
+
+#include <TColor.h>
+
+using namespace Reve;
+
+//______________________________________________________________________
+// FrameBox
+//
+
+ClassImp(FrameBox)
+
+FrameBox::FrameBox() :
+ fFrameType (FT_None),
+ fFrameSize (0),
+ fFramePoints (0),
+
+ fFrameColor (0)
+{
+ fFrameRGBA[0] = fFrameRGBA[1] = fFrameRGBA[2] = fFrameRGBA[3] = 255;
+}
+
+FrameBox::~FrameBox()
+{
+ delete [] fFramePoints;
+}
+
+/**************************************************************************/
+
+void FrameBox::SetAAQuadXY(Float_t x, Float_t y, Float_t z,
+ Float_t dx, Float_t dy)
+{
+ fFrameType = FT_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 FrameBox::SetAAQuadXZ(Float_t x, Float_t y, Float_t z,
+ Float_t dx, Float_t dz)
+{
+ fFrameType = FT_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 FrameBox::SetAABox(Float_t x, Float_t y, Float_t z,
+ Float_t dx, Float_t dy, Float_t dz)
+{
+ fFrameType = FT_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 FrameBox::SetFrameColor(Color_t ci)
+{
+ fFrameColor = ci;
+ ColorFromIdx(ci, fFrameRGBA, kTRUE);
+}
+
+void FrameBox::SetFrameColor(Pixel_t pix)
+{
+ SetFrameColor(Color_t(TColor::GetColor(pix)));
+}
+
+void FrameBox::SetFrameColor(UChar_t r, UChar_t g, UChar_t b, UChar_t a)
+{
+ fFrameColor = Color_t(TColor::GetColor(r, g, b));
+ fFrameRGBA[0] = r;
+ fFrameRGBA[1] = g;
+ fFrameRGBA[2] = b;
+ fFrameRGBA[3] = a;
+}
--- /dev/null
+// $Header$
+
+#ifndef REVE_FrameBox_H
+#define REVE_FrameBox_H
+
+#include <Reve/Reve.h>
+
+#include <TObject.h>
+
+namespace Reve {
+
+class FrameBox : public TObject, public ReferenceCount
+{
+ friend class FrameBoxGL;
+
+public:
+ enum FrameType_e { FT_None, FT_Quad, FT_Box };
+
+private:
+ FrameBox(const FrameBox&); // Not implemented
+ FrameBox& operator=(const FrameBox&); // Not implemented
+
+protected:
+ FrameType_e fFrameType;
+ Int_t fFrameSize;
+ Float_t *fFramePoints; //[fFrameSize]
+
+ Color_t fFrameColor;
+ UChar_t fFrameRGBA[4];
+
+ // !!!! Back-refs to RenderElement consumers (as for palette)
+
+public:
+ FrameBox();
+ virtual ~FrameBox();
+
+ void SetAAQuadXY(Float_t x, Float_t y, Float_t z, Float_t dx, Float_t dy);
+ void SetAAQuadXZ(Float_t x, Float_t y, Float_t z, Float_t dx, Float_t dz);
+
+ void SetAABox(Float_t x, Float_t y, Float_t z,
+ Float_t dx, Float_t dy, Float_t dz);
+
+ // ----------------------------------------------------------------
+
+ Color_t GetFrameColor() const { return fFrameColor; }
+ Color_t* PtrFrameColor() { return &fFrameColor; }
+ UChar_t* GetFrameRGBA() { return fFrameRGBA; }
+
+ void SetFrameColor(Color_t ci);
+ void SetFrameColor(Pixel_t pix);
+ void SetFrameColor(UChar_t r, UChar_t g, UChar_t b, UChar_t a=255);
+
+ ClassDef(FrameBox, 1);
+}; // endclass FrameBox
+
+}
+
+#endif
--- /dev/null
+// $Header$
+
+#include "FrameBoxGL.h"
+#include <Reve/FrameBox.h>
+
+#include <TGLDrawFlags.h>
+
+#ifdef WIN32
+#include "Windows4root.h"
+#endif
+#include <GL/gl.h>
+#include <GL/glu.h>
+
+using namespace Reve;
+
+//______________________________________________________________________
+// FrameBoxGL
+//
+// A class encapsulating GL rendering of Reve::FrameBox via a static
+// meber function.
+
+ClassImp(FrameBoxGL)
+
+void FrameBoxGL::Render(const FrameBox* box)
+{
+ GLboolean lightp;
+ glGetBooleanv(GL_LIGHTING, &lightp);
+ if (lightp) glDisable(GL_LIGHTING);
+
+ const FrameBox& b = *box;
+ const Float_t* p = b.fFramePoints;
+ glColor4ubv(b.fFrameRGBA);
+ if (b.fFrameType == FrameBox::FT_Quad)
+ {
+ glBegin(GL_LINE_LOOP);
+ glVertex3fv(p); glVertex3fv(p + 3);
+ glVertex3fv(p + 6); glVertex3fv(p + 9);
+ glEnd();
+ }
+ else if (b.fFrameType == FrameBox::FT_Box)
+ {
+ glBegin(GL_LINE_STRIP);
+ glVertex3fv(p); glVertex3fv(p + 3);
+ glVertex3fv(p + 6); glVertex3fv(p + 9);
+ glVertex3fv(p);
+ glVertex3fv(p + 12); glVertex3fv(p + 15);
+ glVertex3fv(p + 18); glVertex3fv(p + 21);
+ glVertex3fv(p + 12);
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3fv(p + 3); glVertex3fv(p + 15);
+ glVertex3fv(p + 6); glVertex3fv(p + 18);
+ glVertex3fv(p + 9); glVertex3fv(p + 21);
+ glEnd();
+ }
+
+ if (lightp) glEnable(GL_LIGHTING);
+}
--- /dev/null
+// $Header$
+
+#ifndef REVE_FrameBoxGL_H
+#define REVE_FrameBoxGL_H
+
+#include <Reve/Reve.h>
+
+namespace Reve {
+
+class FrameBox;
+
+class FrameBoxGL
+{
+private:
+ FrameBoxGL(); // Not implemented
+ FrameBoxGL(const FrameBoxGL&); // Not implemented
+ FrameBoxGL& operator=(const FrameBoxGL&); // Not implemented
+
+public:
+ static void Render(const FrameBox* box);
+
+ ClassDef(FrameBoxGL, 0);
+}; // endclass FrameBoxGL
+
+}
+
+#endif