Easy3D 2.5.3
text_mesher.h
1/********************************************************************
2 * Copyright (C) 2015 Liangliang Nan <liangliang.nan@gmail.com>
3 * https://3d.bk.tudelft.nl/liangliang/
4 *
5 * This file is part of Easy3D. If it is useful in your research/work,
6 * I would be grateful if you show your appreciation by citing it:
7 * ------------------------------------------------------------------
8 * Liangliang Nan.
9 * Easy3D: a lightweight, easy-to-use, and efficient C++ library
10 * for processing and rendering 3D data.
11 * Journal of Open Source Software, 6(64), 3255, 2021.
12 * ------------------------------------------------------------------
13 *
14 * Easy3D is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License Version 3
16 * as published by the Free Software Foundation.
17 *
18 * Easy3D is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program. If not, see <http://www.gnu.org/licenses/>.
25 ********************************************************************/
26
27
28#ifndef EASY3D_ALGO_TEXT_MESHER_H
29#define EASY3D_ALGO_TEXT_MESHER_H
30
31#include <string>
32
33#include <easy3d/core/types.h>
34
35
36namespace easy3d {
37
38 class SurfaceMesh;
39
42 class TextMesher {
43 public:
51 explicit TextMesher(const std::string &font_file, unsigned short quality = 4);
52
54
60 void set_font(const std::string &font_file);
61
73 generate(const std::string &text, float x, float y, int font_size, float extrude, bool collision_free = false);
74
85 bool generate(SurfaceMesh *mesh, const std::string &text, float x, float y, int font_size, float extrude,
86 bool collision_free = false);
87
98 bool generate(const std::string &text, float x, float y, int font_size,
99 std::vector<std::vector<Polygon2> > &contours, bool collision_free);
100
101 private:
102
113 bool _generate(SurfaceMesh *mesh, const std::wstring &text, float x, float y, int font_size, float extrude,
114 bool collision_free);
115
125 bool _generate_contours(const std::wstring &text, float x, float y, int font_size,
126 std::vector<std::vector<Polygon2> > &contours, bool collision_free);
127
137 bool _generate_contours(int codepoint, float &x, float &y, int font_size, std::vector<Polygon2> &contours);
138
139 private:
140 void *font_;
141 bool ready_;
142
143 std::string font_file_;
144 std::vector<unsigned char> font_data_;
145
146 // Controls the smoothness of the curved corners. A greater value results in a smooth transitions but more
147 // vertices. Suggested value is 4.
148 unsigned short bezier_steps_;
149 };
150
151}
152
153
154#endif // EASY3D_ALGO_TEXT_MESHER_H
A halfedge data structure for polygonal meshes of 2-manifold.
Definition: surface_mesh.h:52
Generate a 3D surface mesh from a text string.
Definition: text_mesher.h:42
SurfaceMesh * generate(const std::string &text, float x, float y, int font_size, float extrude, bool collision_free=false)
Generate a 3D surface mesh of a text.
Definition: text_mesher.cpp:283
void set_font(const std::string &font_file)
Change the font.
Definition: text_mesher.cpp:63
TextMesher(const std::string &font_file, unsigned short quality=4)
Create an instance of TextMesher.
Definition: text_mesher.cpp:49
Definition: collider.cpp:182
bool extrude(SurfaceMesh *mesh, const std::vector< Polygon2 > &contours, float height)
Extrudes a 3D surface mesh from a set of simple contours.
Definition: extrusion.cpp:38