Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
Slic3r::GluTessWrapper Class Reference
+ Collaboration diagram for Slic3r::GluTessWrapper:

Public Member Functions

 GluTessWrapper ()
 
 ~GluTessWrapper ()
 
std::vector< Vec3dtesselate3d (const ExPolygon &expoly, double z_, bool flipped_)
 
std::vector< Vec3dtesselate3d (const ExPolygons &expolygons, double z_, bool flipped_)
 

Private Member Functions

void tessBegin (GLenum which)
 
void tessEnd ()
 
void tessVertex (const GLvoid *data)
 
void tessCombine (const GLdouble newVertex[3], const GLdouble *neighborVertex[4], const GLfloat neighborWeight[4], GLdouble **outData)
 

Static Private Member Functions

static void tessBeginCB (GLenum which, void *polygonData)
 
static void tessEndCB (void *polygonData)
 
static void tessVertexCB (const GLvoid *data, void *polygonData)
 
static void tessCombineCB (const GLdouble newVertex[3], const GLdouble *neighborVertex[4], const GLfloat neighborWeight[4], GLdouble **outData, void *polygonData)
 
static void tessErrorCB (GLenum errorCode, void *polygonData)
 
static void tessError (GLenum errorCode)
 

Private Attributes

GLUtesselatorm_tesselator
 
GLenum m_primitive_type
 
GLdouble m_pt0 [3]
 
GLdouble m_pt1 [3]
 
int m_num_points
 
Pointf3s m_output_triangles
 
std::deque< Vec3dm_intersection_points
 
double m_z
 
bool m_flipped
 

Detailed Description

Constructor & Destructor Documentation

◆ GluTessWrapper()

Slic3r::GluTessWrapper::GluTessWrapper ( )
inline
12 // register callback functions
18 }
static void tessBeginCB(GLenum which, void *polygonData)
Definition Tesselate.cpp:103
static void tessCombineCB(const GLdouble newVertex[3], const GLdouble *neighborVertex[4], const GLfloat neighborWeight[4], GLdouble **outData, void *polygonData)
Definition Tesselate.cpp:106
static void tessVertexCB(const GLvoid *data, void *polygonData)
Definition Tesselate.cpp:105
GLUtesselator * m_tesselator
Definition Tesselate.cpp:173
static void tessErrorCB(GLenum errorCode, void *polygonData)
Definition Tesselate.cpp:108
static void tessEndCB(void *polygonData)
Definition Tesselate.cpp:104
#define GLU_TESS_BEGIN_DATA
Definition glu-libtess.h:119
#define GLU_TESS_COMBINE_DATA
Definition glu-libtess.h:124
#define GLU_TESS_END_DATA
Definition glu-libtess.h:121
#define gluNewTess
Definition glu-libtess.h:36
#define gluTessCallback
Definition glu-libtess.h:45
#define GLU_TESS_VERTEX_DATA
Definition glu-libtess.h:120
#define GLU_TESS_ERROR_DATA
Definition glu-libtess.h:122

References GLU_TESS_BEGIN_DATA, GLU_TESS_COMBINE_DATA, GLU_TESS_END_DATA, GLU_TESS_ERROR_DATA, GLU_TESS_VERTEX_DATA, gluTessCallback, m_tesselator, tessBeginCB(), tessCombineCB(), tessEndCB(), tessErrorCB(), and tessVertexCB().

+ Here is the call graph for this function:

◆ ~GluTessWrapper()

Slic3r::GluTessWrapper::~GluTessWrapper ( )
inline
19 {
21 }
#define gluDeleteTess
Definition glu-libtess.h:37

References gluDeleteTess, and m_tesselator.

Member Function Documentation

◆ tessBegin()

