代码之家  ›  专栏  ›  技术社区  ›  Little Bobby Tables

如何在graphviz中编写自定义箭头

  •  6
  • Little Bobby Tables  · 技术社区  · 14 年前

    我使用graphviz(主要是dot和fdp)自动生成一些我需要的图表。对于这些图表,我需要一些特殊的箭头,它们不是标准箭头集合的一部分:一个大的白色三角形内有一个小的黑色三角形,与向下的黑色三角形相同。

    添加箭头的最佳方法是什么?如果必要的话,我不介意破解源代码。我应该从哪里开始?

    1 回复  |  直到 10 年前
        1
  •  3
  •   David Costa    14 年前

    为此,您必须更改为源代码。看看“lib/common/arrows.c”。 你会发现你必须:

    • 添加定义类似arr的类型
    • 在arrownames[]中添加一个条目,该条目的名称将在箭头和define的代码中使用。
    • 编写箭头函数的原型(见第115行左右),阅读以下几点
    • 在arrowtypes[]数组中添加一个条目,其中包含以前编写的定义、笔宽、arrow函数的名称,类似arrow_type_your arrow name。
    • 编写自己的箭头函数。

    要编写函数,请看arrow_type_normal(),它需要6个参数:job(您不必关心这个问题,只需像在函数中那样使用它)、两点(“p”和“u”)、arrowsize、penwidth和flag。 如果您不关心创建箭头的不同版本,或者您希望忽略修改器(倒箭头等),则忽略标志参数。

    然后,函数基本上取两个点p和u(它们是具有“x”和“y”属性的结构),并将它们组合在一起,创建一个名为[]的数组,传递给gvrender_polygon(),该数组最终将呈现箭头形状。 arrow_type_normal()也会与penwidth和arrowwidth混淆。

    总结:准备graphviz接受您的箭头名称,执行第一步,然后创建一个函数,该函数将创建箭头形状,并调用gvrender_polygon或gvrender_polyline(如果愿意)。

    我还没试过,但应该管用。