2 #include "background.hpp" 3 #include "canvas/canvas_patch.hpp" 4 #include "clipper/clipper.hpp" 5 #include "common/common.hpp" 6 #include "util/msd_animator.hpp" 11 #include <glm/glm.hpp> 13 #include <unordered_map> 24 float cam_azimuth = 90;
25 float cam_elevation = 45;
26 float cam_distance = 20;
33 Color solder_mask_color = {0, .5, 0};
34 Color substrate_color = {.2, .15, 0};
35 bool show_solder_mask =
true;
36 bool show_silkscreen =
true;
37 bool show_substrate =
true;
38 bool show_models =
true;
39 bool show_solder_paste =
true;
40 bool smooth_zoom =
false;
41 float highlight_intensity = .5;
43 Color background_top_color;
44 Color background_bottom_color;
47 void update2(
const class Board &brd);
49 void update_packages();
50 void set_highlights(
const std::set<UUID> &pkgs);
51 enum class Projection { PERSP, ORTHO };
52 Projection projection = Projection::PERSP;
53 void inc_cam_azimuth(
float v);
55 void set_msaa(
unsigned int samples);
57 void load_models_async(
class Pool *pool);
60 void clear_3d_models();
62 typedef sigc::signal<void, bool> type_signal_models_loading;
63 type_signal_models_loading signal_models_loading()
65 return s_signal_models_loading;
72 Vertex(
float ix,
float iy) : x(ix), y(iy)
78 std::vector<Vertex> tris;
79 std::vector<Vertex> walls;
81 float thickness = 0.035;
83 float explode_mul = 0;
88 FaceVertex(
float ix,
float iy,
float iz, uint8_t ir, uint8_t ig, uint8_t ib)
89 : x(ix), y(iy), z(iz), r(ir), g(ig), b(ib), _pad(0)
100 } __attribute__((packed));
104 ModelTransform(
float ix,
float iy,
float a,
bool flip,
bool highlight)
105 : x(ix), y(iy), angle(a), flags(flip | (highlight << 1))
116 uint16_t model_roll = 0;
117 uint16_t model_pitch = 0;
118 uint16_t model_yaw = 0;
119 } __attribute__((packed));
121 int _animate_step(GdkFrameClock *frame_clock);
127 bool needs_push =
false;
134 void on_size_allocate(Gtk::Allocation &alloc)
override;
135 void on_realize()
override;
136 bool on_render(
const Glib::RefPtr<Gdk::GLContext> &context)
override;
137 bool on_button_press_event(GdkEventButton *button_event)
override;
138 bool on_motion_notify_event(GdkEventMotion *motion_event)
override;
139 bool on_button_release_event(GdkEventButton *button_event)
override;
140 bool on_scroll_event(GdkEventScroll *scroll_event)
override;
142 glm::vec2 pointer_pos_orig;
143 float cam_azimuth_orig;
144 float cam_elevation_orig;
147 glm::vec2 center_orig;
148 glm::vec3 cam_normal;
150 std::pair<glm::vec3, glm::vec3> bbox;
151 float package_height_max = 0;
153 enum class PanMode { NONE, MOVE, ROTATE };
154 PanMode pan_mode = PanMode::NONE;
160 float zoom_animation_cam_dist_orig = 1;
164 GLuint depthrenderbuffer;
165 unsigned int num_samples = 1;
166 bool needs_resize =
false;
168 void resize_buffers();
172 void prepare_layer(
int layer);
173 void prepare_soldermask(
int layer);
174 void prepare_packages();
175 float get_layer_offset(
int layer);
176 const class Board *brd =
nullptr;
177 void add_path(
int layer,
const ClipperLib::Path &path);
178 bool layer_is_visible(
int layer)
const;
179 Color get_layer_color(
int layer)
const;
180 float get_layer_thickness(
int layer)
const;
182 void load_3d_model(
const std::string &filename,
const std::string &filename_abs);
183 void load_models_thread(std::map<std::string, std::string> model_filenames);
185 std::set<UUID> packages_highlight;
187 std::unordered_map<int, Layer3D> layers;
189 std::mutex models_loading_mutex;
190 std::vector<FaceVertex> face_vertex_buffer;
191 std::vector<unsigned int> face_index_buffer;
192 std::map<std::string, std::pair<size_t, size_t>> models;
194 Glib::Dispatcher models_loading_dispatcher;
196 std::vector<ModelTransform> package_transforms;
199 std::map<std::string, std::pair<size_t, size_t>>
200 package_transform_idxs;
203 type_signal_models_loading s_signal_models_loading;
Definition: canvas_patch.hpp:6
Definition: canvas3d.hpp:68
Definition: clipper.hpp:136
Definition: canvas3d.hpp:86
Definition: msd_animator.hpp:5
Definition: canvas3d.hpp:70
Stores objects (Unit, Entity, Symbol, Part, etc.) from the pool.
Definition: pool.hpp:19
Definition: canvas3d.hpp:16
Definition: common.hpp:207
Definition: background.hpp:5