Logo ROOT   6.18/05
Reference Guide
TEvePolygonSetProjectedGL.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
14#include "TEveVector.h"
15
16#include "TGLRnrCtx.h"
17#include "TGLCamera.h"
18#include "TGLPhysicalShape.h"
19#include "TGLIncludes.h"
20
21/** \class TEvePolygonSetProjectedGL
22\ingroup TEve
23GL-renderer for TEvePolygonSetProjected class.
24*/
25
27
28////////////////////////////////////////////////////////////////////////////////
29/// Constructor
30
32{
33 // fDLCache = kFALSE; // Disable DL.
34 fMultiColor = kTRUE; // Potentially false, reset in DirectDraw().
35}
36
37////////////////////////////////////////////////////////////////////////////////
38/// Set model object.
39
41{
42 fM = SetModelDynCast<TEvePolygonSetProjected>(obj);
43 return kTRUE;
44}
45
46////////////////////////////////////////////////////////////////////////////////
47/// Setup bounding-box information.
48
50{
52}
53
54////////////////////////////////////////////////////////////////////////////////
55/// Draw function for TEvePolygonSetProjectedGL.
56/// Skips line-pass of outline mode.
57
59{
60 if (rnrCtx.IsDrawPassOutlineLine())
61 return;
62
63 TGLObject::Draw(rnrCtx);
64}
65
66////////////////////////////////////////////////////////////////////////////////
67/// Draw polygons outline.
68
70{
71 if (fM->fPols.size() == 0) return;
72
73 Bool_t done_p = kFALSE;
74
75 if (fM->GetMiniFrame())
76 {
77 std::map<Edge_t, Int_t> edges;
78
80 i != fM->fPols.end(); ++i)
81 {
82 for(Int_t k = 0; k < i->fNPnts - 1; ++k)
83 {
84 ++edges[Edge_t(i->fPnts[k], i->fPnts[k+1])];
85 }
86 ++edges[Edge_t(i->fPnts[0], i->fPnts[i->fNPnts - 1])];
87 }
88
89 glBegin(GL_LINES);
90 for (std::map<Edge_t, Int_t>::iterator i = edges.begin(); i != edges.end(); ++i)
91 {
92 if (i->second == 1)
93 {
94 glVertex3fv(fM->fPnts[i->first.fI].Arr());
95 glVertex3fv(fM->fPnts[i->first.fJ].Arr());
96 done_p = kTRUE;
97 }
98 }
99 glEnd();
100 }
101
102 if ( ! done_p)
103 {
105 i != fM->fPols.end(); ++i)
106 {
107 glBegin(GL_LINE_LOOP);
108 for(Int_t k = 0; k < i->fNPnts; ++k)
109 {
110 glVertex3fv(fM->fPnts[i->fPnts[k]].Arr());
111 }
112 glEnd();
113 }
114 }
115}
116
117////////////////////////////////////////////////////////////////////////////////
118/// Do GL rendering.
119
121{
122 if (fM->fPols.size() == 0) return;
123
124 glPushAttrib(GL_ENABLE_BIT | GL_LINE_BIT | GL_POLYGON_BIT);
125
126 glDisable(GL_LIGHTING);
127 glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
128 glEnable(GL_COLOR_MATERIAL);
129 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
130 glDisable(GL_CULL_FACE);
131
132 // This tells TGLObject we don't want display-lists in some cases.
134
135 // polygons
136 glEnable(GL_POLYGON_OFFSET_FILL);
137 glPolygonOffset(1, 1);
138 GLUtesselator *tessObj = TGLUtil::GetDrawTesselator3fv();
139
140 TEveVector* pnts = fM->fPnts;
142 i != fM->fPols.end(); ++i)
143 {
144 Int_t vi; //current vertex index of curent polygon
145 Int_t pntsN = (*i).fNPnts; // number of points in current polygon
146 if (pntsN < 4)
147 {
148 glBegin(GL_POLYGON);
149 for (Int_t k = 0; k < pntsN; ++k)
150 {
151 vi = (*i).fPnts[k];
152 glVertex3fv(pnts[vi].Arr());
153 }
154 glEnd();
155 }
156 else
157 {
158 gluBeginPolygon(tessObj);
159 gluNextContour(tessObj, (GLenum)GLU_UNKNOWN);
160 glNormal3f(0, 0, 1);
161 Double_t coords[3];
162 coords[2] = 0;
163 for (Int_t k = 0; k < pntsN; ++k)
164 {
165 vi = (*i).fPnts[k];
166 coords[0] = pnts[vi].fX;
167 coords[1] = pnts[vi].fY;
168 gluTessVertex(tessObj, coords, pnts[vi].Arr());
169 }
170 gluEndPolygon(tessObj);
171 }
172 }
173 glDisable(GL_POLYGON_OFFSET_FILL);
174
175 // Outline
176 if (fM->fDrawFrame)
177 {
179 glEnable(GL_LINE_SMOOTH);
181 DrawOutline();
182 }
183
184 glPopAttrib();
185}
186
187////////////////////////////////////////////////////////////////////////////////
188/// Draw polygons in highlight mode.
189
191{
192 if (lvl < 0) lvl = pshp->GetSelected();
193
194 glColor4ubv(rnrCtx.ColorSet().Selection(lvl).CArr());
196
197 if (fM->GetHighlightFrame())
198 {
199 DrawOutline();
200 }
201 else
202 {
203 Draw(rnrCtx);
204 }
205
207}
int Int_t
Definition: RtypesCore.h:41
const Bool_t kFALSE
Definition: RtypesCore.h:88
bool Bool_t
Definition: RtypesCore.h:59
double Double_t
Definition: RtypesCore.h:55
const Bool_t kTRUE
Definition: RtypesCore.h:87
const char Option_t
Definition: RtypesCore.h:62
#define ClassImp(name)
Definition: Rtypes.h:365
Float_t * AssertBBox()
Definition: TAttBBox.h:45
GL-renderer for TEvePolygonSetProjected class.
virtual void SetBBox()
Setup bounding-box information.
virtual Bool_t SetModel(TObject *obj, const Option_t *opt=0)
Set model object.
void DrawOutline() const
Draw polygons outline.
virtual void DirectDraw(TGLRnrCtx &rnrCtx) const
Do GL rendering.
TEvePolygonSetProjected * fM
virtual void DrawHighlight(TGLRnrCtx &rnrCtx, const TGLPhysicalShape *pshp, Int_t lvl=-1) const
Draw polygons in highlight mode.
virtual void Draw(TGLRnrCtx &rnrCtx) const
Draw function for TEvePolygonSetProjectedGL.
vpPolygon_t::const_iterator vpPolygon_ci
virtual Bool_t GetMiniFrame() const
Definition: TEveShape.h:57
Bool_t fDrawFrame
Definition: TEveShape.h:41
virtual Bool_t GetHighlightFrame() const
Definition: TEveShape.h:56
Float_t fLineWidth
Definition: TEveShape.h:39
Color_t fLineColor
Definition: TEveShape.h:38
const TT * Arr() const
Definition: TEveVector.h:57
TGLColor & Selection(Int_t i)
Definition: TGLUtil.h:854
const UChar_t * CArr() const
Definition: TGLUtil.h:799
virtual void Draw(TGLRnrCtx &rnrCtx) const
Draw the GL drawable, using draw flags.
Base-class for direct OpenGL renderers.
Definition: TGLObject.h:22
Bool_t fMultiColor
Definition: TGLObject.h:28
void SetAxisAlignedBBox(Float_t xmin, Float_t xmax, Float_t ymin, Float_t ymax, Float_t zmin, Float_t zmax)
Set axis-aligned bounding-box.
Definition: TGLObject.cxx:86
Concrete physical shape - a GL drawable.
UChar_t GetSelected() const
The TGLRnrCtx class aggregates data for a given redering context as needed by various parts of the RO...
Definition: TGLRnrCtx.h:41
TGLColorSet & ColorSet()
Return reference to current color-set (top of the stack).
Definition: TGLRnrCtx.cxx:278
Bool_t IsDrawPassOutlineLine() const
Definition: TGLRnrCtx.h:207
static UInt_t LockColor()
Prevent further color changes.
Definition: TGLUtil.cxx:1664
static UInt_t UnlockColor()
Allow color changes.
Definition: TGLUtil.cxx:1672
static void Color(const TGLColor &color)
Set color from TGLColor.
Definition: TGLUtil.cxx:1692
static GLUtesselator * GetDrawTesselator3fv()
Returns a tesselator for direct drawing when using 3-vertices with single precision.
Definition: TGLUtil.cxx:1493
static Float_t LineWidth()
Get the line-width, taking the global scaling into account.
Definition: TGLUtil.cxx:1938
Mother of all ROOT objects.
Definition: TObject.h:37