Horizon
Loading...
Searching...
No Matches
package.hpp
1#pragma once
2#include "common/arc.hpp"
3#include "common/common.hpp"
4#include "common/hole.hpp"
5#include "common/junction.hpp"
6#include "common/layer_provider.hpp"
7#include "common/line.hpp"
8#include "common/object_provider.hpp"
9#include "common/polygon.hpp"
10#include "common/text.hpp"
11#include "common/keepout.hpp"
12#include "common/dimension.hpp"
13#include "nlohmann/json_fwd.hpp"
14#include "package/package_rules.hpp"
15#include "package/pad.hpp"
16#include "util/uuid.hpp"
17#include "util/warning.hpp"
18#include "parameter/program_polygon.hpp"
19#include "common/picture.hpp"
20#include <map>
21#include <set>
22#include <vector>
23#include "util/file_version.hpp"
24#include "common/grid_settings.hpp"
25
26namespace horizon {
27using json = nlohmann::json;
28
29class Package : public ObjectProvider, public LayerProvider {
30public:
32 friend Package;
33
34 protected:
35 std::map<UUID, Polygon> &get_polygons() override;
36
37 private:
38 class Package *pkg = nullptr;
39
40 public:
41 MyParameterProgram(class Package *p, const std::string &code);
42 };
43
44 class Model {
45 public:
46 Model(const UUID &uu, const std::string &filename);
47 Model(const UUID &uu, const json &j);
48
49 UUID uuid;
50 std::string filename;
51
52 int64_t x = 0;
53 int64_t y = 0;
54 int64_t z = 0;
55
56 void set_shift(unsigned int ax, int64_t value);
57 int64_t get_shift(unsigned int ax) const;
58
59 int roll = 0;
60 int pitch = 0;
61 int yaw = 0;
62
63 void set_rotation(unsigned int ax, int angle);
64 int get_rotation(unsigned int ax) const;
65
66 static const UUID legacy_model_uuid;
67
68 json serialize() const;
69 };
70
71 Package(const UUID &uu, const json &j, class IPool &pool);
72 Package(const UUID &uu);
73 static Package new_from_file(const std::string &filename, class IPool &pool);
74 static unsigned int get_app_version();
75
76 json serialize() const;
77 Junction *get_junction(const UUID &uu) override;
78 Polygon *get_polygon(const UUID &uu) override;
79 std::pair<Coordi, Coordi> get_bbox() const;
80 const std::map<int, Layer> &get_layers() const override;
81 std::optional<std::string> apply_parameter_set(const ParameterSet &ps);
82 void expand();
83 void update_warnings();
84 int get_max_pad_name() const;
85
86 UUID get_uuid() const;
87
88 Package(const Package &pkg);
89 void operator=(Package const &pkg);
90
91 UUID uuid;
92 std::string name;
93 std::string manufacturer;
94 std::set<std::string> tags;
95
96 std::map<UUID, Junction> junctions;
97 std::map<UUID, Line> lines;
98 std::map<UUID, Arc> arcs;
99 std::map<UUID, Text> texts;
100 std::map<UUID, Pad> pads;
101 std::map<UUID, Polygon> polygons;
102 std::map<UUID, Keepout> keepouts;
103 std::map<UUID, Dimension> dimensions;
104 std::map<UUID, Picture> pictures;
105
106 ParameterSet parameter_set;
107 MyParameterProgram parameter_program;
108 PackageRules rules;
109 GridSettings grid_settings;
110
111 std::map<UUID, Model> models;
112 UUID default_model;
113 const Model *get_model(const UUID &uu = UUID()) const;
114
115 std::shared_ptr<const class Package> alternate_for = nullptr;
116
117 FileVersion version;
118
119 std::vector<Warning> warnings;
120
121 void update_refs(class IPool &pool);
122
123 void save_pictures(const std::string &dir) const;
124 void load_pictures(const std::string &dir);
125
126 std::vector<Pad *> get_pads_sorted();
127 std::vector<const Pad *> get_pads_sorted() const;
128
129private:
130 void update_refs();
131};
132} // namespace horizon
Definition file_version.hpp:9
Definition grid_settings.hpp:9
Definition ipool.hpp:15
A Junction is a point in 2D-Space.
Definition junction.hpp:20
Definition layer_provider.hpp:8
Interface for classes that store objects identified by UUID (e.g. Line or Junction)
Definition object_provider.hpp:10
Definition package_rules.hpp:11
Definition package.hpp:44
Definition package.hpp:31
Definition package.hpp:29
Definition program_polygon.hpp:8
Polygon used in Padstack, Package and Board for specifying filled Regions.
Definition polygon.hpp:25
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
basic_json<> json
default JSON class
Definition json_fwd.hpp:62