123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622 |
- /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
- /**
- * AUTO-GENERATED FILE. DO NOT MODIFY.
- */
- /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
- import { __extends } from "tslib";
- import * as zrUtil from 'zrender/lib/core/util.js';
- import * as graphic from '../../util/graphic.js';
- import { getECData } from '../../util/innerStore.js';
- import SymbolClz from '../helper/Symbol.js';
- import { radialCoordinate } from './layoutHelper.js';
- import * as bbox from 'zrender/lib/core/bbox.js';
- import View from '../../coord/View.js';
- import * as roamHelper from '../../component/helper/roamHelper.js';
- import RoamController from '../../component/helper/RoamController.js';
- import { onIrrelevantElement } from '../../component/helper/cursorHelper.js';
- import { parsePercent } from '../../util/number.js';
- import ChartView from '../../view/Chart.js';
- import Path from 'zrender/lib/graphic/Path.js';
- import { setStatesStylesFromModel, setStatesFlag, setDefaultStateProxy, HOVER_STATE_BLUR } from '../../util/states.js';
- var TreeEdgeShape = /** @class */function () {
- function TreeEdgeShape() {
- this.parentPoint = [];
- this.childPoints = [];
- }
- return TreeEdgeShape;
- }();
- var TreePath = /** @class */function (_super) {
- __extends(TreePath, _super);
- function TreePath(opts) {
- return _super.call(this, opts) || this;
- }
- TreePath.prototype.getDefaultStyle = function () {
- return {
- stroke: '#000',
- fill: null
- };
- };
- TreePath.prototype.getDefaultShape = function () {
- return new TreeEdgeShape();
- };
- TreePath.prototype.buildPath = function (ctx, shape) {
- var childPoints = shape.childPoints;
- var childLen = childPoints.length;
- var parentPoint = shape.parentPoint;
- var firstChildPos = childPoints[0];
- var lastChildPos = childPoints[childLen - 1];
- if (childLen === 1) {
- ctx.moveTo(parentPoint[0], parentPoint[1]);
- ctx.lineTo(firstChildPos[0], firstChildPos[1]);
- return;
- }
- var orient = shape.orient;
- var forkDim = orient === 'TB' || orient === 'BT' ? 0 : 1;
- var otherDim = 1 - forkDim;
- var forkPosition = parsePercent(shape.forkPosition, 1);
- var tmpPoint = [];
- tmpPoint[forkDim] = parentPoint[forkDim];
- tmpPoint[otherDim] = parentPoint[otherDim] + (lastChildPos[otherDim] - parentPoint[otherDim]) * forkPosition;
- ctx.moveTo(parentPoint[0], parentPoint[1]);
- ctx.lineTo(tmpPoint[0], tmpPoint[1]);
- ctx.moveTo(firstChildPos[0], firstChildPos[1]);
- tmpPoint[forkDim] = firstChildPos[forkDim];
- ctx.lineTo(tmpPoint[0], tmpPoint[1]);
- tmpPoint[forkDim] = lastChildPos[forkDim];
- ctx.lineTo(tmpPoint[0], tmpPoint[1]);
- ctx.lineTo(lastChildPos[0], lastChildPos[1]);
- for (var i = 1; i < childLen - 1; i++) {
- var point = childPoints[i];
- ctx.moveTo(point[0], point[1]);
- tmpPoint[forkDim] = point[forkDim];
- ctx.lineTo(tmpPoint[0], tmpPoint[1]);
- }
- };
- return TreePath;
- }(Path);
- var TreeView = /** @class */function (_super) {
- __extends(TreeView, _super);
- function TreeView() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.type = TreeView.type;
- _this._mainGroup = new graphic.Group();
- return _this;
- }
- TreeView.prototype.init = function (ecModel, api) {
- this._controller = new RoamController(api.getZr());
- this._controllerHost = {
- target: this.group
- };
- this.group.add(this._mainGroup);
- };
- TreeView.prototype.render = function (seriesModel, ecModel, api) {
- var data = seriesModel.getData();
- var layoutInfo = seriesModel.layoutInfo;
- var group = this._mainGroup;
- var layout = seriesModel.get('layout');
- if (layout === 'radial') {
- group.x = layoutInfo.x + layoutInfo.width / 2;
- group.y = layoutInfo.y + layoutInfo.height / 2;
- } else {
- group.x = layoutInfo.x;
- group.y = layoutInfo.y;
- }
- this._updateViewCoordSys(seriesModel, api);
- this._updateController(seriesModel, ecModel, api);
- var oldData = this._data;
- data.diff(oldData).add(function (newIdx) {
- if (symbolNeedsDraw(data, newIdx)) {
- // Create node and edge
- updateNode(data, newIdx, null, group, seriesModel);
- }
- }).update(function (newIdx, oldIdx) {
- var symbolEl = oldData.getItemGraphicEl(oldIdx);
- if (!symbolNeedsDraw(data, newIdx)) {
- symbolEl && removeNode(oldData, oldIdx, symbolEl, group, seriesModel);
- return;
- }
- // Update node and edge
- updateNode(data, newIdx, symbolEl, group, seriesModel);
- }).remove(function (oldIdx) {
- var symbolEl = oldData.getItemGraphicEl(oldIdx);
- // When remove a collapsed node of subtree, since the collapsed
- // node haven't been initialized with a symbol element,
- // you can't found it's symbol element through index.
- // so if we want to remove the symbol element we should insure
- // that the symbol element is not null.
- if (symbolEl) {
- removeNode(oldData, oldIdx, symbolEl, group, seriesModel);
- }
- }).execute();
- this._nodeScaleRatio = seriesModel.get('nodeScaleRatio');
- this._updateNodeAndLinkScale(seriesModel);
- if (seriesModel.get('expandAndCollapse') === true) {
- data.eachItemGraphicEl(function (el, dataIndex) {
- el.off('click').on('click', function () {
- api.dispatchAction({
- type: 'treeExpandAndCollapse',
- seriesId: seriesModel.id,
- dataIndex: dataIndex
- });
- });
- });
- }
- this._data = data;
- };
- TreeView.prototype._updateViewCoordSys = function (seriesModel, api) {
- var data = seriesModel.getData();
- var points = [];
- data.each(function (idx) {
- var layout = data.getItemLayout(idx);
- if (layout && !isNaN(layout.x) && !isNaN(layout.y)) {
- points.push([+layout.x, +layout.y]);
- }
- });
- var min = [];
- var max = [];
- bbox.fromPoints(points, min, max);
- // If don't Store min max when collapse the root node after roam,
- // the root node will disappear.
- var oldMin = this._min;
- var oldMax = this._max;
- // If width or height is 0
- if (max[0] - min[0] === 0) {
- min[0] = oldMin ? oldMin[0] : min[0] - 1;
- max[0] = oldMax ? oldMax[0] : max[0] + 1;
- }
- if (max[1] - min[1] === 0) {
- min[1] = oldMin ? oldMin[1] : min[1] - 1;
- max[1] = oldMax ? oldMax[1] : max[1] + 1;
- }
- var viewCoordSys = seriesModel.coordinateSystem = new View();
- viewCoordSys.zoomLimit = seriesModel.get('scaleLimit');
- viewCoordSys.setBoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]);
- viewCoordSys.setCenter(seriesModel.get('center'), api);
- viewCoordSys.setZoom(seriesModel.get('zoom'));
- // Here we use viewCoordSys just for computing the 'position' and 'scale' of the group
- this.group.attr({
- x: viewCoordSys.x,
- y: viewCoordSys.y,
- scaleX: viewCoordSys.scaleX,
- scaleY: viewCoordSys.scaleY
- });
- this._min = min;
- this._max = max;
- };
- TreeView.prototype._updateController = function (seriesModel, ecModel, api) {
- var _this = this;
- var controller = this._controller;
- var controllerHost = this._controllerHost;
- var group = this.group;
- controller.setPointerChecker(function (e, x, y) {
- var rect = group.getBoundingRect();
- rect.applyTransform(group.transform);
- return rect.contain(x, y) && !onIrrelevantElement(e, api, seriesModel);
- });
- controller.enable(seriesModel.get('roam'));
- controllerHost.zoomLimit = seriesModel.get('scaleLimit');
- controllerHost.zoom = seriesModel.coordinateSystem.getZoom();
- controller.off('pan').off('zoom').on('pan', function (e) {
- roamHelper.updateViewOnPan(controllerHost, e.dx, e.dy);
- api.dispatchAction({
- seriesId: seriesModel.id,
- type: 'treeRoam',
- dx: e.dx,
- dy: e.dy
- });
- }).on('zoom', function (e) {
- roamHelper.updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY);
- api.dispatchAction({
- seriesId: seriesModel.id,
- type: 'treeRoam',
- zoom: e.scale,
- originX: e.originX,
- originY: e.originY
- });
- _this._updateNodeAndLinkScale(seriesModel);
- // Only update label layout on zoom
- api.updateLabelLayout();
- });
- };
- TreeView.prototype._updateNodeAndLinkScale = function (seriesModel) {
- var data = seriesModel.getData();
- var nodeScale = this._getNodeGlobalScale(seriesModel);
- data.eachItemGraphicEl(function (el, idx) {
- el.setSymbolScale(nodeScale);
- });
- };
- TreeView.prototype._getNodeGlobalScale = function (seriesModel) {
- var coordSys = seriesModel.coordinateSystem;
- if (coordSys.type !== 'view') {
- return 1;
- }
- var nodeScaleRatio = this._nodeScaleRatio;
- var groupZoom = coordSys.scaleX || 1;
- // Scale node when zoom changes
- var roamZoom = coordSys.getZoom();
- var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1;
- return nodeScale / groupZoom;
- };
- TreeView.prototype.dispose = function () {
- this._controller && this._controller.dispose();
- this._controllerHost = null;
- };
- TreeView.prototype.remove = function () {
- this._mainGroup.removeAll();
- this._data = null;
- };
- TreeView.type = 'tree';
- return TreeView;
- }(ChartView);
- function symbolNeedsDraw(data, dataIndex) {
- var layout = data.getItemLayout(dataIndex);
- return layout && !isNaN(layout.x) && !isNaN(layout.y);
- }
- function updateNode(data, dataIndex, symbolEl, group, seriesModel) {
- var isInit = !symbolEl;
- var node = data.tree.getNodeByDataIndex(dataIndex);
- var itemModel = node.getModel();
- var visualColor = node.getVisual('style').fill;
- var symbolInnerColor = node.isExpand === false && node.children.length !== 0 ? visualColor : '#fff';
- var virtualRoot = data.tree.root;
- var source = node.parentNode === virtualRoot ? node : node.parentNode || node;
- var sourceSymbolEl = data.getItemGraphicEl(source.dataIndex);
- var sourceLayout = source.getLayout();
- var sourceOldLayout = sourceSymbolEl ? {
- x: sourceSymbolEl.__oldX,
- y: sourceSymbolEl.__oldY,
- rawX: sourceSymbolEl.__radialOldRawX,
- rawY: sourceSymbolEl.__radialOldRawY
- } : sourceLayout;
- var targetLayout = node.getLayout();
- if (isInit) {
- symbolEl = new SymbolClz(data, dataIndex, null, {
- symbolInnerColor: symbolInnerColor,
- useNameLabel: true
- });
- symbolEl.x = sourceOldLayout.x;
- symbolEl.y = sourceOldLayout.y;
- } else {
- symbolEl.updateData(data, dataIndex, null, {
- symbolInnerColor: symbolInnerColor,
- useNameLabel: true
- });
- }
- symbolEl.__radialOldRawX = symbolEl.__radialRawX;
- symbolEl.__radialOldRawY = symbolEl.__radialRawY;
- symbolEl.__radialRawX = targetLayout.rawX;
- symbolEl.__radialRawY = targetLayout.rawY;
- group.add(symbolEl);
- data.setItemGraphicEl(dataIndex, symbolEl);
- symbolEl.__oldX = symbolEl.x;
- symbolEl.__oldY = symbolEl.y;
- graphic.updateProps(symbolEl, {
- x: targetLayout.x,
- y: targetLayout.y
- }, seriesModel);
- var symbolPath = symbolEl.getSymbolPath();
- if (seriesModel.get('layout') === 'radial') {
- var realRoot = virtualRoot.children[0];
- var rootLayout = realRoot.getLayout();
- var length_1 = realRoot.children.length;
- var rad = void 0;
- var isLeft = void 0;
- if (targetLayout.x === rootLayout.x && node.isExpand === true && realRoot.children.length) {
- var center = {
- x: (realRoot.children[0].getLayout().x + realRoot.children[length_1 - 1].getLayout().x) / 2,
- y: (realRoot.children[0].getLayout().y + realRoot.children[length_1 - 1].getLayout().y) / 2
- };
- rad = Math.atan2(center.y - rootLayout.y, center.x - rootLayout.x);
- if (rad < 0) {
- rad = Math.PI * 2 + rad;
- }
- isLeft = center.x < rootLayout.x;
- if (isLeft) {
- rad = rad - Math.PI;
- }
- } else {
- rad = Math.atan2(targetLayout.y - rootLayout.y, targetLayout.x - rootLayout.x);
- if (rad < 0) {
- rad = Math.PI * 2 + rad;
- }
- if (node.children.length === 0 || node.children.length !== 0 && node.isExpand === false) {
- isLeft = targetLayout.x < rootLayout.x;
- if (isLeft) {
- rad = rad - Math.PI;
- }
- } else {
- isLeft = targetLayout.x > rootLayout.x;
- if (!isLeft) {
- rad = rad - Math.PI;
- }
- }
- }
- var textPosition = isLeft ? 'left' : 'right';
- var normalLabelModel = itemModel.getModel('label');
- var rotate = normalLabelModel.get('rotate');
- var labelRotateRadian = rotate * (Math.PI / 180);
- var textContent = symbolPath.getTextContent();
- if (textContent) {
- symbolPath.setTextConfig({
- position: normalLabelModel.get('position') || textPosition,
- rotation: rotate == null ? -rad : labelRotateRadian,
- origin: 'center'
- });
- textContent.setStyle('verticalAlign', 'middle');
- }
- }
- // Handle status
- var focus = itemModel.get(['emphasis', 'focus']);
- var focusDataIndices = focus === 'relative' ? zrUtil.concatArray(node.getAncestorsIndices(), node.getDescendantIndices()) : focus === 'ancestor' ? node.getAncestorsIndices() : focus === 'descendant' ? node.getDescendantIndices() : null;
- if (focusDataIndices) {
- // Modify the focus to data indices.
- getECData(symbolEl).focus = focusDataIndices;
- }
- drawEdge(seriesModel, node, virtualRoot, symbolEl, sourceOldLayout, sourceLayout, targetLayout, group);
- if (symbolEl.__edge) {
- symbolEl.onHoverStateChange = function (toState) {
- if (toState !== 'blur') {
- // NOTE: Ensure the parent elements will been blurred firstly.
- // According to the return of getAncestorsIndices and getDescendantIndices
- // TODO: A bit tricky.
- var parentEl = node.parentNode && data.getItemGraphicEl(node.parentNode.dataIndex);
- if (!(parentEl && parentEl.hoverState === HOVER_STATE_BLUR)) {
- setStatesFlag(symbolEl.__edge, toState);
- }
- }
- };
- }
- }
- function drawEdge(seriesModel, node, virtualRoot, symbolEl, sourceOldLayout, sourceLayout, targetLayout, group) {
- var itemModel = node.getModel();
- var edgeShape = seriesModel.get('edgeShape');
- var layout = seriesModel.get('layout');
- var orient = seriesModel.getOrient();
- var curvature = seriesModel.get(['lineStyle', 'curveness']);
- var edgeForkPosition = seriesModel.get('edgeForkPosition');
- var lineStyle = itemModel.getModel('lineStyle').getLineStyle();
- var edge = symbolEl.__edge;
- // curve edge from node -> parent
- // polyline edge from node -> children
- if (edgeShape === 'curve') {
- if (node.parentNode && node.parentNode !== virtualRoot) {
- if (!edge) {
- edge = symbolEl.__edge = new graphic.BezierCurve({
- shape: getEdgeShape(layout, orient, curvature, sourceOldLayout, sourceOldLayout)
- });
- }
- graphic.updateProps(edge, {
- shape: getEdgeShape(layout, orient, curvature, sourceLayout, targetLayout)
- }, seriesModel);
- }
- } else if (edgeShape === 'polyline') {
- if (layout === 'orthogonal') {
- if (node !== virtualRoot && node.children && node.children.length !== 0 && node.isExpand === true) {
- var children = node.children;
- var childPoints = [];
- for (var i = 0; i < children.length; i++) {
- var childLayout = children[i].getLayout();
- childPoints.push([childLayout.x, childLayout.y]);
- }
- if (!edge) {
- edge = symbolEl.__edge = new TreePath({
- shape: {
- parentPoint: [targetLayout.x, targetLayout.y],
- childPoints: [[targetLayout.x, targetLayout.y]],
- orient: orient,
- forkPosition: edgeForkPosition
- }
- });
- }
- graphic.updateProps(edge, {
- shape: {
- parentPoint: [targetLayout.x, targetLayout.y],
- childPoints: childPoints
- }
- }, seriesModel);
- }
- } else {
- if (process.env.NODE_ENV !== 'production') {
- throw new Error('The polyline edgeShape can only be used in orthogonal layout');
- }
- }
- }
- // show all edge when edgeShape is 'curve', filter node `isExpand` is false when edgeShape is 'polyline'
- if (edge && !(edgeShape === 'polyline' && !node.isExpand)) {
- edge.useStyle(zrUtil.defaults({
- strokeNoScale: true,
- fill: null
- }, lineStyle));
- setStatesStylesFromModel(edge, itemModel, 'lineStyle');
- setDefaultStateProxy(edge);
- group.add(edge);
- }
- }
- function removeNodeEdge(node, data, group, seriesModel, removeAnimationOpt) {
- var virtualRoot = data.tree.root;
- var _a = getSourceNode(virtualRoot, node),
- source = _a.source,
- sourceLayout = _a.sourceLayout;
- var symbolEl = data.getItemGraphicEl(node.dataIndex);
- if (!symbolEl) {
- return;
- }
- var sourceSymbolEl = data.getItemGraphicEl(source.dataIndex);
- var sourceEdge = sourceSymbolEl.__edge;
- // 1. when expand the sub tree, delete the children node should delete the edge of
- // the source at the same time. because the polyline edge shape is only owned by the source.
- // 2.when the node is the only children of the source, delete the node should delete the edge of
- // the source at the same time. the same reason as above.
- var edge = symbolEl.__edge || (source.isExpand === false || source.children.length === 1 ? sourceEdge : undefined);
- var edgeShape = seriesModel.get('edgeShape');
- var layoutOpt = seriesModel.get('layout');
- var orient = seriesModel.get('orient');
- var curvature = seriesModel.get(['lineStyle', 'curveness']);
- if (edge) {
- if (edgeShape === 'curve') {
- graphic.removeElement(edge, {
- shape: getEdgeShape(layoutOpt, orient, curvature, sourceLayout, sourceLayout),
- style: {
- opacity: 0
- }
- }, seriesModel, {
- cb: function () {
- group.remove(edge);
- },
- removeOpt: removeAnimationOpt
- });
- } else if (edgeShape === 'polyline' && seriesModel.get('layout') === 'orthogonal') {
- graphic.removeElement(edge, {
- shape: {
- parentPoint: [sourceLayout.x, sourceLayout.y],
- childPoints: [[sourceLayout.x, sourceLayout.y]]
- },
- style: {
- opacity: 0
- }
- }, seriesModel, {
- cb: function () {
- group.remove(edge);
- },
- removeOpt: removeAnimationOpt
- });
- }
- }
- }
- function getSourceNode(virtualRoot, node) {
- var source = node.parentNode === virtualRoot ? node : node.parentNode || node;
- var sourceLayout;
- while (sourceLayout = source.getLayout(), sourceLayout == null) {
- source = source.parentNode === virtualRoot ? source : source.parentNode || source;
- }
- return {
- source: source,
- sourceLayout: sourceLayout
- };
- }
- function removeNode(data, dataIndex, symbolEl, group, seriesModel) {
- var node = data.tree.getNodeByDataIndex(dataIndex);
- var virtualRoot = data.tree.root;
- var sourceLayout = getSourceNode(virtualRoot, node).sourceLayout;
- // Use same duration and easing with update to have more consistent animation.
- var removeAnimationOpt = {
- duration: seriesModel.get('animationDurationUpdate'),
- easing: seriesModel.get('animationEasingUpdate')
- };
- graphic.removeElement(symbolEl, {
- x: sourceLayout.x + 1,
- y: sourceLayout.y + 1
- }, seriesModel, {
- cb: function () {
- group.remove(symbolEl);
- data.setItemGraphicEl(dataIndex, null);
- },
- removeOpt: removeAnimationOpt
- });
- symbolEl.fadeOut(null, data.hostModel, {
- fadeLabel: true,
- animation: removeAnimationOpt
- });
- // remove edge as parent node
- node.children.forEach(function (childNode) {
- removeNodeEdge(childNode, data, group, seriesModel, removeAnimationOpt);
- });
- // remove edge as child node
- removeNodeEdge(node, data, group, seriesModel, removeAnimationOpt);
- }
- function getEdgeShape(layoutOpt, orient, curvature, sourceLayout, targetLayout) {
- var cpx1;
- var cpy1;
- var cpx2;
- var cpy2;
- var x1;
- var x2;
- var y1;
- var y2;
- if (layoutOpt === 'radial') {
- x1 = sourceLayout.rawX;
- y1 = sourceLayout.rawY;
- x2 = targetLayout.rawX;
- y2 = targetLayout.rawY;
- var radialCoor1 = radialCoordinate(x1, y1);
- var radialCoor2 = radialCoordinate(x1, y1 + (y2 - y1) * curvature);
- var radialCoor3 = radialCoordinate(x2, y2 + (y1 - y2) * curvature);
- var radialCoor4 = radialCoordinate(x2, y2);
- return {
- x1: radialCoor1.x || 0,
- y1: radialCoor1.y || 0,
- x2: radialCoor4.x || 0,
- y2: radialCoor4.y || 0,
- cpx1: radialCoor2.x || 0,
- cpy1: radialCoor2.y || 0,
- cpx2: radialCoor3.x || 0,
- cpy2: radialCoor3.y || 0
- };
- } else {
- x1 = sourceLayout.x;
- y1 = sourceLayout.y;
- x2 = targetLayout.x;
- y2 = targetLayout.y;
- if (orient === 'LR' || orient === 'RL') {
- cpx1 = x1 + (x2 - x1) * curvature;
- cpy1 = y1;
- cpx2 = x2 + (x1 - x2) * curvature;
- cpy2 = y2;
- }
- if (orient === 'TB' || orient === 'BT') {
- cpx1 = x1;
- cpy1 = y1 + (y2 - y1) * curvature;
- cpx2 = x2;
- cpy2 = y2 + (y1 - y2) * curvature;
- }
- }
- return {
- x1: x1,
- y1: y1,
- x2: x2,
- y2: y2,
- cpx1: cpx1,
- cpy1: cpy1,
- cpx2: cpx2,
- cpy2: cpy2
- };
- }
- export default TreeView;
|