提交 036d6ff0 编写于 作者: D deqingli

fix(sankey): modify the judgment of some conditions and reassure that...

fix(sankey): modify the judgment of some conditions and reassure that getVisual() has a higher priority than itemStyle
上级 3387cd29
...@@ -26,6 +26,7 @@ import SeriesModel from '../../model/Series'; ...@@ -26,6 +26,7 @@ import SeriesModel from '../../model/Series';
import createGraphFromNodeEdge from '../helper/createGraphFromNodeEdge'; import createGraphFromNodeEdge from '../helper/createGraphFromNodeEdge';
import {encodeHTML} from '../../util/format'; import {encodeHTML} from '../../util/format';
import Model from '../../model/Model'; import Model from '../../model/Model';
import { __DEV__ } from '../../config';
var SankeySeries = SeriesModel.extend({ var SankeySeries = SeriesModel.extend({
...@@ -48,7 +49,14 @@ var SankeySeries = SeriesModel.extend({ ...@@ -48,7 +49,14 @@ var SankeySeries = SeriesModel.extend({
var levelModels = this.levelModels = {}; var levelModels = this.levelModels = {};
for (var i = 0; i < levels.length; i++) { for (var i = 0; i < levels.length; i++) {
levelModels[levels[i].depth] = new Model(levels[i], this, ecModel); if (levels[i].depth != null && levels[i].depth >= 0) {
levelModels[levels[i].depth] = new Model(levels[i], this, ecModel);
}
else {
if (__DEV__) {
throw new Error('levels[i].depth is mandatory and should be natural number');
}
}
} }
if (nodes && links) { if (nodes && links) {
var graph = createGraphFromNodeEdge(nodes, links, this, true, beforeLink); var graph = createGraphFromNodeEdge(nodes, links, this, true, beforeLink);
...@@ -57,19 +65,21 @@ var SankeySeries = SeriesModel.extend({ ...@@ -57,19 +65,21 @@ var SankeySeries = SeriesModel.extend({
function beforeLink(nodeData, edgeData) { function beforeLink(nodeData, edgeData) {
nodeData.wrapMethod('getItemModel', function (model, idx) { nodeData.wrapMethod('getItemModel', function (model, idx) {
model.customizeGetParent(function (path) { model.customizeGetParent(function (path) {
var nodeDepth = this.parentModel.getData().getItemLayout(idx).depth; var parentModel = this.parentModel;
var levelModel = this.parentModel.levelModels[nodeDepth]; var nodeDepth = parentModel.getData().getItemLayout(idx).depth;
return levelModel ? levelModel : this.parentModel; var levelModel = parentModel.levelModels[nodeDepth];
return levelModel || this.parentModel;
}); });
return model; return model;
}); });
edgeData.wrapMethod('getItemModel', function (model, idx) { edgeData.wrapMethod('getItemModel', function (model, idx) {
model.customizeGetParent(function (path) { model.customizeGetParent(function (path) {
var edge = this.parentModel.getGraph().getEdgeByIndex(idx); var parentModel = this.parentModel;
var edge = parentModel.getGraph().getEdgeByIndex(idx);
var depth = edge.node1.getLayout().depth; var depth = edge.node1.getLayout().depth;
var levelModel = this.parentModel.levelModels[depth]; var levelModel = parentModel.levelModels[depth];
return levelModel ? levelModel : this.parentModel; return levelModel || this.parentModel;
}); });
return model; return model;
}); });
......
...@@ -200,10 +200,10 @@ export default echarts.extendChartView({ ...@@ -200,10 +200,10 @@ export default echarts.extendChartView({
// Special color, use source node color or target node color // Special color, use source node color or target node color
switch (curve.style.fill) { switch (curve.style.fill) {
case 'source': case 'source':
curve.style.fill = node1Model.get('itemStyle.color') || edge.node1.getVisual('color'); curve.style.fill = edge.node1.getVisual('color');
break; break;
case 'target': case 'target':
curve.style.fill = node2Model.get('itemStyle.color') || edge.node2.getVisual('color'); curve.style.fill = edge.node2.getVisual('color');
break; break;
} }
...@@ -245,7 +245,7 @@ export default echarts.extendChartView({ ...@@ -245,7 +245,7 @@ export default echarts.extendChartView({
} }
); );
rect.setStyle('fill', itemModel.get('itemStyle.color') || node.getVisual('color')); rect.setStyle('fill', node.getVisual('color'));
graphic.setHoverStyle(rect, hoverStyle); graphic.setHoverStyle(rect, hoverStyle);
......
...@@ -51,8 +51,7 @@ export default function (ecModel, api, payload) { ...@@ -51,8 +51,7 @@ export default function (ecModel, api, payload) {
return node.getLayout().value === 0; return node.getLayout().value === 0;
}); });
var iterations = filteredNodes.length !== 0 var iterations = filteredNodes.length !== 0 ? 0 : seriesModel.get('layoutIterations');
? 0 : seriesModel.get('layoutIterations');
var orient = seriesModel.get('orient'); var orient = seriesModel.get('orient');
...@@ -137,13 +136,14 @@ function computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nod ...@@ -137,13 +136,14 @@ function computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nod
for (var idx = 0; idx < zeroIndegrees.length; idx++) { for (var idx = 0; idx < zeroIndegrees.length; idx++) {
var node = zeroIndegrees[idx]; var node = zeroIndegrees[idx];
var item = node.hostGraph.data.getRawDataItem(node.dataIndex); var item = node.hostGraph.data.getRawDataItem(node.dataIndex);
var isItemDepth = item.depth && !isNaN(item.depth) && item.depth >= 0; var isItemDepth = item.depth != null && item.depth >= 0;
if (isItemDepth && item.depth > maxNodeDepth) { if (isItemDepth && item.depth > maxNodeDepth) {
maxNodeDepth = item.depth; maxNodeDepth = item.depth;
} }
node.setLayout({depth: isItemDepth ? item.depth : x}, true); node.setLayout({depth: isItemDepth ? item.depth : x}, true);
orient === 'vertical' ? node.setLayout({dy: nodeWidth}, true) orient === 'vertical'
: node.setLayout({dx: nodeWidth}, true); ? node.setLayout({dy: nodeWidth}, true)
: node.setLayout({dx: nodeWidth}, true);
for (var edgeIdx = 0; edgeIdx < node.outEdges.length; edgeIdx++) { for (var edgeIdx = 0; edgeIdx < node.outEdges.length; edgeIdx++) {
var edge = node.outEdges[edgeIdx]; var edge = node.outEdges[edgeIdx];
...@@ -171,14 +171,16 @@ function computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nod ...@@ -171,14 +171,16 @@ function computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nod
if (nodeAlign && nodeAlign !== 'left') { if (nodeAlign && nodeAlign !== 'left') {
adjustNodeWithNodeAlign(nodes, nodeAlign, orient, maxDepth); adjustNodeWithNodeAlign(nodes, nodeAlign, orient, maxDepth);
} }
var kx = orient === 'vertical' ? (height - nodeWidth) / maxDepth var kx = orient === 'vertical'
? (height - nodeWidth) / maxDepth
: (width - nodeWidth) / maxDepth; : (width - nodeWidth) / maxDepth;
scaleNodeBreadths(nodes, kx, orient); scaleNodeBreadths(nodes, kx, orient);
} }
function isNodeDepth(node) { function isNodeDepth(node) {
var item = node.hostGraph.data.getRawDataItem(node.dataIndex); var item = node.hostGraph.data.getRawDataItem(node.dataIndex);
return item.depth && !isNaN(item.depth) && item.depth >= 0; return item.depth != null && item.depth >= 0;
} }
function adjustNodeWithNodeAlign(nodes, nodeAlign, orient, maxDepth) { function adjustNodeWithNodeAlign(nodes, nodeAlign, orient, maxDepth) {
...@@ -237,8 +239,9 @@ function moveSinksRight(nodes, maxDepth) { ...@@ -237,8 +239,9 @@ function moveSinksRight(nodes, maxDepth) {
function scaleNodeBreadths(nodes, kx, orient) { function scaleNodeBreadths(nodes, kx, orient) {
zrUtil.each(nodes, function (node) { zrUtil.each(nodes, function (node) {
var nodeDepth = node.getLayout().depth * kx; var nodeDepth = node.getLayout().depth * kx;
orient === 'vertical' ? node.setLayout({y: nodeDepth}, true) orient === 'vertical'
: node.setLayout({x: nodeDepth}, true); ? node.setLayout({y: nodeDepth}, true)
: node.setLayout({x: nodeDepth}, true);
}); });
} }
...@@ -304,8 +307,10 @@ function initializeNodeDepth(nodesByBreadth, edges, height, width, nodeGap, orie ...@@ -304,8 +307,10 @@ function initializeNodeDepth(nodesByBreadth, edges, height, width, nodeGap, orie
zrUtil.each(nodes, function (node) { zrUtil.each(nodes, function (node) {
sum += node.getLayout().value; sum += node.getLayout().value;
}); });
var ky = orient === 'vertical' ? (width - (n - 1) * nodeGap) / sum var ky = orient === 'vertical'
: (height - (n - 1) * nodeGap) / sum; ? (width - (n - 1) * nodeGap) / sum
: (height - (n - 1) * nodeGap) / sum;
if (ky < minKy) { if (ky < minKy) {
minKy = ky; minKy = ky;
} }
...@@ -356,8 +361,9 @@ function resolveCollisions(nodesByBreadth, nodeGap, height, width, orient) { ...@@ -356,8 +361,9 @@ function resolveCollisions(nodesByBreadth, nodeGap, height, width, orient) {
dy = y0 - node.getLayout()[keyAttr]; dy = y0 - node.getLayout()[keyAttr];
if (dy > 0) { if (dy > 0) {
nodeX = node.getLayout()[keyAttr] + dy; nodeX = node.getLayout()[keyAttr] + dy;
orient === 'vertical' ? node.setLayout({x: nodeX}, true) orient === 'vertical'
: node.setLayout({y: nodeX}, true); ? node.setLayout({x: nodeX}, true)
: node.setLayout({y: nodeX}, true);
} }
y0 = node.getLayout()[keyAttr] + node.getLayout()[nodeDyAttr] + nodeGap; y0 = node.getLayout()[keyAttr] + node.getLayout()[nodeDyAttr] + nodeGap;
} }
...@@ -366,16 +372,19 @@ function resolveCollisions(nodesByBreadth, nodeGap, height, width, orient) { ...@@ -366,16 +372,19 @@ function resolveCollisions(nodesByBreadth, nodeGap, height, width, orient) {
dy = y0 - nodeGap - viewWidth; dy = y0 - nodeGap - viewWidth;
if (dy > 0) { if (dy > 0) {
nodeX = node.getLayout()[keyAttr] - dy; nodeX = node.getLayout()[keyAttr] - dy;
orient === 'vertical' ? node.setLayout({x: nodeX}, true) orient === 'vertical'
: node.setLayout({y: nodeX}, true); ? node.setLayout({x: nodeX}, true)
: node.setLayout({y: nodeX}, true);
y0 = nodeX; y0 = nodeX;
for (i = n - 2; i >= 0; --i) { for (i = n - 2; i >= 0; --i) {
node = nodes[i]; node = nodes[i];
dy = node.getLayout()[keyAttr] + node.getLayout()[nodeDyAttr] + nodeGap - y0; dy = node.getLayout()[keyAttr] + node.getLayout()[nodeDyAttr] + nodeGap - y0;
if (dy > 0) { if (dy > 0) {
nodeX = node.getLayout()[keyAttr] - dy; nodeX = node.getLayout()[keyAttr] - dy;
orient === 'vertical' ? node.setLayout({x: nodeX}, true) orient === 'vertical'
: node.setLayout({y: nodeX}, true); ? node.setLayout({x: nodeX}, true)
: node.setLayout({y: nodeX}, true);
} }
y0 = node.getLayout()[keyAttr]; y0 = node.getLayout()[keyAttr];
} }
...@@ -418,7 +427,8 @@ function weightedSource(edge, orient) { ...@@ -418,7 +427,8 @@ function weightedSource(edge, orient) {
} }
function center(node, orient) { function center(node, orient) {
return orient === 'vertical' ? node.getLayout().x + node.getLayout().dx / 2 return orient === 'vertical'
? node.getLayout().x + node.getLayout().dx / 2
: node.getLayout().y + node.getLayout().dy / 2; : node.getLayout().y + node.getLayout().dy / 2;
} }
......
...@@ -51,12 +51,10 @@ export default function (ecModel, payload) { ...@@ -51,12 +51,10 @@ export default function (ecModel, payload) {
}); });
var mapValueToColor = mapping.mapValueToVisual(node.getLayout().value); var mapValueToColor = mapping.mapValueToVisual(node.getLayout().value);
var customColor = node.getModel().get('itemStyle.color');
// Here we remove the judgment of node.getModel().get('itemStyle.color'), customColor != null
// because we first use it in the render process with ? node.setVisual('color', customColor)
// rect.setStyle('fill', itemModel.get('itemStyle.color') || node.getVisual('color')) in : node.setVisual('color', mapValueToColor);
// SankeyView.js.
node.setVisual('color', mapValueToColor);
}); });
} }
}); });
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册