--- /dev/null
+// $Header$
+
+#include "Line.h"
+
+using namespace Reve;
+
+//______________________________________________________________________
+// Line
+//
+
+ClassImp(Line)
+
+
+Line::Line(Int_t n_points, TreeVarType_e tv_type) :
+ PointSet(n_points, tv_type),
+ fRnrLine (kTRUE),
+ fRnrPoints (kFALSE)
+{
+ fMainColorPtr = &fLineColor;
+}
+
+Line::Line(const Text_t* name, Int_t n_points, TreeVarType_e tv_type) :
+ PointSet(name, n_points, tv_type),
+ fRnrLine (kTRUE),
+ fRnrPoints (kFALSE)
+{
+ fMainColorPtr = &fLineColor;
+}
+
+Line::Line(const Text_t* name, TTree* tree, TreeVarType_e tv_type) :
+ PointSet(name, tree, tv_type),
+ fRnrLine (kTRUE),
+ fRnrPoints (kFALSE)
+{
+ fMainColorPtr = &fLineColor;
+}
+
+Line::~Line()
+{}
--- /dev/null
+// $Header$
+
+#ifndef REVE_Line_H
+#define REVE_Line_H
+
+#include <Reve/Reve.h>
+#include <Reve/PointSet.h>
+
+#include <TAttLine.h>
+
+namespace Reve {
+
+class Line : public PointSet,
+ public TAttLine
+{
+ friend class LineEditor;
+ friend class LineGL;
+
+private:
+ Line(const Line&); // Not implemented
+ Line& operator=(const Line&); // Not implemented
+
+protected:
+ Bool_t fRnrLine;
+ Bool_t fRnrPoints;
+
+public:
+ Line(Int_t n_points=0, TreeVarType_e tv_type=TVT_XYZ);
+ Line(const Text_t* name, Int_t n_points=0, TreeVarType_e tv_type=TVT_XYZ);
+ Line(const Text_t* name, TTree* tree, TreeVarType_e tv_type=TVT_XYZ);
+ virtual ~Line();
+
+ virtual void SetMarkerColor(Color_t col)
+ { TAttMarker::SetMarkerColor(col); }
+ virtual void SetLineColor(Color_t col)
+ { SetMainColor(col); }
+
+ Bool_t GetRnrLine() const { return fRnrLine; }
+ void SetRnrLine(Bool_t r) { fRnrLine = r; }
+ Bool_t GetRnrPoints() const { return fRnrPoints; }
+ void SetRnrPoints(Bool_t r) { fRnrPoints = r; }
+
+ ClassDef(Line, 1);
+}; // endclass Line
+
+}
+
+#endif
--- /dev/null
+// $Header$
+
+#include "LineEditor.h"
+#include <Reve/Line.h>
+
+#include <TVirtualPad.h>
+#include <TColor.h>
+
+#include <TGLabel.h>
+#include <TGButton.h>
+#include <TGNumberEntry.h>
+#include <TGColorSelect.h>
+#include <TGDoubleSlider.h>
+
+using namespace Reve;
+
+//______________________________________________________________________
+// LineEditor
+//
+
+ClassImp(LineEditor)
+
+ LineEditor::LineEditor(const TGWindow *p, Int_t width, Int_t height,
+ UInt_t options, Pixel_t back) :
+ TGedFrame(p, width, height, options | kVerticalFrame, back),
+ fM(0),
+ fRnrLine (0),
+ fRnrPoints (0)
+{
+ // MakeTitle("Line");
+
+ {
+ TGHorizontalFrame* f = new TGHorizontalFrame(this);
+
+ fRnrLine = new TGCheckButton(f, "Draw Line");
+ f->AddFrame(fRnrLine, new TGLayoutHints(kLHintsLeft, 1,2,0,0));
+ fRnrLine->Connect("Toggled(Bool_t)", "Reve::LineEditor", this, "DoRnrLine()");
+ fRnrPoints = new TGCheckButton(f, "Draw Marker");
+ f->AddFrame(fRnrPoints, new TGLayoutHints(kLHintsLeft, 2,1,0,0));
+ fRnrPoints->Connect("Toggled(Bool_t)"," Reve::LineEditor", this, "DoRnrPoints()");
+
+ AddFrame(f, new TGLayoutHints(kLHintsTop, 0,0,2,1));
+ }
+}
+
+LineEditor::~LineEditor()
+{}
+
+/**************************************************************************/
+
+void LineEditor::SetModel(TObject* obj)
+{
+ fM = dynamic_cast<Line*>(obj);
+
+ fRnrLine ->SetState(fM->fRnrLine ? kButtonDown : kButtonUp);
+ fRnrPoints->SetState(fM->fRnrPoints ? kButtonDown : kButtonUp);
+}
+
+/**************************************************************************/
+
+void LineEditor::DoRnrLine()
+{
+ fM->SetRnrLine(fRnrLine->IsOn());
+ Update();
+}
+
+void LineEditor::DoRnrPoints()
+{
+ fM->SetRnrPoints(fRnrPoints->IsOn());
+ Update();
+}
--- /dev/null
+// $Header$
+
+#ifndef REVE_LineEditor_H
+#define REVE_LineEditor_H
+
+#include <TGedFrame.h>
+
+class TGCheckButton;
+class TGNumberEntry;
+class TGColorSelect;
+
+namespace Reve {
+
+class Line;
+
+class LineEditor : public TGedFrame
+{
+private:
+ LineEditor(const LineEditor&); // Not implemented
+ LineEditor& operator=(const LineEditor&); // Not implemented
+
+protected:
+ Line* fM; // fModel dynamic-casted to LineEditor
+
+ TGCheckButton *fRnrLine;
+ TGCheckButton *fRnrPoints;
+
+public:
+ LineEditor(const TGWindow* p=0, Int_t width=170, Int_t height=30, UInt_t options = kChildFrame, Pixel_t back=GetDefaultFrameBackground());
+ virtual ~LineEditor();
+
+ virtual void SetModel(TObject* obj);
+
+ void DoRnrLine();
+ void DoRnrPoints();
+
+ ClassDef(LineEditor, 1); // Editor for Line
+}; // endclass LineEditor
+
+}
+
+#endif
--- /dev/null
+// $Header$
+
+#include "LineGL.h"
+#include <Reve/Line.h>
+
+#include <TGLDrawFlags.h>
+
+#ifdef WIN32
+#include "Windows4root.h"
+#endif
+#include <GL/gl.h>
+#include <GL/glu.h>
+
+using namespace Reve;
+
+//______________________________________________________________________
+// LineGL
+//
+
+ClassImp(LineGL)
+
+LineGL::LineGL() : TPointSet3DGL(), fM(0)
+{
+ // fCached = false; // Disable display list.
+}
+
+LineGL::~LineGL()
+{}
+
+/**************************************************************************/
+
+Bool_t LineGL::SetModel(TObject* obj)
+{
+ // TPointSet3DGL::SetModel(obj);
+ if(SetModelCheckClass(obj, Line::Class())) {
+ fM = dynamic_cast<Line*>(obj);
+ return kTRUE;
+ }
+ return kFALSE;
+}
+
+/**************************************************************************/
+
+void LineGL::DirectDraw(const TGLDrawFlags & flags) const
+{
+ // printf("LineGL::DirectDraw Style %d, LOD %d\n", flags.Style(), flags.LOD());
+
+ Line& q = *fM;
+ if (q.Size() <= 0) return;
+
+ glPushAttrib(GL_POINT_BIT | GL_LINE_BIT | GL_ENABLE_BIT);
+ glDisable(GL_LIGHTING);
+
+ UChar_t color[4];
+
+ if (q.fRnrLine)
+ {
+ glPushAttrib(GL_LINE_BIT);
+ ColorFromIdx(q.GetLineColor(), color);
+ glColor4ubv(color);
+ glLineWidth(q.GetLineWidth());
+ if (q.GetLineStyle() > 1) {
+ Int_t fac = 1;
+ UShort_t pat = 0xffff;
+ switch (q.GetLineStyle()) {
+ case 2: pat = 0x3333; break;
+ case 3: pat = 0x5555; break;
+ case 4: pat = 0xf040; break;
+ case 5: pat = 0xf4f4; break;
+ case 6: pat = 0xf111; break;
+ case 7: pat = 0xf0f0; break;
+ case 8: pat = 0xff11; break;
+ case 9: pat = 0x3fff; break;
+ case 10: pat = 0x08ff; fac = 2; break;
+ }
+
+ glLineStipple(1, pat);
+ glEnable(GL_LINE_STIPPLE);
+ }
+
+ const Float_t* p = q.GetP();
+ const Int_t n = q.Size();
+ glBegin(GL_LINE_STRIP);
+ for (Int_t i=0; i<n; ++i, p+=3)
+ glVertex3fv(p);
+ glEnd();
+ glPopAttrib();
+ }
+
+ if (q.fRnrPoints)
+ {
+ ColorFromIdx(q.GetMarkerColor(), color);
+ glColor4ubv(color);
+ Int_t ms = q.GetMarkerStyle();
+ if (ms != 2 && ms != 3 && ms != 5 && ms != 28)
+ RenderPoints(flags);
+ else
+ RenderCrosses(flags);
+ }
+
+ glPopAttrib();
+}
--- /dev/null
+// $Header$
+
+#ifndef REVE_LineGL_H
+#define REVE_LineGL_H
+
+#include <TGLObject.h>
+#include <TPointSet3DGL.h>
+
+class TGLViewer;
+class TGLScene;
+
+namespace Reve {
+
+class Line;
+
+class LineGL : public TPointSet3DGL
+{
+private:
+ LineGL(const LineGL&); // Not implemented
+ LineGL& operator=(const LineGL&); // Not implemented
+
+protected:
+ Line* fM; // fModel dynamic-casted to LineGL
+
+ virtual void DirectDraw(const TGLDrawFlags & flags) const;
+
+public:
+ LineGL();
+ virtual ~LineGL();
+
+ virtual Bool_t SetModel(TObject* obj);
+
+ // To support two-level selection
+ // virtual Bool_t SupportsSecondarySelect() const { return kTRUE; }
+ // virtual void ProcessSelection(UInt_t* ptr, TGLViewer*, TGLScene*);
+
+ ClassDef(LineGL, 0);
+}; // endclass LineGL
+
+}
+
+#endif