void Slic3r::GluTessWrapper::tessBegin ( GLenum  which)
inlineprivate
111 {
112 assert(which == GL_TRIANGLES || which == GL_TRIANGLE_FAN || which == GL_TRIANGLE_STRIP);
113 m_primitive_type = which;
114 m_num_points = 0;
115 }
int m_num_points
Definition Tesselate.cpp:181
GLenum m_primitive_type
Definition Tesselate.cpp:176
#define GL_TRIANGLE_FAN
Definition glu-libtess.h:77
#define GL_TRIANGLES
Definition glu-libtess.h:75
#define GL_TRIANGLE_STRIP
Definition glu-libtess.h:76

References GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP, GL_TRIANGLES, m_num_points, and m_primitive_type.

Referenced by tessBeginCB().

+ Here is the caller graph for this function:

◆ tessBeginCB()

static void Slic3r::GluTessWrapper::tessBeginCB ( GLenum  which,
void polygonData 
)
inlinestaticprivate
103{ reinterpret_cast<GluTessWrapper*>(polygonData)->tessBegin(which); }
void tessBegin(GLenum which)
Definition Tesselate.cpp:110
GluTessWrapper()
Definition Tesselate.cpp:11

References tessBegin().

Referenced by GluTessWrapper().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ tessCombine()

void Slic3r::GluTessWrapper::tessCombine ( const GLdouble  newVertex[3],
const GLdouble neighborVertex[4],
const GLfloat  neighborWeight[4],
GLdouble **  outData 
)
inlineprivate
160 {
161 m_intersection_points.emplace_back(newVertex[0], newVertex[1], m_z);
162 *outData = m_intersection_points.back().data();
163 }
double m_z
Definition Tesselate.cpp:187
std::deque< Vec3d > m_intersection_points
Definition Tesselate.cpp:185

References m_intersection_points, and m_z.

Referenced by tessCombineCB().

+ Here is the caller graph for this function:

◆ tessCombineCB()

static void Slic3r::GluTessWrapper::tessCombineCB ( const GLdouble  newVertex[3],
const GLdouble neighborVertex[4],
const GLfloat  neighborWeight[4],
GLdouble **  outData,
void polygonData 
)
inlinestaticprivate
107 { reinterpret_cast<GluTessWrapper*>(polygonData)->tessCombine(newVertex, neighborVertex, neighborWeight, outData); }
void tessCombine(const GLdouble newVertex[3], const GLdouble *neighborVertex[4], const GLfloat neighborWeight[4], GLdouble **outData)
Definition Tesselate.cpp:159

References tessCombine().

Referenced by GluTessWrapper().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ tesselate3d() [1/2]

std::vector< Vec3d > Slic3r::GluTessWrapper::tesselate3d ( const ExPolygon expoly,
double  z_,
bool  flipped_ 
)
inline
24 {
25 m_z = z_;
26 m_flipped = flipped_;
27 m_output_triangles.clear();
28 std::vector<GLdouble> coords;
29 {
30 size_t num_coords = expoly.contour.points.size();
31 for (const Polygon &poly : expoly.holes)
32 num_coords += poly.points.size();
33 coords.reserve(num_coords * 3);
34 }
37 for (const Point &pt : expoly.contour.points) {
38 coords.emplace_back(unscale<double>(pt[0]));
39 coords.emplace_back(unscale<double>(pt[1]));
40 coords.emplace_back(0.);
41 gluTessVertex(m_tesselator, &coords[coords.size() - 3], &coords[coords.size() - 3]);
42 }
44 for (const Polygon &poly : expoly.holes) {
46 for (const Point &pt : poly.points) {
47 coords.emplace_back(unscale<double>(pt[0]));
48 coords.emplace_back(unscale<double>(pt[1]));
49 coords.emplace_back(0.);
50 gluTessVertex(m_tesselator, &coords[coords.size() - 3], &coords[coords.size() - 3]);
51 }
53 }
56 return std::move(m_output_triangles);
57 }
bool m_flipped
Definition Tesselate.cpp:189
Pointf3s m_output_triangles
Definition Tesselate.cpp:183
#define gluTessEndPolygon
Definition glu-libtess.h:41
#define gluTessVertex
Definition glu-libtess.h:40
#define gluTessBeginContour
Definition glu-libtess.h:39
#define gluTessEndContour
Definition glu-libtess.h:42
#define gluTessBeginPolygon
Definition glu-libtess.h:38
const Polygon & contour(const ExPolygon &p)
Definition AGGRaster.hpp:21
const Polygons & holes(const ExPolygon &p)
Definition AGGRaster.hpp:22
constexpr auto size(const C &c) -> decltype(c.size())
Definition span.hpp:183
Kernel::Point_2 Point
Definition point_areas.cpp:20

