Horizon
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 
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 
33  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 
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
A block is one level of hierarchy in the netlist.
Definition: block.hpp:29
Definition: board.hpp:43
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: imp_package.hpp:15
Definition: layer_help_box.hpp:7
Definition: model_editor.hpp:12
Definition: package.hpp:45
Definition: package.hpp:30
Definition: parameter_window.hpp:11
Definition: place_model_box.hpp:10
Definition: pool_browser_button.hpp:9
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