1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
#include <format>
#include <stdexcept>
#include "graphviz_graph.h"
GraphvizGraph::GraphvizGraph(SVG::SVGElement &svg_g_element)
: m_svg_g_element(svg_g_element) {}
void GraphvizGraph::add_node(SVG::SVGElement &svg_g_element) {
m_nodes.emplace_back(svg_g_element);
}
const std::vector<GraphvizNode> &GraphvizGraph::nodes() const {
return m_nodes;
}
const SVG::SVGElement &GraphvizGraph::svg_g_element() const {
return m_svg_g_element;
}
const GraphvizNode &GraphvizGraph::node(std::string_view node_id) const {
for (auto &node : m_nodes) {
if (node.node_id() == node_id) {
return node;
}
}
throw std::runtime_error{
std::format("Unknown node '{}' in graph '{}'", node_id, m_graph_id)};
}
void GraphvizGraph::add_edge(SVG::SVGElement &svg_g_element) {
m_edges.emplace_back(svg_g_element);
}
const std::vector<GraphvizEdge> &GraphvizGraph::edges() const {
return m_edges;
}
const GraphvizEdge &GraphvizGraph::edge(std::string_view edgeop) const {
for (auto &edge : m_edges) {
if (edge.edgeop() == edgeop) {
return edge;
}
}
throw std::runtime_error{
std::format("Unknown edge '{}' in graph '{}'", edgeop, m_graph_id)};
}
void GraphvizGraph::add_bboxes() {
for (auto &node : m_nodes) {
node.add_bbox();
}
for (auto &edge : m_edges) {
edge.add_bbox();
}
}
void GraphvizGraph::add_node_edge_outline_bbox_overlaps(
const double tolerance) {
for (auto &node : m_nodes) {
for (auto &edge : m_edges) {
edge.add_outline_overlap_bbox(node, tolerance);
}
}
}
void GraphvizGraph::add_outline_bboxes() {
for (auto &node : m_nodes) {
node.add_outline_bbox();
}
for (auto &edge : m_edges) {
edge.add_outline_bbox();
}
}
|