References Slic3r::ExPolygon::contour, gluTessBeginContour, gluTessBeginPolygon, gluTessEndContour, gluTessEndPolygon, gluTessVertex, Slic3r::ExPolygon::holes, m_flipped, m_intersection_points, m_output_triangles, m_tesselator, m_z, and Slic3r::MultiPoint::points.

Referenced by Slic3r::triangulate_expolygon_2d(), Slic3r::triangulate_expolygon_2f(), Slic3r::triangulate_expolygon_3d(), Slic3r::triangulate_expolygons_2d(), Slic3r::triangulate_expolygons_2f(), and Slic3r::triangulate_expolygons_3d().

+ Here is the caller graph for this function:

◆ tesselate3d() [2/2]

std::vector< Vec3d > Slic3r::GluTessWrapper::tesselate3d ( const ExPolygons expolygons,
double  z_,
bool  flipped_ 
)
inline
60 {
61 m_z = z_;
62 m_flipped = flipped_;
63 m_output_triangles.clear();
64 std::vector<GLdouble> coords;
65 {
66 size_t num_coords = 0;
67 for (const ExPolygon &expoly : expolygons) {
68 size_t num_coords_this = expoly.contour.points.size();
69 for (const Polygon &poly : expoly.holes)
70 num_coords_this += poly.points.size();
71 num_coords = std::max(num_coords, num_coords_this);
72 }
73 coords.assign(num_coords * 3, 0);
74 }
75 for (const ExPolygon &expoly : expolygons) {
78 size_t idx = 0;
79 for (const Point &pt : expoly.contour.points) {
80 coords[idx ++] = unscale<double>(pt[0]);
81 coords[idx ++] = unscale<double>(pt[1]);
82 coords[idx ++] = 0.;
83 gluTessVertex(m_tesselator, &coords[idx - 3], &coords[idx - 3]);
84 }
86 for (const Polygon &poly : expoly.holes) {
88 for (const Point &pt : poly.points) {
89 coords[idx ++] = unscale<double>(pt[0]);
90 coords[idx ++] = unscale<double>(pt[1]);
91 coords[idx ++] = 0.;
92 gluTessVertex(m_tesselator, &coords[idx - 3], &coords[idx - 3]);
93 }
95 }
97 }
99 return std::move(m_output_triangles);
100 }

References gluTessBeginContour, gluTessBeginPolygon, gluTessEndContour, gluTessEndPolygon, gluTessVertex, m_flipped, m_intersection_points, m_output_triangles, m_tesselator, and m_z.

◆ tessEnd()

void Slic3r::GluTessWrapper::tessEnd ( )
inlineprivate
118 {
119 m_num_points = 0;
120 }

References m_num_points.

Referenced by tessEndCB().

+ Here is the caller graph for this function:

◆ tessEndCB()

static void Slic3r::GluTessWrapper::tessEndCB ( void polygonData)
inlinestaticprivate
104{ reinterpret_cast<GluTessWrapper*>(polygonData)->tessEnd(); }
void tessEnd()
Definition Tesselate.cpp:117

References tessEnd().

Referenced by GluTessWrapper().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ tessError()

static void Slic3r::GluTessWrapper::tessError ( GLenum  errorCode)
inlinestaticprivate
166 {
167// const GLubyte *errorStr;
168// errorStr = gluErrorString(errorCode);
169// printf("Error: %s\n", (const char*)errorStr);
170 }

Referenced by tessErrorCB().

