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);
90 std::optional<ViewParams> get_view_all_params()
const;
93 void clear_3d_models();
94 void set_point_transform(
const glm::dmat4 &mat);
95 void set_points(
const std::vector<Point3D> &points);
98 float xl, yl, zl, xh, yh, zh;
101 BBox get_model_bbox(
const std::string &filename)
const;
103 typedef sigc::signal<void> type_signal_view_changed;
104 type_signal_view_changed signal_view_changed()
106 return s_signal_view_changed;
109 bool model_is_loaded(
const std::string &filename);
116 Color background_top_color;
117 Color background_bottom_color;
118 bool show_solder_mask =
true;
119 bool show_silkscreen =
true;
120 bool show_substrate =
true;
121 bool show_models =
true;
122 bool show_dnp_models =
false;
123 bool show_solder_paste =
true;
124 bool use_layer_colors =
false;
125 bool show_copper =
true;
126 bool show_points =
false;
127 Color solder_mask_color = {0, .5, 0};
128 Color silkscreen_color = {1, 1, 1};
129 Color substrate_color = {.2, .15, 0};
131 float highlight_intensity = .5;
133 float cam_azimuth = 90;
134 float cam_elevation = 45;
135 float cam_distance = 20;
139 Projection projection = Projection::PERSP;
145 CoverRenderer cover_renderer;
146 WallRenderer wall_renderer;
147 FaceRenderer face_renderer;
148 BackgroundRenderer background_renderer;
149 PointRenderer point_renderer;
152 void resize_buffers();
154 enum class RenderBackground { YES, NO };
155 void render(RenderBackground mode = RenderBackground::YES);
156 virtual int a_get_scale_factor()
const;
157 virtual void redraw()
160 void invalidate_pick();
162 void prepare_packages();
164 unsigned int num_samples = 1;
166 const class Board *brd =
nullptr;
168 std::set<UUID> packages_highlight;
170 void load_3d_model(
const std::string &filename,
const std::string &filename_abs);
172 std::map<std::string, std::string> get_model_filenames(
class IPool &pool);
174 std::mutex models_loading_mutex;
176 void update_max_package_height();
179 typedef sigc::signal<void> type_signal_pick_ready;
180 type_signal_pick_ready signal_pick_ready()
182 return s_signal_pick_ready;
184 std::variant<UUID, glm::dvec3> pick_package_or_point(
unsigned int x,
unsigned int y)
const;
186 virtual STEPImporter::Faces import_step(
const std::string &filename_rel,
const std::string &filename_abs);
188 virtual std::optional<std::pair<std::string, std::string>> get_model_filename(
const class BoardPackage &pkg,
191 virtual const std::map<int, CanvasMesh::Layer3D> &get_layers()
const;
192 const CanvasMesh::Layer3D &get_layer(
int layer)
const;
197 FaceVertex(
float ix,
float iy,
float iz,
float inx,
float iny,
float inz, uint8_t ir, uint8_t ig, uint8_t ib)
198 : x(ix), y(iy), z(iz), nx(inx), ny(iny), nz(inz), r(ir), g(ig), b(ib), _pad(0)
212 } __attribute__((packed));
214 class ModelTransform {
216 ModelTransform(
float ix,
float iy,
float a,
bool flip,
bool highlight)
217 : x(ix), y(iy), angle(a), flags(
flip | (highlight << 1))
228 uint16_t model_roll = 0;
229 uint16_t model_pitch = 0;
230 uint16_t model_yaw = 0;
231 } __attribute__((packed));
233 float get_layer_offset(
int layer)
const;
234 float get_layer_thickness(
int layer)
const;
235 bool layer_is_visible(
int layer)
const;
237 std::pair<glm::vec3, glm::vec3> bbox;
241 GLuint depthrenderbuffer;
242 GLuint pickrenderbuffer;
244 GLuint fbo_downsampled;
245 GLuint pickrenderbuffer_downsampled;
247 enum class PickState { QUEUED, CURRENT, INVALID };
248 PickState pick_state = PickState::INVALID;
252 glm::vec3 cam_normal;
254 float package_height_max = 0;
255 std::vector<FaceVertex> face_vertex_buffer;
256 std::vector<unsigned int> face_index_buffer;
260 ModelInfo(
size_t o,
size_t n) : face_index_offset(o),
count(n)
263 const size_t face_index_offset;
267 std::map<std::string, ModelInfo> models;
269 std::vector<ModelTransform> package_transforms;
276 unsigned int pick_base;
277 std::vector<UUID> pkg;
280 std::map<std::pair<std::string, bool>, PackageInfo> package_infos;
281 std::vector<uint16_t> pick_buf;
283 uint16_t point_pick_base = 0;
284 std::vector<Point3D> points;
285 glm::dmat4 point_mat;
288 float get_magic_number()
const;
290 type_signal_pick_ready s_signal_pick_ready;
291 type_signal_view_changed s_signal_view_changed;