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

如何在Graphviz中编写自定义箭头,graphviz,Graphviz,我使用Graphviz(主要是dot和fdp)自动生成我需要的一些图表。对于这些图,我需要一些特殊的箭头,这些箭头不是标准箭头集合的一部分:一个大的白色三角形中有一个小的黑色三角形,黑色三角形指向下方也是如此 添加此类箭头的最佳方式是什么?如果有必要,我不介意破解源代码。我应该从哪里开始?您必须更改为源代码。看看“lib/common/arrows.c”。 你会发现你必须: 添加一个#定义如ARR#u TYPE#u yourarowname 在Arrownames[]中添加一个条目,该条目的名

我使用Graphviz(主要是dot和fdp)自动生成我需要的一些图表。对于这些图,我需要一些特殊的箭头,这些箭头不是标准箭头集合的一部分:一个大的白色三角形中有一个小的黑色三角形,黑色三角形指向下方也是如此


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

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

  • 添加一个#定义如ARR#u TYPE#u yourarowname
  • 在Arrownames[]中添加一个条目,该条目的名称将用于箭头和定义的代码中
  • 写下箭头函数的原型(参见第115行),阅读下面的要点
  • 在Arrowtypes[]数组中添加一个带有您之前编写的定义、笔宽、arrow函数名称的条目,该名称类似于arrow\u type\u yourarrowname
  • 编写自己的箭头函数
为了编写函数,请看一下arrow_type_normal(),它需要6个参数:job(您不必关心这个,只需像在这个函数中一样使用它)、两点('p'和'u')、arrowsize、penwidth和flag。 如果您不想制作不同版本的箭头,或者希望忽略修改器(反转箭头等),请忽略flag参数

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

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

我还没试过,但应该行得通