在 arbor.js 中为边缘添加标签(查询插件)

Add label to edges in arbor.js (Query plugin)(在 arbor.js 中为边缘添加标签(查询插件))
本文介绍了在 arbor.js 中为边缘添加标签(查询插件)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在 arbor.js 中为边缘添加标签它是一个图形可视化库.

How do I add labels to edges in arbor.js It is a graph visualization library.

假设 A 和 B 是节点,E 是边一种粗略的方法是插入一个文本节点"T并加入 A-T 和 T-B

Suppose A and B are nodes and E is the edge One crude way would be insert a "text node" T and join A-T and T-B

但我不想这样,有没有其他办法?

But i don't want to this, is there any other way?

这是示例代码

var theUI = {
  nodes:{A:{color:"red", shape:"dot", alpha:1}, 
      B:{color:"#b2b19d", shape:"dot", alpha:1}, 
      C:{color:"#b2b19d", shape:"dot", alpha:1}, 
      D:{color:"#b2b19d", shape:"dot", alpha:1},
  },
  edges:{
      A:{
          B:{length:.8},
          C:{length:.8},
          D:{length:.8}
           }
  }
}

var sys = arbor.ParticleSystem()
sys.parameters({stiffness:900, repulsion:2000, gravity:true, dt:0.015})
sys.renderer = Renderer("#sitemap")
sys.graft(theUI) 

在此,A 连接到 B、C 和 D.如何为边缘提供标签?

In this, A is connected to B, C and D. How to supply label to edges?

推荐答案

arbor.js 允许您编写代码来呈现整个图形.您可以在渲染方法中做任何您想做的事情,包括绘制边缘标题,您可以将其存储在单独的地图中.

arbor.js allows you to write a code to render the whole graph. You can do whatever you want in render method including drawing edges titles which you can store in a separate map.

只需用这种方式覆盖 Renderer 中的方法渲染:

Just override method render in Renderer this way:

redraw:function()
{
    ctx.fillStyle = "white";
    ctx.fillRect (0,0, canvas.width, canvas.height);

    particleSystem.eachEdge (function (edge, pt1, pt2)
    {
        ctx.strokeStyle = "rgba(0,0,0, .333)";
        ctx.lineWidth = 1;
        ctx.beginPath ();
        ctx.moveTo (pt1.x, pt1.y);
        ctx.lineTo (pt2.x, pt2.y);
        ctx.stroke ();

        ctx.fillStyle = "black";
        ctx.font = 'italic 13px sans-serif';
        ctx.fillText (edge.data.name, (pt1.x + pt2.x) / 2, (pt1.y + pt2.y) / 2);

    });

    particleSystem.eachNode (function (node, pt)
    {
        var w = 10;
        ctx.fillStyle = "orange";
        ctx.fillRect (pt.x-w/2, pt.y-w/2, w,w);
        ctx.fillStyle = "black";
        ctx.font = 'italic 13px sans-serif';
        ctx.fillText (node.name, pt.x+8, pt.y+8);
    });       
   };

此代码期望在初始化时填充每条边的数据属性.

This code expected data property of each edge to be filled while initialization.

我使用自定义地图和方法 addNode/addEdge 手动创建所有节点和边,但我想您可以更改一些代码以通过这种方式使用自定义数据初始化边:

I create all nodes and edges manually using my custom map and methods addNode/addEdge, bu I suppose you can change a little your code to initialize edges with custom data this way:

var theUI = {
  nodes:{A:{color:"red", shape:"dot", alpha:1}, 
      B:{color:"#b2b19d", shape:"dot", alpha:1}, 
      C:{color:"#b2b19d", shape:"dot", alpha:1}, 
      D:{color:"#b2b19d", shape:"dot", alpha:1},
  },
  edges:{
      A:{
          B:{length:.8, data:{name:"A->B"}},
          C:{length:.8, data:{name:"A->C"}},
          D:{length:.8, data:{name:"A->D"}}
           }
  }
}

PS:看看这个例子,我从中学到了很多它.

P.S.: take a look at this example, I learned a lot from it.

这篇关于在 arbor.js 中为边缘添加标签(查询插件)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)