3 #include "common/common.hpp"
4 #include "canvas_mesh.hpp"
5 #include "canvas/appearance.hpp"
6 #include "util/uuid.hpp"
8 #include "cover_renderer.hpp"
9 #include "face_renderer.hpp"
10 #include "wall_renderer.hpp"
11 #include "background_renderer.hpp"
12 #include "point_renderer.hpp"
13 #include "import_step/import.hpp"
15 #include <sigc++/sigc++.h>
28 Color get_layer_color(
int layer)
const;
30 enum class Projection { PERSP, ORTHO };
32 #define GET_SET_X(x_, t_, f_) \
33 const auto &get_##x_() const \
37 void set_##x_(const t_ &c) \
44 #define GET_SET(x_, t_) GET_SET_X(x_, t_, )
45 #define GET_SET_PICK(x_, t_) GET_SET_X(x_, t_, invalidate_pick();)
47 GET_SET(background_top_color,
Color)
48 GET_SET(background_bottom_color,
Color)
49 GET_SET_PICK(show_solder_mask,
bool)
50 GET_SET_PICK(show_silkscreen,
bool)
51 GET_SET_PICK(show_substrate,
bool)
52 GET_SET_PICK(show_models,
bool)
53 GET_SET_PICK(show_dnp_models,
bool)
54 GET_SET_PICK(show_solder_paste,
bool)
55 GET_SET_PICK(show_copper,
bool)
56 GET_SET_PICK(show_points,
bool)
57 GET_SET(use_layer_colors,
bool)
58 GET_SET(solder_mask_color,
Color)
59 GET_SET(silkscreen_color,
Color)
60 GET_SET(substrate_color,
Color)
61 GET_SET_PICK(explode,
float)
62 GET_SET_PICK(cam_distance,
float)
63 GET_SET_PICK(cam_fov,
float)
64 GET_SET_PICK(center, glm::vec2)
65 GET_SET_PICK(projection, Projection)
71 const float &get_cam_elevation()
const
75 void set_cam_elevation(
const float &ele);
77 const float &get_cam_azimuth()
const
81 void set_cam_azimuth(
const float &az);
85 void clear_3d_models();
86 void set_point_transform(
const glm::dmat4 &mat);
87 void set_points(
const std::vector<Point3D> &points);
90 float xl, yl, zl, xh, yh, zh;
93 BBox get_model_bbox(
const std::string &filename)
const;
95 typedef sigc::signal<void> type_signal_view_changed;
96 type_signal_view_changed signal_view_changed()
98 return s_signal_view_changed;
101 bool model_is_loaded(
const std::string &filename);
108 Color background_top_color;
109 Color background_bottom_color;
110 bool show_solder_mask =
true;
111 bool show_silkscreen =
true;
112 bool show_substrate =
true;
113 bool show_models =
true;
114 bool show_dnp_models =
false;
115 bool show_solder_paste =
true;
116 bool use_layer_colors =
false;
117 bool show_copper =
true;
118 bool show_points =
false;
119 Color solder_mask_color = {0, .5, 0};
120 Color silkscreen_color = {1, 1, 1};
121 Color substrate_color = {.2, .15, 0};
123 float highlight_intensity = .5;
125 float cam_azimuth = 90;
126 float cam_elevation = 45;
127 float cam_distance = 20;
131 Projection projection = Projection::PERSP;
137 CoverRenderer cover_renderer;
138 WallRenderer wall_renderer;
139 FaceRenderer face_renderer;
140 BackgroundRenderer background_renderer;
141 PointRenderer point_renderer;
144 void resize_buffers();
146 enum class RenderBackground { YES, NO };
147 void render(RenderBackground mode = RenderBackground::YES);
148 virtual int a_get_scale_factor()
const;
149 virtual void redraw()
152 void invalidate_pick();
154 void prepare_packages();
156 unsigned int num_samples = 1;
158 const class Board *brd =
nullptr;
160 std::set<UUID> packages_highlight;
162 void load_3d_model(
const std::string &filename,
const std::string &filename_abs);
164 std::map<std::string, std::string> get_model_filenames(
class IPool &pool);
166 std::mutex models_loading_mutex;
168 void update_max_package_height();
171 typedef sigc::signal<void> type_signal_pick_ready;
172 type_signal_pick_ready signal_pick_ready()
174 return s_signal_pick_ready;
176 std::variant<UUID, glm::dvec3> pick_package_or_point(
unsigned int x,
unsigned int y)
const;
178 virtual STEPImporter::Faces import_step(
const std::string &filename_rel,
const std::string &filename_abs);
180 virtual std::optional<std::pair<std::string, std::string>> get_model_filename(
const class BoardPackage &pkg,
186 FaceVertex(
float ix,
float iy,
float iz,
float inx,
float iny,
float inz,
uint8_t ir,
uint8_t ig,
uint8_t ib)
187 : x(ix), y(iy), z(iz), nx(inx), ny(iny), nz(inz), r(ir), g(ig), b(ib), _pad(0)
201 } __attribute__((packed));
203 class ModelTransform {
205 ModelTransform(
float ix,
float iy,
float a,
bool flip,
bool highlight)
206 : x(ix), y(iy), angle(a), flags(flip | (highlight << 1))
220 } __attribute__((packed));
222 float get_layer_offset(
int layer)
const;
223 float get_layer_thickness(
int layer)
const;
224 bool layer_is_visible(
int layer)
const;
226 std::pair<glm::vec3, glm::vec3> bbox;
230 GLuint depthrenderbuffer;
231 GLuint pickrenderbuffer;
233 GLuint fbo_downsampled;
234 GLuint pickrenderbuffer_downsampled;
236 enum class PickState { QUEUED, CURRENT, INVALID };
237 PickState pick_state = PickState::INVALID;
241 glm::vec3 cam_normal;
243 float package_height_max = 0;
244 std::vector<FaceVertex> face_vertex_buffer;
245 std::vector<unsigned int> face_index_buffer;
249 ModelInfo(
size_t o,
size_t n) : face_index_offset(o), count(n)
252 const size_t face_index_offset;
256 std::map<std::string, ModelInfo> models;
258 std::vector<ModelTransform> package_transforms;
265 unsigned int pick_base;
266 std::vector<UUID> pkg;
269 std::map<std::pair<std::string, bool>, PackageInfo> package_infos;
270 std::vector<uint16_t> pick_buf;
273 std::vector<Point3D> points;
274 glm::dmat4 point_mat;
277 float get_magic_number()
const;
279 type_signal_pick_ready s_signal_pick_ready;
280 type_signal_view_changed s_signal_view_changed;
Definition: appearance.hpp:7
Definition: background_renderer.hpp:5
Definition: canvas3d_base.hpp:20
Definition: canvas_mesh.hpp:8
Definition: common.hpp:267
Definition: cover_renderer.hpp:7
Definition: face_renderer.hpp:6
Definition: point_renderer.hpp:6
Definition: wall_renderer.hpp:7
zip_uint8_t uint8_t
zip_uint8_t typedef.
Definition: zip.hpp:78
zip_uint16_t uint16_t
zip_uint16_t typedef.
Definition: zip.hpp:88
Definition: canvas3d_base.hpp:89