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 
10 namespace horizon {
11 namespace STEPImporter {
12 class STEPImporter;
13 }
14 
15 class ImpPackage : public ImpLayer {
16     class ImportCanvas3D;
17     friend class ModelEditor;
18     friend class PlaceModelBox;
19     friend class ImportCanvas3D;
20 
21 public:
22     ImpPackage(const std::string &package_filename, const std::string &pool_path);
23 
24     std::map<ObjectType, SelectionFilterInfo> get_selection_filter_info() const override;
25 
26     ~ImpPackage();
27 
28 protected:
29     void construct() override;
30     void apply_preferences() override;
31     void update_highlights() override;
32 
get_editor_type_for_action() const33     ActionCatalogItem::Availability get_editor_type_for_action() const override
34     {
35         return ActionCatalogItem::AVAILABLE_IN_PACKAGE;
36     };
37 
38     std::string get_hud_text(std::set<SelectableRef> &sel) override;
39     void update_action_sensitivity() override;
40     void update_monitor() override;
41     ActionToolID get_doubleclick_action(ObjectType type, const UUID &uu) override;
42 
get_searcher_ptr()43     Searcher *get_searcher_ptr() override
44     {
45         return &searcher;
46     }
47 
48     std::vector<std::string> get_view_hints() override;
49 
50 private:
51     void canvas_update() override;
52     CorePackage core_package;
53     Package &package;
54     SearcherPackage searcher;
55 
56     Block fake_block;
57     Board fake_board;
58     void update_fake_board();
59     void update_points();
60 
61     class FootprintGeneratorWindow *footprint_generator_window = nullptr;
62     class View3DWindow *view_3d_window = nullptr;
63     class ModelInfo {
64     public:
65         std::vector<Point3D> points;
66         std::unique_ptr<STEPImporter::STEPImporter> importer;
67 
68         ~ModelInfo();
69     };
70     void project_model(const Package::Model &model);
71 
72     std::map<std::string, ModelInfo> model_info;
73     std::mutex model_info_mutex;
74 
75     class CanvasAnnotation *projection_annotation = nullptr;
76     std::vector<Coordi> projection_targets;
77     Glib::RefPtr<Gio::SimpleAction> show_projection_action;
78 
79     std::string ask_3d_model_filename(const std::string &current_filename = "");
80     void construct_3d();
81     void update_model_editors();
82     void reload_model_editor();
83 
84     Gtk::ListBox *models_listbox = nullptr;
85     class LayerHelpBox *layer_help_box = nullptr;
86     UUID current_model;
87     class PlaceModelBox *place_model_box = nullptr;
88     Gtk::Stack *view_3d_stack = nullptr;
89 
90     class HeaderButton *header_button = nullptr;
91     Gtk::Entry *entry_name = nullptr;
92     class PoolBrowserButton *browser_alt_button = nullptr;
93     void check_alt_pkg();
94 
95     class ParameterWindow *parameter_window = nullptr;
96 
97 
98     void update_header();
99 };
100 } // namespace horizon
101