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

Lit*_*les 6 graphviz

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

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

Dav*_*sta 3

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

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

为了编写你的函数,请看一下 arrow_type_normal(),它需要 6 个参数:job(你不必关心这个,只需像在这个函数中一样使用它),两个点('p' 和 'u' )、箭头大小、笔宽和标志。如果您不关心制作不同版本的箭头,或者您希望忽略修饰符(反向箭头等),请忽略标志参数。

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

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

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