核心概念——節點/邊/Combo——內置邊——內置邊總覽

G6 提供了 9 種內置邊:

  • line:直線,不支持控制點;
  • polyline:折線,支持多個控制點;
  • arc:圓弧線;
  • quadratic:二階貝塞爾曲線;
  • cubic:三階貝塞爾曲線;
  • cubic-vertical:垂直方向的三階貝塞爾曲線,不考慮用戶從外部傳入的控制點;
  • cubic-horizontal:水平方向的三階貝塞爾曲線,不考慮用戶從外部傳入的控制點;
  • loop:自環。

這些內置邊的默認樣式分別如下圖所示。
img

本文將概述 G6 中的各個內置邊類型、內置邊的通用屬性、配置方法。各類型邊詳細配置項及配置方法見本目錄下相應文檔。

內置邊類型說明

下面表格中顯示了內置的各類邊,同時對一些特殊的字段進行了說明:

名稱描述
line連接兩個節點的直線:
- controlPoints 不生效
- 更多配置詳見 line 邊的配置
img
polyline多段線段構成的折線,連接兩個端點:
- controlPoints 表示所有線段的拐點,不指定時根據 A* 算法自動生成折線
- 更多配置詳見 polyline 邊的配置
img
arc連接兩個節點的一段圓弧:
- controlPoints 不生效
- 使用 curveOffset 指定弧的彎曲程度,其正負影響弧彎曲的方向
- 更多配置詳見 arc 邊的配置
img
quadratic只有一個控制點的曲線:
- controlPoints 不指定時,會默認線的一半處彎曲
- 更多配置詳見 quadratic 邊的配置
img
cubic有兩個控制點的曲線:
- controlPoints 不指定時,會默認線的 1/3, 2/3 處彎曲
- 更多配置詳見 cubic 邊的配置
img
cubic-vertical垂直方向的三階貝塞爾曲線,不考慮用戶從外部傳入的控制點img
cubic-horizontal水平方向的三階貝塞爾曲線,不考慮用戶從外部傳入的控制點img
loop自環。更多配置詳見 loop 邊的配置img

邊的通用屬性

所有內置的邊支持的通用屬性:

名稱是否必須類型備註
idfalseString邊唯一 ID,必須是唯一的 string
sourcetrueStringNumber
targettrueString結束點 id
typefalseString指定邊的類型,可以是內置邊的類型名稱,也可以是自定義邊的名稱。默認爲 'line'
sourceAnchorfalseNumber邊的起始節點上的錨點的索引值
targetAnchorfalseNumber邊的終止節點上的錨點的索引值
stylefalseObject邊的樣式屬性
labelfalseString文本文字,如果沒有則不會顯示
labelCfgfalseObject文本配置項

樣式屬性 style

Object 類型。通過 style 配置來修改邊的顏色、線寬等屬性。下表是 style 對象中常用的配置項:

名稱是否必須類型備註
strokefalseString邊的顏色
lineWidthfalseNumber邊寬度
lineAppendWidthfalseNumber邊響應鼠標事件時的檢測寬度,當 lineWidth 太小而不易選中時,可以通過該參數提升擊中範圍
endArrowfalseBoolean / Objecttrue 時在邊的結束端繪製默認箭頭,爲 false 時不繪製結束端箭頭;也可以使用內置箭頭配置,例如:
endArrow: {
path: G6.arrow.vee(10, 20, 10), // 內置箭頭,參數爲箭頭寬度、長度、偏移量 d(默認爲 0)
d: 10 // 偏移量
} ;或通過 path 自定義的箭頭,例如:
endArrow: {
path: 'M 0,0 L 20,10 L 20,-10 Z', // 自定義箭頭路徑
d: -2 // 偏移量
}
startArrowfalseBoolean / Objecttrue 時在邊的開始端繪製默認箭頭,爲 false 時不繪製結束端箭頭;也可以使用內置箭頭配置,例如:
startArrow: {
path: G6.arrow.vee(10, 20, 10), // 內置箭頭,參數爲箭頭寬度、長度、偏移量 d(默認爲 0)
d: 10 // 偏移量
} ;或通過 path 自定義的箭頭,例如:
startArrow: {
path: 'M 0,0 L 20,10 L 20,-10 Z', // 自定義箭頭路徑
d: -2 // 偏移量
}
strokeOpacityfalseNumber邊透明度
shadowColorfalseString陰影顏色
shadowBlurfalseNumber陰影模糊程度
shadowOffsetXfalseNumber陰影 x 方向偏移量
shadowOffsetYfalseNumber陰影 y 方向偏移量
lineDashfalseArray設置線的虛線樣式,可以指定一個數組。一組描述交替繪製線段和間距(座標空間單位)長度的數字。 如果數組元素的數量是奇數, 數組的元素會被複制並重復。例如, [5, 15, 25] 會變成 [5, 15, 25, 5, 15, 25]。
cursorfalseString鼠標在該邊上時的鼠標樣式,CSS 的 cursor 選項都支持

