16#include "TGLIncludes.h" 
   35#if defined(__APPLE_CC__) && __APPLE_CC__ > 4000 && __APPLE_CC__ < 5450 && !defined(__INTEL_COMPILER) 
   37#elif defined(__linux__) || defined(__FreeBSD__) || defined( __OpenBSD__ ) || defined(__sun) || defined (__CYGWIN__) || defined (__APPLE__) 
   42    #error "Error - need to define type tessfuncptr_t for this platform/compiler" 
   60   fVertices(buffer.fPnts, buffer.fPnts + 3 * buffer.NbPnts()),
 
 
  138   UInt_t nv = mesh->NumberOfVertices();
 
  142   for (i = 0; i < 
nv; ++i) {
 
  147   fNbPols = mesh->NumberOfPolys();
 
 
  178   class TriangleCollector
 
  185      std::vector<Int_t> fPolyDesc;
 
  189         fPolyDesc.push_back(3);
 
  190         fPolyDesc.push_back(
v0);
 
  191         fPolyDesc.push_back(
v1);
 
  192         fPolyDesc.push_back(
v2);
 
  213               add_triangle(fV0, fV1, 
vi);
 
  219               if (fNVertices % 2 == 0)
 
  220                  add_triangle(fV1, fV0, 
vi);
 
  222                  add_triangle(fV0, fV1, 
vi);
 
  229               add_triangle(fV0, fV1, 
vi);
 
  235               throw std::runtime_error(
"TGLFaceSet::EnforceTriangles unexpected type in tess_vertex callback.");
 
  242         fNTriangles(0), fNVertices(0), fV0(-1), fV1(-1), fType(
GL_NONE)
 
  250      Int_t               GetNTrianlges() { 
return fNTriangles; }
 
  251      std::vector<Int_t>& RefPolyDesc()   { 
return fPolyDesc; }
 
  253      static void tess_begin(
GLenum type, TriangleCollector* 
tc)
 
  256         tc->fV0 = 
tc->fV1 = -1;
 
  260      static void tess_vertex(
Int_t* 
vi, TriangleCollector* 
tc)
 
  262         tc->process_vertex(*
vi);
 
  265      static void tess_combine(
GLdouble [3], 
void* [4],
 
  269         throw std::runtime_error(
"TGLFaceSet::EnforceTriangles tesselator requested vertex combining -- not supported yet.");
 
  272      static void tess_end(TriangleCollector* 
tc)
 
  279   if (!
tess) 
throw std::bad_alloc();
 
  281   TriangleCollector 
tc(
tess);
 
 
  315      Info(
"TGLFaceSet::DirectDraw", 
"this %zd (class %s) LOD %d", (
size_t)
this, 
IsA()->GetName(), 
rnrCtx.ShapeLOD());
 
 
  390   return dx < 1
e-10 && 
dy < 1
e-10 && 
dz < 1
e-10;
 
 
void gluTessBeginPolygon(GLUtesselator *tess, GLvoid *data)
 
#define GLU_TESS_BEGIN_DATA
 
#define GLU_TESS_COMBINE_DATA
 
void gluTessCallback(GLUtesselator *tess, GLenum which, _GLUfuncptr CallBackFunc)
 
void gluNextContour(GLUtesselator *tess, GLenum type)
 
#define GLU_TESS_END_DATA
 
void gluDeleteTess(GLUtesselator *tess)
 
GLUtesselator * gluNewTess(void)
 
void gluTessEndContour(GLUtesselator *tess)
 
void gluBeginPolygon(GLUtesselator *tess)
 
void gluTessBeginContour(GLUtesselator *tess)
 
#define GLU_TESS_VERTEX_DATA
 
void gluEndPolygon(GLUtesselator *tess)
 
void gluTessEndPolygon(GLUtesselator *tess)
 
#define GL_TRIANGLE_STRIP
 
void gluTessVertex(GLUtesselator *tess, GLdouble *location, GLvoid *data)
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
void Info(const char *location, const char *msgfmt,...)
Use this function for informational messages.
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t dest
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
 
Generic 3D primitive description class.
 
Implements a native ROOT-GL representation of an arbitrary set of polygons.
 
void EnforceTriangles()
Use GLU tesselator to replace all polygons with N > 3 with triangles.
 
static void SetEnforceTriangles(Bool_t e)
Set state of static flag EnforceTriangles.
 
std::vector< Int_t > fPolyDesc
 
std::vector< Double_t > fNormals
 
Int_t CheckPoints(const Int_t *source, Int_t *dest) const
CheckPoints.
 
void SetFromMesh(const RootCsg::TBaseMesh *m)
Should only be done on an empty faceset object.
 
void DirectDraw(TGLRnrCtx &rnrCtx) const override
Debug tracing.
 
TGLFaceSet(const TBuffer3D &buffer)
constructor
 
void CalculateNormals()
CalculateNormals.
 
std::vector< Double_t > fVertices
 
static Bool_t Eq(const Double_t *p1, const Double_t *p2)
test equality
 
static Bool_t fgEnforceTriangles
 
TClass * IsA() const override
 
static Bool_t GetEnforceTriangles()
Get current state of static flag EnforceTriangles.
 
Abstract logical shape - a GL 'drawable' - base for all shapes - faceset sphere etc.
 
The TGLRnrCtx class aggregates data for a given redering context as needed by various parts of the RO...
 
static GLUtesselator * GetDrawTesselator3dv()
Returns a tesselator for direct drawing when using 3-vertices with double precision.
 
T * Normal2Plane(const T v1[3], const T v2[3], const T v3[3], T normal[3])
Calculates a normal vector of a plane.
 
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.