const auto edge_stem_arrowhead_overlap =
overlap_in_rank_direction(overlap_bbox, rankdir);
+ // check maximum overlap of edge stem and arrowhead
+ if (check_options.check_max_edge_stem_arrow_overlap) {
+ const auto max_edge_stem_arrowhead_overlap =
+ check_options.max_edge_stem_arrow_overlap;
+ DO_CHECK(edge_stem_arrowhead_overlap <=
+ max_edge_stem_arrowhead_overlap +
+ check_options.svg_rounding_error * 2);
+ }
+
// check minimum overlap of edge stem and arrowhead
if (check_options.check_min_edge_stem_arrow_overlap) {
const auto min_edge_stem_arrowhead_overlap =
const auto edge_stem_arrowtail_overlap =
overlap_in_rank_direction(overlap_bbox, rankdir);
+ // check maximum overlap of edge stem and arrowtail
+ if (check_options.check_max_edge_stem_arrow_overlap) {
+ const auto max_edge_stem_arrowtail_overlap =
+ check_options.max_edge_stem_arrow_overlap;
+ DO_CHECK(edge_stem_arrowtail_overlap <=
+ max_edge_stem_arrowtail_overlap +
+ check_options.svg_rounding_error * 2);
+ }
+
// check minimum overlap of edge stem and arrowtail
if (check_options.check_min_edge_stem_arrow_overlap) {
const auto min_edge_stem_arrowtail_overlap =
tc_check_options.check_max_edge_node_overlap,
.check_min_edge_node_overlap =
tc_check_options.check_min_edge_node_overlap,
+ .check_max_edge_stem_arrow_overlap =
+ tc_check_options.check_max_edge_stem_arrow_overlap,
.check_min_edge_stem_arrow_overlap =
tc_check_options.check_min_edge_stem_arrow_overlap,
.max_node_edge_overlap = graphviz_bezier_clip_margin,
.min_node_edge_overlap = 0,
+ .max_edge_stem_arrow_overlap =
+ graph_options.edge_penwidth / 2 + graphviz_bezier_clip_margin,
.min_edge_stem_arrow_overlap = 0,
.svg_rounding_error = graphviz_max_svg_rounding_error,
};
bool check_max_edge_node_overlap = true;
/// whether to check that there is enough overlap
bool check_min_edge_node_overlap = true;
+ /// whether to check that there is not too much overlap between edge stem and
+ /// arrow
+ bool check_max_edge_stem_arrow_overlap = true;
/// whether to check that there is enough overlap between edge stem and arrow
bool check_min_edge_stem_arrow_overlap = true;
};
bool check_max_edge_node_overlap = true;
/// whether to check that there is enough overlap
bool check_min_edge_node_overlap = true;
+ /// whether to check that there is not too much overlap between edge stem and
+ /// arrow
+ bool check_max_edge_stem_arrow_overlap = true;
/// whether to check that there is enough overlap between edge stem and arrow
bool check_min_edge_stem_arrow_overlap = true;
/// maximum allowed overlap between edge and node
double max_node_edge_overlap;
/// minimum required overlap between edge and node
double min_node_edge_overlap;
+ /// maximum allowed overlap between edge stem and arrow
+ double max_edge_stem_arrow_overlap;
/// minimum required overlap between edge stem and arrow
double min_edge_stem_arrow_overlap;
/// rounding error caused by limited precision in SVG attribute values
const tc_check_options check_options = {
.check_max_edge_node_overlap = true,
.check_min_edge_node_overlap = false,
+ .check_max_edge_stem_arrow_overlap = false,
.check_min_edge_stem_arrow_overlap = false,
};
.edge_penwidth = 2,
};
- const tc_check_options check_options = {.check_max_edge_node_overlap = true,
- .check_min_edge_node_overlap = false,
- .check_min_edge_stem_arrow_overlap =
- false};
+ const tc_check_options check_options = {
+ .check_max_edge_node_overlap = true,
+ .check_min_edge_node_overlap = false,
+ .check_max_edge_stem_arrow_overlap = false,
+ .check_min_edge_stem_arrow_overlap = false};
const auto filename_base = AUTO_NAME();
const tc_check_options check_options = {
.check_max_edge_node_overlap = false,
.check_min_edge_node_overlap = true,
+ .check_max_edge_stem_arrow_overlap = false,
.check_min_edge_stem_arrow_overlap = false,
};
.edge_penwidth = 2,
};
- const tc_check_options check_options = {.check_max_edge_node_overlap = false,
- .check_min_edge_node_overlap = true,
- .check_min_edge_stem_arrow_overlap =
- false};
+ const tc_check_options check_options = {
+ .check_max_edge_node_overlap = false,
+ .check_min_edge_node_overlap = true,
+ .check_max_edge_stem_arrow_overlap = false,
+ .check_min_edge_stem_arrow_overlap = false};
const auto filename_base = AUTO_NAME();
.edge_penwidth = 2,
};
- const tc_check_options check_options = {.check_max_edge_node_overlap = false,
- .check_min_edge_node_overlap = false,
- .check_min_edge_stem_arrow_overlap =
- true};
+ const tc_check_options check_options = {
+ .check_max_edge_node_overlap = false,
+ .check_min_edge_node_overlap = false,
+ .check_max_edge_stem_arrow_overlap = false,
+ .check_min_edge_stem_arrow_overlap = true};
const auto filename_base = AUTO_NAME();