2 #include "block/block.hpp"
3 #include "board_hole.hpp"
4 #include "board_package.hpp"
5 #include "board_rules.hpp"
6 #include "clipper/clipper.hpp"
7 #include "common/dimension.hpp"
8 #include "common/hole.hpp"
9 #include "common/junction.hpp"
10 #include "common/layer_provider.hpp"
11 #include "common/polygon.hpp"
12 #include "common/keepout.hpp"
13 #include "common/pdf_export_settings.hpp"
14 #include "fab_output_settings.hpp"
15 #include "nlohmann/json_fwd.hpp"
18 #include "util/uuid.hpp"
19 #include "util/warning.hpp"
21 #include "via_padstack_provider.hpp"
22 #include "connection_line.hpp"
23 #include "step_export_settings.hpp"
24 #include "pnp_export_settings.hpp"
25 #include "airwire.hpp"
26 #include "included_board.hpp"
27 #include "board_panel.hpp"
28 #include "common/picture.hpp"
29 #include "board_decal.hpp"
30 #include "util/file_version.hpp"
42 class Board :
public ObjectProvider,
public LayerProvider {
45 void propagate_nets();
46 std::map<int, Layer> layers;
48 void delete_dependants();
49 void vacuum_junctions();
52 Board(
const UUID &uu,
const json &, Block &block, IPool &pool, ViaPadstackProvider &vpp);
53 static Board new_from_file(
const std::string &filename, Block &block, IPool &pool, ViaPadstackProvider &vpp);
54 Board(
const UUID &uu, Block &block);
56 void expand(
bool careful =
false);
57 void expand_packages();
60 Board(
const Board &brd);
61 Board(shallow_copy_t sh,
const Board &brd);
62 void operator=(
const Board &brd) =
delete;
64 void update_airwires(
bool fast =
false,
const std::set<UUID> &nets = {});
65 void disconnect_package(BoardPackage *pkg);
67 void smash_package(BoardPackage *pkg);
68 void copy_package_silkscreen_texts(BoardPackage *dest,
const BoardPackage *src);
69 void unsmash_package(BoardPackage *pkg);
70 void smash_package_silkscreen_graphics(BoardPackage *pkg);
71 void smash_package_outline(BoardPackage &pkg);
72 void smash_panel_outline(BoardPanel &panel);
74 Junction *get_junction(
const UUID &uu)
override;
75 Polygon *get_polygon(
const UUID &uu)
override;
76 const std::map<int, Layer> &get_layers()
const override;
77 void set_n_inner_layers(
unsigned int n);
78 unsigned int get_n_inner_layers()
const;
79 void update_plane(Plane *plane,
const class CanvasPatch *ca =
nullptr,
80 const class CanvasPads *ca_pads =
nullptr);
82 std::vector<KeepoutContour> get_keepout_contours()
const;
83 std::pair<Coordi, Coordi> get_bbox()
const;
84 void update_pdf_export_settings(PDFExportSettings &settings);
85 std::map<const BoardPackage *, PnPRow> get_PnP(
const PnPExportSettings &settings)
const;
91 std::map<UUID, Polygon> polygons;
92 std::map<UUID, BoardHole> holes;
93 std::map<UUID, BoardPackage> packages;
94 std::map<UUID, Junction> junctions;
95 std::map<UUID, Track> tracks;
96 std::map<UUID, Via> vias;
97 std::map<UUID, Text> texts;
98 std::map<UUID, Line> lines;
99 std::map<UUID, Arc> arcs;
100 std::map<UUID, Plane> planes;
101 std::map<UUID, Keepout> keepouts;
102 std::map<UUID, Dimension> dimensions;
103 std::map<UUID, ConnectionLine> connection_lines;
104 std::map<UUID, IncludedBoard> included_boards;
105 std::map<UUID, BoardPanel> board_panels;
106 std::map<UUID, Picture> pictures;
107 std::map<UUID, BoardDecal> decals;
109 std::vector<Warning> warnings;
112 FabOutputSettings fab_output_settings;
114 std::map<UUID, std::list<Airwire>> airwires;
118 StackupLayer(
int l,
const json &j);
120 json serialize()
const;
123 uint64_t substrate_thickness = .1_mm;
125 std::map<int, StackupLayer> stackup;
128 PDFExportSettings pdf_export_settings;
129 STEPExportSettings step_export_settings;
130 PnPExportSettings pnp_export_settings;
136 EXPAND_PROPAGATE_NETS = (1 << 0),
137 EXPAND_AIRWIRES = (1 << 1),
138 EXPAND_PACKAGES = (1 << 2)
141 ExpandFlags expand_flags = EXPAND_ALL;
142 std::set<UUID> packages_expand;
143 std::set<UUID> airwires_expand;
145 json serialize()
const;
146 void save_pictures(
const std::string &dir)
const;
147 void load_pictures(
const std::string &dir);
150 unsigned int n_inner_layers = 0;
151 ClipperLib::Paths get_thermals(
class Plane *plane,
const class CanvasPads *ca)
const;
152 void flip_package_layer(
int &layer)
const;
153 Board(
const Board &brd, CopyMode copy_mode);