+ Here is the caller graph for this function:

◆ tessErrorCB()

static void Slic3r::GluTessWrapper::tessErrorCB ( GLenum  errorCode,
void polygonData 
)
inlinestaticprivate
108{ reinterpret_cast<GluTessWrapper*>(polygonData)->tessError(errorCode); }
static void tessError(GLenum errorCode)
Definition Tesselate.cpp:165

References tessError().

Referenced by GluTessWrapper().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ tessVertex()

void Slic3r::GluTessWrapper::tessVertex ( const GLvoid data)
inlineprivate
123 {
124 if (data == nullptr)
125 return;
126 const GLdouble *ptr = (const GLdouble*)data;
127 ++ m_num_points;
128 if (m_num_points == 1) {
129 memcpy(m_pt0, ptr, sizeof(GLdouble) * 3);
130 } else if (m_num_points == 2) {
131 memcpy(m_pt1, ptr, sizeof(GLdouble) * 3);
132 } else {
133 bool flip = m_flipped;
135 flip = !flip;
136 m_num_points = 2;
137 }
138 m_output_triangles.emplace_back(m_pt0[0], m_pt0[1], m_z);
139 if (flip) {
140 m_output_triangles.emplace_back(ptr[0], ptr[1], m_z);
141 m_output_triangles.emplace_back(m_pt1[0], m_pt1[1], m_z);
142 } else {
143 m_output_triangles.emplace_back(m_pt1[0], m_pt1[1], m_z);
144 m_output_triangles.emplace_back(ptr[0], ptr[1], m_z);
145 }
147 memcpy(m_pt0, m_pt1, sizeof(GLdouble) * 3);
148 memcpy(m_pt1, ptr, sizeof(GLdouble) * 3);
149 } else if (m_primitive_type == GL_TRIANGLE_FAN) {
150 memcpy(m_pt1, ptr, sizeof(GLdouble) * 3);
151 } else {
153 assert(m_num_points == 3);
154 m_num_points = 0;
155 }
156 }
157 }
GLdouble m_pt0[3]
Definition Tesselate.cpp:178
GLdouble m_pt1[3]
Definition Tesselate.cpp:179
double GLdouble
Definition glu-libtess.h:65

References GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP, GL_TRIANGLES, m_flipped, m_num_points, m_output_triangles, m_primitive_type, m_pt0, m_pt1, and m_z.

Referenced by tessVertexCB().

+ Here is the caller graph for this function:

◆ tessVertexCB()

static void Slic3r::GluTessWrapper::tessVertexCB ( const GLvoid data,
void polygonData 
)
inlinestaticprivate
105{ reinterpret_cast<GluTessWrapper*>(polygonData)->tessVertex(data); }
void tessVertex(const GLvoid *data)
Definition Tesselate.cpp:122

References tessVertex().

Referenced by GluTessWrapper().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Member Data Documentation

◆ m_flipped

bool Slic3r::GluTessWrapper::m_flipped
private

◆ m_intersection_points

std::deque<Vec3d> Slic3r::GluTessWrapper::m_intersection_points
private

◆ m_num_points

int Slic3r::GluTessWrapper::m_num_points
private

Referenced by tessBegin(), tessEnd(), and tessVertex().

◆ m_output_triangles

Pointf3s Slic3r::GluTessWrapper::m_output_triangles
private

◆ m_primitive_type

GLenum Slic3r::GluTessWrapper::m_primitive_type
private

Referenced by tessBegin(), and tessVertex().

◆ m_pt0

GLdouble Slic3r::GluTessWrapper::m_pt0[3]
private

Referenced by tessVertex().

◆ m_pt1

GLdouble Slic3r::GluTessWrapper::m_pt1[3]
private

Referenced by tessVertex().

◆ m_tesselator

GLUtesselator* Slic3r::GluTessWrapper::m_tesselator
private

◆ m_z

double Slic3r::GluTessWrapper::m_z
private

The documentation for this class was generated from the following file: