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

时间:2010-07-05 11:57:46

标签: graphviz

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

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

1 个答案:

答案 0 :(得分:3)

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

  • 添加#define,例如ARR_TYPE_YOURARROWNAME
  • 在Arrownames []中添加一个条目,其中包含您将在箭头和定义的代码中使用的名称。
  • 编写箭头函数的原型(参见第115行),阅读以下几点
  • 在Arrowtypes []数组中添加一个带有您之前编写的定义的条目,笔的宽度,箭头函数的名称,类似于arrow_type_yourarrowname
  • 编写自己的箭头功能。

为了编写你的函数,请看一下arrow_type_normal(),它需要6个参数:job(你不必关心这个,就像在这个函数中一样使用它),两个点('p'和'u'),arrowizes,penwidth和flag。 如果您不关心制作不同版本的箭头,或者如果您想忽略修改器(倒箭头等),请忽略flag参数。

然后,函数基本上取两个点p和u(它们是带有'x'和'y'属性的结构)并组合它们创建一个名为a []的数组,传递给gvrender_polygon(),最终渲染你的箭头形状。 arrow_type_normal()也会影响笔宽和箭头宽度。

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

我还没试过,但它应该有用。