Horizon
core_board.hpp
1 #pragma once
2 #include "block/block.hpp"
3 #include "board/board.hpp"
4 #include "core.hpp"
5 #include "nlohmann/json.hpp"
6 #include "document/document_board.hpp"
7 #include <optional>
8 
9 namespace horizon {
10 class CoreBoard : public Core, public DocumentBoard {
11 public:
12  class Filenames {
13  public:
14  Filenames(const std::vector<std::string> &filenames)
15  : board(filenames.at(0)), planes(filenames.at(1)), blocks(filenames.at(2)), pictures_dir(filenames.at(3))
16  {
17  }
18  std::string board;
19  std::string planes;
20  std::string blocks;
21  std::string pictures_dir;
22  };
23 
24  CoreBoard(const Filenames &filenames, IPool &pool, IPool &pool_caching);
25 
26  class Block *get_top_block() override;
27  class LayerProvider &get_layer_provider() override;
28 
29  bool set_property(ObjectType type, const UUID &uu, ObjectProperty::ID property,
30  const class PropertyValue &value) override;
31  bool get_property(ObjectType type, const UUID &uu, ObjectProperty::ID property,
32  class PropertyValue &value) override;
33  bool get_property_meta(ObjectType type, const UUID &uu, ObjectProperty::ID property,
34  class PropertyMeta &meta) override;
35 
36  void reload_netlist();
37 
38  const Board &get_canvas_data();
39  Board *get_board() override;
40  const Board *get_board() const;
41 
42  class Rules *get_rules() override;
43  GerberOutputSettings &get_gerber_output_settings() override
44  {
45  return gerber_output_settings;
46  }
47  ODBOutputSettings &get_odb_output_settings() override
48  {
49  return odb_output_settings;
50  }
51  PDFExportSettings &get_pdf_export_settings() override
52  {
53  return pdf_export_settings;
54  }
55  STEPExportSettings &get_step_export_settings() override
56  {
57  return step_export_settings;
58  }
59  PnPExportSettings &get_pnp_export_settings() override
60  {
61  return pnp_export_settings;
62  }
63  GridSettings *get_grid_settings() override
64  {
65  return &grid_settings;
66  }
67 
68  BoardColors &get_colors() override
69  {
70  return colors;
71  }
72  void update_rules() override;
73 
74  std::pair<Coordi, Coordi> get_bbox() override;
75 
76  json get_meta() override;
77 
78  const std::string &get_filename() const override;
79 
80  ObjectType get_object_type() const override
81  {
82  return ObjectType::BOARD;
83  }
84 
85  const FileVersion &get_version() const override
86  {
87  return brd->version;
88  }
89 
90  void reload_pool() override;
91 
92 private:
93  std::optional<Block> block;
94  std::optional<Board> brd;
95 
96  BoardRules rules;
97  GerberOutputSettings gerber_output_settings;
98  ODBOutputSettings odb_output_settings;
99  PDFExportSettings pdf_export_settings;
100  STEPExportSettings step_export_settings;
101  PnPExportSettings pnp_export_settings;
102  GridSettings grid_settings;
103 
104  BoardColors colors;
105 
106  Filenames filenames;
107 
108  class HistoryItem : public Core::HistoryItem {
109  public:
110  HistoryItem(const Block &b, const Board &r, const std::string &comment);
111  Block block;
112  Board brd;
113  };
114  void rebuild_internal(bool from_undo, const std::string &comment) override;
115  void history_push(const std::string &comment) override;
116  void history_load(unsigned int i) override;
117  void save(const std::string &suffix) override;
118  void delete_autosave() override;
119 };
120 } // namespace horizon
A block is one level of hierarchy in the netlist.
Definition: block.hpp:29
Definition: board.hpp:47
Definition: core_board.hpp:12
Definition: core_board.hpp:10
json get_meta() override
Definition: core_board.cpp:799
Where Tools and and documents meet.
Definition: core.hpp:42
Definition: document_board.hpp:14
Definition: gerber_output_settings.hpp:10
Definition: ipool.hpp:14
Definition: layer_provider.hpp:7
Definition: odb_output_settings.hpp:10
Definition: core_properties.hpp:90
Definition: core_properties.hpp:7
Definition: rules.hpp:53
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16
a class to store JSON values
Definition: json.hpp:177
Tiny metaprogramming library.
Definition: meta.hpp:116