【无标题】ANTV G6 字段级

<template>
    <div class="asset_column_g6">
        <div id="container" class="container"></div>
    </div>
</template>

<script>
import G6 from '@antv/g6';
import assetColumnDetail from './assetColumnDetail.js';
import edgeConfig from './edgeConfig'
export default {
   
   
    data() {
   
   
        return {
   
   

        }
    },
    methods: {
   
   
        initGraph() {
   
   
            const container = document.getElementById('container');
            const width = container.scrollWidth;
            const height = container.scrollHeight || 500;
            const tooltip = new G6.Tooltip({
   
   
              offsetX: 0,
              offsetY:-240,
              getContent(evt) {
   
   
                const outDiv = document.createElement('div');
                let text = evt.target.cfg.name == "expandIcon-shape" ? "展开节点信息" : "收起节点信息";
                outDiv.style.width = 'auto';
                outDiv.innerHTML = `<span style="user-select: none;">${
     
     text}</span>`
                return outDiv
              },
              shouldBegin(evt) {
   
   
                return evt.target.cfg.name == "expandIcon-shape" || evt.target.cfg.name == "collapseIcon-shape"
              },
              itemTypes: ['node']
            });
            const nodeStateStyles = {
   
   };
            const edgeStateStyles = {
   
    };
            const that = this;
            
            G6.registerNode(
              'tree-node',
              {
   
   
                draw(cfg, group) {
   
   
                  let rect_common = null;
                  rect_common = group.addShape('rect', {
   
   
                      attrs: {
   
   
                        stroke: '#333',
                        x: 0,
                        y: 0,
                        width: 150,
                        height: that.toComputeContainerHeight(cfg),
                        lineWidth: 1,
                        cursor: 'pointer',
                        // shadowColor: 'rgb(215, 216, 218)',
                        shadowColor: 'rgb(184, 185, 187)',
                        shadowBlur: 5,
                        shadowOffsetX: 2,
                        shadowOffsetY: 2,
                        fill: 'rgb(255, 255, 255)',
                      },
                      name: 'rect_common-shape',
                    });
                  
                  that.renderAssetNameArea(group, cfg);

                  let columns = cfg.columns || [];

                  for(let i = 0; i < columns.length; i++) {
   
   
                    that.renderColumnArea(group, cfg, i);
                    that.renderColumnTxt(group, cfg, i);
                  };

                  that.renderAssetNameTitle(group, cfg);

                  
                  return rect_common
                },
              }
            );

            this.graph = new G6.TreeGraph({
   
   
              container: 'container',
              width,
              height,
              animate: false, // Boolean,切换布局时是否使用动画过度,默认为 false
              animateCfg: {
   
   
                duration: 500, // Number,一次动画的时长
                easing: 'linearEasing', // String,动画函数
              },
              modes: {
   
   
                default: [
                  'drag-canvas',
                  'zoom-canvas',
                ],
              },
              defaultNode: {
   
   
                // size: 26,
                type: 'tree-node',
                anchorPoints: [
                  [0, 0.5],
                  [1, 0.5],
                ],
              },
              defaultEdge: {
   
   
                type: 'polyline',
                style: {
   
   
                  lineWidth: 1,
                  opacity: 0,
                }
              },
              nodeStateStyles: nodeStateStyles,
              edgeStateStyles: edgeStateStyles,
              plugins: [tooltip],
              layout: {
   
   
                type: 'compactBox',
                direction: 'RL',
                getId: function getId(d) {
   
   
                  return d.id;
                },
                getHeight: function getHeight(cfg) {
   
   
                  let columns = cfg.columns || [];
                  return 15+15*(columns.length);
                },
                getWidth: function getWidth() {
   
   
                  return 150;
                }
### AntV G6 路由功能的使用与配置 AntV G6 是一款强大的图形可视化框架,支持多种类型的图结构展示和交互。其中,路由功能主要用于控制节点之间的连接线路径样式以及如何避开其他节点或障碍物。 #### 1. 基本概念 G6 的 `router` 配置项用于指定连线的路由方式。通过设置不同的路由策略,可以实现直线、折线、曲线等多种效果。以下是常见的几种路由类型及其特点: - **manhattan**: 曼哈顿路由,适用于水平和垂直方向上的分段折线[^2]。 - **orthogonal**: 正交路由,允许更复杂的转折以适应更多场景[^4]。 - **smooth**: 平滑贝塞尔曲线,适合需要柔和过渡的效果[^3]。 #### 2. 配置方法 在初始化图实例时,可以通过全局配置或者单独为某条边设置 `router` 属性来启用特定的路由算法。下面是一个简单的例子,展示了如何应用曼哈顿路由到一条边上: ```javascript const data = { nodes: [ { id: 'node1', x: 50, y: 50 }, { id: 'node2', x: 200, y: 200 } ], edges: [{ source: 'node1', target: 'node2', router: { name: 'manhattan' } // 设置曼哈顿路由 }] }; const graph = new G6.Graph({ container: 'mountNode', width: 800, height: 600, modes: { default: ['drag-node'] }, linkCenter: true, layout: { type: 'dagre' } }); graph.data(data); graph.render(); ``` #### 3. 自定义参数调整 每种路由都接受额外的选项来自定义行为。例如,在正交路由中,你可以调节偏移量以改变线条的具体走向: ```javascript edges: [{ source: 'node1', target: 'node2', router: { name: 'orthogonal', offset: 20 // 控制线路偏离源目标的距离 } }] ``` 对于平滑曲线,则可能涉及 tension 参数决定弯曲程度[^1]: ```javascript edges: [{ source: 'node1', target: 'node2', router: { name: 'smooth', tension: 0.7 // 数值越大越弯 } }] ``` #### 4. 动态更新 如果需要动态修改已存在的边的路由属性,可调用如下 API 实现: ```javascript // 获取某个具体边对象 let edge = graph.find('edge', e => e.getSource().getId() === 'node1'); if (edge) { let model = edge.getModel(); // 更新模型数据中的路由器字段 model.router = { name: 'smooth', tension: 0.9 }; // 应用更改并重新渲染视图 edge.update(model); } ``` 以上即为 AntV G6 中关于路由的基础介绍及部分高技巧说明。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值