|   | 
| /* | 
| * 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; | 
| } |