Horizon
Loading...
Searching...
No Matches
sheet.hpp
1#pragma once
2#include "util/uuid.hpp"
3#include "nlohmann/json_fwd.hpp"
4#include "pool/unit.hpp"
5#include "block/block.hpp"
6#include "schematic_symbol.hpp"
7#include "line_net.hpp"
8#include "common/text.hpp"
9#include "net_label.hpp"
10#include "bus_label.hpp"
11#include "bus_ripper.hpp"
12#include "power_symbol.hpp"
13#include "common/line.hpp"
14#include "common/arc.hpp"
15#include "util/warning.hpp"
16#include "common/layer_provider.hpp"
17#include "frame/frame.hpp"
18#include "common/picture.hpp"
19#include "schematic_junction.hpp"
20#include "schematic_block_symbol.hpp"
21#include "schematic_net_tie.hpp"
22#include <vector>
23#include <map>
24
25namespace horizon {
26using json = nlohmann::json;
27
29public:
30 NetSegmentInfo(const LineNet *li);
32 bool has_label = false;
33 bool has_power_sym = false;
34 bool has_bus_ripper = false;
35 bool really_has_label() const;
36 Coordi position;
37 Net *net = nullptr;
38 Bus *bus = nullptr;
39 bool is_bus() const;
40};
41
42class Sheet : public ObjectProvider, public LayerProvider {
43public:
44 Sheet(const UUID &uu, const json &, Block &Block, class IPool &pool, class IBlockSymbolAndSchematicProvider &prv);
45 Sheet(const UUID &uu);
46 UUID uuid;
47 std::string name;
48 unsigned int index;
49
50 std::map<UUID, SchematicJunction> junctions;
51 std::map<UUID, SchematicSymbol> symbols;
52 std::map<UUID, class LineNet> net_lines;
53 std::map<UUID, class Text> texts;
54 std::map<UUID, NetLabel> net_labels;
55 std::map<UUID, PowerSymbol> power_symbols;
56 std::map<UUID, BusLabel> bus_labels;
57 std::map<UUID, BusRipper> bus_rippers;
58 std::map<UUID, Line> lines;
59 std::map<UUID, Arc> arcs;
60 std::map<UUID, Picture> pictures;
61 std::map<UUID, SchematicBlockSymbol> block_symbols;
62 std::map<UUID, SchematicNetTie> net_ties;
63 std::map<std::string, std::string> title_block_values;
64 std::vector<Warning> warnings;
65
66 bool can_be_removed() const;
67
68 LineNet *split_line_net(LineNet *it, SchematicJunction *ju);
69 void merge_net_lines(SchematicJunction &ju);
70 void expand_symbols(const class Schematic &sch, const BlockInstanceMapping *inst_map);
71 void expand_symbol(const UUID &sym_uuid, const Schematic &sch, const BlockInstanceMapping *inst_map = nullptr);
72 void expand_block_symbol(const UUID &sym_uuid, const Schematic &sch);
73 void simplify_net_lines();
74 void fix_junctions();
75 void delete_duplicate_net_lines();
76 void vacuum_junctions();
77 void delete_dependants();
78 void propagate_net_segments();
79 std::map<UUID, NetSegmentInfo> analyze_net_segments() const;
80 void place_warnings(const std::map<UUID, NetSegmentInfo> &nsinfo);
81 Block::NetPinsAndPorts get_pins_connected_to_net_segment(const UUID &uu_segment);
82 void update_junction_connections();
83 void update_bus_ripper_connections();
84
85 bool replace_junction(SchematicJunction *j, SchematicSymbol *sym, SymbolPin *pin);
86 bool replace_junction_or_create_line(SchematicJunction *j, SchematicSymbol *sym, SymbolPin *pin);
87 bool replace_junction(SchematicJunction *j, SchematicBlockSymbol *sym, BlockSymbolPort *port);
88 bool replace_junction_or_create_line(SchematicJunction *j, SchematicBlockSymbol *sym, BlockSymbolPort *port);
89 SchematicJunction &replace_bus_ripper(BusRipper &rip);
90
91 void merge_junction(SchematicJunction *j,
92 SchematicJunction *into); // merge junction j into "into" j will be deleted
93
94 std::vector<SchematicBlockSymbol *> get_block_symbols_sorted();
95 std::vector<const SchematicBlockSymbol *> get_block_symbols_sorted() const;
96
97 // void replace_junction(Junction *j, PowerSymbol *sym);
98 // void replace_power_symbol(PowerSymbol *sym, Junction *j);
99 // void connect(SchematicSymbol *sym, SymbolPin *pin, PowerSymbol
100 // *power_sym);
101
102 Junction *get_junction(const UUID &uu) override;
103
104 std::shared_ptr<const Frame> pool_frame;
105 Frame frame;
106
107 json serialize() const;
108
109private:
110 void expand_symbol_without_net_lines(const UUID &sym_uuid, const Schematic &sch,
111 const BlockInstanceMapping *inst_map);
112 void expand_block_symbol_without_net_lines(const UUID &sym_uuid, const Schematic &sch);
113};
114} // namespace horizon
Definition block_instance.hpp:8
Definition block_symbol.hpp:20
A block is one level of hierarchy in the netlist.
Definition block.hpp:29
Make a Bus member's Net available on the schematic.
Definition bus_ripper.hpp:15
A Bus is used for grouping nets.
Definition bus.hpp:18
Definition frame.hpp:18
Definition iblock_symbol_and_schematic_provider.hpp:6
Definition ipool.hpp:15
A Junction is a point in 2D-Space.
Definition junction.hpp:20
Definition layer_provider.hpp:8
LineNet is similar to Line, except it denotes electrical connection.
Definition line_net.hpp:17
Definition sheet.hpp:28
Definition net.hpp:11
Interface for classes that store objects identified by UUID (e.g. Line or Junction)
Definition object_provider.hpp:10
Definition schematic_block_symbol.hpp:12
Definition schematic_junction.hpp:6
Definition schematic_symbol.hpp:15
A Schematic is the visual representation of a Block.
Definition schematic.hpp:29
Definition sheet.hpp:42
Definition symbol.hpp:20
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
Takes pins specified by pins&ports and moves them over to net.
Definition block.hpp:77