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
9namespace horizon {
10class CoreBoard : public Core, public DocumentBoard {
11public:
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
92private:
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