123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- /*
- * 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 { separateMorph, combineMorph, morphPath, isCombineMorphing } from 'zrender/lib/tool/morphPath.js';
- import { Path } from '../util/graphic.js';
- import { defaults, isArray } from 'zrender/lib/core/util.js';
- import { getAnimationConfig } from './basicTransition.js';
- import { clonePath } from 'zrender/lib/tool/path.js';
- function isMultiple(elements) {
- return isArray(elements[0]);
- }
- function prepareMorphBatches(one, many) {
- var batches = [];
- var batchCount = one.length;
- for (var i = 0; i < batchCount; i++) {
- batches.push({
- one: one[i],
- many: []
- });
- }
- for (var i = 0; i < many.length; i++) {
- var len = many[i].length;
- var k = void 0;
- for (k = 0; k < len; k++) {
- batches[k % batchCount].many.push(many[i][k]);
- }
- }
- var off = 0;
- // If one has more paths than each one of many. average them.
- for (var i = batchCount - 1; i >= 0; i--) {
- if (!batches[i].many.length) {
- var moveFrom = batches[off].many;
- if (moveFrom.length <= 1) {
- // Not enough
- // Start from the first one.
- if (off) {
- off = 0;
- } else {
- return batches;
- }
- }
- var len = moveFrom.length;
- var mid = Math.ceil(len / 2);
- batches[i].many = moveFrom.slice(mid, len);
- batches[off].many = moveFrom.slice(0, mid);
- off++;
- }
- }
- return batches;
- }
- var pathDividers = {
- clone: function (params) {
- var ret = [];
- // Fitting the alpha
- var approxOpacity = 1 - Math.pow(1 - params.path.style.opacity, 1 / params.count);
- for (var i = 0; i < params.count; i++) {
- var cloned = clonePath(params.path);
- cloned.setStyle('opacity', approxOpacity);
- ret.push(cloned);
- }
- return ret;
- },
- // Use the default divider
- split: null
- };
- export function applyMorphAnimation(from, to, divideShape, seriesModel, dataIndex, animateOtherProps) {
- if (!from.length || !to.length) {
- return;
- }
- var updateAnimationCfg = getAnimationConfig('update', seriesModel, dataIndex);
- if (!(updateAnimationCfg && updateAnimationCfg.duration > 0)) {
- return;
- }
- var animationDelay = seriesModel.getModel('universalTransition').get('delay');
- var animationCfg = Object.assign({
- // Need to setToFinal so the further calculation based on the style can be correct.
- // Like emphasis color.
- setToFinal: true
- }, updateAnimationCfg);
- var many;
- var one;
- if (isMultiple(from)) {
- // manyToOne
- many = from;
- one = to;
- }
- if (isMultiple(to)) {
- // oneToMany
- many = to;
- one = from;
- }
- function morphOneBatch(batch, fromIsMany, animateIndex, animateCount, forceManyOne) {
- var batchMany = batch.many;
- var batchOne = batch.one;
- if (batchMany.length === 1 && !forceManyOne) {
- // Is one to one
- var batchFrom = fromIsMany ? batchMany[0] : batchOne;
- var batchTo = fromIsMany ? batchOne : batchMany[0];
- if (isCombineMorphing(batchFrom)) {
- // Keep doing combine animation.
- morphOneBatch({
- many: [batchFrom],
- one: batchTo
- }, true, animateIndex, animateCount, true);
- } else {
- var individualAnimationCfg = animationDelay ? defaults({
- delay: animationDelay(animateIndex, animateCount)
- }, animationCfg) : animationCfg;
- morphPath(batchFrom, batchTo, individualAnimationCfg);
- animateOtherProps(batchFrom, batchTo, batchFrom, batchTo, individualAnimationCfg);
- }
- } else {
- var separateAnimationCfg = defaults({
- dividePath: pathDividers[divideShape],
- individualDelay: animationDelay && function (idx, count, fromPath, toPath) {
- return animationDelay(idx + animateIndex, animateCount);
- }
- }, animationCfg);
- var _a = fromIsMany ? combineMorph(batchMany, batchOne, separateAnimationCfg) : separateMorph(batchOne, batchMany, separateAnimationCfg),
- fromIndividuals = _a.fromIndividuals,
- toIndividuals = _a.toIndividuals;
- var count = fromIndividuals.length;
- for (var k = 0; k < count; k++) {
- var individualAnimationCfg = animationDelay ? defaults({
- delay: animationDelay(k, count)
- }, animationCfg) : animationCfg;
- animateOtherProps(fromIndividuals[k], toIndividuals[k], fromIsMany ? batchMany[k] : batch.one, fromIsMany ? batch.one : batchMany[k], individualAnimationCfg);
- }
- }
- }
- var fromIsMany = many ? many === from
- // Is one to one. If the path number not match. also needs do merge and separate morphing.
- : from.length > to.length;
- var morphBatches = many ? prepareMorphBatches(one, many) : prepareMorphBatches(fromIsMany ? to : from, [fromIsMany ? from : to]);
- var animateCount = 0;
- for (var i = 0; i < morphBatches.length; i++) {
- animateCount += morphBatches[i].many.length;
- }
- var animateIndex = 0;
- for (var i = 0; i < morphBatches.length; i++) {
- morphOneBatch(morphBatches[i], fromIsMany, animateIndex, animateCount);
- animateIndex += morphBatches[i].many.length;
- }
- }
- export function getPathList(elements) {
- if (!elements) {
- return [];
- }
- if (isArray(elements)) {
- var pathList_1 = [];
- for (var i = 0; i < elements.length; i++) {
- pathList_1.push(getPathList(elements[i]));
- }
- return pathList_1;
- }
- var pathList = [];
- elements.traverse(function (el) {
- if (el instanceof Path && !el.disableMorphing && !el.invisible && !el.ignore) {
- pathList.push(el);
- }
- });
- return pathList;
- }
|