Horizon
Loading...
Searching...
No Matches
imp_package.hpp
1#pragma once
2#include "core/core_package.hpp"
3#include "block/block.hpp"
4#include "board/board.hpp"
5#include "imp_layer.hpp"
6#include "search/searcher_package.hpp"
7#include "canvas3d/point.hpp"
8#include <mutex>
9
10namespace horizon {
11namespace STEPImporter {
12class STEPImporter;
13}
14
15/* for projecting STEP models into package editor */
16enum class ProjectionMode {
17 /* standard top-down view / projection */
18 TOP_DOWN,
19 /* Z-mirrored / inverted bottom-up projection (NB: not a rotation) */
20 BOTTOM_UP,
21};
22
23class ImpPackage : public ImpLayer {
24 class ImportCanvas3D;
25 friend class ModelEditor;
26 friend class PlaceModelBox;
27 friend class ImportCanvas3D;
28
29public:
30 ImpPackage(const std::string &package_filename, const std::string &pool_path, TempMode temp_mode);
31
32 std::map<ObjectType, SelectionFilterInfo> get_selection_filter_info() const override;
33
34 ~ImpPackage();
35
36protected:
37 void construct() override;
38 void apply_preferences() override;
39 void update_highlights() override;
40
41 ActionCatalogItem::Availability get_editor_type_for_action() const override
42 {
43 return ActionCatalogItem::AVAILABLE_IN_PACKAGE;
44 };
45
46 std::string get_hud_text(std::set<SelectableRef> &sel) override;
47 void update_action_sensitivity() override;
48 void update_monitor() override;
49 ActionToolID get_doubleclick_action(ObjectType type, const UUID &uu) override;
50
51 Searcher *get_searcher_ptr() override
52 {
53 return &searcher;
54 }
55
56 std::vector<std::string> get_view_hints() override;
57
58private:
59 void canvas_update() override;
60 CorePackage core_package;
61 Package &package;
62 SearcherPackage searcher;
63
64 Block fake_block;
65 Board fake_board;
66 void update_fake_board();
67 void update_points();
68
69 class FootprintGeneratorWindow *footprint_generator_window = nullptr;
70 class View3DWindow *view_3d_window = nullptr;
71 class ModelInfo {
72 public:
73 std::vector<Point3D> points;
74 std::unique_ptr<STEPImporter::STEPImporter> importer;
75
76 ~ModelInfo();
77 };
78 void project_model(const Package::Model &model, ProjectionMode proj);
79
80 std::map<std::string, ModelInfo> model_info;
81 std::mutex model_info_mutex;
82
83 class CanvasAnnotation *projection_annotation = nullptr;
84 std::vector<Coordi> projection_targets;
85 Glib::RefPtr<Gio::SimpleAction> show_projection_action;
86
87 Glib::RefPtr<Gio::SimpleAction> snap_to_pad_bbox_action;
88
89 std::string ask_3d_model_filename(const std::string &current_filename = "");
90 void construct_3d();
91 void update_model_editors();
92 void reload_model_editor();
93
94 Gtk::ListBox *models_listbox = nullptr;
95 class LayerHelpBox *layer_help_box = nullptr;
96 UUID current_model;
97 class PlaceModelBox *place_model_box = nullptr;
98 Gtk::Stack *view_3d_stack = nullptr;
99
100 class HeaderButton *header_button = nullptr;
101 Gtk::Entry *entry_name = nullptr;
102 class PoolBrowserButton *browser_alt_button = nullptr;
103 void check_alt_pkg();
104
105 class ParameterWindow *parameter_window = nullptr;
106
107 void update_header();
108
109 bool set_filename() override;
110
111 void handle_convert_to_pad();
112 UUID converted_padstack;
113 std::set<UUID> converted_polygons;
114 Coordi converted_pad_position;
115
116 bool handle_broadcast(const json &j) override;
117};
118} // namespace horizon
A block is one level of hierarchy in the netlist.
Definition block.hpp:29
Definition board.hpp:47
Definition annotation.hpp:7
Definition core_package.hpp:7
Definition footprint_generator_window.hpp:9
Definition header_button.hpp:5
Definition imp_layer.hpp:5
Definition import_canvas_3d.hpp:5
Definition layer_help_box.hpp:7
Definition package.hpp:44
Definition package.hpp:29
Definition parameter_window.hpp:11
Definition pool_browser_button.hpp:9
Definition step_importer.hpp:13
Definition searcher_package.hpp:5
Definition searcher.hpp:9
This class encapsulates a UUID and allows it to be uses as a value type.
Definition uuid.hpp:16
Definition 3d_view.hpp:11
Definition action.hpp:13