UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

3 lines (2 loc) • 7.67 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import t from"../../core/Logger.js";import{animationDebugFlags as n}from"./animationDebugFlags.js";import{defaultCIMValues as e}from"./defaultCIMValues.js";import{getExtent as o}from"./SDFHelper.js";import{getProcessParam as i,hasProcessParam as r,getSize as a,getValue as s}from"./utils.js";function l(t,n,e){return{transform:b(t,n,e.transform),fromColor:T(t,n,e.fromColor),toColor:I(t,n,e.toColor),colorMix:k(t,n,e.colorMix),toOpacity:O(t,n,e.toOpacity),opacityMix:x(t,n,e.opacityMix),shift:D(t,n,e.shift),hasAnimations:e.hasAnimations||c(n),hasShiftAnimation:e.hasShiftAnimation||m(n),hasMotionAnimations:e.hasMotionAnimations||f(n)}}function c(t){return"animations"in t&&!!t.animations&&t.animations.length>0}function m(t){return"animations"in t&&!!t.animations&&t.animations.some(t=>"CIMSymbolAnimationMoveAlongLine"===t.type)}const p=new Set(["CIMSymbolAnimationOffset","CIMSymbolAnimationRotation","CIMSymbolAnimationSize","CIMSymbolAnimationScale"]);function f(t){return"animations"in t&&!!t.animations&&t.animations.some(t=>p.has(t.type))}function y(t){return!n.forceStaticPath&&(n.forceAnimatedPath||t.hasAnimations)}function u(n,e,o){if("CIMCharacterMarker"===e.type)return t.getLogger("animationUtils").error("#handleMarker()","CIM character markers do not support animations"),o;const r=i(n,e,"OffsetX"),a=i(n,e,"OffsetY");if("CIMPictureMarker"===e.type)return{...o,transform:{type:"AnimatedTransform",relativeTranslation:!1,absoluteScale:!0,translation:F([r,a]),rotation:F(0),scale:F(i(n,e,"Size")),parent:o.transform}};const s=e.frame,l=s.ymax-s.ymin;return{...o,transform:{type:"AnimatedTransform",relativeTranslation:!1,absoluteScale:!1,translation:F([r,a]),rotation:F(0),scale:F({type:"Process",op:"Divide",left:i(n,e,"Size"),right:l}),parent:o.transform}}}function d(t,n){let e=0,o=0;const i="Absolute"!==t.anchorPointUnits;return t.anchorPoint&&(e=-t.anchorPoint.x,o=-t.anchorPoint.y),{...n,transform:{type:"AnimatedTransform",relativeTranslation:i,absoluteScale:!1,translation:F([e,o]),rotation:F(0),scale:F(1),parent:n.transform}}}function C(t,n){return"Absolute"===t.anchorPointUnits?n:d(t,n)}function S(t,n){return"Absolute"!==t.anchorPointUnits?n:d(t,n)}function M(t,n,e){return{...t,transform:{type:"AnimatedTransform",relativeTranslation:!1,absoluteScale:!1,translation:F([n,e]),rotation:F(0),scale:F(1),parent:t.transform}}}function A(t,n){const e=n?.5*-(n.xmin+n.xmax):0,i=n?.5*-(n.ymin+n.ymax):0;let r=0,a=0;if("x"in t&&"y"in t)r=t.x+e,a=t.y+i;else{const n=o(t);if(n){r=(n[0]+n[2])/2+e,a=(n[1]+n[3])/2+i}}return[r,a]}function h(t,n){switch(n.type){case"CIMPictureMarker":case"CIMVectorMarker":return i(t,n,"Rotation")}return 0}function g(t,n){switch(n.type){case"CIMPictureMarker":case"CIMVectorMarker":return i(t,n,"RotateClockwise")}return 0}function P(t,n){switch(n.type){case"CIMPointSymbol":case"CIMVectorMarker":return[1,1,1,1];case"CIMSolidStroke":case"CIMSolidFill":return i(t,n,"Color");case"CIMPictureMarker":case"CIMPictureStroke":case"CIMPictureFill":return i(t,n,"TintColor")}return[1,1,1,1]}function b(t,n,e){return{type:"AnimatedTransform",relativeTranslation:!1,absoluteScale:!1,translation:z(t,n),rotation:j(t,n),scale:R(t,n),parent:e}}function T(t,n,e){return{type:"AnimatedColor",color:F(P(t,n)),opacity:F(1),parent:e,applyToChildren:!1}}function I(t,n,e){const o=w(n);let r,a=v(e);if(a)r=[1,1,1,1];else{r=P(t,n);const e=o?.find(t=>"CIMSymbolAnimationColor"===t.type);e&&(r=i(t,e,"ToColor"),a="Override"===e.colorMode)}return{type:"AnimatedColor",color:F(r),opacity:F(1),parent:e,applyToChildren:a}}function k(t,n,e){const o=w(n),i=o?.find(t=>"CIMSymbolAnimationColor"===t.type);return i?{type:"AnimatedColor",color:F([1,1,1,1]),opacity:{from:0,to:1,timing:L(t,i?.animatedSymbolProperties)},parent:[1,1,1,1],applyToChildren:!1}:e}function v(t){return"object"==typeof t&&"applyToChildren"in t&&t.applyToChildren}function O(t,n,e){const o=w(n);let r=F(1);const a=o?.find(t=>"CIMSymbolAnimationTransparency"===t.type);if(a){r=F({type:"Process",op:"Transparency",value:i(t,a,"ToTransparency")})}return{type:"AnimatedColor",color:F([1,1,1,1]),opacity:r,parent:e,applyToChildren:!1}}function x(t,n,e){const o=w(n),i=o?.find(t=>"CIMSymbolAnimationTransparency"===t.type);return i?{type:"AnimatedColor",color:F([1,1,1,1]),opacity:{from:0,to:1,timing:L(t,i?.animatedSymbolProperties)},parent:[1,1,1,1],applyToChildren:!1}:e}function D(t,n,e){const o=w(n),a=o?.find(t=>"CIMSymbolAnimationMoveAlongLine"===t.type);if(!a)return e;let s,l;const c=L(t,a.animatedSymbolProperties),m=r(t,a,"DistanceAlong"),p=r(t,a,"Speed"),f=m&&i(t,a,"DistanceAlong"),y=p&&i(t,a,"Speed"),u=!0===a.continuous;if(!1!==f)s={type:"Process",op:"Divide",left:f,right:100},l=!0;else if(!1!==y)s={type:"Process",op:"Multiply",left:y,right:c.duration},l=!1;else{if(!u)throw new Error("Either distanceAlong, speed or continuous must be specified.");s=1,l=!0}return{type:"AnimatedShift",multiplyByLineLength:l,shift:{from:0,to:s,timing:c},parent:e}}function L(t,n){if(!n)return{duration:1,startTimeOffset:0,repeatDelay:0,timeOriginSelector:"Local",repeatType:"Loop",easing:"Linear",playAnimation:1,reverseAnimation:0};const o=i(t,n,"Duration");let r;if(i(t,n,"RandomizeStartTime")){r={type:"Process",op:"Random",min:0,max:o,seed:i(t,n,"RandomizeStartSeed")}}else r=i(t,n,"StartTimeOffset");const a=i(t,n,"RepeatDelay"),l=i(t,n,"PlayAnimation"),c=i(t,n,"ReverseAnimation"),m=s(n.repeatType,e.CIMAnimatedSymbolProperties.repeattype);return{duration:o,startTimeOffset:r,repeatDelay:a,timeOriginSelector:"None"===m?"Local":"Global",repeatType:m,easing:s(n.easing,e.CIMAnimatedSymbolProperties.easing),playAnimation:l,reverseAnimation:c}}function R(t,n){const e=w(n);let o;o="CIMPictureMarker"===n.type||"CIMVectorMarker"===n.type?i(t,n,"Size"):"CIMSolidStroke"===n.type||"CIMPictureStroke"===n.type?i(t,n,"Width"):a(n)||10;const r=e?.find(t=>"CIMSymbolAnimationScale"===t.type);if(!r){const n=e?.find(t=>"CIMSymbolAnimationSize"===t.type);if(!n)return F(1);return{from:1,to:{type:"Process",op:"Divide",left:i(t,n,"ToSize"),right:o},timing:L(t,n.animatedSymbolProperties)}}return{from:1,to:i(t,r,"ScaleFactor"),timing:L(t,r.animatedSymbolProperties)}}function w(t){return"animations"in t&&t.animations||[]}function z(t,n){const e=w(n),o=e?.find(t=>"CIMSymbolAnimationOffset"===t.type);if(!o)return F([0,0]);return{from:[0,0],to:[i(t,o,"OffsetX"),i(t,o,"OffsetY")],timing:L(t,o.animatedSymbolProperties)}}function j(t,n){const e=w(n),o=g(t,n),r={type:"Process",op:"Divide",left:h(t,n),right:{type:"Process",op:"Cond",condition:o,ifTrue:-1,ifFalse:1}},a=e?.find(t=>"CIMSymbolAnimationRotation"===t.type);if(!a)return F(r);const s={type:"Process",op:"Add",left:i(t,a,"ToRotation"),right:{type:"Process",op:"Divide",left:r,right:-1}};return{from:r,to:{type:"Process",op:"Add",left:r,right:{type:"Process",op:"Cond",condition:i(t,a,"RotateClockwise"),ifTrue:{type:"Process",op:"MatchWinding",sign:-1,angle:s},ifFalse:{type:"Process",op:"MatchWinding",sign:1,angle:s}}},timing:L(t,a.animatedSymbolProperties)}}function F(t){return{from:t,to:t,timing:{duration:1,startTimeOffset:0,repeatDelay:0,timeOriginSelector:"Local",repeatType:"Loop",easing:"Linear",playAnimation:1,reverseAnimation:0}}}function V(t){if(null==t)return!1;if("object"!=typeof t)return!1;if(t.animations&&Array.isArray(t.animations)&&t.animations.length>0)return!0;for(const n in t)if(V(t[n]))return!0;return!1}export{V as checkForAnimations,l as getAnimationParams,A as getFrameTranslation,F as getStaticParam,S as handleAbsoluteAnchor,d as handleAnchor,u as handleMarker,C as handleRelativeAnchor,y as shouldUseAnimatedPath,M as translate};