首页 > 其他分享 >【3d-force-graph】3d-force-graph-三维力导向图-知识图谱配置和使用

【3d-force-graph】3d-force-graph-三维力导向图-知识图谱配置和使用

时间:2022-10-13 11:11:38浏览次数:81  
标签:node const graph force any 3d

效果图

image

文档

可以先去官网看看文档或者看看我下面的参考博客,把基本配置看懂。
github.com/vasturiano/3d-force-graph
3d-force-graph:文档翻译

配置

// 初始化 3d
function threeInit() {
  const relationData = _.cloneDeep(props.echartsData);
  const data = {
    links: relationData.edges,
    nodes: relationData.nodes,
  };
  const elm: any = document.getElementById("3d-graph");
  const width = elm.offsetWidth;
  const height = elm.offsetHeight;
  let CSS2DRendererItem: any = new CSS2DRenderer();
  Graph = ForceGraph3D({
    extraRenderers: [CSS2DRendererItem],
  })(elm).graphData(data);
  Graph.numDimensions(3) // 维度 3 就是 3d
    .width(width)
    .height(height)
    .backgroundColor("#f3f5fa")
    .showNavInfo(false)
    /* 节点配置 */
    .nodeRelSize(8)
    .nodeColor((node: any) => colorMap[node.label])
    .nodeOpacity(1)
    .nodeResolution(30) // 节点分辨率
    .nodeLabel((node: any) => `<div class='node-label2'>${node.name}</div>`)
    .nodeThreeObjectExtend(true)
    .nodeThreeObject((node: any) => {
      const nodeEl = document.createElement("div");
      nodeEl.textContent = node.name;
      nodeEl.className = "node-label";
      nodeEl.style.color = colorMap[node.label];
      return new CSS2DObject(nodeEl);
    })
    .onNodeHover((node: any) => {
      elm.style.cursor = node ? "pointer" : null;
    })
    .onNodeClick((node: any) => {
      // 首页点击节点聚焦
      if (store.routerName === "home" && node.name !== focusNodeName) {
        focusNodeName = node.name;
        focusNode(node);
      }
      // 故障推理点击节点
      if (store.routerName === "fault") {
        tempNode = node;
        emit("nodesClcik", node);
      }
    })
    /* 边配置 */
    .linkLabel((link: any) => {
      return `<div class='link-label'>${lineTextMap[link.type]}</div>`;
    })
    .onLinkHover((node: any) => {
      elm.style.cursor = node ? "pointer" : null;
    })
    .linkDirectionalArrowLength(3) // 边的指向箭头长度
    .linkDirectionalArrowRelPos(1) // 边的标签显示(鼠标滑到边上显示)
    .linkColor((link: any) => "#727279")
    .linkOpacity(1);

  cameraCenter();
}
// 聚焦 3d 节点
function focusNode(node: any) {
  const distance = 200;
  const distRatio = 1 + distance / Math.hypot(node.x, node.y, node.z);
  Graph.cameraPosition(
    {
      x: node.x * distRatio,
      y: node.y * distRatio,
      z: node.z * distRatio,
    }, // new position
    node, // lookAt ({ x, y, z })
    2000 // ms transition duration)
  );
}
// 3d 镜头拉近
function cameraCenter(x: any = -300, y: any = 30, z: any = 30) {
  Graph.cameraPosition({
    x: x,
    y: y,
    z: z,
  });
}

参考博客

3D知识图谱可视化
3d-force-graph示例学习记录
在Vue中使用3d-force-graph渲染neo4j图谱

标签:node,const,graph,force,any,3d
From: https://www.cnblogs.com/cqkjxxxx/p/16787469.html

相关文章

  • GeoServer 3D Extension&3dtiles
    DevelopmentofanextensionofGeoServerforhandling3Dspatialdata:https://www.cnblogs.com/2008nmj/articles/16784290.htmlGeoServer3Dtiles:https://blog.csdn......
  • Unity3D导航系统实例
    Unity3D导航实例使用脚本使胶囊体自动导航移动到目标位置,本次为demo实现过程搭建场景搭建场景设置对象设置场景中的对象设置可以行走的对象在Hierarchy视图中,选中......
  • Codeforces Round #826 (Div. 3)
    F.Multi-ColoredSegments观察:如果某个位置上有大于等于两种不同的颜色,这个位置就可以更新任何颜色的线段的答案。基于观察就可以通过模拟来解决问题了。大概就是先离......
  • CF823div2B
    cf823div2B题目链接题目大意多组测试数据,有\(n\)个点在数轴上,他们想要集会,每个点到目标点\(y\)的时间为$$t_i+|x_i-y|$$试求所有点到\(y\)中最长时间的最小值。思路......
  • cf823div2C
    cf823div2C题目链接题目给你两个字符串\(s_1,s_2\).每次操作可以让\(s_1\)的前k个和\(s_2\)的后k个交换。询问是否可以通过多次上述操作,使得\(s_1=s_2\)。思路这种题......
  • 【技术综述】基于3DMM的三维人脸重建技术总结
    基于图像的人脸三维重建在人脸分析与娱乐领域里有巨大的应用场景,同时它也可以用于提升人脸关键点检测,人脸识别,人脸编辑等很多任务。本文重点介绍其中基于3DMM模型的核心技术......
  • Codeforces Round #826 (Div. 3) F // 线段树
    题目来源:CodeforcesRound#826(Div.3)F题目链接:F.Multi-ColoredSegments题意给定\(n\)条有颜色的线段(\(l_i,r_i,c_i\)),对于每条线段,求:距离该线段最近,且颜色不同的......
  • 数维图3D可视化引擎 打造全息感知数字孪生智慧车站
    建设背景智慧轨道交通建设是交通强国建设的战略突破口,也是未来轨道交通行业的发展方向。城市轨道交通是城市最重要的公共交通工具之一,具有节能、省地、运量大、全天候、少污......
  • 数维图3D可视化引擎 打造全息感知数字孪生智慧车站
    建设背景智慧轨道交通建设是交通强国建设的战略突破口,也是未来轨道交通行业的发展方向。城市轨道交通是城市最重要的公共交通工具之一,具有节能、省地、运量大、全天候、......
  • *Educational Codeforces Round 87 (Rated for Div. 2) C1. Simple Polygon Embedding
    https://codeforces.com/problemset/problem/1354/C1题目大意:给定一个数字n,表示构建出一个大小为2*n的边长的多边形;问我们可以装下这个多边形的最小的正方形的边长是......