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.