如何在Graphviz中设置A->D边轨迹,绕B上C下且不与节点相交?
解决Graphviz中A->D边绕B上、C下且不与节点相交的问题
可通过以下方式实现需求,无需手动计算曲线与节点的交点,同时保证边不穿过节点、箭头方向正确:
改进代码
graph [splines=polyline]; # 需平滑曲线则改为splines=bezier A [pos="0,0!", shape=star]; B [pos="100,0!", shape=circle]; C [pos="200,0!", shape=circle]; D [pos="300,0!", shape=box]; A -> D [ pos="0,100 150,100 150,-100 300,-100", tailclip=true, headclip=true ]; }
核心要点
- 移除原代码中手动指定的边起止点(
s,0,0、e,300,0及首尾节点中心坐标),仅保留中间轨迹控制点,让Graphviz自动计算边与节点边界的交点 splines=polyline生成折线轨迹,splines=bezier生成平滑曲线轨迹,按需选择tailclip和headclip(默认值为true)确保边被自动裁剪到节点边界,避免穿透节点- 编译命令不变:
neato -n2 -Tpng tmp.dot -o tmp.png
生成的图中,A->D边会从A上方出发,绕B上方后向下绕C下方,最终连接到D下方,完全不与节点相交,箭头方向符合预期。
内容的提问来源于stack exchange,提问作者Филя Усков
相关产品推荐
相关产品推荐

