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

标签 graphviz

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

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

最佳答案

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

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

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

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

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

    我还没有尝试,但它应该工作。

    关于graphviz - 如何在 Graphviz 中编写自定义箭头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3179259/

    相关文章:

    graphviz - 如何使用graphviz,dot使该图无环?

    python - 在 Python 中绘制和渲染多路树

    graphviz - 点:如何在填充另一种颜色的同时用黑色轮廓装饰图形节点?

    python - Graphviz:使所有节点的大小与最大的节点相同

    binary-tree - 在.dot树中强制执行水平节点排序

    uml - 用于描述分层(嵌套)有限状态机的标准文件格式?

    python - 使用 nx.draw_graphviz 在 python 中的 graphviz 布局中绘制图形会出错

    graphviz 树布局

    java - 在 Google App Engine 上呈现有向图(类似于 graphviz)的库

    graphviz - graphviz中节点的垂直对齐