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 ¤t_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