下面代碼演示在實例化圖時全局配置方法中配置 style

const graph = new G6.Graph({
  container: 'mountNode',
  width: 800,
  height: 600,
  defaultEdge: {
    // ... 其他屬性
    style: {
      stroke: '#eaff8f',
      lineWidth: 5,
      // ... 其他樣式屬性
    },
  },
});

標籤文本 label 及其配置 labelCfg

label String 類型。標籤文本的文字內容。
labelCfg Object 類型。配置標籤文本。下面是 labelCfg 對象中的常用配置項:

名稱是否必須類型備註
refXfalseNumber標籤在 x 方向的偏移量
refYfalseNumber標籤在 y 方向的偏移量
positionfalseString文本相對於邊的位置,目前支持的位置有:'start''middle''end'。默認爲'middle'
autoRotatefalseBoolean標籤文字是否跟隨邊旋轉,默認 false
stylefalseObject標籤的樣式屬性

上表中的標籤的樣式屬性 style 的常用配置項如下:

名稱是否必須類型備註
fillfalseString文本顏色
strokefalseString文本描邊顏色
lineWidthfalseNumber文本描邊粗細
opacityfalseNumber文本透明度
fontFamilyfalseNumber文本字體
fontSizefalseNumber文本字體大小
... 節點標籤與邊標籤樣式屬性相同,統一整理在 Text 圖形 API

下面代碼演示在實例化圖時全局配置方法中配置  label 和  labelCfg

const graph = new G6.Graph({
  container: 'mountNode',
  width: 800,
  height: 600,
  defaultEdge: {
    // ... 其他屬性
    label: 'edge-label',
    labelCfg: {
      refY: -10,
      refX: 60,
    },
  },
});

邊的配置方法

配置邊的方式有三種:實例化圖時全局配置,在數據中動態配置,使用 graph.edge(edgeFn) 函數配置。這幾種配置方法可以同時使用,優先級:

使用 graph.edge(edgeFn) 配置 > 數據中動態配置 > 實例化圖時全局配置

即有相同的配置項時,優先級高的方式將會覆蓋優先級低的。

實例化圖時全局配置

用戶在實例化 Graph 時候可以通過 defaultEdge  配置邊,這裏的配置是全局的配置,將會在所有邊上生效。

const graph = new G6.Graph({
  container: 'mountNode',
  width: 800,
  height: 600,
  defaultEdge: {
    type: 'line',
    // ... 其他配置
  },
});

在數據中動態配置

如果需要使不同邊有不同的配置,可以將配置寫入到邊數據中。這種配置方式可以通過下面代碼的形式直接寫入數據,也可以通過遍歷數據的方式寫入。

const data = {
  nodes: [
    ... // 節點
  ],
  edges: [{
    source: 'node0',
    target: 'node1'
    type: 'polyline',
    ... // 其他配置
    style: {
      ...  // 樣式屬性,每種邊的詳細樣式屬性參見各邊文檔
    }
  },{
    source: 'node1',
    target: 'node2'
    type: 'cubic',
    ... // 其他配置
    style: {
      ...  // 樣式屬性,每種邊的詳細樣式屬性參見各邊文檔
    }
  },
    ... // 其他邊
  ]
}

