ROOT logo
// @(#)root/gl:$Id$
// Author: Matevz Tadel  7/4/2006

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

#ifdef WIN32
#include "Windows4root.h"
#endif

#include "TPointSet3DGL.h"
#include "TPointSet3D.h"

#include <TGLRnrCtx.h>
#include <TGLSelectRecord.h>
#include <TGLIncludes.h>

//______________________________________________________________________
//
// Direct OpenGL renderer for TPointSet3D.

ClassImp(TPointSet3DGL);

//______________________________________________________________________________
Bool_t TPointSet3DGL::SetModel(TObject* obj, const Option_t*)
{
   // Set model.

   return SetModelCheckClass(obj, TPointSet3D::Class());
}

//______________________________________________________________________________
void TPointSet3DGL::SetBBox()
{
   // Set bounding-box.

   SetAxisAlignedBBox(((TPointSet3D*)fExternalObj)->AssertBBox());
}

//______________________________________________________________________________
Bool_t TPointSet3DGL::ShouldDLCache(const TGLRnrCtx& rnrCtx) const
{
   // Override from TGLLogicalShape.
   // To account for large point-sizes we modify the projection matrix
   // during selection and thus we need a direct draw.

   if (rnrCtx.Selection())
      return kFALSE;
   return TGLObject::ShouldDLCache(rnrCtx);
}

//______________________________________________________________________________
void TPointSet3DGL::Draw(TGLRnrCtx& rnrCtx) const
{
   // Draw function for TPointSet3D. Skips line-pass of outline mode.

   if (rnrCtx.IsDrawPassOutlineLine())
      return;

   TGLObject::Draw(rnrCtx);
}

//______________________________________________________________________________
void TPointSet3DGL::DirectDraw(TGLRnrCtx& rnrCtx) const
{
   // Direct GL rendering for TPointSet3D.

   //printf("TPointSet3DGL::DirectDraw Style %d, LOD %d\n", rnrCtx.Style(), rnrCtx.LOD());
   //printf("  sel=%d, secsel=%d\n", rnrCtx.Selection(), rnrCtx.SecSelection());

   TPointSet3D& q = * (TPointSet3D*) fExternalObj;

   TGLUtil::LockColor(); // Keep color from TGLPhysicalShape.
   TGLUtil::RenderPolyMarkers(q, 0, q.GetP(), q.Size(),
                              rnrCtx.GetPickRadius(),
                              rnrCtx.Selection(),
                              rnrCtx.SecSelection());
   TGLUtil::UnlockColor();
}

//______________________________________________________________________________
void TPointSet3DGL::ProcessSelection(TGLRnrCtx& /*rnrCtx*/, TGLSelectRecord& rec)
{
   // Processes secondary selection from TGLViewer.
   // Calls TPointSet3D::PointSelected(Int_t) with index of selected
   // point as an argument.

   if (rec.GetN() < 2) return;
   TPointSet3D& q = * (TPointSet3D*) fExternalObj;
   q.PointSelected(rec.GetItem(1));
}
 TPointSet3DGL.cxx:1
 TPointSet3DGL.cxx:2
 TPointSet3DGL.cxx:3
 TPointSet3DGL.cxx:4
 TPointSet3DGL.cxx:5
 TPointSet3DGL.cxx:6
 TPointSet3DGL.cxx:7
 TPointSet3DGL.cxx:8
 TPointSet3DGL.cxx:9
 TPointSet3DGL.cxx:10
 TPointSet3DGL.cxx:11
 TPointSet3DGL.cxx:12
 TPointSet3DGL.cxx:13
 TPointSet3DGL.cxx:14
 TPointSet3DGL.cxx:15
 TPointSet3DGL.cxx:16
 TPointSet3DGL.cxx:17
 TPointSet3DGL.cxx:18
 TPointSet3DGL.cxx:19
 TPointSet3DGL.cxx:20
 TPointSet3DGL.cxx:21
 TPointSet3DGL.cxx:22
 TPointSet3DGL.cxx:23
 TPointSet3DGL.cxx:24
 TPointSet3DGL.cxx:25
 TPointSet3DGL.cxx:26
 TPointSet3DGL.cxx:27
 TPointSet3DGL.cxx:28
 TPointSet3DGL.cxx:29
 TPointSet3DGL.cxx:30
 TPointSet3DGL.cxx:31
 TPointSet3DGL.cxx:32
 TPointSet3DGL.cxx:33
 TPointSet3DGL.cxx:34
 TPointSet3DGL.cxx:35
 TPointSet3DGL.cxx:36
 TPointSet3DGL.cxx:37
 TPointSet3DGL.cxx:38
 TPointSet3DGL.cxx:39
 TPointSet3DGL.cxx:40
 TPointSet3DGL.cxx:41
 TPointSet3DGL.cxx:42
 TPointSet3DGL.cxx:43
 TPointSet3DGL.cxx:44
 TPointSet3DGL.cxx:45
 TPointSet3DGL.cxx:46
 TPointSet3DGL.cxx:47
 TPointSet3DGL.cxx:48
 TPointSet3DGL.cxx:49
 TPointSet3DGL.cxx:50
 TPointSet3DGL.cxx:51
 TPointSet3DGL.cxx:52
 TPointSet3DGL.cxx:53
 TPointSet3DGL.cxx:54
 TPointSet3DGL.cxx:55
 TPointSet3DGL.cxx:56
 TPointSet3DGL.cxx:57
 TPointSet3DGL.cxx:58
 TPointSet3DGL.cxx:59
 TPointSet3DGL.cxx:60
 TPointSet3DGL.cxx:61
 TPointSet3DGL.cxx:62
 TPointSet3DGL.cxx:63
 TPointSet3DGL.cxx:64
 TPointSet3DGL.cxx:65
 TPointSet3DGL.cxx:66
 TPointSet3DGL.cxx:67
 TPointSet3DGL.cxx:68
 TPointSet3DGL.cxx:69
 TPointSet3DGL.cxx:70
 TPointSet3DGL.cxx:71
 TPointSet3DGL.cxx:72
 TPointSet3DGL.cxx:73
 TPointSet3DGL.cxx:74
 TPointSet3DGL.cxx:75
 TPointSet3DGL.cxx:76
 TPointSet3DGL.cxx:77
 TPointSet3DGL.cxx:78
 TPointSet3DGL.cxx:79
 TPointSet3DGL.cxx:80
 TPointSet3DGL.cxx:81
 TPointSet3DGL.cxx:82
 TPointSet3DGL.cxx:83
 TPointSet3DGL.cxx:84
 TPointSet3DGL.cxx:85
 TPointSet3DGL.cxx:86
 TPointSet3DGL.cxx:87
 TPointSet3DGL.cxx:88
 TPointSet3DGL.cxx:89
 TPointSet3DGL.cxx:90
 TPointSet3DGL.cxx:91
 TPointSet3DGL.cxx:92
 TPointSet3DGL.cxx:93
 TPointSet3DGL.cxx:94
 TPointSet3DGL.cxx:95
 TPointSet3DGL.cxx:96