使用 graph.edge()

該方法可以爲不同邊進行不同的配置。
提示:

  • 該方法必須在 render 之前調用,否則不起作用;
  • 由於該方法優先級最高,將覆蓋其他地方對邊的配置,這可能將造成一些其他配置不生效的疑惑;
  • 該方法在增加元素、更新元素時會被調用,如果數據量大、每條邊上需要更新的內容多時,可能會有性能問題。
// const data = ...
// const graph = ...
graph.edge(edge => {
  return {
    id: edge.id,
    type: 'polyline',
    style: {
      fill: 'steelblue',
    },
  };
});

graph.data(data);
graph.render();

實例演示

const data = {
  nodes: [
    { id: '1', x: 50, y: 50, size: 20 },
    { id: '2', x: 150, y: 50, size: 20 },
    { id: '3', x: 200, y: 50, size: 20 },
    { id: '4', x: 300, y: 130, size: 20 },
    { id: '5', x: 350, y: 50, size: 20 },
    { id: '6', x: 450, y: 50, size: 20 },
    { id: '7', x: 500, y: 50, size: 20 },
    { id: '8', x: 600, y: 50, size: 20 },
    { id: '9', x: 650, y: 50, size: 20 },
    { id: '10', x: 750, y: 50, size: 20 },
    { id: '11', x: 800, y: 50, size: 20 },
    { id: '12', x: 900, y: 150, size: 20 },
    { id: '13', x: 950, y: 50, size: 20 },
    { id: '14', x: 1050, y: 150, size: 20 },
    { id: '15', x: 1100, y: 50, size: 20 },
  ],
  edges: [
    { source: '1', target: '2', type: 'line', label: 'line' },
    { source: '3', target: '4', type: 'polyline', label: 'polyline' },
    { source: '5', target: '6', type: 'arc', label: 'arc' },
    { source: '7', target: '8', type: 'quadratic', label: 'quadratic' },
    { source: '9', target: '10', type: 'cubic', label: 'cubic' },
    { source: '11', target: '12', type: 'cubic-vertical', label: 'cubic-vertical' },
    { source: '13', target: '14', type: 'cubic-horizontal', label: 'cubic-horizontal' },
    { source: '15', target: '15', type: 'loop', label: 'loop' },
  ],
};

const graph = new G6.Graph({
container: ‘mountNode’,
width: 1500,
height: 300,
linkCenter: true, // 使邊連入節點的中心
});
graph.data(data);
graph.render();

顯示結果:
img

調整邊的樣式

可以在邊上添加文本,修改邊的樣式。下面演示將配置寫入數據的方式配置邊。使用下面代碼替換上面代碼中的 9-10、11-12 兩條邊數據,修改這兩條邊的樣式和其文本。

// 使 9-10 的 cubic 邊文本下移 15 像素
{
  source: '9',
  target: '10',
  type: 'cubic',
  label: 'cubic',
  labelCfg: {
    refY: -15 // refY 默認是順時針方向向下,所以需要設置負值
  }
},
// 設置 11-12 的 cubic-vertical 邊的顏色、虛線、粗細,並設置文本樣式、隨邊旋轉
{
  source: '11',
  target: '12',
  type: 'cubic-vertical',
  color: '#722ed1',     // 邊顏色
  size: 5,              // 邊粗細
  style: {
  	lineDash: [2, 2]    // 虛線邊
  },
  label: 'cubic-vertical',
  labelCfg: {
  	position: 'center', // 其實默認就是 center,這裏寫出來便於理解
    autoRotate: true,   // 使文本隨邊旋轉
    style: {
      stroke: 'white',  // 給文本添加白邊和白色背景
    	lineWidth: 5,     // 文本白邊粗細
      fill: '#722ed1',  // 文本顏色
    }
  }
}
img

相關閱讀

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章