UNPKG

837 kBSource Map (JSON)View Raw
1{"version":3,"sources":["webpack://G/webpack/universalModuleDefinition","webpack://G/webpack/bootstrap","webpack://G/../src/is-array-like.ts","webpack://G/../src/is-type.ts","webpack://G/../src/is-function.ts","webpack://G/../src/is-nil.ts","webpack://G/../src/is-array.ts","webpack://G/../src/is-object.ts","webpack://G/../src/each.ts","webpack://G/../src/keys.ts","webpack://G/../src/is-match.ts","webpack://G/../src/is-object-like.ts","webpack://G/../src/find-index.ts","webpack://G/../src/pull.ts","webpack://G/../src/is-string.ts","webpack://G/../src/pull-at.ts","webpack://G/../src/group-by.ts","webpack://G/../src/parse-radius.ts","webpack://G/../src/is-number.ts","webpack://G/../src/is-integer.ts","webpack://G/../src/is-number-equal.ts","webpack://G/../src/is-odd.ts","webpack://G/../src/mod.ts","webpack://G/../src/to-radian.ts","webpack://G/../src/to-degree.ts","webpack://G/../src/to-integer.ts","webpack://G/../src/to-string.ts","webpack://G/../src/values.ts","webpack://G/../src/substitute.ts","webpack://G/../src/upper-first.ts","webpack://G/../src/is-prototype.ts","webpack://G/../src/mix.ts","webpack://G/../src/is-empty.ts","webpack://G/../src/is-equal.ts","webpack://G/../src/unique-id.ts","webpack://G/../src/pick.ts","webpack://G/../src/noop.ts","webpack://G/../src/cache.ts","webpack://G/../../src/util/util.ts","webpack://G/./node_modules/gl-matrix/esm/common.js","webpack://G/../src/contains.ts","webpack://G/../src/filter.ts","webpack://G/../src/difference.ts","webpack://G/../src/is-plain-object.ts","webpack://G/../src/find.ts","webpack://G/../src/first-value.ts","webpack://G/../src/flatten.ts","webpack://G/../src/flatten-deep.ts","webpack://G/../src/get-range.ts","webpack://G/../src/reduce.ts","webpack://G/../src/remove.ts","webpack://G/../src/sort-by.ts","webpack://G/../src/uniq.ts","webpack://G/../src/union.ts","webpack://G/../src/values-of-key.ts","webpack://G/../src/head.ts","webpack://G/../src/last.ts","webpack://G/../src/starts-with.ts","webpack://G/../src/ends-with.ts","webpack://G/../src/every.ts","webpack://G/../src/some.ts","webpack://G/../src/group-to-map.ts","webpack://G/../src/group.ts","webpack://G/../src/get-wrap-behavior.ts","webpack://G/../src/wrap-behavior.ts","webpack://G/../src/number2color.ts","webpack://G/../src/clamp.ts","webpack://G/../src/fixed-base.ts","webpack://G/../src/is-decimal.ts","webpack://G/../src/is-even.ts","webpack://G/../src/is-negative.ts","webpack://G/../src/is-positive.ts","webpack://G/../src/max-by.ts","webpack://G/../src/min-by.ts","webpack://G/../src/for-in.ts","webpack://G/../src/has.ts","webpack://G/../src/has-key.ts","webpack://G/../src/has-value.ts","webpack://G/../src/lower-case.ts","webpack://G/../src/lower-first.ts","webpack://G/../src/upper-case.ts","webpack://G/../src/get-type.ts","webpack://G/../src/is-arguments.ts","webpack://G/../src/is-boolean.ts","webpack://G/../src/is-date.ts","webpack://G/../src/is-error.ts","webpack://G/../src/is-finite.ts","webpack://G/../src/is-null.ts","webpack://G/../src/is-reg-exp.ts","webpack://G/../src/is-undefined.ts","webpack://G/../src/is-element.ts","webpack://G/../src/request-animation-frame.ts","webpack://G/../src/clear-animation-frame.ts","webpack://G/../src/augment.ts","webpack://G/../src/clone.ts","webpack://G/../src/debounce.ts","webpack://G/../src/memoize.ts","webpack://G/../src/deep-mix.ts","webpack://G/../src/extend.ts","webpack://G/../src/index-of.ts","webpack://G/../src/is-equal-with.ts","webpack://G/../src/map.ts","webpack://G/../src/map-values.ts","webpack://G/../src/get.ts","webpack://G/../src/set.ts","webpack://G/../src/throttle.ts","webpack://G/../src/to-array.ts","webpack://G/../src/identity.ts","webpack://G/../src/size.ts","webpack://G/./node_modules/tslib/tslib.es6.js","webpack://G/../src/util.ts","webpack://G/../g-math/node_modules/gl-matrix/esm/common.js","webpack://G/../g-math/node_modules/gl-matrix/esm/vec2.js","webpack://G/../src/line.ts","webpack://G/../src/bezier.ts","webpack://G/../src/quadratic.ts","webpack://G/../src/cubic.ts","webpack://G/../src/ellipse.ts","webpack://G/../src/arc.ts","webpack://G/../src/segments.ts","webpack://G/../src/polyline.ts","webpack://G/../src/polygon.ts","webpack://G/./src/util/util.ts","webpack://G/../../src/util/matrix.ts","webpack://G/../g-base/node_modules/tslib/tslib.es6.js","webpack://G/./src/shape/base.ts","webpack://G/../src/index.ts","webpack://G/../../src/util/path.ts","webpack://G/../../src/util/text.ts","webpack://G/./src/shape/index.ts","webpack://G/./src/util/draw.ts","webpack://G/./src/util/arrow.ts","webpack://G/./src/util/in-stroke/line.ts","webpack://G/../../src/event/graph-event.ts","webpack://G/../../src/util/offscreen.ts","webpack://G/../../src/abstract/base.ts","webpack://G/../../src/abstract/container.ts","webpack://G/../g-base/node_modules/gl-matrix/esm/common.js","webpack://G/../g-base/node_modules/gl-matrix/esm/mat3.js","webpack://G/../g-base/node_modules/gl-matrix/esm/vec2.js","webpack://G/../src/ext.ts","webpack://G/../../src/abstract/element.ts","webpack://G/./src/group.ts","webpack://G/./node_modules/gl-matrix/esm/vec3.js","webpack://G/../../src/abstract/group.ts","webpack://G/../../src/abstract/shape.ts","webpack://G/./src/util/parse.ts","webpack://G/./src/util/arc-params.ts","webpack://G/./src/util/in-path/point-in-path.ts","webpack://G/./src/util/in-path/polygon.ts","webpack://G/./src/util/in-stroke/arc.ts","webpack://G/./src/util/in-stroke/polyline.ts","webpack://G/../g-base/node_modules/d3-timer/src/timer.js","webpack://G/../g-base/node_modules/d3-ease/src/linear.js","webpack://G/../g-base/node_modules/d3-ease/src/quad.js","webpack://G/../g-base/node_modules/d3-ease/src/cubic.js","webpack://G/../g-base/node_modules/d3-ease/src/poly.js","webpack://G/../g-base/node_modules/d3-ease/src/sin.js","webpack://G/../g-base/node_modules/d3-ease/src/math.js","webpack://G/../g-base/node_modules/d3-ease/src/exp.js","webpack://G/../g-base/node_modules/d3-ease/src/circle.js","webpack://G/../g-base/node_modules/d3-ease/src/bounce.js","webpack://G/../g-base/node_modules/d3-ease/src/back.js","webpack://G/../g-base/node_modules/d3-ease/src/elastic.js","webpack://G/../g-base/node_modules/d3-color/src/define.js","webpack://G/../g-base/node_modules/d3-color/src/color.js","webpack://G/../g-base/node_modules/d3-interpolate/src/basis.js","webpack://G/../g-base/node_modules/d3-interpolate/src/constant.js","webpack://G/../g-base/node_modules/d3-interpolate/src/color.js","webpack://G/../g-base/node_modules/d3-interpolate/src/rgb.js","webpack://G/../g-base/node_modules/d3-interpolate/src/basisClosed.js","webpack://G/../g-base/node_modules/d3-interpolate/src/numberArray.js","webpack://G/../g-base/node_modules/d3-interpolate/src/array.js","webpack://G/../g-base/node_modules/d3-interpolate/src/date.js","webpack://G/../g-base/node_modules/d3-interpolate/src/number.js","webpack://G/../g-base/node_modules/d3-interpolate/src/object.js","webpack://G/../g-base/node_modules/d3-interpolate/src/string.js","webpack://G/../g-base/node_modules/d3-interpolate/src/value.js","webpack://G/../../src/animate/timeline.ts","webpack://G/../../src/util/color.ts","webpack://G/../../src/event/event-contoller.ts","webpack://G/../../src/abstract/canvas.ts","webpack://G/../../src/bbox/register.ts","webpack://G/../../src/bbox/rect.ts","webpack://G/../../src/bbox/circle.ts","webpack://G/../../src/bbox/util.ts","webpack://G/../../src/bbox/polyline.ts","webpack://G/../src/parse-path.ts","webpack://G/../src/parse-path-string.ts","webpack://G/../src/get-arc-params.ts","webpack://G/../src/path-2-segments.ts","webpack://G/../../src/bbox/path.ts","webpack://G/../../src/bbox/index.ts","webpack://G/../../src/bbox/polygon.ts","webpack://G/../../src/bbox/text.ts","webpack://G/../../src/bbox/line.ts","webpack://G/../../src/bbox/ellipse.ts","webpack://G/../src/catmull-rom-2-bezier.ts","webpack://G/../src/fill-path.ts","webpack://G/../src/fill-path-by-diff.ts","webpack://G/../src/format-path.ts","webpack://G/../src/rect-path.ts","webpack://G/../src/path-2-absolute.ts","webpack://G/../src/path-2-curve.ts","webpack://G/../src/path-intersection.ts","webpack://G/../src/parse-path-array.ts","webpack://G/../src/get-line-intersect.ts","webpack://G/../src/point-in-polygon.ts","webpack://G/../src/is-polygons-intersect.ts","webpack://G/../g-base/node_modules/detect-browser/es/index.js","webpack://G/./src/index.ts","webpack://G/./node_modules/process/browser.js","webpack://G/./src/shape/circle.ts","webpack://G/./src/shape/ellipse.ts","webpack://G/./src/shape/image.ts","webpack://G/./src/shape/line.ts","webpack://G/./src/shape/marker.ts","webpack://G/./src/shape/path.ts","webpack://G/./src/util/path.ts","webpack://G/./src/shape/polygon.ts","webpack://G/./src/shape/polyline.ts","webpack://G/./src/shape/rect.ts","webpack://G/./src/util/in-stroke/rect.ts","webpack://G/./src/util/in-stroke/rect-radius.ts","webpack://G/./src/shape/text.ts","webpack://G/./src/interfaces.ts","webpack://G/./src/types.ts","webpack://G/./src/canvas.ts","webpack://G/./src/util/hit.ts","webpack://G/./node_modules/gl-matrix/esm/mat3.js","webpack://G/./node_modules/gl-matrix/esm/vec2.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","type","elements","_mix","obj","dist","default_1","index","EPSILON","ARRAY_TYPE","Float32Array","Array","RANDOM","Math","random","PI","hypot","y","arguments","length","sqrt","result","arr","str","base","toString","indexOf","num","maxData","data","requestAnimationFrame","fn","cancelAnimationFrame","handler","rst","k","memoized","superObj","func","extendStatics","b","setPrototypeOf","__proto__","__extends","__","this","constructor","__assign","assign","apply","__rest","e","getOwnPropertySymbols","propertyIsEnumerable","__decorate","decorators","target","desc","getOwnPropertyDescriptor","Reflect","decorate","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","done","then","__generator","body","f","g","_","label","sent","trys","ops","verb","iterator","v","op","TypeError","pop","push","__createBinding","k2","undefined","__exportStar","__values","__read","ar","error","__spread","concat","__spreadArrays","il","a","j","jl","__await","__asyncGenerator","asyncIterator","q","resume","fulfill","settle","shift","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","raw","__setModuleDefault","__importStar","mod","__importDefault","default","__classPrivateFieldGet","receiver","privateMap","has","__classPrivateFieldSet","set","out","glMatrix","vec","x2","x","len","quadratic","extremas","x1","rx","startAngle","segments","tmp","devicePixelRatio","y1","y2","dx","dy","minX","minY","width","height","box1","box2","maxX","maxY","region1","region2","min","max","point1","point2","isNil","isString","isFunction","isArray","each","toRadian","isNumberEqual","clearAnimationFrame","a22","getDefaultAttrs","attrs","lineWidth","lineAppendWidth","strokeOpacity","fillOpacity","getShapeBase","Shape","getGroupBase","onCanvasChange","changeType","refreshElement","calculateBBox","getHitLineWidth","box","getBBoxMethod","bboxMethod","halfLineWidth","isFill","isClipShape","isStroke","_applyClip","context","clip","save","applyAttrsToContext","createPath","restore","_afterDraw","draw","region","cfg","clipShape","refresh","bbox","getCanvasBBox","intersectRect","isInView","drawPath","getCanvasViewBox","canvas","getViewRange","cacheCanvasBBox","canvasBBox","skipDraw","strokeAndFill","afterDrawPath","fill","stroke","opacity","globalAlpha","isInShape","refX","refY","isInStrokeOrPath","AbstractShape","ShapeBase","res","dots","f1","f2","path","fontSize","SHAPE_ATTRS_MAP","checkChildrenRefresh","children","child","visible","hasChanged","isGroup","setChildrenRefresh","checkElementRefresh","shape","getRefreshRegion","element","destroyed","cacheBox","validCache","validBBox","mergeRegion","attr","transform","setLineDash","parseStyle","refreshElements","el","parent","clearChanged","arcParamsCache","startArrow","endArrow","currentPoint","startMovePoint","distance","beginPath","params","command","tangent","getStartTangent","ArrowUtil","getShortenOffset","getEndTangent","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","arcParams","cx","cy","ry","endAngle","xRotation","sweepFlag","ellipse","scaleX","scaleY","translate","rotate","scale","arc","closePath","_cacheCanvasBBox","minXArr","minYArr","maxXArr","maxYArr","viewRegion","sin","cos","atan2","_addDefaultArrow","isStart","rad","arrowShape","Path","isArrowShape","rotateAtPoint","_addCustomizedArrow","arrowAttrs","arrowFill","arrowStroke","arrowLineWidth","restAttrs","halfWidth","Line","pointToLine","offScreenCtx","getOffScreenContext","Base","group","Container","fromMat4","clone","copy","fromValues","m00","m01","m02","m10","m11","m12","m20","m21","m22","identity","transpose","a01","a02","a12","invert","a00","a10","a11","a20","a21","b01","b11","b21","det","adjoint","determinant","multiply","b00","b02","b10","b12","b20","b22","fromTranslation","fromRotation","fromScaling","fromMat2d","fromQuat","z","w","z2","xx","yx","yy","zx","zy","zz","wx","wy","wz","normalFromMat4","a03","a13","a23","a30","a31","a32","a33","b03","b04","b05","b06","b07","b08","b09","projection","frob","add","subtract","multiplyScalar","multiplyScalarAndAdd","exactEquals","equals","a0","a1","a2","a3","a4","a5","a6","a7","a8","b0","b1","b2","b3","b4","b5","b6","b7","b8","abs","mul","sub","divide","ceil","floor","round","scaleAndAdd","squaredDistance","squaredLength","negate","inverse","normalize","dot","cross","lerp","ax","ay","transformMat2","transformMat2d","transformMat3","transformMat4","p0","p1","sinC","cosC","angle","mag","cosine","acos","zero","div","sqrDist","sqrLen","forEach","stride","offset","count","arg","Element","Group","xArr","yArr","viewRange","allowDraw","getClip","drawChildren","AbstractGroup","az","bx","by","bz","hermite","factorTimes2","factor1","factor2","factor3","factor4","bezier","inverseFactor","inverseFactorTimesTwo","zScale","transformQuat","qx","qy","qz","qw","uvx","uvy","uvz","uuvx","uuvy","uuvz","w2","rotateX","rotateY","rotateZ","regexLG","regexRG","regexPR","regexColorStop","addStop","steps","gradient","match","item","itemArr","split","addColorStop","parseLineGradient","gradientStr","start","end","exec","parseFloat","getBBox","tanTheta","tan","tanTheta2","createLinearGradient","parseRadialGradient","fx","fy","fr","colors","createRadialGradient","parsePattern","patternStr","pattern","img","repeat","source","onload","createPattern","Image","crossOrigin","src","complete","color","radius","r1","r2","r3","r4","vMag","vRatio","u","vAngle","startPoint","arcFlag","xp","yp","lambda","diff","isNaN","cxp","cyp","theta","dTheta","isSamePoint","ctx","isPointInPath","dcmp","onSegment","p2","points","isHit","point","isClose","first","last","taskHead","taskTail","frame","timeout","interval","clockLast","clockNow","clockSkew","clock","performance","now","Date","setFrame","setTimeout","clearNow","Timer","_call","_time","_next","timer","callback","delay","time","restart","wake","timerFlush","t0","t2","t1","Infinity","sleep","nap","poke","clearTimeout","clearInterval","setInterval","linear","quadIn","quadOut","quadInOut","cubicIn","cubicOut","cubicInOut","stop","polyIn","custom","pow","exponent","polyOut","polyInOut","pi","halfPi","sinIn","sinOut","sinInOut","tpmt","expIn","expOut","expInOut","circleIn","circleOut","circleInOut","bounceIn","bounceOut","bounceInOut","backIn","overshoot","backOut","backInOut","tau","elasticIn","asin","amplitude","period","elasticOut","elasticInOut","extend","definition","Color","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","format","trim","toLowerCase","parseInt","rgbn","Rgb","rgba","hsla","NaN","rgbConvert","rgb_formatHex","hex","rgb_formatRgb","h","Hsl","hslConvert","hsl2rgb","m1","m2","basis","v0","v1","v2","v3","t3","channels","displayable","formatHsl","brighter","darker","gamma","nogamma","exponential","constant","rgbGamma","colorRgb","rgbSpline","spline","values","slice","isNumberArray","ArrayBuffer","isView","DataView","genericArray","nb","na","setTime","reA","reB","am","bm","bs","bi","lastIndex","number","one","join","string","date","numberArray","valueOf","update","duration","animation","easing","elapsed","ratio","cPathPoint","cProps","Timeline","relativeShape","_emitEvent","EventController","event","_this","register","circle","segment","catmullRom2Bezier","crp","decasteljau","left","right","middlePoints","recurse","leftSegments","map","cmd","temp","targetLen","diffMatrix","_getSegmentPoints","fromPath","BrowserInfo","version","os","NodeInfo","process","platform","SearchBotDeviceInfo","bot","BotInfo","ReactNativeInfo","SEARCHBOT_OS_REGEX","userAgentRules","operatingSystemRules","detect","userAgent","parseUserAgent","document","navigator","product","matchUserAgent","ua","reduce","matched","_a","browser","regex","uaMatch","matchedRule","versionParts","output","ii","createVersionParts","detectOS","searchBotMatch","IElement","Region","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","run","marker","runClearTimeout","Item","array","noop","nextTick","args","title","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","absDistance","Circle","ellipseDistance","squareX","squareY","halfLineWith","Ellipse","isCanvas","dom","HTMLElement","nodeName","toUpperCase","initAttrs","_setImage","isOnlyHitBox","_afterLoading","Number","getAttribute","onAttrChange","originValue","sx","sy","swidth","sheight","drawImage","ImageShape","setArrow","addStartArrow","addEndArrow","startArrowDistance","endArrowDistance","startArrowShape","endArrowShape","getTotalLength","getPoint","pointAt","Symbols","square","diamond","triangle","diffY","_resetParamsCache","_getR","_getPath","method","symbol","path2Absolute","Marker","console","warn","paramsCache","isInPolygons","polygons","_setPathArr","hasArc","getSegments","path2Segments","isPointInStroke","extractResutl","extractPolygons","polylines","totalLength","_calculateCurve","_setTcache","subt","tCache","curve","seg","nextSeg","Cubic","pathToCurve","segmentT","segmentL","segmentN","tempLength","endPoint","startTangent","endTangent","ext","prePoint","inBox","Quad","pointDistance","vec3","PathUtil","Polygon","_resetCache","Polyline","PolyLine","rect","parseRadius","Rect","text","fontFamily","fontStyle","fontWeight","fontVariant","textAlign","textBaseline","_assembleFont","_setText","font","assembleFont","textArr","startsWith","_getSpaceingY","lineHeight","_drawTextArr","subY","spaceingY","getTextHeight","subText","fillText","strokeText","_drawText","Text","getDefaultCfg","getPixelRatio","pixelRatio","createDom","createElement","getContext","setDOMSize","clear","_clearFrame","clearRect","getShape","_getRefreshRegion","getMergedRegion","mergeView","drawFrame","_startDraw","_drawAll","getChildren","_drawRegion","checkRefresh","AbstractCanvas","Canvas","getRefXY","totalMatrix","getTotalMatrix","matrix","invertMatrix","multiplyVec2","invertFromMatrix","preTest","isAllowCapture","isClipped","container","curShape"],"mappings":"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","file":"g.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"G\"] = factory();\n\telse\n\t\troot[\"G\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 52);\n","var isArrayLike = function (value) {\n /**\n * isArrayLike([1, 2, 3]) => true\n * isArrayLike(document.body.children) => true\n * isArrayLike('abc') => true\n * isArrayLike(Function) => false\n */\n return value !== null && typeof value !== 'function' && isFinite(value.length);\n};\nexport default isArrayLike;\n//# sourceMappingURL=is-array-like.js.map","var toString = {}.toString;\nvar isType = function (value, type) { return toString.call(value) === '[object ' + type + ']'; };\nexport default isType;\n//# sourceMappingURL=is-type.js.map","/**\n * 是否为函数\n * @param {*} fn 对象\n * @return {Boolean} 是否函数\n */\nimport isType from './is-type';\nexport default (function (value) {\n return isType(value, 'Function');\n});\n//# sourceMappingURL=is-function.js.map","// isFinite,\nvar isNil = function (value) {\n /**\n * isNil(null) => true\n * isNil() => true\n */\n return value === null || value === undefined;\n};\nexport default isNil;\n//# sourceMappingURL=is-nil.js.map","import isType from './is-type';\nexport default (function (value) {\n return Array.isArray ?\n Array.isArray(value) :\n isType(value, 'Array');\n});\n//# sourceMappingURL=is-array.js.map","export default (function (value) {\n /**\n * isObject({}) => true\n * isObject([1, 2, 3]) => true\n * isObject(Function) => true\n * isObject(null) => false\n */\n var type = typeof value;\n return value !== null && type === 'object' || type === 'function';\n});\n//# sourceMappingURL=is-object.js.map","import isArray from './is-array';\nimport isObject from './is-object';\nfunction each(elements, func) {\n if (!elements) {\n return;\n }\n var rst;\n if (isArray(elements)) {\n for (var i = 0, len = elements.length; i < len; i++) {\n rst = func(elements[i], i);\n if (rst === false) {\n break;\n }\n }\n }\n else if (isObject(elements)) {\n for (var k in elements) {\n if (elements.hasOwnProperty(k)) {\n rst = func(elements[k], k);\n if (rst === false) {\n break;\n }\n }\n }\n }\n}\nexport default each;\n//# sourceMappingURL=each.js.map","import each from './each';\nimport isFunction from './is-function';\nvar keys = Object.keys ? function (obj) { return Object.keys(obj); } : function (obj) {\n var result = [];\n each(obj, function (value, key) {\n if (!(isFunction(obj) && key === 'prototype')) {\n result.push(key);\n }\n });\n return result;\n};\nexport default keys;\n//# sourceMappingURL=keys.js.map","import isNil from './is-nil';\nimport keys from './keys';\nfunction isMatch(obj, attrs) {\n var _keys = keys(attrs);\n var length = _keys.length;\n if (isNil(obj))\n return !length;\n for (var i = 0; i < length; i += 1) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) {\n return false;\n }\n }\n return true;\n}\nexport default isMatch;\n//# sourceMappingURL=is-match.js.map","var isObjectLike = function (value) {\n /**\n * isObjectLike({}) => true\n * isObjectLike([1, 2, 3]) => true\n * isObjectLike(Function) => false\n * isObjectLike(null) => false\n */\n return typeof value === 'object' && value !== null;\n};\nexport default isObjectLike;\n//# sourceMappingURL=is-object-like.js.map","function findIndex(arr, predicate, fromIndex) {\n if (fromIndex === void 0) { fromIndex = 0; }\n for (var i = fromIndex; i < arr.length; i++) {\n if (predicate(arr[i], i)) {\n // 找到终止循环\n return i;\n }\n }\n return -1;\n}\nexport default findIndex;\n//# sourceMappingURL=find-index.js.map","var arrPrototype = Array.prototype;\nvar splice = arrPrototype.splice;\nvar indexOf = arrPrototype.indexOf;\nvar pull = function (arr) {\n var values = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n values[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < values.length; i++) {\n var value = values[i];\n var fromIndex = -1;\n while ((fromIndex = indexOf.call(arr, value)) > -1) {\n splice.call(arr, fromIndex, 1);\n }\n }\n return arr;\n};\nexport default pull;\n//# sourceMappingURL=pull.js.map","import isType from './is-type';\nexport default (function (str) {\n return isType(str, 'String');\n});\n//# sourceMappingURL=is-string.js.map","import isArrayLike from './is-array-like';\nvar splice = Array.prototype.splice;\nvar pullAt = function pullAt(arr, indexes) {\n if (!isArrayLike(arr)) {\n return [];\n }\n var length = arr ? indexes.length : 0;\n var last = length - 1;\n while (length--) {\n var previous = void 0;\n var index = indexes[length];\n if (length === last || index !== previous) {\n previous = index;\n splice.call(arr, index, 1);\n }\n }\n return arr;\n};\nexport default pullAt;\n//# sourceMappingURL=pull-at.js.map","import isArray from './is-array';\nimport isFunction from './is-function';\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction groupBy(data, condition) {\n if (!condition || !isArray(data)) {\n return {};\n }\n var result = {};\n // 兼容方法和 字符串的写法\n var predicate = isFunction(condition) ? condition : function (item) { return item[condition]; };\n var key;\n for (var i = 0; i < data.length; i++) {\n var item = data[i];\n key = predicate(item);\n if (hasOwnProperty.call(result, key)) {\n result[key].push(item);\n }\n else {\n result[key] = [item];\n }\n }\n return result;\n}\nexport default groupBy;\n//# sourceMappingURL=group-by.js.map","import isArray from './is-array';\nfunction parseRadius(radius) {\n var r1 = 0, r2 = 0, r3 = 0, r4 = 0;\n if (isArray(radius)) {\n if (radius.length === 1) {\n r1 = r2 = r3 = r4 = radius[0];\n }\n else if (radius.length === 2) {\n r1 = r3 = radius[0];\n r2 = r4 = radius[1];\n }\n else if (radius.length === 3) {\n r1 = radius[0];\n r2 = r4 = radius[1];\n r3 = radius[2];\n }\n else {\n r1 = radius[0];\n r2 = radius[1];\n r3 = radius[2];\n r4 = radius[3];\n }\n }\n else {\n r1 = r2 = r3 = r4 = radius;\n }\n return {\n r1: r1,\n r2: r2,\n r3: r3,\n r4: r4\n };\n}\nexport default parseRadius;\n//# sourceMappingURL=parse-radius.js.map","/**\n * 判断是否数字\n * @return {Boolean} 是否数字\n */\nimport isType from './is-type';\nvar isNumber = function (value) {\n return isType(value, 'Number');\n};\nexport default isNumber;\n//# sourceMappingURL=is-number.js.map","import isNumber from './is-number';\nvar isInteger = Number.isInteger ? Number.isInteger : function (num) {\n return isNumber(num) && num % 1 === 0;\n};\nexport default isInteger;\n//# sourceMappingURL=is-integer.js.map","var PRECISION = 0.00001; // numbers less than this is considered as 0\nexport default function isNumberEqual(a, b, precision) {\n if (precision === void 0) { precision = PRECISION; }\n return Math.abs((a - b)) < precision;\n}\n;\n//# sourceMappingURL=is-number-equal.js.map","import isNumber from './is-number';\nvar isOdd = function (num) {\n return isNumber(num) && num % 2 !== 0;\n};\nexport default isOdd;\n//# sourceMappingURL=is-odd.js.map","var mod = function (n, m) {\n return ((n % m) + m) % m;\n};\nexport default mod;\n//# sourceMappingURL=mod.js.map","var RADIAN = Math.PI / 180;\nvar toRadian = function (degree) {\n return RADIAN * degree;\n};\nexport default toRadian;\n//# sourceMappingURL=to-radian.js.map","var DEGREE = 180 / Math.PI;\nvar toDegree = function (radian) {\n return DEGREE * radian;\n};\nexport default toDegree;\n//# sourceMappingURL=to-degree.js.map","export default parseInt;\n//# sourceMappingURL=to-integer.js.map","import isNil from './is-nil';\nexport default (function (value) {\n if (isNil(value))\n return '';\n return value.toString();\n});\n//# sourceMappingURL=to-string.js.map","import each from './each';\nimport isFunction from './is-function';\n// @ts-ignore\nvar values = Object.values ? function (obj) { return Object.values(obj); } : function (obj) {\n var result = [];\n each(obj, function (value, key) {\n if (!(isFunction(obj) && key === 'prototype')) {\n result.push(value);\n }\n });\n return result;\n};\nexport default values;\n//# sourceMappingURL=values.js.map","function substitute(str, o) {\n if (!str || !o) {\n return str;\n }\n return str.replace(/\\\\?\\{([^{}]+)\\}/g, function (match, name) {\n if (match.charAt(0) === '\\\\') {\n return match.slice(1);\n }\n return (o[name] === undefined) ? '' : o[name];\n });\n}\nexport default substitute;\n//# sourceMappingURL=substitute.js.map","import toString from './to-string';\nvar upperFirst = function (value) {\n var str = toString(value);\n return str.charAt(0).toUpperCase() + str.substring(1);\n};\nexport default upperFirst;\n//# sourceMappingURL=upper-first.js.map","var objectProto = Object.prototype;\nvar isPrototype = function (value) {\n var Ctor = value && value.constructor;\n var proto = (typeof Ctor === 'function' && Ctor.prototype) || objectProto;\n return value === proto;\n};\nexport default isPrototype;\n//# sourceMappingURL=is-prototype.js.map","// FIXME: Mutable param should be forbidden in static lang.\nfunction _mix(dist, obj) {\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && key !== 'constructor' && obj[key] !== undefined) {\n dist[key] = obj[key];\n }\n }\n}\nexport default function mix(dist, src1, src2, src3) {\n if (src1)\n _mix(dist, src1);\n if (src2)\n _mix(dist, src2);\n if (src3)\n _mix(dist, src3);\n return dist;\n}\n//# sourceMappingURL=mix.js.map","import isNil from './is-nil';\nimport isArrayLike from './is-array-like';\nimport getType from './get-type';\nimport isPrototype from './is-prototype';\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction isEmpty(value) {\n /**\n * isEmpty(null) => true\n * isEmpty() => true\n * isEmpty(true) => true\n * isEmpty(1) => true\n * isEmpty([1, 2, 3]) => false\n * isEmpty('abc') => false\n * isEmpty({ a: 1 }) => false\n */\n if (isNil(value)) {\n return true;\n }\n if (isArrayLike(value)) {\n return !value.length;\n }\n var type = getType(value);\n if (type === 'Map' || type === 'Set') {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !Object.keys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\nexport default isEmpty;\n//# sourceMappingURL=is-empty.js.map","import isObjectLike from './is-object-like';\nimport isArrayLike from './is-array-like';\nimport isString from './is-string';\nvar isEqual = function (value, other) {\n if (value === other) {\n return true;\n }\n if (!value || !other) {\n return false;\n }\n if (isString(value) || isString(other)) {\n return false;\n }\n if (isArrayLike(value) || isArrayLike(other)) {\n if (value.length !== other.length) {\n return false;\n }\n var rst = true;\n for (var i = 0; i < value.length; i++) {\n rst = isEqual(value[i], other[i]);\n if (!rst) {\n break;\n }\n }\n return rst;\n }\n if (isObjectLike(value) || isObjectLike(other)) {\n var valueKeys = Object.keys(value);\n var otherKeys = Object.keys(other);\n if (valueKeys.length !== otherKeys.length) {\n return false;\n }\n var rst = true;\n for (var i = 0; i < valueKeys.length; i++) {\n rst = isEqual(value[valueKeys[i]], other[valueKeys[i]]);\n if (!rst) {\n break;\n }\n }\n return rst;\n }\n return false;\n};\nexport default isEqual;\n//# sourceMappingURL=is-equal.js.map","var map = {};\nexport default (function (prefix) {\n prefix = prefix || 'g';\n if (!map[prefix]) {\n map[prefix] = 1;\n }\n else {\n map[prefix] += 1;\n }\n return prefix + map[prefix];\n});\n//# sourceMappingURL=unique-id.js.map","import each from './each';\nimport isPlainObject from './is-plain-object';\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nexport default (function (object, keys) {\n if (object === null || !isPlainObject(object)) {\n return {};\n }\n var result = {};\n each(keys, function (key) {\n if (hasOwnProperty.call(object, key)) {\n result[key] = object[key];\n }\n });\n return result;\n});\n//# sourceMappingURL=pick.js.map","export default (function () { });\n//# sourceMappingURL=noop.js.map","/**\n * k-v 存储\n */\nvar default_1 = /** @class */ (function () {\n function default_1() {\n this.map = {};\n }\n default_1.prototype.has = function (key) {\n return this.map[key] !== undefined;\n };\n default_1.prototype.get = function (key, def) {\n var v = this.map[key];\n return v === undefined ? def : v;\n };\n default_1.prototype.set = function (key, value) {\n this.map[key] = value;\n };\n default_1.prototype.clear = function () {\n this.map = {};\n };\n default_1.prototype.delete = function (key) {\n delete this.map[key];\n };\n default_1.prototype.size = function () {\n return Object.keys(this.map).length;\n };\n return default_1;\n}());\nexport default default_1;\n//# sourceMappingURL=cache.js.map","export function removeFromArray(arr, obj) {\n var index = arr.indexOf(obj);\n if (index !== -1) {\n arr.splice(index, 1);\n }\n}\nexport var isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nexport { isNil, isFunction, isString, isObject, isArray, mix, each, upperFirst } from '@antv/util';\n// 是否元素的父容器\nexport function isParent(container, shape) {\n // 所有 shape 都是 canvas 的子元素\n if (container.isCanvas()) {\n return true;\n }\n var parent = shape.getParent();\n var isParent = false;\n while (parent) {\n if (parent === container) {\n isParent = true;\n break;\n }\n parent = parent.getParent();\n }\n return isParent;\n}\nexport function isAllowCapture(element) {\n // @ts-ignore\n return element.cfg.visible && element.cfg.capture;\n}\n//# sourceMappingURL=util.js.map","/**\r\n * Common utilities\r\n * @module glMatrix\r\n */\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nexport var RANDOM = Math.random;\n/**\r\n * Sets the type of array used when creating new vectors and matrices\r\n *\r\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\r\n */\n\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\n/**\r\n * Convert Degree To Radian\r\n *\r\n * @param {Number} a Angle in Degrees\r\n */\n\nexport function toRadian(a) {\n return a * degree;\n}\n/**\r\n * Tests whether or not the arguments have approximately the same value, within an absolute\r\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\r\n * than or equal to 1.0, and a relative tolerance is used for larger values)\r\n *\r\n * @param {Number} a The first number to test.\r\n * @param {Number} b The second number to test.\r\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};","import isArrayLike from './is-array-like';\nvar contains = function (arr, value) {\n if (!isArrayLike(arr)) {\n return false;\n }\n return arr.indexOf(value) > -1;\n};\nexport default contains;\n//# sourceMappingURL=contains.js.map","import isArrayLike from './is-array-like';\nvar filter = function (arr, func) {\n if (!isArrayLike(arr)) {\n return arr;\n }\n var result = [];\n for (var index = 0; index < arr.length; index++) {\n var value = arr[index];\n if (func(value, index)) {\n result.push(value);\n }\n }\n return result;\n};\nexport default filter;\n//# sourceMappingURL=filter.js.map","import filter from './filter';\nimport contains from './contains';\n/**\n * Flattens `array` a single level deep.\n *\n * @param {Array} arr The array to inspect.\n * @param {Array} values The values to exclude.\n * @return {Array} Returns the new array of filtered values.\n * @example\n * difference([2, 1], [2, 3]); // => [1]\n */\nvar difference = function (arr, values) {\n if (values === void 0) { values = []; }\n return filter(arr, function (value) { return !contains(values, value); });\n};\nexport default difference;\n//# sourceMappingURL=difference.js.map","import isObjectLike from './is-object-like';\nimport isType from './is-type';\nvar isPlainObject = function (value) {\n /**\n * isObjectLike(new Foo) => false\n * isObjectLike([1, 2, 3]) => false\n * isObjectLike({ x: 0, y: 0 }) => true\n * isObjectLike(Object.create(null)) => true\n */\n if (!isObjectLike(value) || !isType(value, 'Object')) {\n return false;\n }\n if (Object.getPrototypeOf(value) === null) {\n return true;\n }\n var proto = value;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(value) === proto;\n};\nexport default isPlainObject;\n//# sourceMappingURL=is-plain-object.js.map","import isFunction from './is-function';\nimport isMatch from './is-match';\nimport isArray from './is-array';\nimport isPlainObject from './is-plain-object';\nfunction find(arr, predicate) {\n if (!isArray(arr))\n return null;\n var _predicate;\n if (isFunction(predicate)) {\n _predicate = predicate;\n }\n if (isPlainObject(predicate)) {\n _predicate = function (a) { return isMatch(a, predicate); };\n }\n if (_predicate) {\n for (var i = 0; i < arr.length; i += 1) {\n if (_predicate(arr[i])) {\n return arr[i];\n }\n }\n }\n return null;\n}\nexport default find;\n//# sourceMappingURL=find.js.map","import isNil from './is-nil';\nimport isArray from './is-array';\nvar firstValue = function (data, name) {\n var rst = null;\n for (var i = 0; i < data.length; i++) {\n var obj = data[i];\n var value = obj[name];\n if (!isNil(value)) {\n if (isArray(value)) {\n rst = value[0]; // todo 这里是否应该使用递归,调用 firstValue @绝云\n }\n else {\n rst = value;\n }\n break;\n }\n }\n return rst;\n};\nexport default firstValue;\n//# sourceMappingURL=first-value.js.map","import isArray from './is-array';\n/**\n * Flattens `array` a single level deep.\n *\n * @param {Array} arr The array to flatten.\n * @return {Array} Returns the new flattened array.\n * @example\n *\n * flatten([1, [2, [3, [4]], 5]]); // => [1, 2, [3, [4]], 5]\n */\nvar flatten = function (arr) {\n if (!isArray(arr)) {\n return [];\n }\n var rst = [];\n for (var i = 0; i < arr.length; i++) {\n rst = rst.concat(arr[i]);\n }\n return rst;\n};\nexport default flatten;\n//# sourceMappingURL=flatten.js.map","import isArray from './is-array';\n/**\n * Flattens `array` a single level deep.\n *\n * @param {Array} arr The array to flatten.\n * @param {Array} result The array to return.\n * @return {Array} Returns the new flattened array.\n * @example\n *\n * flattenDeep([1, [2, [3, [4]], 5]]); // => [1, 2, 3, 4, 5]\n */\nvar flattenDeep = function (arr, result) {\n if (result === void 0) { result = []; }\n if (!isArray(arr)) {\n result.push(arr);\n }\n else {\n for (var i = 0; i < arr.length; i += 1) {\n flattenDeep(arr[i], result);\n }\n }\n return result;\n};\nexport default flattenDeep;\n//# sourceMappingURL=flatten-deep.js.map","import isArray from './is-array';\nvar getRange = function (values) {\n // 存在 NaN 时,min,max 判定会出问题\n var filterValues = values.filter(function (v) { return !isNaN(v); });\n if (!filterValues.length) { // 如果没有数值则直接返回0\n return {\n min: 0,\n max: 0,\n };\n }\n if (isArray(values[0])) {\n var tmp = [];\n for (var i = 0; i < values.length; i++) {\n tmp = tmp.concat(values[i]);\n }\n filterValues = tmp;\n }\n var max = Math.max.apply(null, filterValues);\n var min = Math.min.apply(null, filterValues);\n return {\n min: min,\n max: max,\n };\n};\nexport default getRange;\n//# sourceMappingURL=get-range.js.map","import each from './each';\nimport isArray from './is-array';\nimport isPlainObject from './is-plain-object';\nvar reduce = function (arr, fn, init) {\n if (!isArray(arr) && !isPlainObject(arr)) {\n return arr;\n }\n var result = init;\n each(arr, function (data, i) {\n result = fn(result, data, i);\n });\n return result;\n};\nexport default reduce;\n//# sourceMappingURL=reduce.js.map","import isArrayLike from './is-array-like';\nimport pullAt from './pull-at';\nvar remove = function (arr, predicate) {\n /**\n * const arr = [1, 2, 3, 4]\n * const evens = remove(arr, n => n % 2 == 0)\n * console.log(arr) // => [1, 3]\n * console.log(evens) // => [2, 4]\n */\n var result = [];\n if (!isArrayLike(arr)) {\n return result;\n }\n var i = -1;\n var indexes = [];\n var length = arr.length;\n while (++i < length) {\n var value = arr[i];\n if (predicate(value, i, arr)) {\n result.push(value);\n indexes.push(i);\n }\n }\n pullAt(arr, indexes);\n return result;\n};\nexport default remove;\n//# sourceMappingURL=remove.js.map","import isArray from './is-array';\nimport isString from './is-string';\nimport isFunction from './is-function';\nfunction sortBy(arr, key) {\n var comparer;\n if (isFunction(key)) {\n comparer = function (a, b) { return key(a) - key(b); };\n }\n else {\n var keys_1 = [];\n if (isString(key)) {\n keys_1.push(key);\n }\n else if (isArray(key)) {\n keys_1 = key;\n }\n comparer = function (a, b) {\n for (var i = 0; i < keys_1.length; i += 1) {\n var prop = keys_1[i];\n if (a[prop] > b[prop]) {\n return 1;\n }\n if (a[prop] < b[prop]) {\n return -1;\n }\n }\n return 0;\n };\n }\n arr.sort(comparer);\n return arr;\n}\nexport default sortBy;\n//# sourceMappingURL=sort-by.js.map","import contains from './contains';\nimport each from './each';\nvar uniq = function (arr) {\n var resultArr = [];\n each(arr, function (item) {\n if (!contains(resultArr, item)) {\n resultArr.push(item);\n }\n });\n return resultArr;\n};\nexport default uniq;\n//# sourceMappingURL=uniq.js.map","import uniq from './uniq';\nvar union = function () {\n var sources = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n sources[_i] = arguments[_i];\n }\n return uniq([].concat.apply([], sources));\n};\nexport default union;\n//# sourceMappingURL=union.js.map","import isArray from './is-array';\nimport isNil from './is-nil';\nexport default (function (data, name) {\n var rst = [];\n var tmpMap = {};\n for (var i = 0; i < data.length; i++) {\n var obj = data[i];\n var value = obj[name];\n if (!isNil(value)) {\n // flatten\n if (!isArray(value)) {\n value = [value];\n }\n for (var j = 0; j < value.length; j++) {\n var val = value[j];\n // unique\n if (!tmpMap[val]) {\n rst.push(val);\n tmpMap[val] = true;\n }\n }\n }\n }\n return rst;\n});\n//# sourceMappingURL=values-of-key.js.map","import isArrayLike from './is-array-like';\nexport default function head(o) {\n if (isArrayLike(o)) {\n return o[0];\n }\n return undefined;\n}\n//# sourceMappingURL=head.js.map","import isArrayLike from './is-array-like';\nexport default function last(o) {\n if (isArrayLike(o)) {\n var arr = o;\n return arr[arr.length - 1];\n }\n return undefined;\n}\n//# sourceMappingURL=last.js.map","import isArray from './is-array';\nimport isString from './is-string';\nfunction startsWith(arr, e) {\n return (isArray(arr) || isString(arr)) ? arr[0] === e : false;\n}\nexport default startsWith;\n//# sourceMappingURL=starts-with.js.map","import isArray from './is-array';\nimport isString from './is-string';\nfunction endsWith(arr, e) {\n return (isArray(arr) || isString(arr)) ? arr[arr.length - 1] === e : false;\n}\nexport default endsWith;\n//# sourceMappingURL=ends-with.js.map","/**\n * 只要有一个不满足条件就返回 false\n * @param arr\n * @param func\n */\nvar every = function (arr, func) {\n for (var i = 0; i < arr.length; i++) {\n if (!func(arr[i], i))\n return false;\n }\n return true;\n};\nexport default every;\n//# sourceMappingURL=every.js.map","/**\n * 只要有一个满足条件就返回 true\n * @param arr\n * @param func\n */\nvar some = function (arr, func) {\n for (var i = 0; i < arr.length; i++) {\n if (func(arr[i], i))\n return true;\n }\n return false;\n};\nexport default some;\n//# sourceMappingURL=some.js.map","import isArray from './is-array';\nimport isFunction from './is-function';\nimport groupBy from './group-by';\nvar groupToMap = function (data, condition) {\n if (!condition) {\n return {\n 0: data,\n };\n }\n if (!isFunction(condition)) {\n var paramsCondition_1 = isArray(condition) ? condition : condition.replace(/\\s+/g, '').split('*');\n condition = function (row) {\n var unique = '_'; // 避免出现数字作为Key的情况,会进行按照数字的排序\n for (var i = 0, l = paramsCondition_1.length; i < l; i++) {\n unique += row[paramsCondition_1[i]] && row[paramsCondition_1[i]].toString();\n }\n return unique;\n };\n }\n var groups = groupBy(data, condition);\n return groups;\n};\nexport default groupToMap;\n//# sourceMappingURL=group-to-map.js.map","import groupToMap from './group-to-map';\nexport default (function (data, condition) {\n if (!condition) {\n // 没有条件,则自身改成数组\n return [data];\n }\n var groups = groupToMap(data, condition);\n var array = [];\n for (var i in groups) {\n array.push(groups[i]);\n }\n return array;\n});\n//# sourceMappingURL=group.js.map","/**\n * 获取封装的事件\n * @protected\n * @param {Object} obj 对象\n * @param {String} action 事件名称\n * @return {Function} 返回事件处理函数\n */\nfunction getWrapBehavior(obj, action) {\n return obj['_wrap_' + action];\n}\nexport default getWrapBehavior;\n//# sourceMappingURL=get-wrap-behavior.js.map","/**\n * 封装事件,便于使用上下文this,和便于解除事件时使用\n * @protected\n * @param {Object} obj 对象\n * @param {String} action 事件名称\n * @return {Function} 返回事件处理函数\n */\nfunction wrapBehavior(obj, action) {\n if (obj['_wrap_' + action]) {\n return obj['_wrap_' + action];\n }\n var method = function (e) {\n obj[action](e);\n };\n obj['_wrap_' + action] = method;\n return method;\n}\nexport default wrapBehavior;\n//# sourceMappingURL=wrap-behavior.js.map","var numColorCache = {};\nfunction numberToColor(num) {\n // 增加缓存\n var color = numColorCache[num];\n if (!color) {\n var str = num.toString(16);\n for (var i = str.length; i < 6; i++) {\n str = '0' + str;\n }\n color = '#' + str;\n numColorCache[num] = color;\n }\n return color;\n}\nexport default numberToColor;\n//# sourceMappingURL=number2color.js.map","var clamp = function (a, min, max) {\n if (a < min) {\n return min;\n }\n else if (a > max) {\n return max;\n }\n return a;\n};\nexport default clamp;\n//# sourceMappingURL=clamp.js.map","var fixedBase = function (v, base) {\n var str = base.toString();\n var index = str.indexOf('.');\n if (index === -1) {\n return Math.round(v);\n }\n var length = str.substr(index + 1).length;\n if (length > 20) {\n length = 20;\n }\n return parseFloat(v.toFixed(length));\n};\nexport default fixedBase;\n//# sourceMappingURL=fixed-base.js.map","import isNumber from './is-number';\nvar isDecimal = function (num) {\n return isNumber(num) && num % 1 !== 0;\n};\nexport default isDecimal;\n//# sourceMappingURL=is-decimal.js.map","import isNumber from './is-number';\nvar isEven = function (num) {\n return isNumber(num) && num % 2 === 0;\n};\nexport default isEven;\n//# sourceMappingURL=is-even.js.map","import isNumber from './is-number';\nvar isNegative = function (num) {\n return isNumber(num) && num < 0;\n};\nexport default isNegative;\n//# sourceMappingURL=is-negative.js.map","import isNumber from './is-number';\nvar isPositive = function (num) {\n return isNumber(num) && num > 0;\n};\nexport default isPositive;\n//# sourceMappingURL=is-positive.js.map","import each from './each';\nimport isArray from './is-array';\nimport isFunction from './is-function';\n/**\n * @param {Array} arr The array to iterate over.\n * @param {Function} [fn] The iteratee invoked per element.\n * @return {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\nexport default (function (arr, fn) {\n if (!isArray(arr)) {\n return undefined;\n }\n var max = arr[0];\n var maxData;\n if (isFunction(fn)) {\n maxData = fn(arr[0]);\n }\n else {\n maxData = arr[0][fn];\n }\n var data;\n each(arr, function (val) {\n if (isFunction(fn)) {\n data = fn(val);\n }\n else {\n data = val[fn];\n }\n if (data > maxData) {\n max = val;\n maxData = data;\n }\n });\n return max;\n});\n//# sourceMappingURL=max-by.js.map","import each from './each';\nimport isArray from './is-array';\nimport isFunction from './is-function';\n/**\n * @param {Array} arr The array to iterate over.\n * @param {Function} [fn] The iteratee invoked per element.\n * @return {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nexport default (function (arr, fn) {\n if (!isArray(arr)) {\n return undefined;\n }\n var min = arr[0];\n var minData;\n if (isFunction(fn)) {\n minData = fn(arr[0]);\n }\n else {\n minData = arr[0][fn];\n }\n var data;\n each(arr, function (val) {\n if (isFunction(fn)) {\n data = fn(val);\n }\n else {\n data = val[fn];\n }\n if (data < minData) {\n min = val;\n minData = data;\n }\n });\n return min;\n});\n//# sourceMappingURL=min-by.js.map","import each from './each';\nexport default each;\n//# sourceMappingURL=for-in.js.map","export default (function (obj, key) { return obj.hasOwnProperty(key); });\n//# sourceMappingURL=has.js.map","import has from './has';\nexport default has;\n//# sourceMappingURL=has-key.js.map","import contains from './contains';\nimport values from './values';\nexport default (function (obj, value) { return contains(values(obj), value); });\n//# sourceMappingURL=has-value.js.map","import toString from './to-string';\nvar lowerCase = function (str) {\n return toString(str).toLowerCase();\n};\nexport default lowerCase;\n//# sourceMappingURL=lower-case.js.map","import toString from './to-string';\nvar lowerFirst = function (value) {\n var str = toString(value);\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\nexport default lowerFirst;\n//# sourceMappingURL=lower-first.js.map","import toString from './to-string';\nvar upperCase = function (str) {\n return toString(str).toUpperCase();\n};\nexport default upperCase;\n//# sourceMappingURL=upper-case.js.map","var toString = {}.toString;\nvar getType = function (value) {\n return toString.call(value).replace(/^\\[object /, '').replace(/]$/, '');\n};\nexport default getType;\n//# sourceMappingURL=get-type.js.map","/**\n * 是否是参数类型\n *\n * @param {Object} value 测试的值\n * @return {Boolean}\n */\nimport isType from './is-type';\nvar isArguments = function (value) {\n return isType(value, 'Arguments');\n};\nexport default isArguments;\n//# sourceMappingURL=is-arguments.js.map","/**\n * 是否是布尔类型\n *\n * @param {Object} value 测试的值\n * @return {Boolean}\n */\nimport isType from './is-type';\nvar isBoolean = function (value) {\n return isType(value, 'Boolean');\n};\nexport default isBoolean;\n//# sourceMappingURL=is-boolean.js.map","import isType from './is-type';\nvar isDate = function (value) {\n return isType(value, 'Date');\n};\nexport default isDate;\n//# sourceMappingURL=is-date.js.map","/**\n * 是否是参数类型\n *\n * @param {Object} value 测试的值\n * @return {Boolean}\n */\nimport isType from './is-type';\nvar isError = function (value) {\n return isType(value, 'Error');\n};\nexport default isError;\n//# sourceMappingURL=is-error.js.map","/**\n * 判断是否为有限数\n * @return {Boolean}\n */\nimport isNumber from './is-number';\nexport default function (value) {\n return isNumber(value) && isFinite(value);\n}\n//# sourceMappingURL=is-finite.js.map","var isNull = function (value) {\n return value === null;\n};\nexport default isNull;\n//# sourceMappingURL=is-null.js.map","import isType from './is-type';\nvar isRegExp = function (str) {\n return isType(str, 'RegExp');\n};\nexport default isRegExp;\n//# sourceMappingURL=is-reg-exp.js.map","var isUndefined = function (value) {\n return value === undefined;\n};\nexport default isUndefined;\n//# sourceMappingURL=is-undefined.js.map","/**\n * 判断是否HTML元素\n * @return {Boolean} 是否HTML元素\n */\nvar isElement = function (o) {\n return o instanceof Element || o instanceof HTMLDocument;\n};\nexport default isElement;\n//# sourceMappingURL=is-element.js.map","export default function requestAnimationFrame(fn) {\n var method = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n // @ts-ignore\n window.mozRequestAnimationFrame ||\n // @ts-ignore\n window.msRequestAnimationFrame ||\n function (f) {\n return setTimeout(f, 16);\n };\n return method(fn);\n}\n;\n//# sourceMappingURL=request-animation-frame.js.map","export default function cancelAnimationFrame(handler) {\n var method = window.cancelAnimationFrame ||\n window.webkitCancelAnimationFrame ||\n // @ts-ignore\n window.mozCancelAnimationFrame ||\n // @ts-ignore\n window.msCancelAnimationFrame ||\n clearTimeout;\n method(handler);\n}\n;\n//# sourceMappingURL=clear-animation-frame.js.map","import mix from './mix';\nimport isFunction from './is-function';\nvar augment = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var c = args[0];\n for (var i = 1; i < args.length; i++) {\n var obj = args[i];\n if (isFunction(obj)) {\n obj = obj.prototype;\n }\n mix(c.prototype, obj);\n }\n};\nexport default augment;\n//# sourceMappingURL=augment.js.map","import isArray from './is-array';\nvar clone = function (obj) {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n var rst;\n if (isArray(obj)) {\n rst = [];\n for (var i = 0, l = obj.length; i < l; i++) {\n if (typeof obj[i] === 'object' && obj[i] != null) {\n rst[i] = clone(obj[i]);\n }\n else {\n rst[i] = obj[i];\n }\n }\n }\n else {\n rst = {};\n for (var k in obj) {\n if (typeof obj[k] === 'object' && obj[k] != null) {\n rst[k] = clone(obj[k]);\n }\n else {\n rst[k] = obj[k];\n }\n }\n }\n return rst;\n};\nexport default clone;\n//# sourceMappingURL=clone.js.map","function debounce(func, wait, immediate) {\n var timeout;\n return function () {\n var context = this, args = arguments;\n var later = function () {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n}\nexport default debounce;\n//# sourceMappingURL=debounce.js.map","import isFunction from './is-function';\n/**\n * _.memoize(calColor);\n * _.memoize(calColor, (...args) => args[0]);\n * @param f\n * @param resolver\n */\nexport default (function (f, resolver) {\n if (!isFunction(f)) {\n throw new TypeError('Expected a function');\n }\n var memoized = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n // 使用方法构造 key,如果不存在 resolver,则直接取第一个参数作为 key\n var key = resolver ? resolver.apply(this, args) : args[0];\n var cache = memoized.cache;\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = f.apply(this, args);\n // 缓存起来\n cache.set(key, result);\n return result;\n };\n memoized.cache = new Map();\n return memoized;\n});\n//# sourceMappingURL=memoize.js.map","import isArray from './is-array';\nimport isPlainObject from './is-plain-object';\nvar MAX_MIX_LEVEL = 5;\nfunction _deepMix(dist, src, level, maxLevel) {\n level = level || 0;\n maxLevel = maxLevel || MAX_MIX_LEVEL;\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n var value = src[key];\n if (value !== null && isPlainObject(value)) {\n if (!isPlainObject(dist[key])) {\n dist[key] = {};\n }\n if (level < maxLevel) {\n _deepMix(dist[key], value, level + 1, maxLevel);\n }\n else {\n dist[key] = src[key];\n }\n }\n else if (isArray(value)) {\n dist[key] = [];\n dist[key] = dist[key].concat(value);\n }\n else if (value !== undefined) {\n dist[key] = value;\n }\n }\n }\n}\n// todo 重写\nvar deepMix = function (rst) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < args.length; i += 1) {\n _deepMix(rst, args[i]);\n }\n return rst;\n};\nexport default deepMix;\n//# sourceMappingURL=deep-mix.js.map","import mix from './mix';\nimport isFunction from './is-function';\nvar extend = function (subclass, superclass, overrides, staticOverrides) {\n // 如果只提供父类构造函数,则自动生成子类构造函数\n if (!isFunction(superclass)) {\n overrides = superclass;\n superclass = subclass;\n subclass = function () { };\n }\n var create = Object.create ?\n function (proto, c) {\n return Object.create(proto, {\n constructor: {\n value: c\n }\n });\n } :\n function (proto, c) {\n function Tmp() { }\n Tmp.prototype = proto;\n var o = new Tmp();\n o.constructor = c;\n return o;\n };\n var superObj = create(superclass.prototype, subclass); // new superclass(),//实例化父类作为子类的prototype\n subclass.prototype = mix(superObj, subclass.prototype); // 指定子类的prototype\n subclass.superclass = create(superclass.prototype, superclass);\n mix(superObj, overrides);\n mix(subclass, staticOverrides);\n return subclass;\n};\nexport default extend;\n//# sourceMappingURL=extend.js.map","import isArrayLike from './is-array-like';\nvar indexOf = function (arr, obj) {\n if (!isArrayLike(arr)) {\n return -1;\n }\n var m = Array.prototype.indexOf;\n if (m) {\n return m.call(arr, obj);\n }\n var index = -1;\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] === obj) {\n index = i;\n break;\n }\n }\n return index;\n};\nexport default indexOf;\n//# sourceMappingURL=index-of.js.map","import isFunction from './is-function';\nimport isEqual from './is-equal';\n/**\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [fn] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * isEqualWith(array, other, customizer); // => true\n */\nexport default (function (value, other, fn) {\n if (!isFunction(fn)) {\n return isEqual(value, other);\n }\n return !!fn(value, other);\n});\n//# sourceMappingURL=is-equal-with.js.map","import isArrayLike from './is-array-like';\nvar map = function (arr, func) {\n if (!isArrayLike(arr)) {\n // @ts-ignore\n return arr;\n }\n var result = [];\n for (var index = 0; index < arr.length; index++) {\n var value = arr[index];\n result.push(func(value, index));\n }\n return result;\n};\nexport default map;\n//# sourceMappingURL=map.js.map","import isNil from './is-nil';\nimport isObject from './is-object';\nvar identity = function (v) { return v; };\nexport default (function (object, func) {\n if (func === void 0) { func = identity; }\n var r = {};\n if (isObject(object) && !isNil(object)) {\n Object.keys(object).forEach(function (key) {\n // @ts-ignore\n r[key] = func(object[key], key);\n });\n }\n return r;\n});\n//# sourceMappingURL=map-values.js.map","import isString from './is-string';\n/**\n * https://github.com/developit/dlv/blob/master/index.js\n * @param obj\n * @param key\n * @param defaultValue\n */\nexport default (function (obj, key, defaultValue) {\n var p = 0;\n var keyArr = isString(key) ? key.split('.') : key;\n while (obj && p < keyArr.length) {\n obj = obj[keyArr[p++]];\n }\n return (obj === undefined || p < keyArr.length) ? defaultValue : obj;\n});\n//# sourceMappingURL=get.js.map","import isObject from './is-object';\nimport isString from './is-string';\nimport isNumber from './is-number';\n/**\n * https://github.com/developit/dlv/blob/master/index.js\n * @param obj\n * @param path\n * @param value\n */\nexport default (function (obj, path, value) {\n var o = obj;\n var keyArr = isString(path) ? path.split('.') : path;\n keyArr.forEach(function (key, idx) {\n // 不是最后一个\n if (idx < keyArr.length - 1) {\n if (!isObject(o[key])) {\n o[key] = isNumber(keyArr[idx + 1]) ? [] : {};\n }\n o = o[key];\n }\n else {\n o[key] = value;\n }\n });\n return obj;\n});\n//# sourceMappingURL=set.js.map","export default (function (func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options)\n options = {};\n var later = function () {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout)\n context = args = null;\n };\n var throttled = function () {\n var now = Date.now();\n if (!previous && options.leading === false)\n previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout)\n context = args = null;\n }\n else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n return throttled;\n});\n//# sourceMappingURL=throttle.js.map","import isArrayLike from './is-array-like';\nexport default (function (value) {\n return isArrayLike(value) ? Array.prototype.slice.call(value) : [];\n});\n//# sourceMappingURL=to-array.js.map","export default (function (v) { return v; });\n//# sourceMappingURL=identity.js.map","import isNil from './is-nil';\nimport isArraylike from './is-array-like';\nexport default function size(o) {\n if (isNil(o)) {\n return 0;\n }\n if (isArraylike(o)) {\n return o.length;\n }\n return Object.keys(o).length;\n}\n//# sourceMappingURL=size.js.map","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","function minNum(array) {\n return Math.min.apply(null, array);\n}\nfunction maxNum(array) {\n return Math.max.apply(null, array);\n}\n/**\n * 两点之间的距离\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @return {number} 距离\n */\nexport function distance(x1, y1, x2, y2) {\n var dx = x1 - x2;\n var dy = y1 - y2;\n return Math.sqrt(dx * dx + dy * dy);\n}\nexport function isNumberEqual(v1, v2) {\n return Math.abs(v1 - v2) < 0.001;\n}\nexport function getBBoxByArray(xArr, yArr) {\n var minX = minNum(xArr);\n var minY = minNum(yArr);\n var maxX = maxNum(xArr);\n var maxY = maxNum(yArr);\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n}\nexport function getBBoxRange(x1, y1, x2, y2) {\n return {\n minX: minNum([x1, x2]),\n maxX: maxNum([x1, x2]),\n minY: minNum([y1, y2]),\n maxY: maxNum([y1, y2]),\n };\n}\nexport function piMod(angle) {\n return (angle + Math.PI * 2) % (Math.PI * 2);\n}\n//# sourceMappingURL=util.js.map","/**\r\n * Common utilities\r\n * @module glMatrix\r\n */\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nexport var RANDOM = Math.random;\n/**\r\n * Sets the type of array used when creating new vectors and matrices\r\n *\r\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\r\n */\n\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\n/**\r\n * Convert Degree To Radian\r\n *\r\n * @param {Number} a Angle in Degrees\r\n */\n\nexport function toRadian(a) {\n return a * degree;\n}\n/**\r\n * Tests whether or not the arguments have approximately the same value, within an absolute\r\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\r\n * than or equal to 1.0, and a relative tolerance is used for larger values)\r\n *\r\n * @param {Number} a The first number to test.\r\n * @param {Number} b The second number to test.\r\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};","import * as glMatrix from \"./common.js\";\n/**\r\n * 2 Dimensional Vector\r\n * @module vec2\r\n */\n\n/**\r\n * Creates a new, empty vec2\r\n *\r\n * @returns {vec2} a new 2D vector\r\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(2);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec2 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec2} a vector to clone\r\n * @returns {vec2} a new 2D vector\r\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\r\n * Creates a new vec2 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} a new 2D vector\r\n */\n\nexport function fromValues(x, y) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\r\n * Copy the values from one vec2 to another\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the source vector\r\n * @returns {vec2} out\r\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\r\n * Set the components of a vec2 to the given values\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} out\r\n */\n\nexport function set(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\r\n * Adds two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n}\n/**\r\n * Multiplies two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n}\n/**\r\n * Divides two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to ceil\r\n * @returns {vec2} out\r\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to floor\r\n * @returns {vec2} out\r\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n}\n/**\r\n * Math.round the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to round\r\n * @returns {vec2} out\r\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n return out;\n}\n/**\r\n * Scales a vec2 by a scalar number\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec2} out\r\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n}\n/**\r\n * Adds two vec2's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec2} out\r\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec2's\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return Math.hypot(x, y);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec2's\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return x * x + y * y;\n}\n/**\r\n * Calculates the length of a vec2\r\n *\r\n * @param {ReadonlyVec2} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nexport function length(a) {\n var x = a[0],\n y = a[1];\n return Math.hypot(x, y);\n}\n/**\r\n * Calculates the squared length of a vec2\r\n *\r\n * @param {ReadonlyVec2} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nexport function squaredLength(a) {\n var x = a[0],\n y = a[1];\n return x * x + y * y;\n}\n/**\r\n * Negates the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to negate\r\n * @returns {vec2} out\r\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to invert\r\n * @returns {vec2} out\r\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n}\n/**\r\n * Normalize a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to normalize\r\n * @returns {vec2} out\r\n */\n\nexport function normalize(out, a) {\n var x = a[0],\n y = a[1];\n var len = x * x + y * y;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec2's\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\r\n * Computes the cross product of two vec2's\r\n * Note that the cross product must by definition produce a 3D vector\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function cross(out, a, b) {\n var z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec2} out\r\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0],\n ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec2} out\r\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n out[0] = Math.cos(r) * scale;\n out[1] = Math.sin(r) * scale;\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat2} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat2(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat2d\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat2d} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat2d(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat3\r\n * 3rd vector component is implicitly '1'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat3} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat4\r\n * 3rd vector component is implicitly '0'\r\n * 4th vector component is implicitly '1'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0];\n var y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n}\n/**\r\n * Rotate a 2D vector\r\n * @param {vec2} out The receiving vec2\r\n * @param {ReadonlyVec2} a The vec2 point to rotate\r\n * @param {ReadonlyVec2} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec2} out\r\n */\n\nexport function rotate(out, a, b, rad) {\n //Translate point to the origin\n var p0 = a[0] - b[0],\n p1 = a[1] - b[1],\n sinC = Math.sin(rad),\n cosC = Math.cos(rad); //perform rotation and translate to correct position\n\n out[0] = p0 * cosC - p1 * sinC + b[0];\n out[1] = p0 * sinC + p1 * cosC + b[1];\n return out;\n}\n/**\r\n * Get the angle between two 2D vectors\r\n * @param {ReadonlyVec2} a The first operand\r\n * @param {ReadonlyVec2} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\n\nexport function angle(a, b) {\n var x1 = a[0],\n y1 = a[1],\n x2 = b[0],\n y2 = b[1],\n // mag is the product of the magnitudes of a and b\n mag = Math.sqrt(x1 * x1 + y1 * y1) * Math.sqrt(x2 * x2 + y2 * y2),\n // mag &&.. short circuits if mag == 0\n cosine = mag && (x1 * x2 + y1 * y2) / mag; // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1\n\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\r\n * Set the components of a vec2 to zero\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @returns {vec2} out\r\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec2} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nexport function str(a) {\n return \"vec2(\" + a[0] + \", \" + a[1] + \")\";\n}\n/**\r\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec2} a The first vector.\r\n * @param {ReadonlyVec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec2} a The first vector.\r\n * @param {ReadonlyVec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1];\n var b0 = b[0],\n b1 = b[1];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));\n}\n/**\r\n * Alias for {@link vec2.length}\r\n * @function\r\n */\n\nexport var len = length;\n/**\r\n * Alias for {@link vec2.subtract}\r\n * @function\r\n */\n\nexport var sub = subtract;\n/**\r\n * Alias for {@link vec2.multiply}\r\n * @function\r\n */\n\nexport var mul = multiply;\n/**\r\n * Alias for {@link vec2.divide}\r\n * @function\r\n */\n\nexport var div = divide;\n/**\r\n * Alias for {@link vec2.distance}\r\n * @function\r\n */\n\nexport var dist = distance;\n/**\r\n * Alias for {@link vec2.squaredDistance}\r\n * @function\r\n */\n\nexport var sqrDist = squaredDistance;\n/**\r\n * Alias for {@link vec2.squaredLength}\r\n * @function\r\n */\n\nexport var sqrLen = squaredLength;\n/**\r\n * Perform some operation over an array of vec2s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 2;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n }\n\n return a;\n };\n}();","import { distance, getBBoxByArray } from './util';\nimport * as vec2 from 'gl-matrix/vec2';\nexport default {\n /**\n * 计算线段的包围盒\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @return {object} 包围盒对象\n */\n box: function (x1, y1, x2, y2) {\n return getBBoxByArray([x1, x2], [y1, y2]);\n },\n /**\n * 线段的长度\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @return {number} 距离\n */\n length: function (x1, y1, x2, y2) {\n return distance(x1, y1, x2, y2);\n },\n /**\n * 根据比例获取点\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @param {number} t 指定比例\n * @return {object} 包含 x, y 的点\n */\n pointAt: function (x1, y1, x2, y2, t) {\n return {\n x: (1 - t) * x1 + t * x2,\n y: (1 - t) * y1 + t * y2,\n };\n },\n /**\n * 点到线段的距离\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @param {number} x 测试点 x\n * @param {number} y 测试点 y\n * @return {number} 距离\n */\n pointDistance: function (x1, y1, x2, y2, x, y) {\n // 投影距离 x1, y1 的向量,假设 p, p1, p2 三个点,投影点为 a\n // p1a = p1p.p1p2/|p1p2| * (p1p 的单位向量)\n var cross = (x2 - x1) * (x - x1) + (y2 - y1) * (y - y1);\n if (cross < 0) {\n return distance(x1, y1, x, y);\n }\n var lengthSquare = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);\n if (cross > lengthSquare) {\n return distance(x2, y2, x, y);\n }\n return this.pointToLine(x1, y1, x2, y2, x, y);\n },\n /**\n * 点到直线的距离,而不是点到线段的距离\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @param {number} x 测试点 x\n * @param {number} y 测试点 y\n * @return {number} 距离\n */\n pointToLine: function (x1, y1, x2, y2, x, y) {\n var d = [x2 - x1, y2 - y1];\n // 如果端点相等,则判定点到点的距离\n if (vec2.exactEquals(d, [0, 0])) {\n return Math.sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));\n }\n var u = [-d[1], d[0]];\n vec2.normalize(u, u);\n var a = [x - x1, y - y1];\n return Math.abs(vec2.dot(a, u));\n },\n /**\n * 线段的角度\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @return {number} 导数\n */\n tangentAngle: function (x1, y1, x2, y2) {\n return Math.atan2(y2 - y1, x2 - x1);\n },\n};\n//# sourceMappingURL=line.js.map","import { distance } from './util';\nvar EPSILON = 0.0001;\n/**\n * 使用牛顿切割法求最近的点\n * @param {number[]} xArr 点的 x 数组\n * @param {number[]} yArr 点的 y 数组\n * @param {number} x 指定的点 x\n * @param {number} y 指定的点 y\n * @param {Function} tCallback 差值函数\n */\nexport function nearestPoint(xArr, yArr, x, y, tCallback, length) {\n var t;\n var d = Infinity;\n var v0 = [x, y];\n var segNum = 20;\n if (length && length > 200) {\n segNum = length / 10;\n }\n var increaseRate = 1 / segNum;\n var interval = increaseRate / 10;\n for (var i = 0; i <= segNum; i++) {\n var _t = i * increaseRate;\n var v1 = [tCallback.apply(null, xArr.concat([_t])), tCallback.apply(null, yArr.concat([_t]))];\n var d1 = distance(v0[0], v0[1], v1[0], v1[1]);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n // 提前终止\n if (t === 0) {\n return {\n x: xArr[0],\n y: yArr[0],\n };\n }\n if (t === 1) {\n var count = xArr.length;\n return {\n x: xArr[count - 1],\n y: yArr[count - 1],\n };\n }\n d = Infinity;\n for (var i = 0; i < 32; i++) {\n if (interval < EPSILON) {\n break;\n }\n var prev = t - interval;\n var next = t + interval;\n var v1 = [tCallback.apply(null, xArr.concat([prev])), tCallback.apply(null, yArr.concat([prev]))];\n var d1 = distance(v0[0], v0[1], v1[0], v1[1]);\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n }\n else {\n var v2 = [tCallback.apply(null, xArr.concat([next])), tCallback.apply(null, yArr.concat([next]))];\n var d2 = distance(v0[0], v0[1], v2[0], v2[1]);\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n }\n else {\n interval *= 0.5;\n }\n }\n }\n return {\n x: tCallback.apply(null, xArr.concat([t])),\n y: tCallback.apply(null, yArr.concat([t])),\n };\n}\n// 近似求解 https://community.khronos.org/t/3d-cubic-bezier-segment-length/62363/2\nexport function snapLength(xArr, yArr) {\n var totalLength = 0;\n var count = xArr.length;\n for (var i = 0; i < count; i++) {\n var x = xArr[i];\n var y = yArr[i];\n var nextX = xArr[(i + 1) % count];\n var nextY = yArr[(i + 1) % count];\n totalLength += distance(x, y, nextX, nextY);\n }\n return totalLength / 2;\n}\n//# sourceMappingURL=bezier.js.map","import line from './line';\nimport { distance, isNumberEqual, getBBoxByArray, piMod } from './util';\nimport { nearestPoint } from './bezier';\n// 差值公式\nfunction quadraticAt(p0, p1, p2, t) {\n var onet = 1 - t;\n return onet * onet * p0 + 2 * t * onet * p1 + t * t * p2;\n}\n// 求极值\nfunction extrema(p0, p1, p2) {\n var a = p0 + p2 - 2 * p1;\n if (isNumberEqual(a, 0)) {\n return [0.5];\n }\n var rst = (p0 - p1) / a;\n if (rst <= 1 && rst >= 0) {\n return [rst];\n }\n return [];\n}\nfunction derivativeAt(p0, p1, p2, t) {\n return 2 * (1 - t) * (p1 - p0) + 2 * t * (p2 - p1);\n}\n// 分割贝塞尔曲线\nfunction divideQuadratic(x1, y1, x2, y2, x3, y3, t) {\n // 划分点\n var xt = quadraticAt(x1, x2, x3, t);\n var yt = quadraticAt(y1, y2, y3, t);\n // 分割的第一条曲线的控制点\n var controlPoint1 = line.pointAt(x1, y1, x2, y2, t);\n // 分割的第二条曲线的控制点\n var controlPoint2 = line.pointAt(x2, y2, x3, y3, t);\n return [\n [x1, y1, controlPoint1.x, controlPoint1.y, xt, yt],\n [xt, yt, controlPoint2.x, controlPoint2.y, x3, y3],\n ];\n}\n// 使用迭代法取贝塞尔曲线的长度\nfunction quadraticLength(x1, y1, x2, y2, x3, y3, iterationCount) {\n if (iterationCount === 0) {\n return (distance(x1, y1, x2, y2) + distance(x2, y2, x3, y3) + distance(x1, y1, x3, y3)) / 2;\n }\n var quadratics = divideQuadratic(x1, y1, x2, y2, x3, y3, 0.5);\n var left = quadratics[0];\n var right = quadratics[1];\n left.push(iterationCount - 1);\n right.push(iterationCount - 1);\n return quadraticLength.apply(null, left) + quadraticLength.apply(null, right);\n}\nexport default {\n box: function (x1, y1, x2, y2, x3, y3) {\n var xExtrema = extrema(x1, x2, x3)[0];\n var yExtrema = extrema(y1, y2, y3)[0];\n // 控制点不加入 box 的计算\n var xArr = [x1, x3];\n var yArr = [y1, y3];\n if (xExtrema !== undefined) {\n xArr.push(quadraticAt(x1, x2, x3, xExtrema));\n }\n if (yExtrema !== undefined) {\n yArr.push(quadraticAt(y1, y2, y3, yExtrema));\n }\n return getBBoxByArray(xArr, yArr);\n },\n length: function (x1, y1, x2, y2, x3, y3) {\n return quadraticLength(x1, y1, x2, y2, x3, y3, 3);\n },\n nearestPoint: function (x1, y1, x2, y2, x3, y3, x0, y0) {\n return nearestPoint([x1, x2, x3], [y1, y2, y3], x0, y0, quadraticAt);\n },\n pointDistance: function (x1, y1, x2, y2, x3, y3, x0, y0) {\n var point = this.nearestPoint(x1, y1, x2, y2, x3, y3, x0, y0);\n return distance(point.x, point.y, x0, y0);\n },\n interpolationAt: quadraticAt,\n pointAt: function (x1, y1, x2, y2, x3, y3, t) {\n return {\n x: quadraticAt(x1, x2, x3, t),\n y: quadraticAt(y1, y2, y3, t),\n };\n },\n divide: function (x1, y1, x2, y2, x3, y3, t) {\n return divideQuadratic(x1, y1, x2, y2, x3, y3, t);\n },\n tangentAngle: function (x1, y1, x2, y2, x3, y3, t) {\n var dx = derivativeAt(x1, x2, x3, t);\n var dy = derivativeAt(y1, y2, y3, t);\n var angle = Math.atan2(dy, dx);\n return piMod(angle);\n },\n};\n//# sourceMappingURL=quadratic.js.map","import { distance, isNumberEqual, getBBoxByArray, piMod } from './util';\nimport line from './line';\nimport { snapLength, nearestPoint } from './bezier';\nfunction cubicAt(p0, p1, p2, p3, t) {\n var onet = 1 - t; // t * t * t 的性能大概是 Math.pow(t, 3) 的三倍\n return onet * onet * onet * p0 + 3 * p1 * t * onet * onet + 3 * p2 * t * t * onet + p3 * t * t * t;\n}\nfunction derivativeAt(p0, p1, p2, p3, t) {\n var onet = 1 - t;\n return 3 * (onet * onet * (p1 - p0) + 2 * onet * t * (p2 - p1) + t * t * (p3 - p2));\n}\nfunction extrema(p0, p1, p2, p3) {\n var a = -3 * p0 + 9 * p1 - 9 * p2 + 3 * p3;\n var b = 6 * p0 - 12 * p1 + 6 * p2;\n var c = 3 * p1 - 3 * p0;\n var extremas = [];\n var t1;\n var t2;\n var discSqrt;\n if (isNumberEqual(a, 0)) {\n if (!isNumberEqual(b, 0)) {\n t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n extremas.push(t1);\n }\n }\n }\n else {\n var disc = b * b - 4 * a * c;\n if (isNumberEqual(disc, 0)) {\n extremas.push(-b / (2 * a));\n }\n else if (disc > 0) {\n discSqrt = Math.sqrt(disc);\n t1 = (-b + discSqrt) / (2 * a);\n t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n extremas.push(t1);\n }\n if (t2 >= 0 && t2 <= 1) {\n extremas.push(t2);\n }\n }\n }\n return extremas;\n}\n// 分割贝塞尔曲线\nfunction divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, t) {\n // 划分点\n var xt = cubicAt(x1, x2, x3, x4, t);\n var yt = cubicAt(y1, y2, y3, y4, t);\n // 计算两点之间的差值点\n var c1 = line.pointAt(x1, y1, x2, y2, t);\n var c2 = line.pointAt(x2, y2, x3, y3, t);\n var c3 = line.pointAt(x3, y3, x4, y4, t);\n var c12 = line.pointAt(c1.x, c1.y, c2.x, c2.y, t);\n var c23 = line.pointAt(c2.x, c2.y, c3.x, c3.y, t);\n return [\n [x1, y1, c1.x, c1.y, c12.x, c12.y, xt, yt],\n [xt, yt, c23.x, c23.y, c3.x, c3.y, x4, y4],\n ];\n}\n// 使用迭代法取贝塞尔曲线的长度,二阶和三阶分开写,更清晰和便于调试\nfunction cubicLength(x1, y1, x2, y2, x3, y3, x4, y4, iterationCount) {\n if (iterationCount === 0) {\n return snapLength([x1, x2, x3, x4], [y1, y2, y3, y4]);\n }\n var cubics = divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, 0.5);\n var left = cubics[0];\n var right = cubics[1];\n left.push(iterationCount - 1);\n right.push(iterationCount - 1);\n return cubicLength.apply(null, left) + cubicLength.apply(null, right);\n}\nexport default {\n extrema: extrema,\n box: function (x1, y1, x2, y2, x3, y3, x4, y4) {\n var xArr = [x1, x4];\n var yArr = [y1, y4];\n var xExtrema = extrema(x1, x2, x3, x4);\n var yExtrema = extrema(y1, y2, y3, y4);\n for (var i = 0; i < xExtrema.length; i++) {\n xArr.push(cubicAt(x1, x2, x3, x4, xExtrema[i]));\n }\n for (var i = 0; i < yExtrema.length; i++) {\n yArr.push(cubicAt(y1, y2, y3, y4, yExtrema[i]));\n }\n return getBBoxByArray(xArr, yArr);\n },\n length: function (x1, y1, x2, y2, x3, y3, x4, y4) {\n // 迭代三次,划分成 8 段求长度\n return cubicLength(x1, y1, x2, y2, x3, y3, x4, y4, 3);\n },\n nearestPoint: function (x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length) {\n return nearestPoint([x1, x2, x3, x4], [y1, y2, y3, y4], x0, y0, cubicAt, length);\n },\n pointDistance: function (x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length) {\n var point = this.nearestPoint(x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length);\n return distance(point.x, point.y, x0, y0);\n },\n interpolationAt: cubicAt,\n pointAt: function (x1, y1, x2, y2, x3, y3, x4, y4, t) {\n return {\n x: cubicAt(x1, x2, x3, x4, t),\n y: cubicAt(y1, y2, y3, y4, t),\n };\n },\n divide: function (x1, y1, x2, y2, x3, y3, x4, y4, t) {\n return divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, t);\n },\n tangentAngle: function (x1, y1, x2, y2, x3, y3, x4, y4, t) {\n var dx = derivativeAt(x1, x2, x3, x4, t);\n var dy = derivativeAt(y1, y2, y3, y4, t);\n return piMod(Math.atan2(dy, dx));\n },\n};\n//# sourceMappingURL=cubic.js.map","/**\n * @fileoverview 椭圆的一些计算,\n * - 周长计算参考:https://www.mathsisfun.com/geometry/ellipse-perimeter.html\n * - 距离计算参考:https://wet-robots.ghost.io/simple-method-for-distance-to-ellipse/\n * @author dxq613@gmail.com\n */\nimport { distance, piMod } from './util';\nfunction copysign(v1, v2) {\n var absv = Math.abs(v1);\n return v2 > 0 ? absv : absv * -1;\n}\nexport default {\n /**\n * 包围盒计算\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @return {object} 包围盒\n */\n box: function (x, y, rx, ry) {\n return {\n x: x - rx,\n y: y - ry,\n width: rx * 2,\n height: ry * 2,\n };\n },\n /**\n * 计算周长,使用近似法\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @return {number} 椭圆周长\n */\n length: function (x, y, rx, ry) {\n return Math.PI * (3 * (rx + ry) - Math.sqrt((3 * rx + ry) * (rx + 3 * ry)));\n },\n /**\n * 距离椭圆最近的点\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @param {number} x0 指定的点 x\n * @param {number} y0 指定的点 y\n * @return {object} 椭圆上距离指定点最近的点\n */\n nearestPoint: function (x, y, rx, ry, x0, y0) {\n var a = rx;\n var b = ry;\n // 假如椭圆半径为0则返回圆心\n if (a === 0 || b === 0) {\n return {\n x: x,\n y: y,\n };\n }\n // 转换成 0, 0 为中心的椭圆计算\n var relativeX = x0 - x;\n var relativeY = y0 - y;\n var px = Math.abs(relativeX);\n var py = Math.abs(relativeY);\n var squareA = a * a;\n var squareB = b * b;\n // const angle0 = Math.atan2(relativeY, relativeX);\n var t = Math.PI / 4;\n var nearestX; // 椭圆上的任一点\n var nearestY;\n // 迭代 4 次\n for (var i = 0; i < 4; i++) {\n nearestX = a * Math.cos(t);\n nearestY = b * Math.sin(t);\n var ex = ((squareA - squareB) * Math.pow(Math.cos(t), 3)) / a;\n var ey = ((squareB - squareA) * Math.pow(Math.sin(t), 3)) / b;\n var rx1 = nearestX - ex;\n var ry1 = nearestY - ey;\n var qx = px - ex;\n var qy = py - ey;\n var r = Math.hypot(ry1, rx1);\n var q = Math.hypot(qy, qx);\n var delta_c = r * Math.asin((rx1 * qy - ry1 * qx) / (r * q));\n var delta_t = delta_c / Math.sqrt(squareA + squareB - nearestX * nearestX - nearestY * nearestY);\n t += delta_t;\n t = Math.min(Math.PI / 2, Math.max(0, t));\n }\n return {\n x: x + copysign(nearestX, relativeX),\n y: y + copysign(nearestY, relativeY),\n };\n },\n /**\n * 点到椭圆最近的距离\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @param {number} x0 指定的点 x\n * @param {number} y0 指定的点 y\n * @return {number} 点到椭圆的距离\n */\n pointDistance: function (x, y, rx, ry, x0, y0) {\n var nearestPoint = this.nearestPoint(x, y, rx, ry, x0, y0);\n return distance(nearestPoint.x, nearestPoint.y, x0, y0);\n },\n /**\n * 根据比例获取点\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @param {number} t 指定比例,x轴方向为 0\n * @return {object} 点\n */\n pointAt: function (x, y, rx, ry, t) {\n var angle = 2 * Math.PI * t; // 按照角度进行计算,而不按照周长计算\n return {\n x: x + rx * Math.cos(angle),\n y: y + ry * Math.sin(angle),\n };\n },\n /**\n * 根据比例计算切线角度\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @param {number} t 指定比例 0 - 1 之间,x轴方向为 0。在 0-1 范围之外是循环还是返回 null,还需要调整\n * @return {number} 角度,在 0 - 2PI 之间\n */\n tangentAngle: function (x, y, rx, ry, t) {\n var angle = 2 * Math.PI * t; // 按照角度进行计算,而不按照周长计算\n // 直接使用 x,y 的导数计算, x' = -rx * sin(t); y' = ry * cos(t);\n var tangentAngle = Math.atan2(ry * Math.cos(angle), -rx * Math.sin(angle));\n // 也可以使用指定点的切线方程计算,成本有些高\n // const point = this.pointAt(0, 0, rx, ry, t); // 椭圆的切线同椭圆的中心不相关\n // let tangentAngle = -1 * Math.atan((ry * ry * point.x) / (rx * rx * point.y));\n // if (angle >= 0 && angle <= Math.PI) {\n // tangentAngle += Math.PI;\n // }\n return piMod(tangentAngle);\n },\n};\n//# sourceMappingURL=ellipse.js.map","import { distance, piMod } from './util';\nimport ellipse from './ellipse';\n// 偏导数 x\nfunction derivativeXAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle) {\n return -1 * rx * Math.cos(xRotation) * Math.sin(angle) - ry * Math.sin(xRotation) * Math.cos(angle);\n}\n// 偏导数 y\nfunction derivativeYAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle) {\n return -1 * rx * Math.sin(xRotation) * Math.sin(angle) + ry * Math.cos(xRotation) * Math.cos(angle);\n}\n// x 的极值\nfunction xExtrema(rx, ry, xRotation) {\n return Math.atan((-ry / rx) * Math.tan(xRotation));\n}\n// y 的极值\nfunction yExtrema(rx, ry, xRotation) {\n return Math.atan(ry / (rx * Math.tan(xRotation)));\n}\n// 根据角度求 x 坐标\nfunction xAt(cx, cy, rx, ry, xRotation, angle) {\n return rx * Math.cos(xRotation) * Math.cos(angle) - ry * Math.sin(xRotation) * Math.sin(angle) + cx;\n}\n// 根据角度求 y 坐标\nfunction yAt(cx, cy, rx, ry, xRotation, angle) {\n return rx * Math.sin(xRotation) * Math.cos(angle) + ry * Math.cos(xRotation) * Math.sin(angle) + cy;\n}\n// 获取点在椭圆上的角度\nfunction getAngle(rx, ry, x0, y0) {\n var angle = Math.atan2(y0 * rx, x0 * ry);\n // 转换到 0 - 2PI 内\n return (angle + Math.PI * 2) % (Math.PI * 2);\n}\n// 根据角度获取,x,y\nfunction getPoint(rx, ry, angle) {\n return {\n x: rx * Math.cos(angle),\n y: ry * Math.sin(angle),\n };\n}\n// 旋转\nfunction rotate(x, y, angle) {\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n return [x * cos - y * sin, x * sin + y * cos];\n}\nexport default {\n /**\n * 计算包围盒\n * @param {number} cx 圆心 x\n * @param {number} cy 圆心 y\n * @param {number} rx x 轴方向的半径\n * @param {number} ry y 轴方向的半径\n * @param {number} xRotation 旋转角度\n * @param {number} startAngle 起始角度\n * @param {number} endAngle 结束角度\n * @return {object} 包围盒对象\n */\n box: function (cx, cy, rx, ry, xRotation, startAngle, endAngle) {\n var xDim = xExtrema(rx, ry, xRotation);\n var minX = Infinity;\n var maxX = -Infinity;\n var xs = [startAngle, endAngle];\n for (var i = -Math.PI * 2; i <= Math.PI * 2; i += Math.PI) {\n var xAngle = xDim + i;\n if (startAngle < endAngle) {\n if (startAngle < xAngle && xAngle < endAngle) {\n xs.push(xAngle);\n }\n }\n else {\n if (endAngle < xAngle && xAngle < startAngle) {\n xs.push(xAngle);\n }\n }\n }\n for (var i = 0; i < xs.length; i++) {\n var x = xAt(cx, cy, rx, ry, xRotation, xs[i]);\n if (x < minX) {\n minX = x;\n }\n if (x > maxX) {\n maxX = x;\n }\n }\n var yDim = yExtrema(rx, ry, xRotation);\n var minY = Infinity;\n var maxY = -Infinity;\n var ys = [startAngle, endAngle];\n for (var i = -Math.PI * 2; i <= Math.PI * 2; i += Math.PI) {\n var yAngle = yDim + i;\n if (startAngle < endAngle) {\n if (startAngle < yAngle && yAngle < endAngle) {\n ys.push(yAngle);\n }\n }\n else {\n if (endAngle < yAngle && yAngle < startAngle) {\n ys.push(yAngle);\n }\n }\n }\n for (var i = 0; i < ys.length; i++) {\n var y = yAt(cx, cy, rx, ry, xRotation, ys[i]);\n if (y < minY) {\n minY = y;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n },\n /**\n * 获取圆弧的长度,计算圆弧长度时不考虑旋转角度,\n * 仅跟 rx, ry, startAngle, endAngle 相关\n * @param {number} cx 圆心 x\n * @param {number} cy 圆心 y\n * @param {number} rx x 轴方向的半径\n * @param {number} ry y 轴方向的半径\n * @param {number} xRotation 旋转角度\n * @param {number} startAngle 起始角度\n * @param {number} endAngle 结束角度\n */\n length: function (cx, cy, rx, ry, xRotation, startAngle, endAngle) { },\n /**\n * 获取指定点到圆弧的最近距离的点\n * @param {number} cx 圆心 x\n * @param {number} cy 圆心 y\n * @param {number} rx x 轴方向的半径\n * @param {number} ry y 轴方向的半径\n * @param {number} xRotation 旋转角度\n * @param {number} startAngle 起始角度\n * @param {number} endAngle 结束角度\n * @param {number} x0 指定点的 x\n * @param {number} y0 指定点的 y\n * @return {object} 到指定点最近距离的点\n */\n nearestPoint: function (cx, cy, rx, ry, xRotation, startAngle, endAngle, x0, y0) {\n // 将最近距离问题转换成到椭圆中心 0,0 没有旋转的椭圆问题\n var relativeVector = rotate(x0 - cx, y0 - cy, -xRotation);\n var x1 = relativeVector[0], y1 = relativeVector[1];\n // 计算点到椭圆的最近的点\n var relativePoint = ellipse.nearestPoint(0, 0, rx, ry, x1, y1);\n // 获取点在椭圆上的角度\n var angle = getAngle(rx, ry, relativePoint.x, relativePoint.y);\n // 点没有在圆弧上\n if (angle < startAngle) {\n // 小于起始圆弧\n relativePoint = getPoint(rx, ry, startAngle);\n }\n else if (angle > endAngle) {\n // 大于结束圆弧\n relativePoint = getPoint(rx, ry, endAngle);\n }\n // 旋转到 xRotation 的角度\n var vector = rotate(relativePoint.x, relativePoint.y, xRotation);\n return {\n x: vector[0] + cx,\n y: vector[1] + cy,\n };\n },\n pointDistance: function (cx, cy, rx, ry, xRotation, startAngle, endAngle, x0, y0) {\n var nearestPoint = this.nearestPoint(cx, cy, rx, ry, x0, y0);\n return distance(nearestPoint.x, nearestPoint.y, x0, y0);\n },\n pointAt: function (cx, cy, rx, ry, xRotation, startAngle, endAngle, t) {\n var angle = (endAngle - startAngle) * t + startAngle;\n return {\n x: xAt(cx, cy, rx, ry, xRotation, angle),\n y: yAt(cx, cy, rx, ry, xRotation, angle),\n };\n },\n tangentAngle: function (cx, cy, rx, ry, xRotation, startAngle, endAngle, t) {\n var angle = (endAngle - startAngle) * t + startAngle;\n var dx = derivativeXAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle);\n var dy = derivativeYAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle);\n return piMod(Math.atan2(dy, dx));\n },\n};\n//# sourceMappingURL=arc.js.map","import line from './line';\nimport { distance } from './util';\nfunction analyzePoints(points) {\n // 计算每段的长度和总的长度\n var totalLength = 0;\n var segments = [];\n for (var i = 0; i < points.length - 1; i++) {\n var from = points[i];\n var to = points[i + 1];\n var length_1 = distance(from[0], from[1], to[0], to[1]);\n var seg = {\n from: from,\n to: to,\n length: length_1,\n };\n segments.push(seg);\n totalLength += length_1;\n }\n return { segments: segments, totalLength: totalLength };\n}\nexport function lengthOfSegment(points) {\n if (points.length < 2) {\n return 0;\n }\n var totalLength = 0;\n for (var i = 0; i < points.length - 1; i++) {\n var from = points[i];\n var to = points[i + 1];\n totalLength += distance(from[0], from[1], to[0], to[1]);\n }\n return totalLength;\n}\n/**\n * 按照比例在数据片段中获取点\n * @param {array} points 点的集合\n * @param {number} t 百分比 0-1\n * @return {object} 点的坐标\n */\nexport function pointAtSegments(points, t) {\n // 边界判断\n if (t > 1 || t < 0 || points.length < 2) {\n return null;\n }\n var _a = analyzePoints(points), segments = _a.segments, totalLength = _a.totalLength;\n // 多个点有可能重合\n if (totalLength === 0) {\n return {\n x: points[0][0],\n y: points[0][1],\n };\n }\n // 计算比例\n var startRatio = 0;\n var point = null;\n for (var i = 0; i < segments.length; i++) {\n var seg = segments[i];\n var from = seg.from, to = seg.to;\n var currentRatio = seg.length / totalLength;\n if (t >= startRatio && t <= startRatio + currentRatio) {\n var localRatio = (t - startRatio) / currentRatio;\n point = line.pointAt(from[0], from[1], to[0], to[1], localRatio);\n break;\n }\n startRatio += currentRatio;\n }\n return point;\n}\n/**\n * 按照比例在数据片段中获取切线的角度\n * @param {array} points 点的集合\n * @param {number} t 百分比 0-1\n */\nexport function angleAtSegments(points, t) {\n // 边界判断\n if (t > 1 || t < 0 || points.length < 2) {\n return 0;\n }\n var _a = analyzePoints(points), segments = _a.segments, totalLength = _a.totalLength;\n // 计算比例\n var startRatio = 0;\n var angle = 0;\n for (var i = 0; i < segments.length; i++) {\n var seg = segments[i];\n var from = seg.from, to = seg.to;\n var currentRatio = seg.length / totalLength;\n if (t >= startRatio && t <= startRatio + currentRatio) {\n angle = Math.atan2(to[1] - from[1], to[0] - from[0]);\n break;\n }\n startRatio += currentRatio;\n }\n return angle;\n}\nexport function distanceAtSegment(points, x, y) {\n var minDistance = Infinity;\n for (var i = 0; i < points.length - 1; i++) {\n var point = points[i];\n var nextPoint = points[i + 1];\n var distance_1 = line.pointDistance(point[0], point[1], nextPoint[0], nextPoint[1], x, y);\n if (distance_1 < minDistance) {\n minDistance = distance_1;\n }\n }\n return minDistance;\n}\n//# sourceMappingURL=segments.js.map","import { pointAtSegments, angleAtSegments, distanceAtSegment, lengthOfSegment } from './segments';\nimport { getBBoxByArray } from './util';\nexport default {\n /**\n * 计算多折线的包围盒\n * @param {array} points 点的集合 [x,y] 的形式\n * @return {object} 包围盒\n */\n box: function (points) {\n var xArr = [];\n var yArr = [];\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n xArr.push(point[0]);\n yArr.push(point[1]);\n }\n return getBBoxByArray(xArr, yArr);\n },\n /**\n * 计算多折线的长度\n * @param {array} points 点的集合 [x,y] 的形式\n * @return {object} 多条边的长度\n */\n length: function (points) {\n return lengthOfSegment(points);\n },\n /**\n * 根据比例获取多折线的点\n * @param {array} points 点的集合 [x,y] 的形式\n * @param {number} t 在多折线的长度上的比例\n * @return {object} 根据比例值计算出来的点\n */\n pointAt: function (points, t) {\n return pointAtSegments(points, t);\n },\n /**\n * 指定点到多折线的距离\n * @param {array} points 点的集合 [x,y] 的形式\n * @param {number} x 指定点的 x\n * @param {number} y 指定点的 y\n * @return {number} 点到多折线的距离\n */\n pointDistance: function (points, x, y) {\n return distanceAtSegment(points, x, y);\n },\n /**\n * 根据比例获取多折线的切线角度\n * @param {array} points 点的集合 [x,y] 的形式\n * @param {number} t 在多折线的长度上的比例\n * @return {object} 根据比例值计算出来的角度\n */\n tangentAngle: function (points, t) {\n return angleAtSegments(points, t);\n },\n};\n//# sourceMappingURL=polyline.js.map","import { pointAtSegments, angleAtSegments, distanceAtSegment, lengthOfSegment } from './segments';\nimport polyline from './polyline';\nfunction getAllPoints(points) {\n var tmp = points.slice(0);\n if (points.length) {\n tmp.push(points[0]);\n }\n return tmp;\n}\nexport default {\n /**\n * 计算多边形的包围盒\n * @param {array} points 点的集合 [x,y] 的形式\n * @return {object} 包围盒\n */\n box: function (points) {\n return polyline.box(points);\n },\n /**\n * 计算多边形的长度\n * @param {array} points 点的集合 [x,y] 的形式\n * @return {object} 多边形边的长度\n */\n length: function (points) {\n return lengthOfSegment(getAllPoints(points));\n },\n /**\n * 根据比例获取多边形的点\n * @param {array} points 点的集合 [x,y] 的形式\n * @param {number} t 在多边形的长度上的比例\n * @return {object} 根据比例值计算出来的点\n */\n pointAt: function (points, t) {\n return pointAtSegments(getAllPoints(points), t);\n },\n /**\n * 指定点到多边形的距离\n * @param {array} points 点的集合 [x,y] 的形式\n * @param {number} x 指定点的 x\n * @param {number} y 指定点的 y\n * @return {number} 点到多边形的距离\n */\n pointDistance: function (points, x, y) {\n return distanceAtSegment(getAllPoints(points), x, y);\n },\n /**\n * 根据比例获取多边形的切线角度\n * @param {array} points 点的集合 [x,y] 的形式\n * @param {number} t 在多边形的长度上的比例\n * @return {object} 根据比例值计算出来的角度\n */\n tangentAngle: function (points, t) {\n return angleAtSegments(getAllPoints(points), t);\n },\n};\n//# sourceMappingURL=polygon.js.map","export function getPixelRatio() {\n return window ? window.devicePixelRatio : 1;\n}\n\n/**\n * 两点之间的距离\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n */\nexport function distance(x1: number, y1: number, x2: number, y2: number) {\n const dx = x1 - x2;\n const dy = y1 - y2;\n return Math.sqrt(dx * dx + dy * dy);\n}\n\n/**\n * 是否在包围盒内\n * @param {number} minX 包围盒开始的点 x\n * @param {number} minY 包围盒开始的点 y\n * @param {number} width 宽度\n * @param {number} height 高度\n * @param {[type]} x 检测点的 x\n * @param {[type]} y 监测点的 y\n */\nexport function inBox(minX: number, minY: number, width: number, height: number, x, y) {\n return x >= minX && x <= minX + width && y >= minY && y <= minY + height;\n}\n\nexport function intersectRect(box1, box2) {\n return !(box2.minX > box1.maxX || box2.maxX < box1.minX || box2.minY > box1.maxY || box2.maxY < box1.minY);\n}\n\n// 合并两个区域\nexport function mergeRegion(region1, region2) {\n if (!region1 || !region2) {\n return region1 || region2;\n }\n return {\n minX: Math.min(region1.minX, region2.minX),\n minY: Math.min(region1.minY, region2.minY),\n maxX: Math.max(region1.maxX, region2.maxX),\n maxY: Math.max(region1.maxY, region2.maxY),\n };\n}\n\n/**\n * 判断两个点是否重合,点坐标的格式为 [x, y]\n * @param {Array} point1 第一个点\n * @param {Array} point2 第二个点\n */\nexport function isSamePoint(point1, point2) {\n return point1[0] === point2[0] && point1[1] === point2[1];\n}\n\nexport {\n isNil,\n isString,\n isFunction,\n isArray,\n each,\n toRadian,\n mod,\n isNumberEqual,\n requestAnimationFrame,\n clearAnimationFrame,\n} from '@antv/util';\n","/**\n * @fileoverview 矩阵运算,本来是要引入 gl-matrix, 但是考虑到 g-mobile 对大小有限制,同时 g-webgl 使用的 matrix 不一致\n * 所以,这里仅实现 2D 几个运算,上层自己引入 gl-matrix\n * @author dxq613@gmail.com\n */\n/**\n * 3阶矩阵相乘\n * @param {number[]} a 矩阵1\n * @param {number[]} b 矩阵2\n */\nexport function multiplyMatrix(a, b) {\n var out = [];\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a10 = a[3];\n var a11 = a[4];\n var a12 = a[5];\n var a20 = a[6];\n var a21 = a[7];\n var a22 = a[8];\n var b00 = b[0];\n var b01 = b[1];\n var b02 = b[2];\n var b10 = b[3];\n var b11 = b[4];\n var b12 = b[5];\n var b20 = b[6];\n var b21 = b[7];\n var b22 = b[8];\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n}\n/**\n * 3阶矩阵同2阶向量相乘\n * @param {number[]} m 矩阵\n * @param {number[]} v 二阶向量\n */\nexport function multiplyVec2(m, v) {\n var out = [];\n var x = v[0];\n var y = v[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n}\n/**\n * 矩阵的逆\n * @param {number[]} a 矩阵\n */\nexport function invert(a) {\n var out = [];\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a10 = a[3];\n var a11 = a[4];\n var a12 = a[5];\n var a20 = a[6];\n var a21 = a[7];\n var a22 = a[8];\n var b01 = a22 * a11 - a12 * a21;\n var b11 = -a22 * a10 + a12 * a20;\n var b21 = a21 * a10 - a11 * a20;\n // Calculate the determinant\n var det = a00 * b01 + a01 * b11 + a02 * b21;\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n out[0] = b01 * det;\n out[1] = (-a22 * a01 + a02 * a21) * det;\n out[2] = (a12 * a01 - a02 * a11) * det;\n out[3] = b11 * det;\n out[4] = (a22 * a00 - a02 * a20) * det;\n out[5] = (-a12 * a00 + a02 * a10) * det;\n out[6] = b21 * det;\n out[7] = (-a21 * a00 + a01 * a20) * det;\n out[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n}\n//# sourceMappingURL=matrix.js.map","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { AbstractShape } from '@antv/g-base';\nimport { ChangeType, BBox } from '@antv/g-base';\nimport { isNil, intersectRect } from '../util/util';\nimport { applyAttrsToContext, refreshElement } from '../util/draw';\nimport { getBBoxMethod } from '@antv/g-base';\nimport { Region } from '../types';\nimport * as Shape from './index';\nimport Group from '../group';\n\nclass ShapeBase extends AbstractShape {\n getDefaultAttrs() {\n const attrs = super.getDefaultAttrs();\n // 设置默认值\n return {\n ...attrs,\n lineWidth: 1,\n lineAppendWidth: 0,\n strokeOpacity: 1,\n fillOpacity: 1,\n };\n }\n\n getShapeBase() {\n return Shape;\n }\n\n getGroupBase() {\n return Group;\n }\n\n /**\n * 一些方法调用会引起画布变化\n * @param {ChangeType} changeType 改变的类型\n */\n onCanvasChange(changeType: ChangeType) {\n refreshElement(this, changeType);\n }\n\n calculateBBox(): BBox {\n const type = this.get('type');\n const lineWidth = this.getHitLineWidth();\n // const attrs = this.attr();\n const bboxMethod = getBBoxMethod(type);\n const box = bboxMethod(this);\n const halfLineWidth = lineWidth / 2;\n const minX = box.x - halfLineWidth;\n const minY = box.y - halfLineWidth;\n const maxX = box.x + box.width + halfLineWidth;\n const maxY = box.y + box.height + halfLineWidth;\n return {\n x: minX,\n minX,\n y: minY,\n minY,\n width: box.width + lineWidth,\n height: box.height + lineWidth,\n maxX,\n maxY,\n };\n }\n\n isFill() {\n return !!this.attrs['fill'] || this.isClipShape();\n }\n\n isStroke() {\n return !!this.attrs['stroke'];\n }\n\n // 同 shape 中的方法重复了\n _applyClip(context, clip: ShapeBase) {\n if (clip) {\n context.save();\n // 将 clip 的属性挂载到 context 上\n applyAttrsToContext(context, clip);\n // 绘制 clip 路径\n clip.createPath(context);\n context.restore();\n // 裁剪\n context.clip();\n clip._afterDraw();\n }\n }\n\n // 绘制图形时需要考虑 region 限制\n draw(context: CanvasRenderingContext2D, region?: Region) {\n const clip = this.cfg.clipShape;\n // 如果指定了 region,同时不允许刷新时,直接返回\n if (region) {\n if (this.cfg.refresh === false) {\n // this._afterDraw();\n this.set('hasChanged', false);\n return;\n }\n // 是否相交需要考虑 clip 的包围盒\n const bbox = this.getCanvasBBox();\n if (!intersectRect(region, bbox)) {\n // 图形的包围盒与重绘区域不相交时,也需要清除标记\n this.set('hasChanged', false);\n // 存在多种情形需要更新 cacheCanvasBBox 和 isInview 的判定\n // 1. 之前图形在视窗内,但是现在不再视窗内\n // 2. 如果当前的图形以及父元素都没有发生过变化,refresh = false 不会走到这里,所以这里的图形都是父元素发生变化,但是没有在视图内的元素\n if (this.cfg.isInView) {\n this._afterDraw();\n }\n return;\n }\n }\n context.save();\n // 先将 attrs 应用到上下文中,再设置 clip。因为 clip 应该被当前元素的 matrix 所影响\n applyAttrsToContext(context, this);\n this._applyClip(context, clip as ShapeBase);\n this.drawPath(context);\n context.restore();\n this._afterDraw();\n }\n\n private getCanvasViewBox() {\n const canvas = this.cfg.canvas;\n if (canvas) {\n // @ts-ignore\n return canvas.getViewRange();\n }\n return null;\n }\n\n cacheCanvasBBox() {\n const canvasBBox = this.getCanvasViewBox();\n // 绘制的时候缓存包围盒\n if (canvasBBox) {\n const bbox = this.getCanvasBBox();\n const isInView = intersectRect(bbox, canvasBBox);\n this.set('isInView', isInView);\n // 不再视窗内 cacheCanvasBBox 设置成 null,会提升局部渲染的性能,\n // 因为在局部渲染影响的包围盒计算时不考虑这个图形的包围盒\n // 父元素 cacheCanvasBBox 计算的时候也不计算\n if (isInView) {\n this.set('cacheCanvasBBox', bbox);\n } else {\n this.set('cacheCanvasBBox', null);\n }\n }\n }\n\n _afterDraw() {\n this.cacheCanvasBBox();\n // 绘制后消除标记\n this.set('hasChanged', false);\n this.set('refresh', null);\n }\n\n skipDraw() {\n this.set('cacheCanvasBBox', null);\n this.set('isInView', null);\n this.set('hasChanged', false);\n }\n\n /**\n * 绘制图形的路径\n * @param {CanvasRenderingContext2D} context 上下文\n */\n drawPath(context: CanvasRenderingContext2D) {\n this.createPath(context);\n this.strokeAndFill(context);\n this.afterDrawPath(context);\n }\n\n /**\n * @protected\n * 填充图形\n * @param {CanvasRenderingContext2D} context context 上下文\n */\n fill(context: CanvasRenderingContext2D) {\n context.fill();\n }\n\n /**\n * @protected\n * 绘制图形边框\n * @param {CanvasRenderingContext2D} context context 上下文\n */\n stroke(context: CanvasRenderingContext2D) {\n context.stroke();\n }\n\n // 绘制或者填充\n strokeAndFill(context) {\n const { lineWidth, opacity, strokeOpacity, fillOpacity } = this.attrs;\n\n if (this.isFill()) {\n if (!isNil(fillOpacity) && fillOpacity !== 1) {\n context.globalAlpha = fillOpacity;\n this.fill(context);\n context.globalAlpha = opacity;\n } else {\n this.fill(context);\n }\n }\n\n if (this.isStroke()) {\n if (lineWidth > 0) {\n if (!isNil(strokeOpacity) && strokeOpacity !== 1) {\n context.globalAlpha = strokeOpacity;\n }\n this.stroke(context);\n }\n }\n this.afterDrawPath(context);\n }\n\n /**\n * @protected\n * 绘制图形的路径\n * @param {CanvasRenderingContext2D} context 上下文\n */\n createPath(context: CanvasRenderingContext2D) {}\n\n /**\n * 绘制完成 path 后的操作\n * @param {CanvasRenderingContext2D} context 上下文\n */\n afterDrawPath(context: CanvasRenderingContext2D) {}\n\n isInShape(refX: number, refY: number): boolean {\n // return HitUtil.isHitShape(this, refX, refY);\n const isStroke = this.isStroke();\n const isFill = this.isFill();\n const lineWidth = this.getHitLineWidth();\n return this.isInStrokeOrPath(refX, refY, isStroke, isFill, lineWidth);\n }\n\n // 之所以不拆成 isInStroke 和 isInPath 在于两者存在一些共同的计算\n isInStrokeOrPath(x, y, isStroke, isFill, lineWidth) {\n return false;\n }\n\n /**\n * 获取线拾取的宽度\n * @returns {number} 线的拾取宽度\n */\n getHitLineWidth() {\n if (!this.isStroke()) {\n return 0;\n }\n const attrs = this.attrs;\n return attrs['lineWidth'] + attrs['lineAppendWidth'];\n }\n}\n\nexport default ShapeBase;\n","import { mat3, vec2, vec3 } from 'gl-matrix';\nimport * as ext from './ext';\nexport { mat3, vec2, vec3, ext };\n//# sourceMappingURL=index.js.map","import { each, isArray } from '@antv/util';\nvar SPACES = '\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029';\nvar PATH_COMMAND = new RegExp(\"([a-z])[\" + SPACES + \",]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[\" + SPACES + \"]*,?[\" + SPACES + \"]*)+)\", 'ig');\nvar PATH_VALUES = new RegExp(\"(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[\" + SPACES + \"]*,?[\" + SPACES + \"]*\", 'ig');\n// Parse given path string into an array of arrays of path segments\nvar parsePathString = function (pathString) {\n if (!pathString) {\n return null;\n }\n if (isArray(pathString)) {\n return pathString;\n }\n var paramCounts = {\n a: 7,\n c: 6,\n o: 2,\n h: 1,\n l: 2,\n m: 2,\n r: 4,\n q: 4,\n s: 4,\n t: 2,\n v: 1,\n u: 3,\n z: 0,\n };\n var data = [];\n String(pathString).replace(PATH_COMMAND, function (a, b, c) {\n var params = [];\n var name = b.toLowerCase();\n c.replace(PATH_VALUES, function (a, b) {\n b && params.push(+b);\n });\n if (name === 'm' && params.length > 2) {\n data.push([b].concat(params.splice(0, 2)));\n name = 'l';\n b = b === 'm' ? 'l' : 'L';\n }\n if (name === 'o' && params.length === 1) {\n data.push([b, params[0]]);\n }\n if (name === 'r') {\n data.push([b].concat(params));\n }\n else {\n while (params.length >= paramCounts[name]) {\n data.push([b].concat(params.splice(0, paramCounts[name])));\n if (!paramCounts[name]) {\n break;\n }\n }\n }\n return pathString;\n });\n return data;\n};\n// http://schepers.cc/getting-to-the-point\nvar catmullRomToBezier = function (crp, z) {\n var d = [];\n // @ts-ignore\n for (var i = 0, iLen = crp.length; iLen - 2 * !z > i; i += 2) {\n var p = [\n {\n x: +crp[i - 2],\n y: +crp[i - 1],\n },\n {\n x: +crp[i],\n y: +crp[i + 1],\n },\n {\n x: +crp[i + 2],\n y: +crp[i + 3],\n },\n {\n x: +crp[i + 4],\n y: +crp[i + 5],\n },\n ];\n if (z) {\n if (!i) {\n p[0] = {\n x: +crp[iLen - 2],\n y: +crp[iLen - 1],\n };\n }\n else if (iLen - 4 === i) {\n p[3] = {\n x: +crp[0],\n y: +crp[1],\n };\n }\n else if (iLen - 2 === i) {\n p[2] = {\n x: +crp[0],\n y: +crp[1],\n };\n p[3] = {\n x: +crp[2],\n y: +crp[3],\n };\n }\n }\n else {\n if (iLen - 4 === i) {\n p[3] = p[2];\n }\n else if (!i) {\n p[0] = {\n x: +crp[i],\n y: +crp[i + 1],\n };\n }\n }\n d.push([\n 'C',\n (-p[0].x + 6 * p[1].x + p[2].x) / 6,\n (-p[0].y + 6 * p[1].y + p[2].y) / 6,\n (p[1].x + 6 * p[2].x - p[3].x) / 6,\n (p[1].y + 6 * p[2].y - p[3].y) / 6,\n p[2].x,\n p[2].y,\n ]);\n }\n return d;\n};\nvar ellipsePath = function (x, y, rx, ry, a) {\n var res = [];\n if (a === null && ry === null) {\n ry = rx;\n }\n x = +x;\n y = +y;\n rx = +rx;\n ry = +ry;\n if (a !== null) {\n var rad = Math.PI / 180;\n var x1 = x + rx * Math.cos(-ry * rad);\n var x2 = x + rx * Math.cos(-a * rad);\n var y1 = y + rx * Math.sin(-ry * rad);\n var y2 = y + rx * Math.sin(-a * rad);\n res = [\n ['M', x1, y1],\n ['A', rx, rx, 0, +(a - ry > 180), 0, x2, y2],\n ];\n }\n else {\n res = [['M', x, y], ['m', 0, -ry], ['a', rx, ry, 0, 1, 1, 0, 2 * ry], ['a', rx, ry, 0, 1, 1, 0, -2 * ry], ['z']];\n }\n return res;\n};\nvar pathToAbsolute = function (pathArray) {\n pathArray = parsePathString(pathArray);\n if (!pathArray || !pathArray.length) {\n return [['M', 0, 0]];\n }\n var res = [];\n var x = 0;\n var y = 0;\n var mx = 0;\n var my = 0;\n var start = 0;\n var pa0;\n var dots;\n if (pathArray[0][0] === 'M') {\n x = +pathArray[0][1];\n y = +pathArray[0][2];\n mx = x;\n my = y;\n start++;\n res[0] = ['M', x, y];\n }\n var crz = pathArray.length === 3 &&\n pathArray[0][0] === 'M' &&\n pathArray[1][0].toUpperCase() === 'R' &&\n pathArray[2][0].toUpperCase() === 'Z';\n for (var r = void 0, pa = void 0, i = start, ii = pathArray.length; i < ii; i++) {\n res.push((r = []));\n pa = pathArray[i];\n pa0 = pa[0];\n if (pa0 !== pa0.toUpperCase()) {\n r[0] = pa0.toUpperCase();\n switch (r[0]) {\n case 'A':\n r[1] = pa[1];\n r[2] = pa[2];\n r[3] = pa[3];\n r[4] = pa[4];\n r[5] = pa[5];\n r[6] = +pa[6] + x;\n r[7] = +pa[7] + y;\n break;\n case 'V':\n r[1] = +pa[1] + y;\n break;\n case 'H':\n r[1] = +pa[1] + x;\n break;\n case 'R':\n dots = [x, y].concat(pa.slice(1));\n for (var j = 2, jj = dots.length; j < jj; j++) {\n dots[j] = +dots[j] + x;\n dots[++j] = +dots[j] + y;\n }\n res.pop();\n res = res.concat(catmullRomToBezier(dots, crz));\n break;\n case 'O':\n res.pop();\n dots = ellipsePath(x, y, pa[1], pa[2]);\n dots.push(dots[0]);\n res = res.concat(dots);\n break;\n case 'U':\n res.pop();\n res = res.concat(ellipsePath(x, y, pa[1], pa[2], pa[3]));\n r = ['U'].concat(res[res.length - 1].slice(-2));\n break;\n case 'M':\n mx = +pa[1] + x;\n my = +pa[2] + y;\n break; // for lint\n default:\n for (var j = 1, jj = pa.length; j < jj; j++) {\n r[j] = +pa[j] + (j % 2 ? x : y);\n }\n }\n }\n else if (pa0 === 'R') {\n dots = [x, y].concat(pa.slice(1));\n res.pop();\n res = res.concat(catmullRomToBezier(dots, crz));\n r = ['R'].concat(pa.slice(-2));\n }\n else if (pa0 === 'O') {\n res.pop();\n dots = ellipsePath(x, y, pa[1], pa[2]);\n dots.push(dots[0]);\n res = res.concat(dots);\n }\n else if (pa0 === 'U') {\n res.pop();\n res = res.concat(ellipsePath(x, y, pa[1], pa[2], pa[3]));\n r = ['U'].concat(res[res.length - 1].slice(-2));\n }\n else {\n for (var k = 0, kk = pa.length; k < kk; k++) {\n r[k] = pa[k];\n }\n }\n pa0 = pa0.toUpperCase();\n if (pa0 !== 'O') {\n switch (r[0]) {\n case 'Z':\n x = +mx;\n y = +my;\n break;\n case 'H':\n x = r[1];\n break;\n case 'V':\n y = r[1];\n break;\n case 'M':\n mx = r[r.length - 2];\n my = r[r.length - 1];\n break; // for lint\n default:\n x = r[r.length - 2];\n y = r[r.length - 1];\n }\n }\n }\n return res;\n};\nvar l2c = function (x1, y1, x2, y2) {\n return [x1, y1, x2, y2, x2, y2];\n};\nvar q2c = function (x1, y1, ax, ay, x2, y2) {\n var _13 = 1 / 3;\n var _23 = 2 / 3;\n return [_13 * x1 + _23 * ax, _13 * y1 + _23 * ay, _13 * x2 + _23 * ax, _13 * y2 + _23 * ay, x2, y2];\n};\nvar a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {\n // for more information of where this math came from visit:\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n if (rx === ry) {\n rx += 1;\n }\n var _120 = (Math.PI * 120) / 180;\n var rad = (Math.PI / 180) * (+angle || 0);\n var res = [];\n var xy;\n var f1;\n var f2;\n var cx;\n var cy;\n var rotate = function (x, y, rad) {\n var X = x * Math.cos(rad) - y * Math.sin(rad);\n var Y = x * Math.sin(rad) + y * Math.cos(rad);\n return {\n x: X,\n y: Y,\n };\n };\n if (!recursive) {\n xy = rotate(x1, y1, -rad);\n x1 = xy.x;\n y1 = xy.y;\n xy = rotate(x2, y2, -rad);\n x2 = xy.x;\n y2 = xy.y;\n if (x1 === x2 && y1 === y2) {\n // 若弧的起始点和终点重叠则错开一点\n x2 += 1;\n y2 += 1;\n }\n // const cos = Math.cos(Math.PI / 180 * angle);\n // const sin = Math.sin(Math.PI / 180 * angle);\n var x = (x1 - x2) / 2;\n var y = (y1 - y2) / 2;\n var h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\n if (h > 1) {\n h = Math.sqrt(h);\n rx = h * rx;\n ry = h * ry;\n }\n var rx2 = rx * rx;\n var ry2 = ry * ry;\n var k = (large_arc_flag === sweep_flag ? -1 : 1) *\n Math.sqrt(Math.abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x)));\n cx = (k * rx * y) / ry + (x1 + x2) / 2;\n cy = (k * -ry * x) / rx + (y1 + y2) / 2;\n // @ts-ignore\n f1 = Math.asin(((y1 - cy) / ry).toFixed(9));\n // @ts-ignore\n f2 = Math.asin(((y2 - cy) / ry).toFixed(9));\n f1 = x1 < cx ? Math.PI - f1 : f1;\n f2 = x2 < cx ? Math.PI - f2 : f2;\n f1 < 0 && (f1 = Math.PI * 2 + f1);\n f2 < 0 && (f2 = Math.PI * 2 + f2);\n if (sweep_flag && f1 > f2) {\n f1 = f1 - Math.PI * 2;\n }\n if (!sweep_flag && f2 > f1) {\n f2 = f2 - Math.PI * 2;\n }\n }\n else {\n f1 = recursive[0];\n f2 = recursive[1];\n cx = recursive[2];\n cy = recursive[3];\n }\n var df = f2 - f1;\n if (Math.abs(df) > _120) {\n var f2old = f2;\n var x2old = x2;\n var y2old = y2;\n f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);\n x2 = cx + rx * Math.cos(f2);\n y2 = cy + ry * Math.sin(f2);\n res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);\n }\n df = f2 - f1;\n var c1 = Math.cos(f1);\n var s1 = Math.sin(f1);\n var c2 = Math.cos(f2);\n var s2 = Math.sin(f2);\n var t = Math.tan(df / 4);\n var hx = (4 / 3) * rx * t;\n var hy = (4 / 3) * ry * t;\n var m1 = [x1, y1];\n var m2 = [x1 + hx * s1, y1 - hy * c1];\n var m3 = [x2 + hx * s2, y2 - hy * c2];\n var m4 = [x2, y2];\n m2[0] = 2 * m1[0] - m2[0];\n m2[1] = 2 * m1[1] - m2[1];\n if (recursive) {\n return [m2, m3, m4].concat(res);\n }\n res = [m2, m3, m4].concat(res).join().split(',');\n var newres = [];\n for (var i = 0, ii = res.length; i < ii; i++) {\n newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;\n }\n return newres;\n};\nvar pathToCurve = function (path, path2) {\n var p = pathToAbsolute(path);\n var p2 = path2 && pathToAbsolute(path2);\n var attrs = {\n x: 0,\n y: 0,\n bx: 0,\n by: 0,\n X: 0,\n Y: 0,\n qx: null,\n qy: null,\n };\n var attrs2 = {\n x: 0,\n y: 0,\n bx: 0,\n by: 0,\n X: 0,\n Y: 0,\n qx: null,\n qy: null,\n };\n var pcoms1 = []; // path commands of original path p\n var pcoms2 = []; // path commands of original path p2\n var pfirst = ''; // temporary holder for original path command\n var pcom = ''; // holder for previous path command of original path\n var ii;\n var processPath = function (path, d, pcom) {\n var nx;\n var ny;\n if (!path) {\n return ['C', d.x, d.y, d.x, d.y, d.x, d.y];\n }\n !(path[0] in\n {\n T: 1,\n Q: 1,\n }) && (d.qx = d.qy = null);\n switch (path[0]) {\n case 'M':\n d.X = path[1];\n d.Y = path[2];\n break;\n case 'A':\n path = ['C'].concat(a2c.apply(0, [d.x, d.y].concat(path.slice(1))));\n break;\n case 'S':\n if (pcom === 'C' || pcom === 'S') {\n // In \"S\" case we have to take into account, if the previous command is C/S.\n nx = d.x * 2 - d.bx; // And reflect the previous\n ny = d.y * 2 - d.by; // command's control point relative to the current point.\n }\n else {\n // or some else or nothing\n nx = d.x;\n ny = d.y;\n }\n path = ['C', nx, ny].concat(path.slice(1));\n break;\n case 'T':\n if (pcom === 'Q' || pcom === 'T') {\n // In \"T\" case we have to take into account, if the previous command is Q/T.\n d.qx = d.x * 2 - d.qx; // And make a reflection similar\n d.qy = d.y * 2 - d.qy; // to case \"S\".\n }\n else {\n // or something else or nothing\n d.qx = d.x;\n d.qy = d.y;\n }\n path = ['C'].concat(q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));\n break;\n case 'Q':\n d.qx = path[1];\n d.qy = path[2];\n path = ['C'].concat(q2c(d.x, d.y, path[1], path[2], path[3], path[4]));\n break;\n case 'L':\n path = ['C'].concat(l2c(d.x, d.y, path[1], path[2]));\n break;\n case 'H':\n path = ['C'].concat(l2c(d.x, d.y, path[1], d.y));\n break;\n case 'V':\n path = ['C'].concat(l2c(d.x, d.y, d.x, path[1]));\n break;\n case 'Z':\n path = ['C'].concat(l2c(d.x, d.y, d.X, d.Y));\n break;\n default:\n break;\n }\n return path;\n };\n var fixArc = function (pp, i) {\n if (pp[i].length > 7) {\n pp[i].shift();\n var pi = pp[i];\n while (pi.length) {\n pcoms1[i] = 'A'; // if created multiple C:s, their original seg is saved\n p2 && (pcoms2[i] = 'A'); // the same as above\n pp.splice(i++, 0, ['C'].concat(pi.splice(0, 6)));\n }\n pp.splice(i, 1);\n ii = Math.max(p.length, (p2 && p2.length) || 0);\n }\n };\n var fixM = function (path1, path2, a1, a2, i) {\n if (path1 && path2 && path1[i][0] === 'M' && path2[i][0] !== 'M') {\n path2.splice(i, 0, ['M', a2.x, a2.y]);\n a1.bx = 0;\n a1.by = 0;\n a1.x = path1[i][1];\n a1.y = path1[i][2];\n ii = Math.max(p.length, (p2 && p2.length) || 0);\n }\n };\n ii = Math.max(p.length, (p2 && p2.length) || 0);\n for (var i = 0; i < ii; i++) {\n p[i] && (pfirst = p[i][0]); // save current path command\n if (pfirst !== 'C') {\n // C is not saved yet, because it may be result of conversion\n pcoms1[i] = pfirst; // Save current path command\n i && (pcom = pcoms1[i - 1]); // Get previous path command pcom\n }\n p[i] = processPath(p[i], attrs, pcom); // Previous path command is inputted to processPath\n if (pcoms1[i] !== 'A' && pfirst === 'C')\n pcoms1[i] = 'C'; // A is the only command\n // which may produce multiple C:s\n // so we have to make sure that C is also C in original path\n fixArc(p, i); // fixArc adds also the right amount of A:s to pcoms1\n if (p2) {\n // the same procedures is done to p2\n p2[i] && (pfirst = p2[i][0]);\n if (pfirst !== 'C') {\n pcoms2[i] = pfirst;\n i && (pcom = pcoms2[i - 1]);\n }\n p2[i] = processPath(p2[i], attrs2, pcom);\n if (pcoms2[i] !== 'A' && pfirst === 'C') {\n pcoms2[i] = 'C';\n }\n fixArc(p2, i);\n }\n fixM(p, p2, attrs, attrs2, i);\n fixM(p2, p, attrs2, attrs, i);\n var seg = p[i];\n var seg2 = p2 && p2[i];\n var seglen = seg.length;\n var seg2len = p2 && seg2.length;\n attrs.x = seg[seglen - 2];\n attrs.y = seg[seglen - 1];\n attrs.bx = parseFloat(seg[seglen - 4]) || attrs.x;\n attrs.by = parseFloat(seg[seglen - 3]) || attrs.y;\n attrs2.bx = p2 && (parseFloat(seg2[seg2len - 4]) || attrs2.x);\n attrs2.by = p2 && (parseFloat(seg2[seg2len - 3]) || attrs2.y);\n attrs2.x = p2 && seg2[seg2len - 2];\n attrs2.y = p2 && seg2[seg2len - 1];\n }\n return p2 ? [p, p2] : p;\n};\nvar p2s = /,?([a-z]),?/gi;\nvar parsePathArray = function (path) {\n return path.join(',').replace(p2s, '$1');\n};\nvar base3 = function (t, p1, p2, p3, p4) {\n var t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4;\n var t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\n return t * t2 - 3 * p1 + 3 * p2;\n};\nvar bezlen = function (x1, y1, x2, y2, x3, y3, x4, y4, z) {\n if (z === null) {\n z = 1;\n }\n z = z > 1 ? 1 : z < 0 ? 0 : z;\n var z2 = z / 2;\n var n = 12;\n var Tvalues = [\n -0.1252,\n 0.1252,\n -0.3678,\n 0.3678,\n -0.5873,\n 0.5873,\n -0.7699,\n 0.7699,\n -0.9041,\n 0.9041,\n -0.9816,\n 0.9816,\n ];\n var Cvalues = [0.2491, 0.2491, 0.2335, 0.2335, 0.2032, 0.2032, 0.1601, 0.1601, 0.1069, 0.1069, 0.0472, 0.0472];\n var sum = 0;\n for (var i = 0; i < n; i++) {\n var ct = z2 * Tvalues[i] + z2;\n var xbase = base3(ct, x1, x2, x3, x4);\n var ybase = base3(ct, y1, y2, y3, y4);\n var comb = xbase * xbase + ybase * ybase;\n sum += Cvalues[i] * Math.sqrt(comb);\n }\n return z2 * sum;\n};\nvar curveDim = function (x0, y0, x1, y1, x2, y2, x3, y3) {\n var tvalues = [];\n var bounds = [[], []];\n var a;\n var b;\n var c;\n var t;\n for (var i = 0; i < 2; ++i) {\n if (i === 0) {\n b = 6 * x0 - 12 * x1 + 6 * x2;\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n c = 3 * x1 - 3 * x0;\n }\n else {\n b = 6 * y0 - 12 * y1 + 6 * y2;\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n c = 3 * y1 - 3 * y0;\n }\n if (Math.abs(a) < 1e-12) {\n if (Math.abs(b) < 1e-12) {\n continue;\n }\n t = -c / b;\n if (t > 0 && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n var b2ac = b * b - 4 * c * a;\n var sqrtb2ac = Math.sqrt(b2ac);\n if (b2ac < 0) {\n continue;\n }\n var t1 = (-b + sqrtb2ac) / (2 * a);\n if (t1 > 0 && t1 < 1) {\n tvalues.push(t1);\n }\n var t2 = (-b - sqrtb2ac) / (2 * a);\n if (t2 > 0 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n var j = tvalues.length;\n var jlen = j;\n var mt;\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3;\n bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3;\n }\n bounds[0][jlen] = x0;\n bounds[1][jlen] = y0;\n bounds[0][jlen + 1] = x3;\n bounds[1][jlen + 1] = y3;\n bounds[0].length = bounds[1].length = jlen + 2;\n return {\n min: {\n x: Math.min.apply(0, bounds[0]),\n y: Math.min.apply(0, bounds[1]),\n },\n max: {\n x: Math.max.apply(0, bounds[0]),\n y: Math.max.apply(0, bounds[1]),\n },\n };\n};\nvar intersect = function (x1, y1, x2, y2, x3, y3, x4, y4) {\n if (Math.max(x1, x2) < Math.min(x3, x4) ||\n Math.min(x1, x2) > Math.max(x3, x4) ||\n Math.max(y1, y2) < Math.min(y3, y4) ||\n Math.min(y1, y2) > Math.max(y3, y4)) {\n return;\n }\n var nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4);\n var ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4);\n var denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n if (!denominator) {\n return;\n }\n var px = nx / denominator;\n var py = ny / denominator;\n var px2 = +px.toFixed(2);\n var py2 = +py.toFixed(2);\n if (px2 < +Math.min(x1, x2).toFixed(2) ||\n px2 > +Math.max(x1, x2).toFixed(2) ||\n px2 < +Math.min(x3, x4).toFixed(2) ||\n px2 > +Math.max(x3, x4).toFixed(2) ||\n py2 < +Math.min(y1, y2).toFixed(2) ||\n py2 > +Math.max(y1, y2).toFixed(2) ||\n py2 < +Math.min(y3, y4).toFixed(2) ||\n py2 > +Math.max(y3, y4).toFixed(2)) {\n return;\n }\n return {\n x: px,\n y: py,\n };\n};\nvar isPointInsideBBox = function (bbox, x, y) {\n return x >= bbox.x && x <= bbox.x + bbox.width && y >= bbox.y && y <= bbox.y + bbox.height;\n};\nvar rectPath = function (x, y, w, h, r) {\n if (r) {\n return [\n ['M', +x + +r, y],\n ['l', w - r * 2, 0],\n ['a', r, r, 0, 0, 1, r, r],\n ['l', 0, h - r * 2],\n ['a', r, r, 0, 0, 1, -r, r],\n ['l', r * 2 - w, 0],\n ['a', r, r, 0, 0, 1, -r, -r],\n ['l', 0, r * 2 - h],\n ['a', r, r, 0, 0, 1, r, -r],\n ['z'],\n ];\n }\n var res = [['M', x, y], ['l', w, 0], ['l', 0, h], ['l', -w, 0], ['z']];\n // @ts-ignore\n res.parsePathArray = parsePathArray;\n return res;\n};\nvar box = function (x, y, width, height) {\n if (x === null) {\n x = y = width = height = 0;\n }\n if (y === null) {\n y = x.y;\n width = x.width;\n height = x.height;\n x = x.x;\n }\n return {\n x: x,\n y: y,\n width: width,\n w: width,\n height: height,\n h: height,\n x2: x + width,\n y2: y + height,\n cx: x + width / 2,\n cy: y + height / 2,\n r1: Math.min(width, height) / 2,\n r2: Math.max(width, height) / 2,\n r0: Math.sqrt(width * width + height * height) / 2,\n path: rectPath(x, y, width, height),\n vb: [x, y, width, height].join(' '),\n };\n};\nvar isBBoxIntersect = function (bbox1, bbox2) {\n bbox1 = box(bbox1);\n bbox2 = box(bbox2);\n return (isPointInsideBBox(bbox2, bbox1.x, bbox1.y) ||\n isPointInsideBBox(bbox2, bbox1.x2, bbox1.y) ||\n isPointInsideBBox(bbox2, bbox1.x, bbox1.y2) ||\n isPointInsideBBox(bbox2, bbox1.x2, bbox1.y2) ||\n isPointInsideBBox(bbox1, bbox2.x, bbox2.y) ||\n isPointInsideBBox(bbox1, bbox2.x2, bbox2.y) ||\n isPointInsideBBox(bbox1, bbox2.x, bbox2.y2) ||\n isPointInsideBBox(bbox1, bbox2.x2, bbox2.y2) ||\n (((bbox1.x < bbox2.x2 && bbox1.x > bbox2.x) || (bbox2.x < bbox1.x2 && bbox2.x > bbox1.x)) &&\n ((bbox1.y < bbox2.y2 && bbox1.y > bbox2.y) || (bbox2.y < bbox1.y2 && bbox2.y > bbox1.y))));\n};\nvar bezierBBox = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n if (!isArray(p1x)) {\n p1x = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y];\n }\n var bbox = curveDim.apply(null, p1x);\n return box(bbox.min.x, bbox.min.y, bbox.max.x - bbox.min.x, bbox.max.y - bbox.min.y);\n};\nvar findDotsAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n var t1 = 1 - t;\n var t13 = Math.pow(t1, 3);\n var t12 = Math.pow(t1, 2);\n var t2 = t * t;\n var t3 = t2 * t;\n var x = t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x;\n var y = t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y;\n var mx = p1x + 2 * t * (c1x - p1x) + t2 * (c2x - 2 * c1x + p1x);\n var my = p1y + 2 * t * (c1y - p1y) + t2 * (c2y - 2 * c1y + p1y);\n var nx = c1x + 2 * t * (c2x - c1x) + t2 * (p2x - 2 * c2x + c1x);\n var ny = c1y + 2 * t * (c2y - c1y) + t2 * (p2y - 2 * c2y + c1y);\n var ax = t1 * p1x + t * c1x;\n var ay = t1 * p1y + t * c1y;\n var cx = t1 * c2x + t * p2x;\n var cy = t1 * c2y + t * p2y;\n var alpha = 90 - (Math.atan2(mx - nx, my - ny) * 180) / Math.PI;\n // (mx > nx || my < ny) && (alpha += 180);\n return {\n x: x,\n y: y,\n m: {\n x: mx,\n y: my,\n },\n n: {\n x: nx,\n y: ny,\n },\n start: {\n x: ax,\n y: ay,\n },\n end: {\n x: cx,\n y: cy,\n },\n alpha: alpha,\n };\n};\nvar interHelper = function (bez1, bez2, justCount) {\n var bbox1 = bezierBBox(bez1);\n var bbox2 = bezierBBox(bez2);\n if (!isBBoxIntersect(bbox1, bbox2)) {\n return justCount ? 0 : [];\n }\n var l1 = bezlen.apply(0, bez1);\n var l2 = bezlen.apply(0, bez2);\n var n1 = ~~(l1 / 8);\n var n2 = ~~(l2 / 8);\n var dots1 = [];\n var dots2 = [];\n var xy = {};\n var res = justCount ? 0 : [];\n for (var i = 0; i < n1 + 1; i++) {\n var d = findDotsAtSegment.apply(0, bez1.concat(i / n1));\n dots1.push({\n x: d.x,\n y: d.y,\n t: i / n1,\n });\n }\n for (var i = 0; i < n2 + 1; i++) {\n var d = findDotsAtSegment.apply(0, bez2.concat(i / n2));\n dots2.push({\n x: d.x,\n y: d.y,\n t: i / n2,\n });\n }\n for (var i = 0; i < n1; i++) {\n for (var j = 0; j < n2; j++) {\n var di = dots1[i];\n var di1 = dots1[i + 1];\n var dj = dots2[j];\n var dj1 = dots2[j + 1];\n var ci = Math.abs(di1.x - di.x) < 0.001 ? 'y' : 'x';\n var cj = Math.abs(dj1.x - dj.x) < 0.001 ? 'y' : 'x';\n var is = intersect(di.x, di.y, di1.x, di1.y, dj.x, dj.y, dj1.x, dj1.y);\n if (is) {\n if (xy[is.x.toFixed(4)] === is.y.toFixed(4)) {\n continue;\n }\n xy[is.x.toFixed(4)] = is.y.toFixed(4);\n var t1 = di.t + Math.abs((is[ci] - di[ci]) / (di1[ci] - di[ci])) * (di1.t - di.t);\n var t2 = dj.t + Math.abs((is[cj] - dj[cj]) / (dj1[cj] - dj[cj])) * (dj1.t - dj.t);\n if (t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1) {\n if (justCount) {\n // @ts-ignore\n res += 1;\n }\n else {\n // @ts-ignore\n res.push({\n x: is.x,\n y: is.y,\n t1: t1,\n t2: t2,\n });\n }\n }\n }\n }\n }\n return res;\n};\nvar interPathHelper = function (path1, path2, justCount) {\n path1 = pathToCurve(path1);\n path2 = pathToCurve(path2);\n var x1;\n var y1;\n var x2;\n var y2;\n var x1m;\n var y1m;\n var x2m;\n var y2m;\n var bez1;\n var bez2;\n var res = justCount ? 0 : [];\n for (var i = 0, ii = path1.length; i < ii; i++) {\n var pi = path1[i];\n if (pi[0] === 'M') {\n x1 = x1m = pi[1];\n y1 = y1m = pi[2];\n }\n else {\n if (pi[0] === 'C') {\n bez1 = [x1, y1].concat(pi.slice(1));\n x1 = bez1[6];\n y1 = bez1[7];\n }\n else {\n bez1 = [x1, y1, x1, y1, x1m, y1m, x1m, y1m];\n x1 = x1m;\n y1 = y1m;\n }\n for (var j = 0, jj = path2.length; j < jj; j++) {\n var pj = path2[j];\n if (pj[0] === 'M') {\n x2 = x2m = pj[1];\n y2 = y2m = pj[2];\n }\n else {\n if (pj[0] === 'C') {\n bez2 = [x2, y2].concat(pj.slice(1));\n x2 = bez2[6];\n y2 = bez2[7];\n }\n else {\n bez2 = [x2, y2, x2, y2, x2m, y2m, x2m, y2m];\n x2 = x2m;\n y2 = y2m;\n }\n var intr = interHelper(bez1, bez2, justCount);\n if (justCount) {\n // @ts-ignore\n res += intr;\n }\n else {\n // @ts-ignore\n for (var k = 0, kk = intr.length; k < kk; k++) {\n intr[k].segment1 = i;\n intr[k].segment2 = j;\n intr[k].bez1 = bez1;\n intr[k].bez2 = bez2;\n }\n // @ts-ignore\n res = res.concat(intr);\n }\n }\n }\n }\n }\n return res;\n};\nvar intersection = function (path1, path2) {\n return interPathHelper(path1, path2);\n};\nfunction decasteljau(points, t) {\n var left = [];\n var right = [];\n function recurse(points, t) {\n if (points.length === 1) {\n left.push(points[0]);\n right.push(points[0]);\n }\n else {\n var middlePoints = [];\n for (var i = 0; i < points.length - 1; i++) {\n if (i === 0) {\n left.push(points[0]);\n }\n if (i === points.length - 2) {\n right.push(points[i + 1]);\n }\n middlePoints[i] = [\n (1 - t) * points[i][0] + t * points[i + 1][0],\n (1 - t) * points[i][1] + t * points[i + 1][1],\n ];\n }\n recurse(middlePoints, t);\n }\n }\n if (points.length) {\n recurse(points, t);\n }\n return { left: left, right: right.reverse() };\n}\nfunction splitCurve(start, end, count) {\n var points = [[start[1], start[2]]];\n count = count || 2;\n var segments = [];\n if (end[0] === 'A') {\n points.push(end[6]);\n points.push(end[7]);\n }\n else if (end[0] === 'C') {\n points.push([end[1], end[2]]);\n points.push([end[3], end[4]]);\n points.push([end[5], end[6]]);\n }\n else if (end[0] === 'S' || end[0] === 'Q') {\n points.push([end[1], end[2]]);\n points.push([end[3], end[4]]);\n }\n else {\n points.push([end[1], end[2]]);\n }\n var leftSegments = points;\n var t = 1 / count;\n for (var i = 0; i < count - 1; i++) {\n var rt = t / (1 - t * i);\n var split = decasteljau(leftSegments, rt);\n segments.push(split.left);\n leftSegments = split.right;\n }\n segments.push(leftSegments);\n var result = segments.map(function (segment) {\n var cmd = [];\n if (segment.length === 4) {\n cmd.push('C');\n cmd = cmd.concat(segment[2]);\n }\n if (segment.length >= 3) {\n if (segment.length === 3) {\n cmd.push('Q');\n }\n cmd = cmd.concat(segment[1]);\n }\n if (segment.length === 2) {\n cmd.push('L');\n }\n cmd = cmd.concat(segment[segment.length - 1]);\n return cmd;\n });\n return result;\n}\nvar splitSegment = function (start, end, count) {\n if (count === 1) {\n return [[].concat(start)];\n }\n var segments = [];\n if (end[0] === 'L' || end[0] === 'C' || end[0] === 'Q') {\n segments = segments.concat(splitCurve(start, end, count));\n }\n else {\n var temp = [].concat(start);\n if (temp[0] === 'M') {\n temp[0] = 'L';\n }\n for (var i = 0; i <= count - 1; i++) {\n segments.push(temp);\n }\n }\n return segments;\n};\nvar fillPath = function (source, target) {\n if (source.length === 1) {\n return source;\n }\n var sourceLen = source.length - 1;\n var targetLen = target.length - 1;\n var ratio = sourceLen / targetLen;\n var segmentsToFill = [];\n if (source.length === 1 && source[0][0] === 'M') {\n for (var i = 0; i < targetLen - sourceLen; i++) {\n source.push(source[0]);\n }\n return source;\n }\n for (var i = 0; i < targetLen; i++) {\n var index = Math.floor(ratio * i);\n segmentsToFill[index] = (segmentsToFill[index] || 0) + 1;\n }\n var filled = segmentsToFill.reduce(function (filled, count, i) {\n if (i === sourceLen) {\n return filled.concat(source[sourceLen]);\n }\n return filled.concat(splitSegment(source[i], source[i + 1], count));\n }, []);\n filled.unshift(source[0]);\n if (target[targetLen] === 'Z' || target[targetLen] === 'z') {\n filled.push('Z');\n }\n return filled;\n};\nvar isEqual = function (obj1, obj2) {\n if (obj1.length !== obj2.length) {\n return false;\n }\n var result = true;\n each(obj1, function (item, i) {\n if (item !== obj2[i]) {\n result = false;\n return false;\n }\n });\n return result;\n};\nfunction getMinDiff(del, add, modify) {\n var type = null;\n var min = modify;\n if (add < min) {\n min = add;\n type = 'add';\n }\n if (del < min) {\n min = del;\n type = 'del';\n }\n return {\n type: type,\n min: min,\n };\n}\n/*\n * https://en.wikipedia.org/wiki/Levenshtein_distance\n * 计算两条path的编辑距离\n */\nvar levenshteinDistance = function (source, target) {\n var sourceLen = source.length;\n var targetLen = target.length;\n var sourceSegment;\n var targetSegment;\n var temp = 0;\n if (sourceLen === 0 || targetLen === 0) {\n return null;\n }\n var dist = [];\n for (var i = 0; i <= sourceLen; i++) {\n dist[i] = [];\n dist[i][0] = { min: i };\n }\n for (var j = 0; j <= targetLen; j++) {\n dist[0][j] = { min: j };\n }\n for (var i = 1; i <= sourceLen; i++) {\n sourceSegment = source[i - 1];\n for (var j = 1; j <= targetLen; j++) {\n targetSegment = target[j - 1];\n if (isEqual(sourceSegment, targetSegment)) {\n temp = 0;\n }\n else {\n temp = 1;\n }\n var del = dist[i - 1][j].min + 1;\n var add = dist[i][j - 1].min + 1;\n var modify = dist[i - 1][j - 1].min + temp;\n dist[i][j] = getMinDiff(del, add, modify);\n }\n }\n return dist;\n};\nvar fillPathByDiff = function (source, target) {\n var diffMatrix = levenshteinDistance(source, target);\n var sourceLen = source.length;\n var targetLen = target.length;\n var changes = [];\n var index = 1;\n var minPos = 1;\n // 如果source和target不是完全不相等\n if (diffMatrix[sourceLen][targetLen].min !== sourceLen) {\n // 获取从source到target所需改动\n for (var i = 1; i <= sourceLen; i++) {\n var min = diffMatrix[i][i].min;\n minPos = i;\n for (var j = index; j <= targetLen; j++) {\n if (diffMatrix[i][j].min < min) {\n min = diffMatrix[i][j].min;\n minPos = j;\n }\n }\n index = minPos;\n if (diffMatrix[i][index].type) {\n changes.push({ index: i - 1, type: diffMatrix[i][index].type });\n }\n }\n // 对source进行增删path\n for (var i = changes.length - 1; i >= 0; i--) {\n index = changes[i].index;\n if (changes[i].type === 'add') {\n source.splice(index, 0, [].concat(source[index]));\n }\n else {\n source.splice(index, 1);\n }\n }\n }\n // source尾部补齐\n sourceLen = source.length;\n var diff = targetLen - sourceLen;\n if (sourceLen < targetLen) {\n for (var i = 0; i < diff; i++) {\n if (source[sourceLen - 1][0] === 'z' || source[sourceLen - 1][0] === 'Z') {\n source.splice(sourceLen - 2, 0, source[sourceLen - 2]);\n }\n else {\n source.push(source[sourceLen - 1]);\n }\n sourceLen += 1;\n }\n }\n return source;\n};\n// 将两个点均分成count个点\nfunction _splitPoints(points, former, count) {\n var result = [].concat(points);\n var index;\n var t = 1 / (count + 1);\n var formerEnd = _getSegmentPoints(former)[0];\n for (var i = 1; i <= count; i++) {\n t *= i;\n index = Math.floor(points.length * t);\n if (index === 0) {\n result.unshift([formerEnd[0] * t + points[index][0] * (1 - t), formerEnd[1] * t + points[index][1] * (1 - t)]);\n }\n else {\n result.splice(index, 0, [\n formerEnd[0] * t + points[index][0] * (1 - t),\n formerEnd[1] * t + points[index][1] * (1 - t),\n ]);\n }\n }\n return result;\n}\n/*\n * 抽取pathSegment中的关键点\n * M,L,A,Q,H,V一个端点\n * Q, S抽取一个端点,一个控制点\n * C抽取一个端点,两个控制点\n */\nfunction _getSegmentPoints(segment) {\n var points = [];\n switch (segment[0]) {\n case 'M':\n points.push([segment[1], segment[2]]);\n break;\n case 'L':\n points.push([segment[1], segment[2]]);\n break;\n case 'A':\n points.push([segment[6], segment[7]]);\n break;\n case 'Q':\n points.push([segment[3], segment[4]]);\n points.push([segment[1], segment[2]]);\n break;\n case 'T':\n points.push([segment[1], segment[2]]);\n break;\n case 'C':\n points.push([segment[5], segment[6]]);\n points.push([segment[1], segment[2]]);\n points.push([segment[3], segment[4]]);\n break;\n case 'S':\n points.push([segment[3], segment[4]]);\n points.push([segment[1], segment[2]]);\n break;\n case 'H':\n points.push([segment[1], segment[1]]);\n break;\n case 'V':\n points.push([segment[1], segment[1]]);\n break;\n default:\n }\n return points;\n}\nvar formatPath = function (fromPath, toPath) {\n if (fromPath.length <= 1) {\n return fromPath;\n }\n var points;\n for (var i = 0; i < toPath.length; i++) {\n if (fromPath[i][0] !== toPath[i][0]) {\n // 获取fromPath的pathSegment的端点,根据toPath的指令对其改造\n points = _getSegmentPoints(fromPath[i]);\n switch (toPath[i][0]) {\n case 'M':\n fromPath[i] = ['M'].concat(points[0]);\n break;\n case 'L':\n fromPath[i] = ['L'].concat(points[0]);\n break;\n case 'A':\n fromPath[i] = [].concat(toPath[i]);\n fromPath[i][6] = points[0][0];\n fromPath[i][7] = points[0][1];\n break;\n case 'Q':\n if (points.length < 2) {\n if (i > 0) {\n points = _splitPoints(points, fromPath[i - 1], 1);\n }\n else {\n fromPath[i] = toPath[i];\n break;\n }\n }\n fromPath[i] = ['Q'].concat(points.reduce(function (arr, i) {\n return arr.concat(i);\n }, []));\n break;\n case 'T':\n fromPath[i] = ['T'].concat(points[0]);\n break;\n case 'C':\n if (points.length < 3) {\n if (i > 0) {\n points = _splitPoints(points, fromPath[i - 1], 2);\n }\n else {\n fromPath[i] = toPath[i];\n break;\n }\n }\n fromPath[i] = ['C'].concat(points.reduce(function (arr, i) {\n return arr.concat(i);\n }, []));\n break;\n case 'S':\n if (points.length < 2) {\n if (i > 0) {\n points = _splitPoints(points, fromPath[i - 1], 1);\n }\n else {\n fromPath[i] = toPath[i];\n break;\n }\n }\n fromPath[i] = ['S'].concat(points.reduce(function (arr, i) {\n return arr.concat(i);\n }, []));\n break;\n default:\n fromPath[i] = toPath[i];\n }\n }\n }\n return fromPath;\n};\nexport { catmullRomToBezier, fillPath, fillPathByDiff, formatPath, intersection, parsePathArray, parsePathString, pathToAbsolute, pathToCurve, rectPath, };\n//# sourceMappingURL=path.js.map","import { isNil, each, isString } from './util';\nimport { getOffScreenContext } from './offscreen';\n/**\n * 获取文本的高度\n * @param text 文本\n * @param fontSize 字体大小\n * @param lineHeight 行高,可以为空\n */\nexport function getTextHeight(text, fontSize, lineHeight) {\n var lineCount = 1;\n if (isString(text)) {\n lineCount = text.split('\\n').length;\n }\n if (lineCount > 1) {\n var spaceingY = getLineSpaceing(fontSize, lineHeight);\n return fontSize * lineCount + spaceingY * (lineCount - 1);\n }\n return fontSize;\n}\n/**\n * 获取行间距如果文本多行,需要获取文本间距\n * @param fontSize 字体大小\n * @param lineHeight 行高\n */\nexport function getLineSpaceing(fontSize, lineHeight) {\n return lineHeight ? lineHeight - fontSize : fontSize * 0.14;\n}\n/**\n * 字体宽度\n * @param text 文本\n * @param font 字体\n */\nexport function getTextWidth(text, font) {\n var context = getOffScreenContext(); // 获取离屏的 ctx 进行计算\n var width = 0;\n // null 或者 undefined 时,宽度为 0\n if (isNil(text) || text === '') {\n return width;\n }\n context.save();\n context.font = font;\n if (isString(text) && text.includes('\\n')) {\n var textArr = text.split('\\n');\n each(textArr, function (subText) {\n var measureWidth = context.measureText(subText).width;\n if (width < measureWidth) {\n width = measureWidth;\n }\n });\n }\n else {\n width = context.measureText(text).width;\n }\n context.restore();\n return width;\n}\nexport function assembleFont(attrs) {\n var fontSize = attrs.fontSize, fontFamily = attrs.fontFamily, fontWeight = attrs.fontWeight, fontStyle = attrs.fontStyle, fontVariant = attrs.fontVariant;\n return [fontStyle, fontVariant, fontWeight, fontSize + \"px\", fontFamily].join(' ').trim();\n}\n//# sourceMappingURL=text.js.map","export { default as Base } from './base';\nexport { default as Circle } from './circle';\nexport { default as Ellipse } from './ellipse';\nexport { default as Image } from './image';\nexport { default as Line } from './line';\nexport { default as Marker } from './marker';\nexport { default as Path } from './path';\nexport { default as Polygon } from './polygon';\nexport { default as Polyline } from './polyline';\nexport { default as Rect } from './rect';\nexport { default as Text } from './text';\n","import { each, isArray } from '@antv/util';\nimport { IElement, IGroup } from '../interfaces';\nimport { Region } from '../types';\nimport { parseStyle } from './parse';\nimport getArcParams from './arc-params';\nimport { mergeRegion, intersectRect } from './util';\nimport * as ArrowUtil from '../util/arrow';\n\nconst SHAPE_ATTRS_MAP = {\n fill: 'fillStyle',\n stroke: 'strokeStyle',\n opacity: 'globalAlpha',\n};\n\nexport function applyAttrsToContext(context: CanvasRenderingContext2D, element: IElement) {\n const attrs = element.attr();\n for (const k in attrs) {\n let v = attrs[k];\n // 转换一下不与 canvas 兼容的属性名\n const name = SHAPE_ATTRS_MAP[k] ? SHAPE_ATTRS_MAP[k] : k;\n if (name === 'matrix' && v) {\n // 设置矩阵\n context.transform(v[0], v[1], v[3], v[4], v[6], v[7]);\n } else if (name === 'lineDash' && context.setLineDash) {\n // 设置虚线,只支持数组形式,非数组形式不做任何操作\n isArray(v) && context.setLineDash(v);\n } else {\n if (name === 'strokeStyle' || name === 'fillStyle') {\n // 如果存在渐变、pattern 这个开销有些大\n // 可以考虑缓存机制,通过 hasUpdate 来避免一些运算\n v = parseStyle(context, element, v);\n } else if (name === 'globalAlpha') {\n // opacity 效果可以叠加,子元素的 opacity 需要与父元素 opacity 相乘\n v = v * context.globalAlpha;\n }\n context[name] = v;\n }\n }\n}\n\nexport function drawChildren(context: CanvasRenderingContext2D, children: IElement[], region?: Region) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i] as IElement;\n if (child.cfg.visible) {\n child.draw(context, region);\n } else {\n child.skipDraw();\n }\n }\n}\n\n// 这个地方的逻辑比较复杂,简单画了一张图:https://www.yuque.com/antv/ou292n/pcgt5g#OW1QE\nexport function checkRefresh(canvas, children: IElement[], region: Region) {\n const refreshElements = canvas.get('refreshElements');\n // 先遍历需要刷新的元素,将这些元素的父元素也设置 refresh\n each(refreshElements, (el) => {\n if (el !== canvas) {\n let parent = el.cfg.parent;\n while (parent && parent !== canvas && !parent.cfg.refresh) {\n parent.cfg.refresh = true;\n parent = parent.cfg.parent;\n }\n }\n });\n if (refreshElements[0] === canvas) {\n setChildrenRefresh(children, region);\n } else {\n // 检查所有子元素是否可以刷新\n checkChildrenRefresh(children, region);\n }\n}\n// 检查所有的子元素是否应该更新\nexport function checkChildrenRefresh(children: IElement[], region: Region) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i] as IElement;\n if (child.cfg.visible) {\n // 先判断 hasChanged,因为它的优先级判断应该高于 refresh\n if (child.cfg.hasChanged) {\n // 如果节点发生了 change,则需要级联设置子元素的 refresh\n child.cfg.refresh = true;\n if (child.isGroup()) {\n setChildrenRefresh(child.cfg.children, region);\n }\n } else if (child.cfg.refresh) {\n // 如果当前图形/分组 refresh = true,说明其子节点存在 changed\n if (child.isGroup()) {\n checkChildrenRefresh(child.cfg.children, region);\n }\n } else {\n // 这个分支说明此次局部刷新,所有的节点和父元素没有发生变化,仅需要检查包围盒(缓存)是否相交即可\n const refresh = checkElementRefresh(child, region);\n child.cfg.refresh = refresh;\n if (refresh && child.isGroup()) {\n // 如果需要刷新,说明子元素也需要刷新,继续进行判定\n checkChildrenRefresh(child.cfg.children, region);\n }\n }\n }\n }\n}\n\n// 由于对改变的图形放入 refreshElements 时做了优化,判定父元素 changed 时不加入\n// 那么有可能会出现 elements 都为空,所以最终 group\nexport function clearChanged(elements: IElement[]) {\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n el.cfg.hasChanged = false;\n // 级联清理\n if (el.isGroup() && !el.destroyed) {\n clearChanged(el.cfg.children);\n }\n }\n}\n\n// 当某个父元素发生改变时,调用这个方法级联设置 refresh\nfunction setChildrenRefresh(children: IElement[], region: Region) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i] as IElement;\n // let refresh = true;\n // 获取缓存的 bbox,如果这个 bbox 还存在则说明父元素不是矩阵发生了改变\n // const bbox = child.cfg.canvasBBox;\n // if (bbox) {\n // // 如果这时候\n // refresh = intersectRect(bbox, region);\n // }\n child.cfg.refresh = true;\n // 如果需要刷新当前节点,所有的子元素设置 refresh\n if (child.isGroup()) {\n setChildrenRefresh(child.get('children'), region);\n }\n }\n}\n\nfunction checkElementRefresh(shape: IElement, region: Region): boolean {\n const bbox = shape.cfg.cacheCanvasBBox;\n const isAllow = shape.cfg.isInView && bbox && intersectRect(bbox, region);\n return isAllow;\n}\n\n// 绘制 path\nexport function drawPath(shape, context, attrs, arcParamsCache) {\n const { path, startArrow, endArrow } = attrs;\n if (!path) {\n return;\n }\n let currentPoint = [0, 0]; // 当前图形\n let startMovePoint = [0, 0]; // 开始 M 的点,可能会有多个\n let distance = {\n dx: 0,\n dy: 0,\n };\n context.beginPath();\n for (let i = 0; i < path.length; i++) {\n const params = path[i];\n const command = params[0];\n if (i === 0 && startArrow && startArrow.d) {\n const tangent = shape.getStartTangent();\n distance = ArrowUtil.getShortenOffset(tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1], startArrow.d);\n } else if (i === path.length - 2 && path[i + 1][0] === 'Z' && endArrow && endArrow.d) {\n // 为了防止结尾为 Z 的 segment 缩短不起效,需要取最后两个 segment 特殊处理\n const lastPath = path[i + 1];\n if (lastPath[0] === 'Z') {\n const tangent = shape.getEndTangent();\n distance = ArrowUtil.getShortenOffset(tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1], endArrow.d);\n }\n } else if (i === path.length - 1 && endArrow && endArrow.d) {\n if (path[0] !== 'Z') {\n const tangent = shape.getEndTangent();\n distance = ArrowUtil.getShortenOffset(tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1], endArrow.d);\n }\n }\n\n const { dx, dy } = distance;\n // V,H,S,T 都在前面被转换成标准形式\n switch (command) {\n case 'M':\n context.moveTo(params[1] - dx, params[2] - dy);\n startMovePoint = [params[1], params[2]];\n break;\n case 'L':\n context.lineTo(params[1] - dx, params[2] - dy);\n break;\n case 'Q':\n context.quadraticCurveTo(params[1], params[2], params[3] - dx, params[4] - dy);\n break;\n case 'C':\n context.bezierCurveTo(params[1], params[2], params[3], params[4], params[5] - dx, params[6] - dy);\n break;\n case 'A': {\n let arcParams;\n // 为了加速绘制,可以提供参数的缓存,各个图形自己缓存\n if (arcParamsCache) {\n arcParams = arcParamsCache[i];\n if (!arcParams) {\n arcParams = getArcParams(currentPoint, params);\n arcParamsCache[i] = arcParams;\n }\n } else {\n arcParams = getArcParams(currentPoint, params);\n }\n const { cx, cy, rx, ry, startAngle, endAngle, xRotation, sweepFlag } = arcParams;\n // 直接使用椭圆的 api\n if (context.ellipse) {\n context.ellipse(cx, cy, rx, ry, xRotation, startAngle, endAngle, 1 - sweepFlag);\n } else {\n const r = rx > ry ? rx : ry;\n const scaleX = rx > ry ? 1 : rx / ry;\n const scaleY = rx > ry ? ry / rx : 1;\n context.translate(cx, cy);\n context.rotate(xRotation);\n context.scale(scaleX, scaleY);\n context.arc(0, 0, r, startAngle, endAngle, 1 - sweepFlag);\n context.scale(1 / scaleX, 1 / scaleY);\n context.rotate(-xRotation);\n context.translate(-cx, -cy);\n }\n break;\n }\n case 'Z':\n context.closePath();\n break;\n default:\n break;\n }\n\n // 有了 Z 后,当前节点从开始 M 的点开始\n if (command === 'Z') {\n currentPoint = startMovePoint;\n } else {\n const len = params.length;\n currentPoint = [params[len - 2], params[len - 1]];\n }\n }\n}\n\n// 刷新图形元素(Shape 或者 Group)\nexport function refreshElement(element, changeType) {\n const canvas = element.get('canvas');\n // 只有存在于 canvas 上时生效\n if (canvas) {\n if (changeType === 'remove') {\n // 一旦 remove,则无法在 element 上拿到包围盒\n // destroy 后所有属性都拿不到,所以需要暂存一下\n // 这是一段 hack 的代码\n element._cacheCanvasBBox = element.get('cacheCanvasBBox');\n }\n // 防止反复刷新\n if (!element.get('hasChanged')) {\n // 但是始终要标记为 hasChanged,便于后面进行局部渲染\n element.set('hasChanged', true);\n\n // 本来只有局部渲染模式下,才需要记录更新的元素队列\n // if (canvas.get('localRefresh')) {\n // canvas.refreshElement(element, changeType, canvas);\n // }\n // 但对于 https://github.com/antvis/g/issues/422 的场景,全局渲染的模式下也需要记录更新的元素队列\n // 如果当前元素的父元素发生了改变,可以不放入队列,这句话大概能够提升 15% 的初次渲染性能\n if (!(element.cfg.parent && element.cfg.parent.get('hasChanged'))) {\n canvas.refreshElement(element, changeType, canvas);\n if (canvas.get('autoDraw')) {\n canvas.draw();\n }\n }\n }\n }\n}\n\nexport function getRefreshRegion(element) {\n let region;\n if (!element.destroyed) {\n const cacheBox = element.get('cacheCanvasBBox');\n const validCache = cacheBox && !!(cacheBox.width && cacheBox.height);\n const bbox = element.getCanvasBBox();\n const validBBox = bbox && !!(bbox.width && bbox.height);\n // 是否是有效 bbox 判定,一些 NaN 或者 宽高为 0 的情况过滤掉\n if (validCache && validBBox) {\n region = mergeRegion(cacheBox, bbox);\n } else if (validCache) {\n region = cacheBox;\n } else if (validBBox) {\n region = bbox;\n }\n } else {\n // 因为元素已经销毁所以无法获取到缓存的包围盒\n region = element['_cacheCanvasBBox'];\n }\n return region;\n}\n\nexport function getMergedRegion(elements): Region {\n if (!elements.length) {\n return null;\n }\n const minXArr = [];\n const minYArr = [];\n const maxXArr = [];\n const maxYArr = [];\n each(elements, (el: IElement) => {\n const region = getRefreshRegion(el);\n if (region) {\n minXArr.push(region.minX);\n minYArr.push(region.minY);\n maxXArr.push(region.maxX);\n maxYArr.push(region.maxY);\n }\n });\n return {\n minX: Math.min.apply(null, minXArr),\n minY: Math.min.apply(null, minYArr),\n maxX: Math.max.apply(null, maxXArr),\n maxY: Math.max.apply(null, maxYArr),\n };\n}\n\nexport function mergeView(region, viewRegion) {\n if (!region || !viewRegion) {\n return null;\n }\n // 不相交,则直接返回 null\n if (!intersectRect(region, viewRegion)) {\n return null;\n }\n return {\n minX: Math.max(region.minX, viewRegion.minX),\n minY: Math.max(region.minY, viewRegion.minY),\n maxX: Math.min(region.maxX, viewRegion.maxX),\n maxY: Math.min(region.maxY, viewRegion.maxY),\n };\n}\n","import { Path } from '../shape';\n\nconst { sin, cos, atan2, PI } = Math;\n\nfunction _addDefaultArrow(shape, attrs, x1, y1, x2, y2, isStart) {\n const { stroke, lineWidth } = attrs;\n const x = x1 - x2;\n const y = y1 - y2;\n const rad = atan2(y, x);\n const arrowShape = new Path({\n type: 'path',\n canvas: shape.get('canvas'),\n isArrowShape: true,\n attrs: {\n // 默认箭头的边长为 10,夹角为 60 度\n path: `M${10 * cos(PI / 6)},${10 * sin(PI / 6)} L0,0 L${10 * cos(PI / 6)},-${10 * sin(PI / 6)}`,\n // 使用 shape stroke 值\n stroke,\n lineWidth,\n },\n });\n arrowShape.translate(x2, y2);\n arrowShape.rotateAtPoint(x2, y2, rad);\n shape.set(isStart ? 'startArrowShape' : 'endArrowShape', arrowShape);\n}\n\n/**\n * 箭头 path 的设置要求\n * 1. 箭头顶点坐标需要为 (0, 0)\n * 2. 箭头夹角的中心分割线需要与 X 轴正方向对齐\n */\nfunction _addCustomizedArrow(shape, attrs, x1, y1, x2, y2, isStart) {\n const { startArrow, endArrow, stroke, lineWidth } = attrs;\n const arrowAttrs = isStart ? startArrow : endArrow;\n const { d, fill: arrowFill, stroke: arrowStroke, lineWidth: arrowLineWidth, ...restAttrs } = arrowAttrs;\n const x = x1 - x2;\n const y = y1 - y2;\n const rad = atan2(y, x);\n\n if (d) {\n x2 = x2 - cos(rad) * d;\n y2 = y2 - sin(rad) * d;\n }\n\n const arrowShape = new Path({\n type: 'path',\n canvas: shape.get('canvas'),\n isArrowShape: true,\n attrs: {\n ...restAttrs,\n // 支持单独设置箭头的 stroke 和 lineWidth,若为空则使用 shape 的值\n stroke: arrowStroke || stroke,\n lineWidth: arrowLineWidth || lineWidth,\n // 箭头是否填充需要手动设置,不会继承自 shape 的值\n fill: arrowFill,\n },\n });\n\n arrowShape.translate(x2, y2);\n arrowShape.rotateAtPoint(x2, y2, rad);\n shape.set(isStart ? 'startArrowShape' : 'endArrowShape', arrowShape);\n}\n\n/**\n * 如果自定义箭头并且有 d 需要做偏移,如果直接画,线条会超出箭头尖端,因此需要根据箭头偏移 d, 返回线需要缩短的距离\n * |----------------\n * |<|--------------\n * |\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 箭头作用点 x\n * @param {number} y2 箭头作用点 y\n * @param {number} d 箭头沿线条方向的偏移距离\n * @return {{dx: number, dy: number}} 返回线条偏移距离\n */\nexport function getShortenOffset(x1, y1, x2, y2, d) {\n const rad = atan2(y2 - y1, x2 - x1);\n return {\n dx: cos(rad) * d,\n dy: sin(rad) * d,\n };\n}\n\n/**\n * 绘制起始箭头\n * @param {IShape} shape 图形\n * @param {ShapeAttrs} attrs shape 的绘图属性\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 箭头作用点 x\n * @param {number} y2 箭头作用点 y\n */\nexport function addStartArrow(shape, attrs, x1, y1, x2, y2) {\n if (typeof attrs.startArrow === 'object') {\n _addCustomizedArrow(shape, attrs, x1, y1, x2, y2, true);\n } else if (attrs.startArrow) {\n _addDefaultArrow(shape, attrs, x1, y1, x2, y2, true);\n } else {\n shape.set('startArrowShape', null);\n }\n}\n\n/**\n * 绘制结束箭头\n * @param {IShape} shape 图形\n * @param {ShapeAttrs} attrs shape 的绘图属性\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 箭头作用点 x\n * @param {number} y2 箭头作用点 y\n */\nexport function addEndArrow(shape, attrs, x1, y1, x2, y2) {\n if (typeof attrs.endArrow === 'object') {\n _addCustomizedArrow(shape, attrs, x1, y1, x2, y2, false);\n } else if (attrs.endArrow) {\n _addDefaultArrow(shape, attrs, x1, y1, x2, y2, false);\n } else {\n shape.set('startArrowShape', null);\n }\n}\n","import { Line as LineUtil } from '@antv/g-math';\n\nexport default function inLine(x1, y1, x2, y2, lineWidth, x, y) {\n const minX = Math.min(x1, x2);\n const maxX = Math.max(x1, x2);\n const minY = Math.min(y1, y2);\n const maxY = Math.max(y1, y2);\n const halfWidth = lineWidth / 2;\n // 因为目前的方案是计算点到直线的距离,而有可能会在延长线上,所以要先判断是否在包围盒内\n // 这种方案会在水平或者竖直的情况下载线的延长线上有半 lineWidth 的误差\n if (!(x >= minX - halfWidth && x <= maxX + halfWidth && y >= minY - halfWidth && y <= maxY + halfWidth)) {\n return false;\n }\n // 因为已经计算了包围盒,所以仅需要计算到直线的距离即可,可以显著提升性能\n return LineUtil.pointToLine(x1, y1, x2, y2, x, y) <= lineWidth / 2;\n}\n","var GraphEvent = /** @class */ (function () {\n function GraphEvent(type, event) {\n /**\n * 是否允许冒泡\n * @type {boolean}\n */\n this.bubbles = true;\n /**\n * 触发对象\n * @type {object}\n */\n this.target = null;\n /**\n * 监听对象\n * @type {object}\n */\n this.currentTarget = null;\n /**\n * 委托对象\n * @type {object}\n */\n this.delegateTarget = null;\n /**\n * 委托事件监听对象的代理对象,即 ev.delegateObject = ev.currentTarget.get('delegateObject')\n * @type {object}\n */\n this.delegateObject = null;\n /**\n * 是否阻止了原生事件\n * @type {boolean}\n */\n this.defaultPrevented = false;\n /**\n * 是否阻止传播(向上冒泡)\n * @type {boolean}\n */\n this.propagationStopped = false;\n /**\n * 触发事件的图形\n * @type {IShape}\n */\n this.shape = null;\n /**\n * 开始触发事件的图形\n * @type {IShape}\n */\n this.fromShape = null;\n /**\n * 事件结束时的触发图形\n * @type {IShape}\n */\n this.toShape = null;\n // 触发事件的路径\n this.propagationPath = [];\n this.type = type;\n this.name = type;\n this.originalEvent = event;\n this.timeStamp = event.timeStamp;\n }\n /**\n * 阻止浏览器默认的行为\n */\n GraphEvent.prototype.preventDefault = function () {\n this.defaultPrevented = true;\n if (this.originalEvent.preventDefault) {\n this.originalEvent.preventDefault();\n }\n };\n /**\n * 阻止冒泡\n */\n GraphEvent.prototype.stopPropagation = function () {\n this.propagationStopped = true;\n };\n GraphEvent.prototype.toString = function () {\n var type = this.type;\n return \"[Event (type=\" + type + \")]\";\n };\n GraphEvent.prototype.save = function () { };\n GraphEvent.prototype.restore = function () { };\n return GraphEvent;\n}());\nexport default GraphEvent;\n//# sourceMappingURL=graph-event.js.map","// 全局设置一个唯一离屏的 ctx,用于计算 isPointInPath\nvar offScreenCtx = null;\nexport function getOffScreenContext() {\n if (!offScreenCtx) {\n var canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n offScreenCtx = canvas.getContext('2d');\n }\n return offScreenCtx;\n}\n//# sourceMappingURL=offscreen.js.map","import { __extends } from \"tslib\";\nimport EE from '@antv/event-emitter';\nimport { mix } from '../util/util';\nvar Base = /** @class */ (function (_super) {\n __extends(Base, _super);\n function Base(cfg) {\n var _this = _super.call(this) || this;\n /**\n * 是否被销毁\n * @type {boolean}\n */\n _this.destroyed = false;\n var defaultCfg = _this.getDefaultCfg();\n _this.cfg = mix(defaultCfg, cfg);\n return _this;\n }\n /**\n * @protected\n * 默认的配置项\n * @returns {object} 默认的配置项\n */\n Base.prototype.getDefaultCfg = function () {\n return {};\n };\n // 实现接口的方法\n Base.prototype.get = function (name) {\n return this.cfg[name];\n };\n // 实现接口的方法\n Base.prototype.set = function (name, value) {\n this.cfg[name] = value;\n };\n // 实现接口的方法\n Base.prototype.destroy = function () {\n this.cfg = {\n destroyed: true,\n };\n this.off();\n this.destroyed = true;\n };\n return Base;\n}(EE));\nexport default Base;\n//# sourceMappingURL=base.js.map","import { __extends } from \"tslib\";\nimport Element from './element';\nimport { isFunction, isObject, each, removeFromArray, upperFirst, isAllowCapture } from '../util/util';\nvar SHAPE_MAP = {};\nvar INDEX = '_INDEX';\n/**\n * 设置 canvas\n * @param {IElement} element 元素\n * @param {ICanvas} canvas 画布\n */\nfunction setCanvas(element, canvas) {\n element.set('canvas', canvas);\n if (element.isGroup()) {\n var children = element.get('children');\n if (children.length) {\n children.forEach(function (child) {\n setCanvas(child, canvas);\n });\n }\n }\n}\n/**\n * 设置 timeline\n * @param {IElement} element 元素\n * @param {Timeline} timeline 时间轴\n */\nfunction setTimeline(element, timeline) {\n element.set('timeline', timeline);\n if (element.isGroup()) {\n var children = element.get('children');\n if (children.length) {\n children.forEach(function (child) {\n setTimeline(child, timeline);\n });\n }\n }\n}\nfunction contains(container, element) {\n var children = container.getChildren();\n return children.indexOf(element) >= 0;\n}\nfunction removeChild(container, element, destroy) {\n if (destroy === void 0) { destroy = true; }\n // 不再调用 element.remove() 方法,会出现循环调用\n if (destroy) {\n element.destroy();\n }\n else {\n element.set('parent', null);\n element.set('canvas', null);\n }\n removeFromArray(container.getChildren(), element);\n}\nfunction getComparer(compare) {\n return function (left, right) {\n var result = compare(left, right);\n return result === 0 ? left[INDEX] - right[INDEX] : result;\n };\n}\nvar Container = /** @class */ (function (_super) {\n __extends(Container, _super);\n function Container() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Container.prototype.isCanvas = function () {\n return false;\n };\n // 根据子节点确定 BBox\n Container.prototype.getBBox = function () {\n // 所有的值可能在画布的可视区外\n var minX = Infinity;\n var maxX = -Infinity;\n var minY = Infinity;\n var maxY = -Infinity;\n var xArr = [];\n var yArr = [];\n // 将可见元素、图形以及不为空的图形分组筛选出来,用于包围盒合并\n var children = this.getChildren().filter(function (child) {\n return child.get('visible') && (!child.isGroup() || (child.isGroup() && child.getChildren().length > 0));\n });\n if (children.length > 0) {\n each(children, function (child) {\n var box = child.getBBox();\n xArr.push(box.minX, box.maxX);\n yArr.push(box.minY, box.maxY);\n });\n minX = Math.min.apply(null, xArr);\n maxX = Math.max.apply(null, xArr);\n minY = Math.min.apply(null, yArr);\n maxY = Math.max.apply(null, yArr);\n }\n else {\n minX = 0;\n maxX = 0;\n minY = 0;\n maxY = 0;\n }\n var box = {\n x: minX,\n y: minY,\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY,\n width: maxX - minX,\n height: maxY - minY,\n };\n return box;\n };\n // 获取画布的包围盒\n Container.prototype.getCanvasBBox = function () {\n var minX = Infinity;\n var maxX = -Infinity;\n var minY = Infinity;\n var maxY = -Infinity;\n var xArr = [];\n var yArr = [];\n // 将可见元素、图形以及不为空的图形分组筛选出来,用于包围盒合并\n var children = this.getChildren().filter(function (child) {\n return child.get('visible') && (!child.isGroup() || (child.isGroup() && child.getChildren().length > 0));\n });\n if (children.length > 0) {\n each(children, function (child) {\n var box = child.getCanvasBBox();\n xArr.push(box.minX, box.maxX);\n yArr.push(box.minY, box.maxY);\n });\n minX = Math.min.apply(null, xArr);\n maxX = Math.max.apply(null, xArr);\n minY = Math.min.apply(null, yArr);\n maxY = Math.max.apply(null, yArr);\n }\n else {\n minX = 0;\n maxX = 0;\n minY = 0;\n maxY = 0;\n }\n var box = {\n x: minX,\n y: minY,\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY,\n width: maxX - minX,\n height: maxY - minY,\n };\n return box;\n };\n Container.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n cfg['children'] = [];\n return cfg;\n };\n Container.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n if (name === 'matrix') {\n var totalMatrix = this.getTotalMatrix();\n this._applyChildrenMarix(totalMatrix);\n }\n };\n // 不但应用到自己身上还要应用于子元素\n Container.prototype.applyMatrix = function (matrix) {\n var preTotalMatrix = this.getTotalMatrix();\n _super.prototype.applyMatrix.call(this, matrix);\n var totalMatrix = this.getTotalMatrix();\n // totalMatrix 没有发生变化时,这里仅考虑两者都为 null 时\n // 不继续向下传递矩阵\n if (totalMatrix === preTotalMatrix) {\n return;\n }\n this._applyChildrenMarix(totalMatrix);\n };\n // 在子元素上设置矩阵\n Container.prototype._applyChildrenMarix = function (totalMatrix) {\n var children = this.getChildren();\n each(children, function (child) {\n child.applyMatrix(totalMatrix);\n });\n };\n // 兼容老版本的接口\n Container.prototype.addShape = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var type = args[0];\n var cfg = args[1];\n if (isObject(type)) {\n cfg = type;\n }\n else {\n cfg['type'] = type;\n }\n var shapeType = SHAPE_MAP[cfg.type];\n if (!shapeType) {\n shapeType = upperFirst(cfg.type);\n SHAPE_MAP[cfg.type] = shapeType;\n }\n var ShapeBase = this.getShapeBase();\n var shape = new ShapeBase[shapeType](cfg);\n this.add(shape);\n return shape;\n };\n Container.prototype.addGroup = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var groupClass = args[0], cfg = args[1];\n var group;\n if (isFunction(groupClass)) {\n if (cfg) {\n group = new groupClass(cfg);\n }\n else {\n group = new groupClass({\n // canvas,\n parent: this,\n });\n }\n }\n else {\n var tmpCfg = groupClass || {};\n var TmpGroupClass = this.getGroupBase();\n group = new TmpGroupClass(tmpCfg);\n }\n this.add(group);\n return group;\n };\n Container.prototype.getCanvas = function () {\n var canvas;\n if (this.isCanvas()) {\n canvas = this;\n }\n else {\n canvas = this.get('canvas');\n }\n return canvas;\n };\n Container.prototype.getShape = function (x, y, ev) {\n // 如果不支持拾取,则直接返回\n if (!isAllowCapture(this)) {\n return null;\n }\n var children = this.getChildren();\n var shape;\n // 如果容器是 group\n if (!this.isCanvas()) {\n var v = [x, y, 1];\n // 将 x, y 转换成对应于 group 的局部坐标\n v = this.invertFromMatrix(v);\n if (!this.isClipped(v[0], v[1])) {\n shape = this._findShape(children, v[0], v[1], ev);\n }\n }\n else {\n shape = this._findShape(children, x, y, ev);\n }\n return shape;\n };\n Container.prototype._findShape = function (children, x, y, ev) {\n var shape = null;\n for (var i = children.length - 1; i >= 0; i--) {\n var child = children[i];\n if (isAllowCapture(child)) {\n if (child.isGroup()) {\n shape = child.getShape(x, y, ev);\n }\n else if (child.isHit(x, y)) {\n shape = child;\n }\n }\n if (shape) {\n break;\n }\n }\n return shape;\n };\n Container.prototype.add = function (element) {\n var canvas = this.getCanvas();\n var children = this.getChildren();\n var timeline = this.get('timeline');\n var preParent = element.getParent();\n if (preParent) {\n removeChild(preParent, element, false);\n }\n element.set('parent', this);\n if (canvas) {\n setCanvas(element, canvas);\n }\n if (timeline) {\n setTimeline(element, timeline);\n }\n children.push(element);\n element.onCanvasChange('add');\n this._applyElementMatrix(element);\n };\n // 将当前容器的矩阵应用到子元素\n Container.prototype._applyElementMatrix = function (element) {\n var totalMatrix = this.getTotalMatrix();\n // 添加图形或者分组时,需要把当前图元的矩阵设置进去\n if (totalMatrix) {\n element.applyMatrix(totalMatrix);\n }\n };\n Container.prototype.getChildren = function () {\n return this.get('children');\n };\n Container.prototype.sort = function () {\n var children = this.getChildren();\n // 稳定排序\n each(children, function (child, index) {\n child[INDEX] = index;\n return child;\n });\n children.sort(getComparer(function (obj1, obj2) {\n return obj1.get('zIndex') - obj2.get('zIndex');\n }));\n this.onCanvasChange('sort');\n };\n Container.prototype.clear = function () {\n this.set('clearing', true);\n if (this.destroyed) {\n return;\n }\n var children = this.getChildren();\n for (var i = children.length - 1; i >= 0; i--) {\n children[i].destroy(); // 销毁子元素\n }\n this.set('children', []);\n this.onCanvasChange('clear');\n this.set('clearing', false);\n };\n Container.prototype.destroy = function () {\n if (this.get('destroyed')) {\n return;\n }\n this.clear();\n _super.prototype.destroy.call(this);\n };\n /**\n * 获取第一个子元素\n * @return {IElement} 第一个元素\n */\n Container.prototype.getFirst = function () {\n return this.getChildByIndex(0);\n };\n /**\n * 获取最后一个子元素\n * @return {IElement} 元素\n */\n Container.prototype.getLast = function () {\n var children = this.getChildren();\n return this.getChildByIndex(children.length - 1);\n };\n /**\n * 根据索引获取子元素\n * @return {IElement} 第一个元素\n */\n Container.prototype.getChildByIndex = function (index) {\n var children = this.getChildren();\n return children[index];\n };\n /**\n * 子元素的数量\n * @return {number} 子元素数量\n */\n Container.prototype.getCount = function () {\n var children = this.getChildren();\n return children.length;\n };\n /**\n * 是否包含对应元素\n * @param {IElement} element 元素\n * @return {boolean}\n */\n Container.prototype.contain = function (element) {\n var children = this.getChildren();\n return children.indexOf(element) > -1;\n };\n /**\n * 移除对应子元素\n * @param {IElement} element 子元素\n * @param {boolean} destroy 是否销毁子元素,默认为 true\n */\n Container.prototype.removeChild = function (element, destroy) {\n if (destroy === void 0) { destroy = true; }\n if (this.contain(element)) {\n element.remove(destroy);\n }\n };\n /**\n * 查找所有匹配的元素\n * @param {ElementFilterFn} fn 匹配函数\n * @return {IElement[]} 元素数组\n */\n Container.prototype.findAll = function (fn) {\n var rst = [];\n var children = this.getChildren();\n each(children, function (element) {\n if (fn(element)) {\n rst.push(element);\n }\n if (element.isGroup()) {\n rst = rst.concat(element.findAll(fn));\n }\n });\n return rst;\n };\n /**\n * 查找元素,找到第一个返回\n * @param {ElementFilterFn} fn 匹配函数\n * @return {IElement|null} 元素,可以为空\n */\n Container.prototype.find = function (fn) {\n var rst = null;\n var children = this.getChildren();\n each(children, function (element) {\n if (fn(element)) {\n rst = element;\n }\n else if (element.isGroup()) {\n rst = element.find(fn);\n }\n if (rst) {\n return false;\n }\n });\n return rst;\n };\n /**\n * 根据 ID 查找元素\n * @param {string} id 元素 id\n * @return {IElement|null} 元素\n */\n Container.prototype.findById = function (id) {\n return this.find(function (element) {\n return element.get('id') === id;\n });\n };\n /**\n * 该方法即将废弃,不建议使用\n * 根据 className 查找元素\n * TODO: 该方式定义暂时只给 G6 3.3 以后的版本使用,待 G6 中的 findByClassName 方法移除后,G 也需要同步移除\n * @param {string} className 元素 className\n * @return {IElement | null} 元素\n */\n Container.prototype.findByClassName = function (className) {\n return this.find(function (element) {\n return element.get('className') === className;\n });\n };\n /**\n * 根据 name 查找元素列表\n * @param {string} name 元素名称\n * @return {IElement[]} 元素\n */\n Container.prototype.findAllByName = function (name) {\n return this.findAll(function (element) {\n return element.get('name') === name;\n });\n };\n return Container;\n}(Element));\nexport default Container;\n//# sourceMappingURL=container.js.map","/**\r\n * Common utilities\r\n * @module glMatrix\r\n */\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nexport var RANDOM = Math.random;\n/**\r\n * Sets the type of array used when creating new vectors and matrices\r\n *\r\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\r\n */\n\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\n/**\r\n * Convert Degree To Radian\r\n *\r\n * @param {Number} a Angle in Degrees\r\n */\n\nexport function toRadian(a) {\n return a * degree;\n}\n/**\r\n * Tests whether or not the arguments have approximately the same value, within an absolute\r\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\r\n * than or equal to 1.0, and a relative tolerance is used for larger values)\r\n *\r\n * @param {Number} a The first number to test.\r\n * @param {Number} b The second number to test.\r\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};","import * as glMatrix from \"./common.js\";\n/**\r\n * 3x3 Matrix\r\n * @module mat3\r\n */\n\n/**\r\n * Creates a new identity mat3\r\n *\r\n * @returns {mat3} a new 3x3 matrix\r\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(9);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n }\n\n out[0] = 1;\n out[4] = 1;\n out[8] = 1;\n return out;\n}\n/**\r\n * Copies the upper-left 3x3 values into the given mat3.\r\n *\r\n * @param {mat3} out the receiving 3x3 matrix\r\n * @param {ReadonlyMat4} a the source 4x4 matrix\r\n * @returns {mat3} out\r\n */\n\nexport function fromMat4(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[4];\n out[4] = a[5];\n out[5] = a[6];\n out[6] = a[8];\n out[7] = a[9];\n out[8] = a[10];\n return out;\n}\n/**\r\n * Creates a new mat3 initialized with values from an existing matrix\r\n *\r\n * @param {ReadonlyMat3} a matrix to clone\r\n * @returns {mat3} a new 3x3 matrix\r\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\r\n * Copy the values from one mat3 to another\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the source matrix\r\n * @returns {mat3} out\r\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\r\n * Create a new mat3 with the given values\r\n *\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\r\n * @returns {mat3} A new mat3\r\n */\n\nexport function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\r\n * Set the components of a mat3 to the given values\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\r\n * @returns {mat3} out\r\n */\n\nexport function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\r\n * Set a mat3 to the identity matrix\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @returns {mat3} out\r\n */\n\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\r\n * Transpose the values of a mat3\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the source matrix\r\n * @returns {mat3} out\r\n */\n\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a12 = a[5];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a01;\n out[5] = a[7];\n out[6] = a02;\n out[7] = a12;\n } else {\n out[0] = a[0];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a[1];\n out[4] = a[4];\n out[5] = a[7];\n out[6] = a[2];\n out[7] = a[5];\n out[8] = a[8];\n }\n\n return out;\n}\n/**\r\n * Inverts a mat3\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the source matrix\r\n * @returns {mat3} out\r\n */\n\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b01 = a22 * a11 - a12 * a21;\n var b11 = -a22 * a10 + a12 * a20;\n var b21 = a21 * a10 - a11 * a20; // Calculate the determinant\n\n var det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = b01 * det;\n out[1] = (-a22 * a01 + a02 * a21) * det;\n out[2] = (a12 * a01 - a02 * a11) * det;\n out[3] = b11 * det;\n out[4] = (a22 * a00 - a02 * a20) * det;\n out[5] = (-a12 * a00 + a02 * a10) * det;\n out[6] = b21 * det;\n out[7] = (-a21 * a00 + a01 * a20) * det;\n out[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n}\n/**\r\n * Calculates the adjugate of a mat3\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the source matrix\r\n * @returns {mat3} out\r\n */\n\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n out[0] = a11 * a22 - a12 * a21;\n out[1] = a02 * a21 - a01 * a22;\n out[2] = a01 * a12 - a02 * a11;\n out[3] = a12 * a20 - a10 * a22;\n out[4] = a00 * a22 - a02 * a20;\n out[5] = a02 * a10 - a00 * a12;\n out[6] = a10 * a21 - a11 * a20;\n out[7] = a01 * a20 - a00 * a21;\n out[8] = a00 * a11 - a01 * a10;\n return out;\n}\n/**\r\n * Calculates the determinant of a mat3\r\n *\r\n * @param {ReadonlyMat3} a the source matrix\r\n * @returns {Number} determinant of a\r\n */\n\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n}\n/**\r\n * Multiplies two mat3's\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the first operand\r\n * @param {ReadonlyMat3} b the second operand\r\n * @returns {mat3} out\r\n */\n\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b00 = b[0],\n b01 = b[1],\n b02 = b[2];\n var b10 = b[3],\n b11 = b[4],\n b12 = b[5];\n var b20 = b[6],\n b21 = b[7],\n b22 = b[8];\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n}\n/**\r\n * Translate a mat3 by the given vector\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the matrix to translate\r\n * @param {ReadonlyVec2} v vector to translate by\r\n * @returns {mat3} out\r\n */\n\nexport function translate(out, a, v) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n x = v[0],\n y = v[1];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a10;\n out[4] = a11;\n out[5] = a12;\n out[6] = x * a00 + y * a10 + a20;\n out[7] = x * a01 + y * a11 + a21;\n out[8] = x * a02 + y * a12 + a22;\n return out;\n}\n/**\r\n * Rotates a mat3 by the given angle\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat3} out\r\n */\n\nexport function rotate(out, a, rad) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c * a00 + s * a10;\n out[1] = c * a01 + s * a11;\n out[2] = c * a02 + s * a12;\n out[3] = c * a10 - s * a00;\n out[4] = c * a11 - s * a01;\n out[5] = c * a12 - s * a02;\n out[6] = a20;\n out[7] = a21;\n out[8] = a22;\n return out;\n}\n/**\r\n * Scales the mat3 by the dimensions in the given vec2\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the matrix to rotate\r\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\r\n * @returns {mat3} out\r\n **/\n\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1];\n out[0] = x * a[0];\n out[1] = x * a[1];\n out[2] = x * a[2];\n out[3] = y * a[3];\n out[4] = y * a[4];\n out[5] = y * a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\r\n * Creates a matrix from a vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat3.identity(dest);\r\n * mat3.translate(dest, dest, vec);\r\n *\r\n * @param {mat3} out mat3 receiving operation result\r\n * @param {ReadonlyVec2} v Translation vector\r\n * @returns {mat3} out\r\n */\n\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = v[0];\n out[7] = v[1];\n out[8] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a given angle\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat3.identity(dest);\r\n * mat3.rotate(dest, dest, rad);\r\n *\r\n * @param {mat3} out mat3 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat3} out\r\n */\n\nexport function fromRotation(out, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = -s;\n out[4] = c;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a vector scaling\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat3.identity(dest);\r\n * mat3.scale(dest, dest, vec);\r\n *\r\n * @param {mat3} out mat3 receiving operation result\r\n * @param {ReadonlyVec2} v Scaling vector\r\n * @returns {mat3} out\r\n */\n\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = v[1];\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\r\n * Copies the values from a mat2d into a mat3\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat2d} a the matrix to copy\r\n * @returns {mat3} out\r\n **/\n\nexport function fromMat2d(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = 0;\n out[3] = a[2];\n out[4] = a[3];\n out[5] = 0;\n out[6] = a[4];\n out[7] = a[5];\n out[8] = 1;\n return out;\n}\n/**\r\n * Calculates a 3x3 matrix from the given quaternion\r\n *\r\n * @param {mat3} out mat3 receiving operation result\r\n * @param {ReadonlyQuat} q Quaternion to create matrix from\r\n *\r\n * @returns {mat3} out\r\n */\n\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[3] = yx - wz;\n out[6] = zx + wy;\n out[1] = yx + wz;\n out[4] = 1 - xx - zz;\n out[7] = zy - wx;\n out[2] = zx - wy;\n out[5] = zy + wx;\n out[8] = 1 - xx - yy;\n return out;\n}\n/**\r\n * Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\r\n *\r\n * @param {mat3} out mat3 receiving operation result\r\n * @param {ReadonlyMat4} a Mat4 to derive the normal matrix from\r\n *\r\n * @returns {mat3} out\r\n */\n\nexport function normalFromMat4(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n return out;\n}\n/**\r\n * Generates a 2D projection matrix with the given bounds\r\n *\r\n * @param {mat3} out mat3 frustum matrix will be written into\r\n * @param {number} width Width of your gl context\r\n * @param {number} height Height of gl context\r\n * @returns {mat3} out\r\n */\n\nexport function projection(out, width, height) {\n out[0] = 2 / width;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = -2 / height;\n out[5] = 0;\n out[6] = -1;\n out[7] = 1;\n out[8] = 1;\n return out;\n}\n/**\r\n * Returns a string representation of a mat3\r\n *\r\n * @param {ReadonlyMat3} a matrix to represent as a string\r\n * @returns {String} string representation of the matrix\r\n */\n\nexport function str(a) {\n return \"mat3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \")\";\n}\n/**\r\n * Returns Frobenius norm of a mat3\r\n *\r\n * @param {ReadonlyMat3} a the matrix to calculate Frobenius norm of\r\n * @returns {Number} Frobenius norm\r\n */\n\nexport function frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);\n}\n/**\r\n * Adds two mat3's\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the first operand\r\n * @param {ReadonlyMat3} b the second operand\r\n * @returns {mat3} out\r\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n return out;\n}\n/**\r\n * Subtracts matrix b from matrix a\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the first operand\r\n * @param {ReadonlyMat3} b the second operand\r\n * @returns {mat3} out\r\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n return out;\n}\n/**\r\n * Multiply each element of the matrix by a scalar.\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the matrix to scale\r\n * @param {Number} b amount to scale the matrix's elements by\r\n * @returns {mat3} out\r\n */\n\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n return out;\n}\n/**\r\n * Adds two mat3's after multiplying each element of the second operand by a scalar value.\r\n *\r\n * @param {mat3} out the receiving vector\r\n * @param {ReadonlyMat3} a the first operand\r\n * @param {ReadonlyMat3} b the second operand\r\n * @param {Number} scale the amount to scale b's elements by before adding\r\n * @returns {mat3} out\r\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n return out;\n}\n/**\r\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyMat3} a The first matrix.\r\n * @param {ReadonlyMat3} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];\n}\n/**\r\n * Returns whether or not the matrices have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyMat3} a The first matrix.\r\n * @param {ReadonlyMat3} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3],\n a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7],\n a8 = a[8];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));\n}\n/**\r\n * Alias for {@link mat3.multiply}\r\n * @function\r\n */\n\nexport var mul = multiply;\n/**\r\n * Alias for {@link mat3.subtract}\r\n * @function\r\n */\n\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\n/**\r\n * 2 Dimensional Vector\r\n * @module vec2\r\n */\n\n/**\r\n * Creates a new, empty vec2\r\n *\r\n * @returns {vec2} a new 2D vector\r\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(2);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec2 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec2} a vector to clone\r\n * @returns {vec2} a new 2D vector\r\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\r\n * Creates a new vec2 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} a new 2D vector\r\n */\n\nexport function fromValues(x, y) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\r\n * Copy the values from one vec2 to another\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the source vector\r\n * @returns {vec2} out\r\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\r\n * Set the components of a vec2 to the given values\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} out\r\n */\n\nexport function set(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\r\n * Adds two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n}\n/**\r\n * Multiplies two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n}\n/**\r\n * Divides two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to ceil\r\n * @returns {vec2} out\r\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to floor\r\n * @returns {vec2} out\r\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n}\n/**\r\n * Math.round the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to round\r\n * @returns {vec2} out\r\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n return out;\n}\n/**\r\n * Scales a vec2 by a scalar number\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec2} out\r\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n}\n/**\r\n * Adds two vec2's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec2} out\r\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec2's\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return Math.hypot(x, y);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec2's\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return x * x + y * y;\n}\n/**\r\n * Calculates the length of a vec2\r\n *\r\n * @param {ReadonlyVec2} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nexport function length(a) {\n var x = a[0],\n y = a[1];\n return Math.hypot(x, y);\n}\n/**\r\n * Calculates the squared length of a vec2\r\n *\r\n * @param {ReadonlyVec2} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nexport function squaredLength(a) {\n var x = a[0],\n y = a[1];\n return x * x + y * y;\n}\n/**\r\n * Negates the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to negate\r\n * @returns {vec2} out\r\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to invert\r\n * @returns {vec2} out\r\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n}\n/**\r\n * Normalize a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to normalize\r\n * @returns {vec2} out\r\n */\n\nexport function normalize(out, a) {\n var x = a[0],\n y = a[1];\n var len = x * x + y * y;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec2's\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\r\n * Computes the cross product of two vec2's\r\n * Note that the cross product must by definition produce a 3D vector\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function cross(out, a, b) {\n var z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec2} out\r\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0],\n ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec2} out\r\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n out[0] = Math.cos(r) * scale;\n out[1] = Math.sin(r) * scale;\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat2} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat2(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat2d\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat2d} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat2d(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat3\r\n * 3rd vector component is implicitly '1'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat3} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat4\r\n * 3rd vector component is implicitly '0'\r\n * 4th vector component is implicitly '1'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0];\n var y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n}\n/**\r\n * Rotate a 2D vector\r\n * @param {vec2} out The receiving vec2\r\n * @param {ReadonlyVec2} a The vec2 point to rotate\r\n * @param {ReadonlyVec2} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec2} out\r\n */\n\nexport function rotate(out, a, b, rad) {\n //Translate point to the origin\n var p0 = a[0] - b[0],\n p1 = a[1] - b[1],\n sinC = Math.sin(rad),\n cosC = Math.cos(rad); //perform rotation and translate to correct position\n\n out[0] = p0 * cosC - p1 * sinC + b[0];\n out[1] = p0 * sinC + p1 * cosC + b[1];\n return out;\n}\n/**\r\n * Get the angle between two 2D vectors\r\n * @param {ReadonlyVec2} a The first operand\r\n * @param {ReadonlyVec2} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\n\nexport function angle(a, b) {\n var x1 = a[0],\n y1 = a[1],\n x2 = b[0],\n y2 = b[1],\n // mag is the product of the magnitudes of a and b\n mag = Math.sqrt(x1 * x1 + y1 * y1) * Math.sqrt(x2 * x2 + y2 * y2),\n // mag &&.. short circuits if mag == 0\n cosine = mag && (x1 * x2 + y1 * y2) / mag; // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1\n\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\r\n * Set the components of a vec2 to zero\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @returns {vec2} out\r\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec2} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nexport function str(a) {\n return \"vec2(\" + a[0] + \", \" + a[1] + \")\";\n}\n/**\r\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec2} a The first vector.\r\n * @param {ReadonlyVec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec2} a The first vector.\r\n * @param {ReadonlyVec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1];\n var b0 = b[0],\n b1 = b[1];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));\n}\n/**\r\n * Alias for {@link vec2.length}\r\n * @function\r\n */\n\nexport var len = length;\n/**\r\n * Alias for {@link vec2.subtract}\r\n * @function\r\n */\n\nexport var sub = subtract;\n/**\r\n * Alias for {@link vec2.multiply}\r\n * @function\r\n */\n\nexport var mul = multiply;\n/**\r\n * Alias for {@link vec2.divide}\r\n * @function\r\n */\n\nexport var div = divide;\n/**\r\n * Alias for {@link vec2.distance}\r\n * @function\r\n */\n\nexport var dist = distance;\n/**\r\n * Alias for {@link vec2.squaredDistance}\r\n * @function\r\n */\n\nexport var sqrDist = squaredDistance;\n/**\r\n * Alias for {@link vec2.squaredLength}\r\n * @function\r\n */\n\nexport var sqrLen = squaredLength;\n/**\r\n * Perform some operation over an array of vec2s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 2;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n }\n\n return a;\n };\n}();","/**\n * @description 扩展方法,提供 gl-matrix 为提供的方法\n * */\nimport { mat3, vec2 } from 'gl-matrix';\nexport function leftTranslate(out, a, v) {\n var transMat = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n mat3.fromTranslation(transMat, v);\n return mat3.multiply(out, transMat, a);\n}\nexport function leftRotate(out, a, rad) {\n var rotateMat = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n mat3.fromRotation(rotateMat, rad);\n return mat3.multiply(out, rotateMat, a);\n}\nexport function leftScale(out, a, v) {\n var scaleMat = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n mat3.fromScaling(scaleMat, v);\n return mat3.multiply(out, scaleMat, a);\n}\nfunction leftMultiply(out, a, a1) {\n return mat3.multiply(out, a1, a);\n}\n/**\n * 根据 actions 来做 transform\n * @param m\n * @param actions\n */\nexport function transform(m, actions) {\n var matrix = m ? [].concat(m) : [1, 0, 0, 0, 1, 0, 0, 0, 1];\n for (var i = 0, len = actions.length; i < len; i++) {\n var action = actions[i];\n switch (action[0]) {\n case 't':\n leftTranslate(matrix, matrix, [action[1], action[2]]);\n break;\n case 's':\n leftScale(matrix, matrix, [action[1], action[2]]);\n break;\n case 'r':\n leftRotate(matrix, matrix, action[1]);\n break;\n case 'm':\n leftMultiply(matrix, matrix, action[1]);\n break;\n default:\n break;\n }\n }\n return matrix;\n}\n/**\n * 向量 v1 到 向量 v2 夹角的方向\n * @param {Array} v1 向量\n * @param {Array} v2 向量\n * @return {Boolean} >= 0 顺时针 < 0 逆时针\n */\nexport function direction(v1, v2) {\n return v1[0] * v2[1] - v2[0] * v1[1];\n}\n/**\n * 二维向量 v1 到 v2 的夹角\n * @param v1\n * @param v2\n * @param direct\n */\nexport function angleTo(v1, v2, direct) {\n var ang = vec2.angle(v1, v2);\n var angleLargeThanPI = direction(v1, v2) >= 0;\n if (direct) {\n if (angleLargeThanPI) {\n return Math.PI * 2 - ang;\n }\n return ang;\n }\n if (angleLargeThanPI) {\n return ang;\n }\n return Math.PI * 2 - ang;\n}\n/**\n * 计算二维向量的垂直向量\n * @param out\n * @param v\n * @param flag\n */\nexport function vertical(out, v, flag) {\n if (flag) {\n out[0] = v[1];\n out[1] = -1 * v[0];\n }\n else {\n out[0] = -1 * v[1];\n out[1] = v[0];\n }\n return out;\n}\n//# sourceMappingURL=ext.js.map","import { __extends } from \"tslib\";\nimport { each, isEqual, isFunction, isNumber, isObject, isArray, noop, mix, upperFirst, uniqueId } from '@antv/util';\nimport { ext } from '@antv/matrix-util';\nimport { removeFromArray, isParent } from '../util/util';\nimport { multiplyMatrix, multiplyVec2, invert } from '../util/matrix';\nimport Base from './base';\nvar transform = ext.transform;\nvar MATRIX = 'matrix';\nvar CLONE_CFGS = ['zIndex', 'capture', 'visible', 'type'];\n// 可以在 toAttrs 中设置,但不属于绘图属性的字段\nvar RESERVED_PORPS = ['repeat'];\nvar DELEGATION_SPLIT = ':';\nvar WILDCARD = '*';\n// 需要考虑数组嵌套数组的场景\n// 数组嵌套对象的场景不考虑\nfunction _cloneArrayAttr(arr) {\n var result = [];\n for (var i = 0; i < arr.length; i++) {\n if (isArray(arr[i])) {\n result.push([].concat(arr[i]));\n }\n else {\n result.push(arr[i]);\n }\n }\n return result;\n}\nfunction getFormatFromAttrs(toAttrs, shape) {\n var fromAttrs = {};\n var attrs = shape.attrs;\n for (var k in toAttrs) {\n fromAttrs[k] = attrs[k];\n }\n return fromAttrs;\n}\nfunction getFormatToAttrs(props, shape) {\n var toAttrs = {};\n var attrs = shape.attr();\n each(props, function (v, k) {\n if (RESERVED_PORPS.indexOf(k) === -1 && !isEqual(attrs[k], v)) {\n toAttrs[k] = v;\n }\n });\n return toAttrs;\n}\nfunction checkExistedAttrs(animations, animation) {\n if (animation.onFrame) {\n return animations;\n }\n var startTime = animation.startTime, delay = animation.delay, duration = animation.duration;\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n each(animations, function (item) {\n // 后一个动画开始执行的时间 < 前一个动画的结束时间 && 后一个动画的执行时间 > 前一个动画的延迟\n if (startTime + delay < item.startTime + item.delay + item.duration && duration > item.delay) {\n each(animation.toAttrs, function (v, k) {\n if (hasOwnProperty.call(item.toAttrs, k)) {\n delete item.toAttrs[k];\n delete item.fromAttrs[k];\n }\n });\n }\n });\n return animations;\n}\nvar Element = /** @class */ (function (_super) {\n __extends(Element, _super);\n function Element(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @protected\n * 图形属性\n * @type {ShapeAttrs}\n */\n _this.attrs = {};\n var attrs = _this.getDefaultAttrs();\n mix(attrs, cfg.attrs);\n _this.attrs = attrs;\n _this.initAttrs(attrs);\n _this.initAnimate(); // 初始化动画\n return _this;\n }\n // override\n Element.prototype.getDefaultCfg = function () {\n return {\n visible: true,\n capture: true,\n zIndex: 0,\n };\n };\n /**\n * @protected\n * 获取默认的属相\n */\n Element.prototype.getDefaultAttrs = function () {\n return {\n matrix: this.getDefaultMatrix(),\n opacity: 1,\n };\n };\n /**\n * @protected\n * 一些方法调用会引起画布变化\n * @param {ChangeType} changeType 改变的类型\n */\n Element.prototype.onCanvasChange = function (changeType) { };\n /**\n * @protected\n * 初始化属性,有些属性需要加工\n * @param {object} attrs 属性值\n */\n Element.prototype.initAttrs = function (attrs) { };\n /**\n * @protected\n * 初始化动画\n */\n Element.prototype.initAnimate = function () {\n this.set('animable', true);\n this.set('animating', false);\n };\n Element.prototype.isGroup = function () {\n return false;\n };\n Element.prototype.getParent = function () {\n return this.get('parent');\n };\n Element.prototype.getCanvas = function () {\n return this.get('canvas');\n };\n Element.prototype.attr = function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var name = args[0], value = args[1];\n if (!name)\n return this.attrs;\n if (isObject(name)) {\n for (var k in name) {\n this.setAttr(k, name[k]);\n }\n this.afterAttrsChange(name);\n return this;\n }\n if (args.length === 2) {\n this.setAttr(name, value);\n this.afterAttrsChange((_a = {},\n _a[name] = value,\n _a));\n return this;\n }\n return this.attrs[name];\n };\n // 是否被裁剪,被裁剪则不显示,不参与拾取\n Element.prototype.isClipped = function (refX, refY) {\n var clip = this.getClip();\n return clip && !clip.isHit(refX, refY);\n };\n /**\n * 内部设置属性值的接口\n * @param {string} name 属性名\n * @param {any} value 属性值\n */\n Element.prototype.setAttr = function (name, value) {\n var originValue = this.attrs[name];\n if (originValue !== value) {\n this.attrs[name] = value;\n this.onAttrChange(name, value, originValue);\n }\n };\n /**\n * @protected\n * 属性值发生改变\n * @param {string} name 属性名\n * @param {any} value 属性值\n * @param {any} originValue 属性值\n */\n Element.prototype.onAttrChange = function (name, value, originValue) {\n if (name === 'matrix') {\n this.set('totalMatrix', null);\n }\n };\n /**\n * 属性更改后需要做的事情\n * @protected\n */\n Element.prototype.afterAttrsChange = function (targetAttrs) {\n if (this.cfg.isClipShape) {\n var applyTo = this.cfg.applyTo;\n if (applyTo) {\n applyTo.onCanvasChange('clip');\n }\n }\n else {\n this.onCanvasChange('attr');\n }\n };\n Element.prototype.show = function () {\n // 不是高频操作直接使用 set\n this.set('visible', true);\n this.onCanvasChange('show');\n return this;\n };\n Element.prototype.hide = function () {\n // 不是高频操作直接使用 set\n this.set('visible', false);\n this.onCanvasChange('hide');\n return this;\n };\n Element.prototype.setZIndex = function (zIndex) {\n this.set('zIndex', zIndex);\n var parent = this.getParent();\n if (parent) {\n // 改变 zIndex 不应该立即触发渲染 (调用 onCanvasChange('zIndex')),需要经过 sort 再触发\n parent.sort();\n }\n return this;\n };\n Element.prototype.toFront = function () {\n var parent = this.getParent();\n if (!parent) {\n return;\n }\n var children = parent.getChildren();\n var el = this.get('el');\n var index = children.indexOf(this);\n children.splice(index, 1);\n children.push(this);\n this.onCanvasChange('zIndex');\n };\n Element.prototype.toBack = function () {\n var parent = this.getParent();\n if (!parent) {\n return;\n }\n var children = parent.getChildren();\n var el = this.get('el');\n var index = children.indexOf(this);\n children.splice(index, 1);\n children.unshift(this);\n this.onCanvasChange('zIndex');\n };\n Element.prototype.remove = function (destroy) {\n if (destroy === void 0) { destroy = true; }\n var parent = this.getParent();\n if (parent) {\n removeFromArray(parent.getChildren(), this);\n if (!parent.get('clearing')) {\n // 如果父元素正在清理,当前元素不触发 remove\n this.onCanvasChange('remove');\n }\n }\n else {\n this.onCanvasChange('remove');\n }\n if (destroy) {\n this.destroy();\n }\n };\n Element.prototype.resetMatrix = function () {\n this.attr(MATRIX, this.getDefaultMatrix());\n this.onCanvasChange('matrix');\n };\n Element.prototype.getMatrix = function () {\n return this.attr(MATRIX);\n };\n Element.prototype.setMatrix = function (m) {\n this.attr(MATRIX, m);\n this.onCanvasChange('matrix');\n };\n // 获取总的 matrix\n Element.prototype.getTotalMatrix = function () {\n var totalMatrix = this.cfg.totalMatrix;\n if (!totalMatrix) {\n var currentMatrix = this.attr('matrix');\n var parentMatrix = this.cfg.parentMatrix;\n if (parentMatrix && currentMatrix) {\n totalMatrix = multiplyMatrix(parentMatrix, currentMatrix);\n }\n else {\n totalMatrix = currentMatrix || parentMatrix;\n }\n this.set('totalMatrix', totalMatrix);\n }\n return totalMatrix;\n };\n // 上层分组设置 matrix\n Element.prototype.applyMatrix = function (matrix) {\n var currentMatrix = this.attr('matrix');\n var totalMatrix = null;\n if (matrix && currentMatrix) {\n totalMatrix = multiplyMatrix(matrix, currentMatrix);\n }\n else {\n totalMatrix = currentMatrix || matrix;\n }\n this.set('totalMatrix', totalMatrix);\n this.set('parentMatrix', matrix);\n };\n /**\n * @protected\n * 获取默认的矩阵\n * @returns {number[]|null} 默认的矩阵\n */\n Element.prototype.getDefaultMatrix = function () {\n return null;\n };\n // 将向量应用设置的矩阵\n Element.prototype.applyToMatrix = function (v) {\n var matrix = this.attr('matrix');\n if (matrix) {\n return multiplyVec2(matrix, v);\n }\n return v;\n };\n // 根据设置的矩阵,将向量转换相对于图形/分组的位置\n Element.prototype.invertFromMatrix = function (v) {\n var matrix = this.attr('matrix');\n if (matrix) {\n var invertMatrix = invert(matrix);\n if (invertMatrix) {\n return multiplyVec2(invertMatrix, v);\n }\n }\n return v;\n };\n // 设置 clip\n Element.prototype.setClip = function (clipCfg) {\n var canvas = this.getCanvas();\n // 应该只设置当前元素的 clip,不应该去修改 clip 本身,方便 clip 被复用\n // TODO: setClip 的传参既 shape 配置,也支持 shape 对象\n // const preShape = this.get('clipShape');\n // if (preShape) {\n // // 将之前的 clipShape 销毁\n // preShape.destroy();\n // }\n var clipShape = null;\n // 如果配置项为 null,则不移除 clipShape\n if (clipCfg) {\n var ShapeBase = this.getShapeBase();\n var shapeType = upperFirst(clipCfg.type);\n var Cons = ShapeBase[shapeType];\n if (Cons) {\n clipShape = new Cons({\n type: clipCfg.type,\n isClipShape: true,\n applyTo: this,\n attrs: clipCfg.attrs,\n canvas: canvas,\n });\n }\n }\n this.set('clipShape', clipShape);\n this.onCanvasChange('clip');\n return clipShape;\n };\n Element.prototype.getClip = function () {\n // 高频率调用的地方直接使用 this.cfg.xxx\n var clipShape = this.cfg.clipShape;\n // 未设置时返回 Null,保证一致性\n if (!clipShape) {\n return null;\n }\n return clipShape;\n };\n Element.prototype.clone = function () {\n var _this = this;\n var originAttrs = this.attrs;\n var attrs = {};\n each(originAttrs, function (i, k) {\n if (isArray(originAttrs[k])) {\n attrs[k] = _cloneArrayAttr(originAttrs[k]);\n }\n else {\n attrs[k] = originAttrs[k];\n }\n });\n var cons = this.constructor;\n // @ts-ignore\n var clone = new cons({ attrs: attrs });\n each(CLONE_CFGS, function (cfgName) {\n clone.set(cfgName, _this.get(cfgName));\n });\n return clone;\n };\n Element.prototype.destroy = function () {\n var destroyed = this.destroyed;\n if (destroyed) {\n return;\n }\n this.attrs = {};\n _super.prototype.destroy.call(this);\n // this.onCanvasChange('destroy');\n };\n /**\n * 是否处于动画暂停状态\n * @return {boolean} 是否处于动画暂停状态\n */\n Element.prototype.isAnimatePaused = function () {\n return this.get('_pause').isPaused;\n };\n /**\n * 执行动画,支持多种函数签名\n * 1. animate(toAttrs: ElementAttrs, duration: number, easing?: string, callback?: () => void, delay?: number)\n * 2. animate(onFrame: OnFrame, duration: number, easing?: string, callback?: () => void, delay?: number)\n * 3. animate(toAttrs: ElementAttrs, cfg: AnimateCfg)\n * 4. animate(onFrame: OnFrame, cfg: AnimateCfg)\n * 各个参数的含义为:\n * toAttrs 动画最终状态\n * onFrame 自定义帧动画函数\n * duration 动画执行时间\n * easing 动画缓动效果\n * callback 动画执行后的回调\n * delay 动画延迟时间\n */\n Element.prototype.animate = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!this.get('canvas')) {\n return;\n }\n this.set('animating', true);\n var timeline = this.get('timeline');\n if (!timeline) {\n timeline = this.get('canvas').get('timeline');\n this.set('timeline', timeline);\n }\n var animations = this.get('animations') || [];\n // 初始化 tick\n if (!timeline.timer) {\n timeline.initTimer();\n }\n var toAttrs = args[0], duration = args[1], _a = args[2], easing = _a === void 0 ? 'easeLinear' : _a, _b = args[3], callback = _b === void 0 ? noop : _b, _c = args[4], delay = _c === void 0 ? 0 : _c;\n var onFrame;\n var repeat;\n var pauseCallback;\n var resumeCallback;\n var animateCfg;\n // 第二个参数,既可以是动画最终状态 toAttrs,也可以是自定义帧动画函数 onFrame\n if (isFunction(toAttrs)) {\n onFrame = toAttrs;\n toAttrs = {};\n }\n else if (isObject(toAttrs) && toAttrs.onFrame) {\n // 兼容 3.0 中的写法,onFrame 和 repeat 可在 toAttrs 中设置\n onFrame = toAttrs.onFrame;\n repeat = toAttrs.repeat;\n }\n // 第二个参数,既可以是执行时间 duration,也可以是动画参数 animateCfg\n if (isObject(duration)) {\n animateCfg = duration;\n duration = animateCfg.duration;\n easing = animateCfg.easing || 'easeLinear';\n delay = animateCfg.delay || 0;\n // animateCfg 中的设置优先级更高\n repeat = animateCfg.repeat || repeat || false;\n callback = animateCfg.callback || noop;\n pauseCallback = animateCfg.pauseCallback || noop;\n resumeCallback = animateCfg.resumeCallback || noop;\n }\n else {\n // 第四个参数,既可以是回调函数 callback,也可以是延迟时间 delay\n if (isNumber(callback)) {\n delay = callback;\n callback = null;\n }\n // 第三个参数,既可以是缓动参数 easing,也可以是回调函数 callback\n if (isFunction(easing)) {\n callback = easing;\n easing = 'easeLinear';\n }\n else {\n easing = easing || 'easeLinear';\n }\n }\n var formatToAttrs = getFormatToAttrs(toAttrs, this);\n var animation = {\n fromAttrs: getFormatFromAttrs(formatToAttrs, this),\n toAttrs: formatToAttrs,\n duration: duration,\n easing: easing,\n repeat: repeat,\n callback: callback,\n pauseCallback: pauseCallback,\n resumeCallback: resumeCallback,\n delay: delay,\n startTime: timeline.getTime(),\n id: uniqueId(),\n onFrame: onFrame,\n pathFormatted: false,\n };\n // 如果动画元素队列中已经有这个图形了\n if (animations.length > 0) {\n // 先检查是否需要合并属性。若有相同的动画,将该属性从前一个动画中删除,直接用后一个动画中\n animations = checkExistedAttrs(animations, animation);\n }\n else {\n // 否则将图形添加到动画元素队列\n timeline.addAnimator(this);\n }\n animations.push(animation);\n this.set('animations', animations);\n this.set('_pause', { isPaused: false });\n };\n /**\n * 停止动画\n * @param {boolean} toEnd 是否到动画的最终状态\n */\n Element.prototype.stopAnimate = function (toEnd) {\n var _this = this;\n if (toEnd === void 0) { toEnd = true; }\n var animations = this.get('animations');\n each(animations, function (animation) {\n // 将动画执行到最后一帧\n if (toEnd) {\n if (animation.onFrame) {\n _this.attr(animation.onFrame(1));\n }\n else {\n _this.attr(animation.toAttrs);\n }\n }\n if (animation.callback) {\n // 动画停止时的回调\n animation.callback();\n }\n });\n this.set('animating', false);\n this.set('animations', []);\n };\n /**\n * 暂停动画\n */\n Element.prototype.pauseAnimate = function () {\n var timeline = this.get('timeline');\n var animations = this.get('animations');\n var pauseTime = timeline.getTime();\n each(animations, function (animation) {\n animation._paused = true;\n animation._pauseTime = pauseTime;\n if (animation.pauseCallback) {\n // 动画暂停时的回调\n animation.pauseCallback();\n }\n });\n // 记录下是在什么时候暂停的\n this.set('_pause', {\n isPaused: true,\n pauseTime: pauseTime,\n });\n return this;\n };\n /**\n * 恢复动画\n */\n Element.prototype.resumeAnimate = function () {\n var timeline = this.get('timeline');\n var current = timeline.getTime();\n var animations = this.get('animations');\n var pauseTime = this.get('_pause').pauseTime;\n // 之后更新属性需要计算动画已经执行的时长,如果暂停了,就把初始时间调后\n each(animations, function (animation) {\n animation.startTime = animation.startTime + (current - pauseTime);\n animation._paused = false;\n animation._pauseTime = null;\n if (animation.resumeCallback) {\n animation.resumeCallback();\n }\n });\n this.set('_pause', {\n isPaused: false,\n });\n this.set('animations', animations);\n return this;\n };\n /**\n * 触发委托事件\n * @param {string} type 事件类型\n * @param {GraphEvent} eventObj 事件对象\n */\n Element.prototype.emitDelegation = function (type, eventObj) {\n var _this = this;\n var paths = eventObj.propagationPath;\n var events = this.getEvents();\n var relativeShape;\n if (type === 'mouseenter') {\n relativeShape = eventObj.fromShape;\n }\n else if (type === 'mouseleave') {\n relativeShape = eventObj.toShape;\n }\n var _loop_1 = function (i) {\n var element = paths[i];\n // 暂定跟 name 绑定\n var name_1 = element.get('name');\n if (name_1) {\n // 第一个 mouseenter 和 mouseleave 的停止即可,因为后面的都是前面的 Parent\n if (\n // 只有 element 是 Group 或者 Canvas 的时候,才需要判断 isParent\n (element.isGroup() || (element.isCanvas && element.isCanvas())) &&\n relativeShape &&\n isParent(element, relativeShape)) {\n return \"break\";\n }\n if (isArray(name_1)) {\n each(name_1, function (subName) {\n _this.emitDelegateEvent(element, subName, eventObj);\n });\n }\n else {\n this_1.emitDelegateEvent(element, name_1, eventObj);\n }\n }\n };\n var this_1 = this;\n // 至少有一个对象,且第一个对象为 shape\n for (var i = 0; i < paths.length; i++) {\n var state_1 = _loop_1(i);\n if (state_1 === \"break\")\n break;\n }\n };\n Element.prototype.emitDelegateEvent = function (element, name, eventObj) {\n var events = this.getEvents();\n // 事件委托的形式 name:type\n var eventName = name + DELEGATION_SPLIT + eventObj.type;\n if (events[eventName] || events[WILDCARD]) {\n // 对于通配符 *,事件名称 = 委托事件名称\n eventObj.name = eventName;\n eventObj.currentTarget = element;\n eventObj.delegateTarget = this;\n // 将委托事件的监听对象 delegateObject 挂载到事件对象上\n eventObj.delegateObject = element.get('delegateObject');\n this.emit(eventName, eventObj);\n }\n };\n /**\n * 移动元素\n * @param {number} translateX 水平移动距离\n * @param {number} translateY 垂直移动距离\n * @return {IElement} 元素\n */\n Element.prototype.translate = function (translateX, translateY) {\n if (translateX === void 0) { translateX = 0; }\n if (translateY === void 0) { translateY = 0; }\n var matrix = this.getMatrix();\n var newMatrix = transform(matrix, [['t', translateX, translateY]]);\n this.setMatrix(newMatrix);\n return this;\n };\n /**\n * 移动元素到目标位置\n * @param {number} targetX 目标位置的水平坐标\n * @param {number} targetX 目标位置的垂直坐标\n * @return {IElement} 元素\n */\n Element.prototype.move = function (targetX, targetY) {\n var x = this.attr('x') || 0;\n var y = this.attr('y') || 0;\n this.translate(targetX - x, targetY - y);\n return this;\n };\n /**\n * 移动元素到目标位置,等价于 move 方法。由于 moveTo 的语义性更强,因此在文档中推荐使用 moveTo 方法\n * @param {number} targetX 目标位置的 x 轴坐标\n * @param {number} targetY 目标位置的 y 轴坐标\n * @return {IElement} 元素\n */\n Element.prototype.moveTo = function (targetX, targetY) {\n return this.move(targetX, targetY);\n };\n /**\n * 缩放元素\n * @param {number} ratioX 水平缩放比例\n * @param {number} ratioY 垂直缩放比例\n * @return {IElement} 元素\n */\n Element.prototype.scale = function (ratioX, ratioY) {\n var matrix = this.getMatrix();\n var newMatrix = transform(matrix, [['s', ratioX, ratioY || ratioX]]);\n this.setMatrix(newMatrix);\n return this;\n };\n /**\n * 以画布左上角 (0, 0) 为中心旋转元素\n * @param {number} radian 旋转角度(弧度值)\n * @return {IElement} 元素\n */\n Element.prototype.rotate = function (radian) {\n var matrix = this.getMatrix();\n var newMatrix = transform(matrix, [['r', radian]]);\n this.setMatrix(newMatrix);\n return this;\n };\n /**\n * 以起始点为中心旋转元素\n * @param {number} radian 旋转角度(弧度值)\n * @return {IElement} 元素\n */\n Element.prototype.rotateAtStart = function (rotate) {\n var _a = this.attr(), x = _a.x, y = _a.y;\n var matrix = this.getMatrix();\n var newMatrix = transform(matrix, [\n ['t', -x, -y],\n ['r', rotate],\n ['t', x, y],\n ]);\n this.setMatrix(newMatrix);\n return this;\n };\n /**\n * 以任意点 (x, y) 为中心旋转元素\n * @param {number} radian 旋转角度(弧度值)\n * @return {IElement} 元素\n */\n Element.prototype.rotateAtPoint = function (x, y, rotate) {\n var matrix = this.getMatrix();\n var newMatrix = transform(matrix, [\n ['t', -x, -y],\n ['r', rotate],\n ['t', x, y],\n ]);\n this.setMatrix(newMatrix);\n return this;\n };\n return Element;\n}(Base));\nexport default Element;\n//# sourceMappingURL=element.js.map","import { AbstractGroup } from '@antv/g-base';\nimport { ChangeType } from '@antv/g-base';\nimport { IElement } from './interfaces';\nimport { Region } from './types';\nimport ShapeBase from './shape/base';\nimport * as Shape from './shape';\nimport { applyAttrsToContext, drawChildren, refreshElement } from './util/draw';\nimport { each } from '@antv/util';\nimport { intersectRect } from './util/util';\n\nclass Group extends AbstractGroup {\n /**\n * 一些方法调用会引起画布变化\n * @param {ChangeType} changeType 改变的类型\n */\n onCanvasChange(changeType: ChangeType) {\n refreshElement(this, changeType);\n }\n\n getShapeBase() {\n return Shape;\n }\n\n getGroupBase() {\n return Group;\n }\n\n // 同 shape 中的方法重复了\n _applyClip(context, clip: ShapeBase) {\n if (clip) {\n context.save();\n // 将 clip 的属性挂载到 context 上\n applyAttrsToContext(context, clip);\n // 绘制 clip 路径\n clip.createPath(context);\n context.restore();\n // 裁剪\n context.clip();\n clip._afterDraw();\n }\n }\n\n // 这个方法以前直接使用的 getCanvasBBox,由于 group 上没有缓存,所以每次重新计算,导致性能开销比较大\n // 大概能够节省全局渲染 15-20% 的性能,如果不在这里加缓存优化后 10W 个节点无法达到 5-6 ms,大概能够 30-40ms\n private cacheCanvasBBox() {\n const children = this.cfg.children;\n const xArr = [];\n const yArr = [];\n each(children, (child) => {\n const bbox = child.cfg.cacheCanvasBBox;\n // isInview 的判定是一旦图形或者分组渲染就要计算是否在视图内,\n // 这个判定 10W 个图形下差不多能够节省 5-6 ms 的开销\n if (bbox && child.cfg.isInView) {\n xArr.push(bbox.minX, bbox.maxX);\n yArr.push(bbox.minY, bbox.maxY);\n }\n });\n let bbox = null;\n if (xArr.length) {\n const minX = Math.min.apply(null, xArr);\n const maxX = Math.max.apply(null, xArr);\n const minY = Math.min.apply(null, yArr);\n const maxY = Math.max.apply(null, yArr);\n bbox = {\n minX,\n minY,\n x: minX,\n y: minY,\n maxX,\n maxY,\n width: maxX - minX,\n height: maxY - minY,\n };\n const canvas = this.cfg.canvas;\n if (canvas) {\n const viewRange = canvas.getViewRange();\n // 如果这个地方判定 isInView == false 设置 bbox 为 false 的话,拾取的性能会更高\n // 但是目前 10W 图形的拾取在 2-5ms 内,这个优化意义不大,可以后期观察再看\n this.set('isInView', intersectRect(bbox, viewRange));\n }\n } else {\n this.set('isInView', false);\n }\n\n this.set('cacheCanvasBBox', bbox);\n }\n\n draw(context: CanvasRenderingContext2D, region?: Region) {\n const children = this.cfg.children as IElement[];\n const allowDraw = region ? this.cfg.refresh : true; // 局部刷新需要判定\n // 这个地方需要判定,在 G6 的场景每个 group 都有 transform 的场景下性能会开销非常大\n // 通过 refresh 的判定,可以不刷新没有发生过变化的分组,不在视窗内的分组等等\n // 如果想进一步提升局部渲染性能,可以进一步优化 refresh 的判定,依然有潜力\n if (children.length && allowDraw) {\n context.save();\n // group 上的矩阵和属性也会应用到上下文上\n // 先将 attrs 应用到上下文中,再设置 clip。因为 clip 应该被当前元素的 matrix 所影响\n applyAttrsToContext(context, this);\n this._applyClip(context, this.getClip() as ShapeBase);\n drawChildren(context, children, region);\n context.restore();\n this.cacheCanvasBBox();\n }\n // 这里的成本比较大,如果不绘制则不再\n // this.set('cacheCanvasBBox', this.getCanvasBBox());\n this.cfg.refresh = null;\n // 绘制后,消除更新标记\n this.set('hasChanged', false);\n }\n // 绘制时被跳过,一般发生在分组隐藏时\n skipDraw() {\n this.set('cacheCanvasBBox', null);\n this.set('hasChanged', false);\n }\n}\n\nexport default Group;\n","import * as glMatrix from \"./common.js\";\n/**\r\n * 3 Dimensional Vector\r\n * @module vec3\r\n */\n\n/**\r\n * Creates a new, empty vec3\r\n *\r\n * @returns {vec3} a new 3D vector\r\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(3);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec3 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec3} a vector to clone\r\n * @returns {vec3} a new 3D vector\r\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\r\n * Calculates the length of a vec3\r\n *\r\n * @param {ReadonlyVec3} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return Math.hypot(x, y, z);\n}\n/**\r\n * Creates a new vec3 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @returns {vec3} a new 3D vector\r\n */\n\nexport function fromValues(x, y, z) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\r\n * Copy the values from one vec3 to another\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the source vector\r\n * @returns {vec3} out\r\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\r\n * Set the components of a vec3 to the given values\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @returns {vec3} out\r\n */\n\nexport function set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\r\n * Adds two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n}\n/**\r\n * Multiplies two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n}\n/**\r\n * Divides two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to ceil\r\n * @returns {vec3} out\r\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to floor\r\n * @returns {vec3} out\r\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n}\n/**\r\n * Math.round the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to round\r\n * @returns {vec3} out\r\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n return out;\n}\n/**\r\n * Scales a vec3 by a scalar number\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec3} out\r\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n/**\r\n * Adds two vec3's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec3} out\r\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec3's\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return Math.hypot(x, y, z);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec3's\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return x * x + y * y + z * z;\n}\n/**\r\n * Calculates the squared length of a vec3\r\n *\r\n * @param {ReadonlyVec3} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return x * x + y * y + z * z;\n}\n/**\r\n * Negates the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to negate\r\n * @returns {vec3} out\r\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to invert\r\n * @returns {vec3} out\r\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n}\n/**\r\n * Normalize a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to normalize\r\n * @returns {vec3} out\r\n */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var len = x * x + y * y + z * z;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec3's\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n/**\r\n * Computes the cross product of two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function cross(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n var bx = b[0],\n by = b[1],\n bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec3's\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n}\n/**\r\n * Performs a hermite interpolation with two control points\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {ReadonlyVec3} c the third operand\r\n * @param {ReadonlyVec3} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nexport function hermite(out, a, b, c, d, t) {\n var factorTimes2 = t * t;\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\n var factor2 = factorTimes2 * (t - 2) + t;\n var factor3 = factorTimes2 * (t - 1);\n var factor4 = factorTimes2 * (3 - 2 * t);\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\r\n * Performs a bezier interpolation with two control points\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {ReadonlyVec3} c the third operand\r\n * @param {ReadonlyVec3} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nexport function bezier(out, a, b, c, d, t) {\n var inverseFactor = 1 - t;\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n var factorTimes2 = t * t;\n var factor1 = inverseFactorTimesTwo * inverseFactor;\n var factor2 = 3 * t * inverseFactorTimesTwo;\n var factor3 = 3 * factorTimes2 * inverseFactor;\n var factor4 = factorTimes2 * t;\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec3} out\r\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n var z = glMatrix.RANDOM() * 2.0 - 1.0;\n var zScale = Math.sqrt(1.0 - z * z) * scale;\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n}\n/**\r\n * Transforms the vec3 with a mat4.\r\n * 4th vector component is implicitly '1'\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec3} out\r\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n/**\r\n * Transforms the vec3 with a mat3.\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\r\n * @returns {vec3} out\r\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n}\n/**\r\n * Transforms the vec3 with a quat\r\n * Can also be used for dual quaternions. (Multiply it with the real part)\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyQuat} q quaternion to transform with\r\n * @returns {vec3} out\r\n */\n\nexport function transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var x = a[0],\n y = a[1],\n z = a[2]; // var qvec = [qx, qy, qz];\n // var uv = vec3.cross([], qvec, a);\n\n var uvx = qy * z - qz * y,\n uvy = qz * x - qx * z,\n uvz = qx * y - qy * x; // var uuv = vec3.cross([], qvec, uv);\n\n var uuvx = qy * uvz - qz * uvy,\n uuvy = qz * uvx - qx * uvz,\n uuvz = qx * uvy - qy * uvx; // vec3.scale(uv, uv, 2 * w);\n\n var w2 = qw * 2;\n uvx *= w2;\n uvy *= w2;\n uvz *= w2; // vec3.scale(uuv, uuv, 2);\n\n uuvx *= 2;\n uuvy *= 2;\n uuvz *= 2; // return vec3.add(out, a, vec3.add(out, uv, uuv));\n\n out[0] = x + uvx + uuvx;\n out[1] = y + uvy + uuvy;\n out[2] = z + uvz + uuvz;\n return out;\n}\n/**\r\n * Rotate a 3D vector around the x-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nexport function rotateX(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Rotate a 3D vector around the y-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nexport function rotateY(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Rotate a 3D vector around the z-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nexport function rotateZ(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2]; //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Get the angle between two 3D vectors\r\n * @param {ReadonlyVec3} a The first operand\r\n * @param {ReadonlyVec3} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\n\nexport function angle(a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n bx = b[0],\n by = b[1],\n bz = b[2],\n mag1 = Math.sqrt(ax * ax + ay * ay + az * az),\n mag2 = Math.sqrt(bx * bx + by * by + bz * bz),\n mag = mag1 * mag2,\n cosine = mag && dot(a, b) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\r\n * Set the components of a vec3 to zero\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @returns {vec3} out\r\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec3} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nexport function str(a) {\n return \"vec3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \")\";\n}\n/**\r\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec3} a The first vector.\r\n * @param {ReadonlyVec3} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec3} a The first vector.\r\n * @param {ReadonlyVec3} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\n}\n/**\r\n * Alias for {@link vec3.subtract}\r\n * @function\r\n */\n\nexport var sub = subtract;\n/**\r\n * Alias for {@link vec3.multiply}\r\n * @function\r\n */\n\nexport var mul = multiply;\n/**\r\n * Alias for {@link vec3.divide}\r\n * @function\r\n */\n\nexport var div = divide;\n/**\r\n * Alias for {@link vec3.distance}\r\n * @function\r\n */\n\nexport var dist = distance;\n/**\r\n * Alias for {@link vec3.squaredDistance}\r\n * @function\r\n */\n\nexport var sqrDist = squaredDistance;\n/**\r\n * Alias for {@link vec3.length}\r\n * @function\r\n */\n\nexport var len = length;\n/**\r\n * Alias for {@link vec3.squaredLength}\r\n * @function\r\n */\n\nexport var sqrLen = squaredLength;\n/**\r\n * Perform some operation over an array of vec3s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 3;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n }\n\n return a;\n };\n}();","import { __extends } from \"tslib\";\nimport Container from './container';\nvar AbstractGroup = /** @class */ (function (_super) {\n __extends(AbstractGroup, _super);\n function AbstractGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n AbstractGroup.prototype.isGroup = function () {\n return true;\n };\n AbstractGroup.prototype.isEntityGroup = function () {\n return false;\n };\n AbstractGroup.prototype.clone = function () {\n var clone = _super.prototype.clone.call(this);\n // 获取构造函数\n var children = this.getChildren();\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n clone.add(child.clone());\n }\n return clone;\n };\n return AbstractGroup;\n}(Container));\nexport default AbstractGroup;\n//# sourceMappingURL=group.js.map","import { __extends } from \"tslib\";\nimport Element from './element';\nimport { multiplyVec2 } from '../util/matrix';\nvar AbstractShape = /** @class */ (function (_super) {\n __extends(AbstractShape, _super);\n function AbstractShape(cfg) {\n return _super.call(this, cfg) || this;\n }\n // 是否在包围盒内\n AbstractShape.prototype._isInBBox = function (refX, refY) {\n var bbox = this.getBBox();\n return bbox.minX <= refX && bbox.maxX >= refX && bbox.minY <= refY && bbox.maxY >= refY;\n };\n /**\n * 属性更改后需要做的事情\n * @protected\n * @param {ShapeAttrs} targetAttrs 渲染的图像属性\n */\n AbstractShape.prototype.afterAttrsChange = function (targetAttrs) {\n _super.prototype.afterAttrsChange.call(this, targetAttrs);\n this.clearCacheBBox();\n };\n // 计算包围盒时,需要缓存,这是一个高频的操作\n AbstractShape.prototype.getBBox = function () {\n var bbox = this.cfg.bbox;\n if (!bbox) {\n bbox = this.calculateBBox();\n this.set('bbox', bbox);\n }\n return bbox;\n };\n // 计算相对于画布的包围盒\n AbstractShape.prototype.getCanvasBBox = function () {\n var canvasBBox = this.cfg.canvasBBox;\n if (!canvasBBox) {\n canvasBBox = this.calculateCanvasBBox();\n this.set('canvasBBox', canvasBBox);\n }\n return canvasBBox;\n };\n AbstractShape.prototype.applyMatrix = function (matrix) {\n _super.prototype.applyMatrix.call(this, matrix);\n // 清理掉缓存的包围盒\n this.set('canvasBBox', null);\n };\n /**\n * 计算相对于画布的包围盒,默认等同于 bbox\n * @return {BBox} 包围盒\n */\n AbstractShape.prototype.calculateCanvasBBox = function () {\n var bbox = this.getBBox();\n var totalMatrix = this.getTotalMatrix();\n var minX = bbox.minX, minY = bbox.minY, maxX = bbox.maxX, maxY = bbox.maxY;\n if (totalMatrix) {\n var topLeft = multiplyVec2(totalMatrix, [bbox.minX, bbox.minY]);\n var topRight = multiplyVec2(totalMatrix, [bbox.maxX, bbox.minY]);\n var bottomLeft = multiplyVec2(totalMatrix, [bbox.minX, bbox.maxY]);\n var bottomRight = multiplyVec2(totalMatrix, [bbox.maxX, bbox.maxY]);\n minX = Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]);\n maxX = Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]);\n minY = Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]);\n maxY = Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]);\n }\n var attrs = this.attrs;\n // 如果存在 shadow 则计算 shadow\n if (attrs.shadowColor) {\n var _a = attrs.shadowBlur, shadowBlur = _a === void 0 ? 0 : _a, _b = attrs.shadowOffsetX, shadowOffsetX = _b === void 0 ? 0 : _b, _c = attrs.shadowOffsetY, shadowOffsetY = _c === void 0 ? 0 : _c;\n var shadowLeft = minX - shadowBlur + shadowOffsetX;\n var shadowRight = maxX + shadowBlur + shadowOffsetX;\n var shadowTop = minY - shadowBlur + shadowOffsetY;\n var shadowBottom = maxY + shadowBlur + shadowOffsetY;\n minX = Math.min(minX, shadowLeft);\n maxX = Math.max(maxX, shadowRight);\n minY = Math.min(minY, shadowTop);\n maxY = Math.max(maxY, shadowBottom);\n }\n return {\n x: minX,\n y: minY,\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY,\n width: maxX - minX,\n height: maxY - minY,\n };\n };\n /**\n * @protected\n * 清理缓存的 bbox\n */\n AbstractShape.prototype.clearCacheBBox = function () {\n this.set('bbox', null);\n this.set('canvasBBox', null);\n };\n // 实现接口\n AbstractShape.prototype.isClipShape = function () {\n return this.get('isClipShape');\n };\n /**\n * @protected\n * 不同的图形自己实现是否在图形内部的逻辑,要判断边和填充区域\n * @param {number} refX 相对于图形的坐标 x\n * @param {number} refY 相对于图形的坐标 Y\n * @return {boolean} 点是否在图形内部\n */\n AbstractShape.prototype.isInShape = function (refX, refY) {\n return false;\n };\n /**\n * 是否仅仅使用 BBox 检测就可以判定拾取到图形\n * 默认是 false,但是有些图形例如 image、marker 等都可直接使用 BBox 的检测而不需要使用图形拾取\n * @return {Boolean} 仅仅使用 BBox 进行拾取\n */\n AbstractShape.prototype.isOnlyHitBox = function () {\n return false;\n };\n // 不同的 Shape 各自实现\n AbstractShape.prototype.isHit = function (x, y) {\n var startArrowShape = this.get('startArrowShape');\n var endArrowShape = this.get('endArrowShape');\n var vec = [x, y, 1];\n vec = this.invertFromMatrix(vec);\n var refX = vec[0], refY = vec[1];\n var inBBox = this._isInBBox(refX, refY);\n // 跳过图形的拾取,在某些图形中可以省略一倍的检测成本\n if (this.isOnlyHitBox()) {\n return inBBox;\n }\n // 被裁减掉的和不在包围盒内的不进行计算\n if (inBBox && !this.isClipped(refX, refY)) {\n // 对图形进行拾取判断\n if (this.isInShape(refX, refY)) {\n return true;\n }\n // 对起始箭头进行拾取判断\n if (startArrowShape && startArrowShape.isHit(refX, refY)) {\n return true;\n }\n // 对结束箭头进行拾取判断\n if (endArrowShape && endArrowShape.isHit(refX, refY)) {\n return true;\n }\n }\n return false;\n };\n return AbstractShape;\n}(Element));\nexport default AbstractShape;\n//# sourceMappingURL=shape.js.map","import { IElement } from '@antv/g-base';\nimport { isString, each, isArray } from './util';\n\nconst regexLG = /^l\\s*\\(\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nconst regexRG = /^r\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nconst regexPR = /^p\\s*\\(\\s*([axyn])\\s*\\)\\s*(.*)/i;\nconst regexColorStop = /[\\d.]+:(#[^\\s]+|[^\\)]+\\))/gi;\n\nfunction addStop(steps, gradient) {\n const arr: string[] = steps.match(regexColorStop);\n each(arr, (item) => {\n const itemArr = item.split(':');\n gradient.addColorStop(itemArr[0], itemArr[1]);\n });\n}\n/**\n * 将边和填充设置的颜色转换成线性渐变对象\n * @param {CanvasRenderingContext2D} context canvas 上下文\n * @param {IElement} element 图形元素\n * @param {string} gradientStr 颜色\n * @returns {any} 渐变对象\n */\nexport function parseLineGradient(context: CanvasRenderingContext2D, element: IElement, gradientStr: string) {\n const arr = regexLG.exec(gradientStr);\n const angle = (parseFloat(arr[1]) % 360) * (Math.PI / 180);\n const steps = arr[2];\n const box = element.getBBox();\n let start;\n let end;\n\n if (angle >= 0 && angle < (1 / 2) * Math.PI) {\n start = {\n x: box.minX,\n y: box.minY,\n };\n end = {\n x: box.maxX,\n y: box.maxY,\n };\n } else if ((1 / 2) * Math.PI <= angle && angle < Math.PI) {\n start = {\n x: box.maxX,\n y: box.minY,\n };\n end = {\n x: box.minX,\n y: box.maxY,\n };\n } else if (Math.PI <= angle && angle < (3 / 2) * Math.PI) {\n start = {\n x: box.maxX,\n y: box.maxY,\n };\n end = {\n x: box.minX,\n y: box.minY,\n };\n } else {\n start = {\n x: box.minX,\n y: box.maxY,\n };\n end = {\n x: box.maxX,\n y: box.minY,\n };\n }\n\n const tanTheta = Math.tan(angle);\n const tanTheta2 = tanTheta * tanTheta;\n\n const x = (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.x;\n const y = (tanTheta * (end.x - start.x + tanTheta * (end.y - start.y))) / (tanTheta2 + 1) + start.y;\n const gradient = context.createLinearGradient(start.x, start.y, x, y);\n addStop(steps, gradient);\n return gradient;\n}\n\n/**\n * 将边和填充设置的颜色转换成圆形渐变对象\n * @param {CanvasRenderingContext2D} context canvas 上下文\n * @param {IElement} element 图形元素\n * @param {string} gradientStr 颜色\n * @returns {any} 渐变对象\n */\nexport function parseRadialGradient(context: CanvasRenderingContext2D, element: IElement, gradientStr: string) {\n const arr = regexRG.exec(gradientStr);\n const fx = parseFloat(arr[1]);\n const fy = parseFloat(arr[2]);\n const fr = parseFloat(arr[3]);\n const steps = arr[4];\n // 环半径为0时,默认无渐变,取渐变序列的最后一个颜色\n if (fr === 0) {\n const colors = steps.match(regexColorStop);\n return colors[colors.length - 1].split(':')[1];\n }\n const box = element.getBBox();\n const width = box.maxX - box.minX;\n const height = box.maxY - box.minY;\n const r = Math.sqrt(width * width + height * height) / 2;\n const gradient = context.createRadialGradient(\n box.minX + width * fx,\n box.minY + height * fy,\n 0,\n box.minX + width / 2,\n box.minY + height / 2,\n fr * r\n );\n addStop(steps, gradient);\n return gradient;\n}\n\n/**\n * 边和填充设置的颜色转换成 pattern\n * @param {CanvasRenderingContext2D} context canvas 上下文\n * @param {IElement} element 图形元素\n * @param {string} patternStr 生成 pattern 的字符串\n */\nexport function parsePattern(context: CanvasRenderingContext2D, element: IElement, patternStr: string) {\n // 在转换过程中进行了缓存\n if (element.get('patternSource') && element.get('patternSource') === patternStr) {\n return element.get('pattern');\n }\n let pattern;\n let img;\n const arr = regexPR.exec(patternStr);\n let repeat = arr[1];\n const source = arr[2];\n\n // Function to be called when pattern loads\n function onload() {\n // Create pattern\n pattern = context.createPattern(img, repeat);\n element.set('pattern', pattern); // be a cache\n element.set('patternSource', patternStr);\n }\n\n switch (repeat) {\n case 'a':\n repeat = 'repeat';\n break;\n case 'x':\n repeat = 'repeat-x';\n break;\n case 'y':\n repeat = 'repeat-y';\n break;\n case 'n':\n repeat = 'no-repeat';\n break;\n default:\n repeat = 'no-repeat';\n }\n\n img = new Image();\n // If source URL is not a data URL\n if (!source.match(/^data:/i)) {\n // Set crossOrigin for this image\n img.crossOrigin = 'Anonymous';\n }\n img.src = source;\n\n if (img.complete) {\n onload();\n } else {\n img.onload = onload;\n // Fix onload() bug in IE9\n img.src = img.src;\n }\n\n return pattern;\n}\n\nexport function parseStyle(context: CanvasRenderingContext2D, element: IElement, color: string) {\n if (isString(color)) {\n if (color[1] === '(' || color[2] === '(') {\n if (color[0] === 'l') {\n // regexLG.test(color)\n return parseLineGradient(context, element, color);\n }\n if (color[0] === 'r') {\n // regexRG.test(color)\n return parseRadialGradient(context, element, color);\n }\n if (color[0] === 'p') {\n // regexPR.test(color)\n return parsePattern(context, element, color);\n }\n }\n return color;\n }\n}\n\nexport function parseRadius(radius) {\n let r1 = 0;\n let r2 = 0;\n let r3 = 0;\n let r4 = 0;\n if (isArray(radius)) {\n if (radius.length === 1) {\n r1 = r2 = r3 = r4 = radius[0];\n } else if (radius.length === 2) {\n r1 = r3 = radius[0];\n r2 = r4 = radius[1];\n } else if (radius.length === 3) {\n r1 = radius[0];\n r2 = r4 = radius[1];\n r3 = radius[2];\n } else {\n r1 = radius[0];\n r2 = radius[1];\n r3 = radius[2];\n r4 = radius[3];\n }\n } else {\n r1 = r2 = r3 = r4 = radius;\n }\n return [r1, r2, r3, r4];\n}\n","import { mod, toRadian, isSamePoint } from './util';\n\n// 向量长度\nfunction vMag(v) {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n}\n\n// u.v/|u||v|,计算夹角的余弦值\nfunction vRatio(u, v) {\n // 当存在一个向量的长度为 0 时,夹角也为 0,即夹角的余弦值为 1\n return vMag(u) * vMag(v) ? (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v)) : 1;\n}\n\n// 向量角度\nfunction vAngle(u, v) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));\n}\n\n// A 0:rx 1:ry 2:x-axis-rotation 3:large-arc-flag 4:sweep-flag 5: x 6: y\nexport default function getArcParams(startPoint, params) {\n let rx = params[1];\n let ry = params[2];\n const xRotation = mod(toRadian(params[3]), Math.PI * 2);\n const arcFlag = params[4];\n const sweepFlag = params[5];\n // 弧形起点坐标\n const x1 = startPoint[0];\n const y1 = startPoint[1];\n // 弧形终点坐标\n const x2 = params[6];\n const y2 = params[7];\n const xp = (Math.cos(xRotation) * (x1 - x2)) / 2.0 + (Math.sin(xRotation) * (y1 - y2)) / 2.0;\n const yp = (-1 * Math.sin(xRotation) * (x1 - x2)) / 2.0 + (Math.cos(xRotation) * (y1 - y2)) / 2.0;\n const lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n const diff = rx * rx * (yp * yp) + ry * ry * (xp * xp);\n\n let f = diff ? Math.sqrt((rx * rx * (ry * ry) - diff) / diff) : 1;\n\n if (arcFlag === sweepFlag) {\n f *= -1;\n }\n if (isNaN(f)) {\n f = 0;\n }\n\n // 旋转前的起点坐标,且当长半轴和短半轴的长度为 0 时,坐标按 (0, 0) 处理\n const cxp = ry ? (f * rx * yp) / ry : 0;\n const cyp = rx ? (f * -ry * xp) / rx : 0;\n\n // 椭圆圆心坐标\n const cx = (x1 + x2) / 2.0 + Math.cos(xRotation) * cxp - Math.sin(xRotation) * cyp;\n const cy = (y1 + y2) / 2.0 + Math.sin(xRotation) * cxp + Math.cos(xRotation) * cyp;\n\n // 起始点的单位向量\n const u = [(xp - cxp) / rx, (yp - cyp) / ry];\n // 终止点的单位向量\n const v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];\n // 计算起始点和圆心的连线,与 x 轴正方向的夹角\n const theta = vAngle([1, 0], u);\n\n // 计算圆弧起始点和终止点与椭圆圆心连线的夹角\n let dTheta = vAngle(u, v);\n\n if (vRatio(u, v) <= -1) {\n dTheta = Math.PI;\n }\n if (vRatio(u, v) >= 1) {\n dTheta = 0;\n }\n if (sweepFlag === 0 && dTheta > 0) {\n dTheta = dTheta - 2 * Math.PI;\n }\n if (sweepFlag === 1 && dTheta < 0) {\n dTheta = dTheta + 2 * Math.PI;\n }\n return {\n cx,\n cy,\n // 弧形的起点和终点相同时,长轴和短轴的长度按 0 处理\n rx: isSamePoint(startPoint, [x2, y2]) ? 0 : rx,\n ry: isSamePoint(startPoint, [x2, y2]) ? 0 : ry,\n startAngle: theta,\n endAngle: theta + dTheta,\n xRotation,\n arcFlag,\n sweepFlag,\n };\n}\n","import { getOffScreenContext } from '@antv/g-base';\n\nexport default function isPointInPath(shape, x, y) {\n const ctx = getOffScreenContext();\n shape.createPath(ctx);\n return ctx.isPointInPath(x, y);\n}\n","/**\n * @fileoverview 判断点是否在多边形内\n * @author dxq613@gmail.com\n */\n\n// 多边形的射线检测,参考:https://blog.csdn.net/WilliamSun0122/article/details/77994526\nconst tolerance = 1e-6;\n// 三态函数,判断两个double在eps精度下的大小关系\nfunction dcmp(x) {\n if (Math.abs(x) < tolerance) {\n return 0;\n }\n\n return x < 0 ? -1 : 1;\n}\n\n// 判断点Q是否在p1和p2的线段上\nfunction onSegment(p1, p2, q) {\n if (\n (q[0] - p1[0]) * (p2[1] - p1[1]) === (p2[0] - p1[0]) * (q[1] - p1[1]) &&\n Math.min(p1[0], p2[0]) <= q[0] &&\n q[0] <= Math.max(p1[0], p2[0]) &&\n Math.min(p1[1], p2[1]) <= q[1] &&\n q[1] <= Math.max(p1[1], p2[1])\n ) {\n return true;\n }\n return false;\n}\n\n// 判断点P在多边形内-射线法\nexport default function isInPolygon(points, x, y) {\n let isHit = false;\n const n = points.length;\n if (n <= 2) {\n // svg 中点小于 3 个时,不显示,也无法被拾取\n return false;\n }\n for (let i = 0; i < n; i++) {\n const p1 = points[i];\n const p2 = points[(i + 1) % n];\n if (onSegment(p1, p2, [x, y])) {\n // 点在多边形一条边上\n return true;\n }\n // 前一个判断min(p1[1],p2[1])<P.y<=max(p1[1],p2[1])\n // 后一个判断被测点 在 射线与边交点 的左边\n if (\n dcmp(p1[1] - y) > 0 !== dcmp(p2[1] - y) > 0 &&\n dcmp(x - ((y - p1[1]) * (p1[0] - p2[0])) / (p1[1] - p2[1]) - p1[0]) < 0\n ) {\n isHit = !isHit;\n }\n }\n return isHit;\n}\n","import { distance } from '../util';\nexport default function arc(cx, cy, r, startAngle, endAngle, lineWidth, x, y) {\n const angle = (Math.atan2(y - cy, x - cx) + Math.PI * 2) % (Math.PI * 2); // 转换到 0 - 2 * Math.PI 之间\n if (angle < startAngle || angle > endAngle) {\n return false;\n }\n const point = {\n x: cx + r * Math.cos(angle),\n y: cy + r * Math.sin(angle),\n };\n return distance(point.x, point.y, x, y) <= lineWidth / 2;\n}\n","import inLine from './line';\n\nexport default function inPolyline(points: any[], lineWidth: number, x: number, y: number, isClose: boolean) {\n const count = points.length;\n if (count < 2) {\n return false;\n }\n for (let i = 0; i < count - 1; i++) {\n const x1 = points[i][0];\n const y1 = points[i][1];\n const x2 = points[i + 1][0];\n const y2 = points[i + 1][1];\n\n if (inLine(x1, y1, x2, y2, lineWidth, x, y)) {\n return true;\n }\n }\n\n // 如果封闭,则计算起始点和结束点的边\n if (isClose) {\n const first = points[0];\n const last = points[count - 1];\n if (inLine(first[0], first[1], last[0], last[1], lineWidth, x, y)) {\n return true;\n }\n }\n\n return false;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","export function linear(t) {\n return +t;\n}\n","export function quadIn(t) {\n return t * t;\n}\n\nexport function quadOut(t) {\n return t * (2 - t);\n}\n\nexport function quadInOut(t) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return (+t === 1) ? 1 : 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","// tpmt is two power minus ten times t scaled to [0,1]\nexport function tpmt(x) {\n return (Math.pow(2, -10 * x) - 0.0009765625) * 1.0009775171065494;\n}\n","import {tpmt} from \"./math.js\";\n\nexport function expIn(t) {\n return tpmt(1 - +t);\n}\n\nexport function expOut(t) {\n return 1 - tpmt(t);\n}\n\nexport function expInOut(t) {\n return ((t *= 2) <= 1 ? tpmt(1 - t) : 2 - tpmt(t - 1)) / 2;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return (t = +t) * t * (s * (t - 1) + t);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((t + 1) * s + t) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","import {tpmt} from \"./math.js\";\n\nvar tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * tpmt(-(--t)) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * tpmt(t = +t) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * tpmt(-t) * Math.sin((s - t) / p)\n : 2 - a * tpmt(t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","import { isEqual, isNumber, isFunction } from '@antv/util';\nimport * as d3Timer from 'd3-timer';\nimport * as d3Ease from 'd3-ease';\nimport { interpolate, interpolateArray } from 'd3-interpolate'; // 目前整体动画只需要数值和数组的差值计算\nimport * as PathUtil from '../util/path';\nimport { isColorProp, isGradientColor } from '../util/color';\nvar IDENTITY_MATRIX = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n/**\n * 使用 ratio 进行插值计算来更新属性\n * @param {IElement} shape 元素\n * @param {Animation} animation 动画\n * @param {number} ratio 比例\n * @return {boolean} 动画是否执行完成\n */\nfunction _update(shape, animation, ratio) {\n var cProps = {}; // 此刻属性\n var fromAttrs = animation.fromAttrs, toAttrs = animation.toAttrs;\n if (shape.destroyed) {\n return;\n }\n var interf; // 差值函数\n for (var k in toAttrs) {\n if (!isEqual(fromAttrs[k], toAttrs[k])) {\n if (k === 'path') {\n var toPath = toAttrs[k];\n var fromPath = fromAttrs[k];\n if (toPath.length > fromPath.length) {\n toPath = PathUtil.parsePathString(toAttrs[k]); // 终点状态\n fromPath = PathUtil.parsePathString(fromAttrs[k]); // 起始状态\n fromPath = PathUtil.fillPathByDiff(fromPath, toPath);\n fromPath = PathUtil.formatPath(fromPath, toPath);\n animation.fromAttrs.path = fromPath;\n animation.toAttrs.path = toPath;\n }\n else if (!animation.pathFormatted) {\n toPath = PathUtil.parsePathString(toAttrs[k]);\n fromPath = PathUtil.parsePathString(fromAttrs[k]);\n fromPath = PathUtil.formatPath(fromPath, toPath);\n animation.fromAttrs.path = fromPath;\n animation.toAttrs.path = toPath;\n animation.pathFormatted = true;\n }\n cProps[k] = [];\n for (var i = 0; i < toPath.length; i++) {\n var toPathPoint = toPath[i];\n var fromPathPoint = fromPath[i];\n var cPathPoint = [];\n for (var j = 0; j < toPathPoint.length; j++) {\n if (isNumber(toPathPoint[j]) && fromPathPoint && isNumber(fromPathPoint[j])) {\n interf = interpolate(fromPathPoint[j], toPathPoint[j]);\n cPathPoint.push(interf(ratio));\n }\n else {\n cPathPoint.push(toPathPoint[j]);\n }\n }\n cProps[k].push(cPathPoint);\n }\n }\n else if (k === 'matrix') {\n /*\n 对矩阵进行插值时,需要保证矩阵不为空,为空则使用单位矩阵\n TODO: 二维和三维场景下单位矩阵不同,之后 WebGL 版需要做进一步处理\n */\n var matrixFn = interpolateArray(fromAttrs[k] || IDENTITY_MATRIX, toAttrs[k] || IDENTITY_MATRIX);\n var currentMatrix = matrixFn(ratio);\n cProps[k] = currentMatrix;\n }\n else if (isColorProp(k) && isGradientColor(toAttrs[k])) {\n cProps[k] = toAttrs[k];\n }\n else if (!isFunction(toAttrs[k])) {\n // 非函数类型的值才能做插值\n interf = interpolate(fromAttrs[k], toAttrs[k]);\n cProps[k] = interf(ratio);\n }\n }\n }\n shape.attr(cProps);\n}\n/**\n * 根据自定义帧动画函数 onFrame 来更新属性\n * @param {IElement} shape 元素\n * @param {Animation} animation 动画\n * @param {number} elapsed 动画执行时间(毫秒)\n * @return {boolean} 动画是否执行完成\n */\nfunction update(shape, animation, elapsed) {\n var startTime = animation.startTime, delay = animation.delay;\n // 如果还没有开始执行或暂停,先不更新\n if (elapsed < startTime + delay || animation._paused) {\n return false;\n }\n var ratio;\n var duration = animation.duration;\n var easing = animation.easing;\n // 已执行时间\n elapsed = elapsed - startTime - animation.delay;\n if (animation.repeat) {\n // 如果动画重复执行,则 elapsed > duration,计算 ratio 时需取模\n ratio = (elapsed % duration) / duration;\n ratio = d3Ease[easing](ratio);\n }\n else {\n ratio = elapsed / duration;\n if (ratio < 1) {\n // 动画未执行完\n ratio = d3Ease[easing](ratio);\n }\n else {\n // 动画已执行完\n if (animation.onFrame) {\n shape.attr(animation.onFrame(1));\n }\n else {\n shape.attr(animation.toAttrs);\n }\n return true;\n }\n }\n if (animation.onFrame) {\n var attrs = animation.onFrame(ratio);\n shape.attr(attrs);\n }\n else {\n _update(shape, animation, ratio);\n }\n return false;\n}\nvar Timeline = /** @class */ (function () {\n /**\n * 时间轴构造函数,依赖于画布\n * @param {}\n */\n function Timeline(canvas) {\n /**\n * 执行动画的元素列表\n * @type {IElement[]}\n */\n this.animators = [];\n /**\n * 当前时间\n * @type {number}\n */\n this.current = 0;\n /**\n * 定时器\n * @type {d3Timer.Timer}\n */\n this.timer = null;\n this.canvas = canvas;\n }\n /**\n * 初始化定时器\n */\n Timeline.prototype.initTimer = function () {\n var _this = this;\n var isFinished = false;\n var shape;\n var animations;\n var animation;\n this.timer = d3Timer.timer(function (elapsed) {\n _this.current = elapsed;\n if (_this.animators.length > 0) {\n for (var i = _this.animators.length - 1; i >= 0; i--) {\n shape = _this.animators[i];\n if (shape.destroyed) {\n // 如果已经被销毁,直接移出队列\n _this.removeAnimator(i);\n continue;\n }\n if (!shape.isAnimatePaused()) {\n animations = shape.get('animations');\n for (var j = animations.length - 1; j >= 0; j--) {\n animation = animations[j];\n isFinished = update(shape, animation, elapsed);\n if (isFinished) {\n animations.splice(j, 1);\n isFinished = false;\n if (animation.callback) {\n animation.callback();\n }\n }\n }\n }\n if (animations.length === 0) {\n _this.removeAnimator(i);\n }\n }\n var autoDraw = _this.canvas.get('autoDraw');\n // 非自动渲染模式下,手动调用 canvas.draw() 重新渲染\n if (!autoDraw) {\n _this.canvas.draw();\n }\n }\n });\n };\n /**\n * 增加动画元素\n */\n Timeline.prototype.addAnimator = function (shape) {\n this.animators.push(shape);\n };\n /**\n * 移除动画元素\n */\n Timeline.prototype.removeAnimator = function (index) {\n this.animators.splice(index, 1);\n };\n /**\n * 是否有动画在执行\n */\n Timeline.prototype.isAnimating = function () {\n return !!this.animators.length;\n };\n /**\n * 停止定时器\n */\n Timeline.prototype.stop = function () {\n if (this.timer) {\n this.timer.stop();\n }\n };\n /**\n * 停止时间轴上所有元素的动画,并置空动画元素列表\n * @param {boolean} toEnd 是否到动画的最终状态,用来透传给动画元素的 stopAnimate 方法\n */\n Timeline.prototype.stopAllAnimations = function (toEnd) {\n if (toEnd === void 0) { toEnd = true; }\n this.animators.forEach(function (animator) {\n animator.stopAnimate(toEnd);\n });\n this.animators = [];\n this.canvas.draw();\n };\n /**\n * 获取当前时间\n */\n Timeline.prototype.getTime = function () {\n return this.current;\n };\n return Timeline;\n}());\nexport default Timeline;\n//# sourceMappingURL=timeline.js.map","export var isColorProp = function (prop) { return ['fill', 'stroke', 'fillStyle', 'strokeStyle'].includes(prop); };\nexport var isGradientColor = function (val) { return /^[r,R,L,l]{1}[\\s]*\\(/.test(val); };\n//# sourceMappingURL=color.js.map","/**\n * @fileoverview 事件处理器\n * @author dxq613@gmail.com\n */\nimport GraphEvent from './graph-event';\nimport { each, isParent } from '../util/util';\nvar CLICK_OFFSET = 40;\nvar LEFT_BTN_CODE = 0;\nvar DELEGATION_SPLIT = ':';\nvar EVENTS = [\n 'mousedown',\n 'mouseup',\n 'dblclick',\n 'mouseout',\n 'mouseover',\n 'mousemove',\n 'mouseleave',\n 'mouseenter',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'dragenter',\n 'dragover',\n 'dragleave',\n 'drop',\n 'contextmenu',\n 'mousewheel',\n];\n// 是否有委托事件监听\nfunction hasDelegation(events, type) {\n for (var key in events) {\n if (events.hasOwnProperty(key) && key.indexOf(DELEGATION_SPLIT + type) >= 0) {\n return true;\n }\n }\n return false;\n}\n// 触发目标事件,目标只能是 shape 或 canvas\nfunction emitTargetEvent(target, type, eventObj) {\n eventObj.name = type;\n eventObj.target = target;\n eventObj.currentTarget = target;\n eventObj.delegateTarget = target;\n target.emit(type, eventObj);\n}\n// 事件冒泡, enter 和 leave 需要对 fromShape 和 toShape 进行判同\nfunction bubbleEvent(container, type, eventObj) {\n if (eventObj.bubbles) {\n var relativeShape = void 0;\n var isOverEvent = false;\n if (type === 'mouseenter') {\n relativeShape = eventObj.fromShape;\n isOverEvent = true;\n }\n else if (type === 'mouseleave') {\n isOverEvent = true;\n relativeShape = eventObj.toShape;\n }\n // canvas 上的 mouseenter, mouseleave 事件,仅当进入或者移出 canvas 时触发\n if (container.isCanvas() && isOverEvent) {\n return;\n }\n // 如果相关图形同当前图形在同一个容器内,不触发事件\n if (relativeShape && isParent(container, relativeShape)) {\n // 阻止继续向上冒泡\n eventObj.bubbles = false;\n return;\n }\n // 事件名称可能在委托过程中被修改,因此事件冒泡时需要重新设置事件名称\n eventObj.name = type;\n eventObj.currentTarget = container;\n eventObj.delegateTarget = container;\n container.emit(type, eventObj);\n }\n}\nvar EventController = /** @class */ (function () {\n function EventController(cfg) {\n var _this = this;\n // 正在被拖拽的图形\n this.draggingShape = null;\n this.dragging = false;\n // 当前鼠标/touch所在位置的图形\n this.currentShape = null;\n this.mousedownShape = null;\n this.mousedownPoint = null;\n // 统一处理所有的回调\n this._eventCallback = function (ev) {\n var type = ev.type;\n _this._triggerEvent(type, ev);\n };\n // 在 document 处理拖拽到画布外的事件,处理从图形上移除画布未被捕捉的问题\n this._onDocumentMove = function (ev) {\n var canvas = _this.canvas;\n var el = canvas.get('el');\n if (el !== ev.target) {\n // 不在 canvas 上移动\n if (_this.dragging || _this.currentShape) {\n var pointInfo = _this._getPointInfo(ev);\n // 还在拖拽过程中\n if (_this.dragging) {\n _this._emitEvent('drag', ev, pointInfo, _this.draggingShape);\n }\n // 说明从某个图形直接移动到了画布外面,\n // 修复了 mouseleave 的 bug 后不再出现这种情况\n // if (this.currentShape) {\n // this._emitEvent('mouseleave', ev, pointInfo, this.currentShape, this.currentShape, null);\n // this.currentShape = null;\n // }\n }\n }\n };\n // 在 document 上处理拖拽到外面,释放鼠标时触发 dragend\n this._onDocumentMouseUp = function (ev) {\n var canvas = _this.canvas;\n var el = canvas.get('el');\n if (el !== ev.target) {\n // 不在 canvas 上移动\n if (_this.dragging) {\n var pointInfo = _this._getPointInfo(ev);\n if (_this.draggingShape) {\n // 如果存在拖拽的图形,则也触发 drop 事件\n _this._emitEvent('drop', ev, pointInfo, null);\n }\n _this._emitEvent('dragend', ev, pointInfo, _this.draggingShape);\n _this._afterDrag(_this.draggingShape, pointInfo, ev);\n }\n }\n };\n this.canvas = cfg.canvas;\n }\n EventController.prototype.init = function () {\n this._bindEvents();\n };\n // 注册事件\n EventController.prototype._bindEvents = function () {\n var _this = this;\n var el = this.canvas.get('el');\n each(EVENTS, function (eventName) {\n el.addEventListener(eventName, _this._eventCallback);\n });\n if (document) {\n // 处理移动到外面没有触发 shape mouse leave 的事件\n // 处理拖拽到外部的问题\n document.addEventListener('mousemove', this._onDocumentMove);\n // 处理拖拽过程中在外部释放鼠标的问题\n document.addEventListener('mouseup', this._onDocumentMouseUp);\n }\n };\n // 清理事件\n EventController.prototype._clearEvents = function () {\n var _this = this;\n var el = this.canvas.get('el');\n each(EVENTS, function (eventName) {\n el.removeEventListener(eventName, _this._eventCallback);\n });\n if (document) {\n document.removeEventListener('mousemove', this._onDocumentMove);\n document.removeEventListener('mouseup', this._onDocumentMouseUp);\n }\n };\n EventController.prototype._getEventObj = function (type, event, point, target, fromShape, toShape) {\n var eventObj = new GraphEvent(type, event);\n eventObj.fromShape = fromShape;\n eventObj.toShape = toShape;\n eventObj.x = point.x;\n eventObj.y = point.y;\n eventObj.clientX = point.clientX;\n eventObj.clientY = point.clientY;\n eventObj.propagationPath.push(target);\n // 事件的x,y应该是基于画布左上角的,与canvas的matrix无关\n return eventObj;\n };\n // 根据点获取图形,提取成独立方法,便于后续优化\n EventController.prototype._getShape = function (point, ev) {\n return this.canvas.getShape(point.x, point.y, ev);\n };\n // 获取事件的当前点的信息\n EventController.prototype._getPointInfo = function (ev) {\n var canvas = this.canvas;\n var clientPoint = canvas.getClientByEvent(ev);\n var point = canvas.getPointByEvent(ev);\n return {\n x: point.x,\n y: point.y,\n clientX: clientPoint.x,\n clientY: clientPoint.y,\n };\n };\n // 触发事件\n EventController.prototype._triggerEvent = function (type, ev) {\n var pointInfo = this._getPointInfo(ev);\n // 每次都获取图形有一定成本,后期可以考虑进行缓存策略\n var shape = this._getShape(pointInfo, ev);\n var method = this[\"_on\" + type];\n var leaveCanvas = false;\n if (method) {\n method.call(this, pointInfo, shape, ev);\n }\n else {\n var preShape = this.currentShape;\n // 如果进入、移出画布时存在图形,则要分别触发事件\n if (type === 'mouseenter' || type === 'dragenter' || type === 'mouseover') {\n this._emitEvent(type, ev, pointInfo, null, null, shape); // 先进入画布\n if (shape) {\n this._emitEvent(type, ev, pointInfo, shape, null, shape); // 再触发图形的事件\n }\n if (type === 'mouseenter' && this.draggingShape) {\n // 如果正在拖拽图形, 则触发 dragleave\n this._emitEvent('dragenter', ev, pointInfo, null);\n }\n }\n else if (type === 'mouseleave' || type === 'dragleave' || type === 'mouseout') {\n leaveCanvas = true;\n if (preShape) {\n this._emitEvent(type, ev, pointInfo, preShape, preShape, null); // 先触发图形的事件\n }\n this._emitEvent(type, ev, pointInfo, null, preShape, null); // 再触发离开画布事件\n if (type === 'mouseleave' && this.draggingShape) {\n this._emitEvent('dragleave', ev, pointInfo, null);\n }\n }\n else {\n this._emitEvent(type, ev, pointInfo, shape, null, null); // 一般事件中不需要考虑 from, to\n }\n }\n if (!leaveCanvas) {\n this.currentShape = shape;\n }\n // 当鼠标从画布移动到 shape 或者从 preShape 移动到 shape 时,应用 shape 上的鼠标样式\n if (shape && !shape.get('destroyed')) {\n var canvas = this.canvas;\n var el = canvas.get('el');\n el.style.cursor = shape.attr('cursor') || canvas.get('cursor');\n }\n };\n // 记录下点击的位置、图形,便于拖拽事件、click 事件的判定\n EventController.prototype._onmousedown = function (pointInfo, shape, event) {\n // 只有鼠标左键的 mousedown 事件才会设置 mousedownShape 等属性,避免鼠标右键的 mousedown 事件引起其他事件发生\n if (event.button === LEFT_BTN_CODE) {\n this.mousedownShape = shape;\n this.mousedownPoint = pointInfo;\n this.mousedownTimeStamp = event.timeStamp;\n }\n this._emitEvent('mousedown', event, pointInfo, shape, null, null); // mousedown 不考虑fromShape, toShape\n };\n // mouseleave 和 mouseenter 都是成对存在的\n // mouseenter 和 mouseover 同时触发\n EventController.prototype._emitMouseoverEvents = function (event, pointInfo, fromShape, toShape) {\n var el = this.canvas.get('el');\n if (fromShape !== toShape) {\n if (fromShape) {\n this._emitEvent('mouseout', event, pointInfo, fromShape, fromShape, toShape);\n this._emitEvent('mouseleave', event, pointInfo, fromShape, fromShape, toShape);\n // 当鼠标从 fromShape 移动到画布上时,重置鼠标样式\n if (!toShape || toShape.get('destroyed')) {\n el.style.cursor = this.canvas.get('cursor');\n }\n }\n if (toShape) {\n this._emitEvent('mouseover', event, pointInfo, toShape, fromShape, toShape);\n this._emitEvent('mouseenter', event, pointInfo, toShape, fromShape, toShape);\n }\n }\n };\n // dragover 不等同于 mouseover,而等同于 mousemove\n EventController.prototype._emitDragoverEvents = function (event, pointInfo, fromShape, toShape, isCanvasEmit) {\n if (toShape) {\n if (toShape !== fromShape) {\n if (fromShape) {\n this._emitEvent('dragleave', event, pointInfo, fromShape, fromShape, toShape);\n }\n this._emitEvent('dragenter', event, pointInfo, toShape, fromShape, toShape);\n }\n if (!isCanvasEmit) {\n this._emitEvent('dragover', event, pointInfo, toShape);\n }\n }\n else if (fromShape) {\n // TODO: 此处判断有问题,当 drag 图形时,也会触发一次 dragleave 事件,因为此时 toShape 为 null,这不是所期望的\n // 经过空白区域\n this._emitEvent('dragleave', event, pointInfo, fromShape, fromShape, toShape);\n }\n if (isCanvasEmit) {\n this._emitEvent('dragover', event, pointInfo, toShape);\n }\n };\n // drag 完成后,需要做一些清理工作\n EventController.prototype._afterDrag = function (draggingShape, pointInfo, event) {\n if (draggingShape) {\n draggingShape.set('capture', true); // 恢复可以拾取\n this.draggingShape = null;\n }\n this.dragging = false;\n // drag 完成后,有可能 draggingShape 已经移动到了当前位置,所以不能直接取当前图形\n var shape = this._getShape(pointInfo, event);\n // 拖拽完成后,进行 enter,leave 的判定\n if (shape !== draggingShape) {\n this._emitMouseoverEvents(event, pointInfo, draggingShape, shape);\n }\n this.currentShape = shape; // 更新当前 shape,如果不处理当前图形的 mouseleave 事件可能会出问题\n };\n // 按键抬起时,会终止拖拽、触发点击\n EventController.prototype._onmouseup = function (pointInfo, shape, event) {\n // eevent.button === 0 表示鼠标左键事件,此处加上判断主要是为了避免右键鼠标会触发 mouseup 和 click 事件\n // ref: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\n if (event.button === LEFT_BTN_CODE) {\n var draggingShape = this.draggingShape;\n if (this.dragging) {\n // 存在可以拖拽的图形,同时拖拽到其他图形上时触发 drag 事件\n if (draggingShape) {\n this._emitEvent('drop', event, pointInfo, shape);\n }\n this._emitEvent('dragend', event, pointInfo, draggingShape);\n this._afterDrag(draggingShape, pointInfo, event);\n }\n else {\n this._emitEvent('mouseup', event, pointInfo, shape); // 先触发 mouseup 再触发 click\n if (shape === this.mousedownShape) {\n this._emitEvent('click', event, pointInfo, shape);\n }\n this.mousedownShape = null;\n this.mousedownPoint = null;\n }\n }\n };\n // 当触发浏览器的 dragover 事件时,不会再触发 mousemove ,所以这时候的 dragenter, dragleave 事件需要重新处理\n EventController.prototype._ondragover = function (pointInfo, shape, event) {\n event.preventDefault(); // 如果不对 dragover 进行 preventDefault,则不会在 canvas 上触发 drop 事件\n var preShape = this.currentShape;\n this._emitDragoverEvents(event, pointInfo, preShape, shape, true);\n };\n // 大量的图形事件,都通过 mousemove 模拟\n EventController.prototype._onmousemove = function (pointInfo, shape, event) {\n var canvas = this.canvas;\n var preShape = this.currentShape;\n var draggingShape = this.draggingShape;\n // 正在拖拽时\n if (this.dragging) {\n // 正在拖拽中\n if (draggingShape) {\n // 如果拖拽了 shape 会触发 dragenter, dragleave, dragover 和 drag 事件\n this._emitDragoverEvents(event, pointInfo, preShape, shape, false);\n }\n // 如果存在 draggingShape 则会在 draggingShape 上触发 drag 事件,冒泡到 canvas 上\n // 否则在 canvas 上触发 drag 事件\n this._emitEvent('drag', event, pointInfo, draggingShape);\n }\n else {\n var mousedownPoint = this.mousedownPoint;\n if (mousedownPoint) {\n // 当鼠标点击下去,同时移动时,进行 drag 判定\n var mousedownShape = this.mousedownShape;\n var now = event.timeStamp;\n var timeWindow = now - this.mousedownTimeStamp;\n var dx = mousedownPoint.clientX - pointInfo.clientX;\n var dy = mousedownPoint.clientY - pointInfo.clientY;\n var dist = dx * dx + dy * dy;\n if (timeWindow > 120 || dist > CLICK_OFFSET) {\n if (mousedownShape && mousedownShape.get('draggable')) {\n // 设置了 draggable 的 shape 才能触发 drag 相关的事件\n draggingShape = this.mousedownShape; // 拖动鼠标点下时的 shape\n draggingShape.set('capture', false); // 禁止继续拾取,否则无法进行 dragover,dragenter,dragleave,drop的判定\n this.draggingShape = draggingShape;\n this.dragging = true;\n this._emitEvent('dragstart', event, pointInfo, draggingShape);\n // 清理按下鼠标时缓存的值\n this.mousedownShape = null;\n this.mousedownPoint = null;\n }\n else if (!mousedownShape && canvas.get('draggable')) {\n // 设置了 draggable 的 canvas 才能触发 drag 相关的事件\n this.dragging = true;\n this._emitEvent('dragstart', event, pointInfo, null);\n // 清理按下鼠标时缓存的值\n this.mousedownShape = null;\n this.mousedownPoint = null;\n }\n else {\n this._emitMouseoverEvents(event, pointInfo, preShape, shape);\n this._emitEvent('mousemove', event, pointInfo, shape);\n }\n }\n else {\n this._emitMouseoverEvents(event, pointInfo, preShape, shape);\n this._emitEvent('mousemove', event, pointInfo, shape);\n }\n }\n else {\n // 没有按键按下时,则直接触发 mouse over 相关的各种事件\n this._emitMouseoverEvents(event, pointInfo, preShape, shape);\n // 始终触发移动\n this._emitEvent('mousemove', event, pointInfo, shape);\n }\n }\n };\n // 触发事件\n EventController.prototype._emitEvent = function (type, event, pointInfo, shape, fromShape, toShape) {\n var eventObj = this._getEventObj(type, event, pointInfo, shape, fromShape, toShape);\n // 存在 shape 触发,则进行冒泡处理\n if (shape) {\n eventObj.shape = shape;\n // 触发 shape 上的事件\n emitTargetEvent(shape, type, eventObj);\n var parent_1 = shape.getParent();\n // 执行冒泡\n while (parent_1) {\n // 委托事件要先触发\n parent_1.emitDelegation(type, eventObj);\n // 事件冒泡停止,不能妨碍委托事件\n if (!eventObj.propagationStopped) {\n bubbleEvent(parent_1, type, eventObj);\n }\n eventObj.propagationPath.push(parent_1);\n parent_1 = parent_1.getParent();\n }\n }\n else {\n // 如果没有 shape 直接在 canvas 上触发\n var canvas = this.canvas;\n // 直接触发 canvas 上的事件\n emitTargetEvent(canvas, type, eventObj);\n }\n };\n EventController.prototype.destroy = function () {\n // 清理事件\n this._clearEvents();\n // 清理缓存的对象\n this.canvas = null;\n this.currentShape = null;\n this.draggingShape = null;\n this.mousedownPoint = null;\n this.mousedownShape = null;\n this.mousedownTimeStamp = null;\n };\n return EventController;\n}());\nexport default EventController;\n//# sourceMappingURL=event-contoller.js.map","import { __extends } from \"tslib\";\nimport { detect } from 'detect-browser';\nimport Container from './container';\nimport { isBrowser, isNil, isString } from '../util/util';\nimport Timeline from '../animate/timeline';\nimport EventController from '../event/event-contoller';\nvar PX_SUFFIX = 'px';\nvar browser = detect();\nvar isFirefox = browser && browser.name === 'firefox';\nvar Canvas = /** @class */ (function (_super) {\n __extends(Canvas, _super);\n function Canvas(cfg) {\n var _this = _super.call(this, cfg) || this;\n _this.initContainer();\n _this.initDom();\n _this.initEvents();\n _this.initTimeline();\n return _this;\n }\n Canvas.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n // set default cursor style for canvas\n cfg['cursor'] = 'default';\n // CSS transform 目前尚未经过长时间验证,为了避免影响上层业务,默认关闭,上层按需开启\n cfg['supportCSSTransform'] = false;\n return cfg;\n };\n /**\n * @protected\n * 初始化容器\n */\n Canvas.prototype.initContainer = function () {\n var container = this.get('container');\n if (isString(container)) {\n container = document.getElementById(container);\n this.set('container', container);\n }\n };\n /**\n * @protected\n * 初始化 DOM\n */\n Canvas.prototype.initDom = function () {\n var el = this.createDom();\n this.set('el', el);\n // 附加到容器\n var container = this.get('container');\n container.appendChild(el);\n // 设置初始宽度\n this.setDOMSize(this.get('width'), this.get('height'));\n };\n /**\n * @protected\n * 初始化绑定的事件\n */\n Canvas.prototype.initEvents = function () {\n var eventController = new EventController({\n canvas: this,\n });\n eventController.init();\n this.set('eventController', eventController);\n };\n /**\n * @protected\n * 初始化时间轴\n */\n Canvas.prototype.initTimeline = function () {\n var timeline = new Timeline(this);\n this.set('timeline', timeline);\n };\n /**\n * @protected\n * 修改画布对应的 DOM 的大小\n * @param {number} width 宽度\n * @param {number} height 高度\n */\n Canvas.prototype.setDOMSize = function (width, height) {\n var el = this.get('el');\n if (isBrowser) {\n el.style.width = width + PX_SUFFIX;\n el.style.height = height + PX_SUFFIX;\n }\n };\n // 实现接口\n Canvas.prototype.changeSize = function (width, height) {\n this.setDOMSize(width, height);\n this.set('width', width);\n this.set('height', height);\n this.onCanvasChange('changeSize');\n };\n /**\n * 获取当前的渲染引擎\n * @return {Renderer} 返回当前的渲染引擎\n */\n Canvas.prototype.getRenderer = function () {\n return this.get('renderer');\n };\n /**\n * 获取画布的 cursor 样式\n * @return {Cursor}\n */\n Canvas.prototype.getCursor = function () {\n return this.get('cursor');\n };\n /**\n * 设置画布的 cursor 样式\n * @param {Cursor} cursor cursor 样式\n */\n Canvas.prototype.setCursor = function (cursor) {\n this.set('cursor', cursor);\n var el = this.get('el');\n if (isBrowser && el) {\n // 直接设置样式,不等待鼠标移动时再设置\n el.style.cursor = cursor;\n }\n };\n // 实现接口\n Canvas.prototype.getPointByEvent = function (ev) {\n var supportCSSTransform = this.get('supportCSSTransform');\n if (supportCSSTransform) {\n // For Firefox <= 38\n if (isFirefox && !isNil(ev.layerX) && ev.layerX !== ev.offsetX) {\n return {\n x: ev.layerX,\n y: ev.layerY,\n };\n }\n if (!isNil(ev.offsetX)) {\n // For IE6+, Firefox >= 39, Chrome, Safari, Opera\n return {\n x: ev.offsetX,\n y: ev.offsetY,\n };\n }\n }\n // should calculate by self for other cases, like Safari in ios\n // TODO: support CSS transform\n var _a = this.getClientByEvent(ev), clientX = _a.x, clientY = _a.y;\n return this.getPointByClient(clientX, clientY);\n };\n // 获取 touch 事件的 clientX 和 clientY 需要单独处理\n Canvas.prototype.getClientByEvent = function (ev) {\n var clientInfo = ev;\n if (ev.touches) {\n if (ev.type === 'touchend') {\n clientInfo = ev.changedTouches[0];\n }\n else {\n clientInfo = ev.touches[0];\n }\n }\n return {\n x: clientInfo.clientX,\n y: clientInfo.clientY,\n };\n };\n // 实现接口\n Canvas.prototype.getPointByClient = function (clientX, clientY) {\n var el = this.get('el');\n var bbox = el.getBoundingClientRect();\n return {\n x: clientX - bbox.left,\n y: clientY - bbox.top,\n };\n };\n // 实现接口\n Canvas.prototype.getClientByPoint = function (x, y) {\n var el = this.get('el');\n var bbox = el.getBoundingClientRect();\n return {\n x: x + bbox.left,\n y: y + bbox.top,\n };\n };\n // 实现接口\n Canvas.prototype.draw = function () { };\n /**\n * @protected\n * 销毁 DOM 容器\n */\n Canvas.prototype.removeDom = function () {\n var el = this.get('el');\n el.parentNode.removeChild(el);\n };\n /**\n * @protected\n * 清理所有的事件\n */\n Canvas.prototype.clearEvents = function () {\n var eventController = this.get('eventController');\n eventController.destroy();\n };\n Canvas.prototype.isCanvas = function () {\n return true;\n };\n Canvas.prototype.getParent = function () {\n return null;\n };\n Canvas.prototype.destroy = function () {\n var timeline = this.get('timeline');\n if (this.get('destroyed')) {\n return;\n }\n this.clear();\n // 同初始化时相反顺序调用\n if (timeline) {\n // 画布销毁时自动停止动画\n timeline.stop();\n }\n this.clearEvents();\n this.removeDom();\n _super.prototype.destroy.call(this);\n };\n return Canvas;\n}(Container));\nexport default Canvas;\n//# sourceMappingURL=canvas.js.map","var cache = new Map();\n/**\n * 注册计算包围盒的算法\n * @param type 方法名\n * @param method 方法\n */\nexport function register(type, method) {\n cache.set(type, method);\n}\n/**\n * 获取计算包围盒的算法\n * @param type 方法名\n */\nexport function getMethod(type) {\n return cache.get(type);\n}\n//# sourceMappingURL=register.js.map","export default function (shape) {\n var attrs = shape.attr();\n var x = attrs.x, y = attrs.y, width = attrs.width, height = attrs.height;\n return {\n x: x,\n y: y,\n width: width,\n height: height,\n };\n}\n//# sourceMappingURL=rect.js.map","export default function (shape) {\n var _a = shape.attr(), x = _a.x, y = _a.y, r = _a.r;\n return {\n x: x - r,\n y: y - r,\n width: r * 2,\n height: r * 2,\n };\n}\n//# sourceMappingURL=circle.js.map","// 合并包围盒\nexport function mergeBBox(bbox1, bbox2) {\n if (!bbox1 || !bbox2) {\n return bbox1 || bbox2;\n }\n return {\n minX: Math.min(bbox1.minX, bbox2.minX),\n minY: Math.min(bbox1.minY, bbox2.minY),\n maxX: Math.max(bbox1.maxX, bbox2.maxX),\n maxY: Math.max(bbox1.maxY, bbox2.maxY),\n };\n}\n// 合并箭头的包围盒\nexport function mergeArrowBBox(shape, bbox) {\n var startArrowShape = shape.get('startArrowShape');\n var endArrowShape = shape.get('endArrowShape');\n var startArrowBBox = null;\n var endArrowBBox = null;\n if (startArrowShape) {\n startArrowBBox = startArrowShape.getCanvasBBox();\n bbox = mergeBBox(bbox, startArrowBBox);\n }\n if (endArrowShape) {\n endArrowBBox = endArrowShape.getCanvasBBox();\n bbox = mergeBBox(bbox, endArrowBBox);\n }\n return bbox;\n}\n//# sourceMappingURL=util.js.map","import { Util } from '@antv/g-math';\nimport { mergeArrowBBox } from './util';\nexport default function (shape) {\n var attrs = shape.attr();\n var points = attrs.points;\n var xArr = [];\n var yArr = [];\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n xArr.push(point[0]);\n yArr.push(point[1]);\n }\n var _a = Util.getBBoxByArray(xArr, yArr), x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n var bbox = {\n minX: x,\n minY: y,\n maxX: x + width,\n maxY: y + height,\n };\n bbox = mergeArrowBBox(shape, bbox);\n return {\n x: bbox.minX,\n y: bbox.minY,\n width: bbox.maxX - bbox.minX,\n height: bbox.maxY - bbox.minY,\n };\n}\n//# sourceMappingURL=polyline.js.map","import { each, isArray, isString } from '@antv/util';\nvar regexTags = /[MLHVQTCSAZ]([^MLHVQTCSAZ]*)/ig;\nvar regexDot = /[^\\s\\,]+/ig;\nfunction parsePath(p) {\n var path = p || [];\n if (isArray(path)) {\n return path;\n }\n if (isString(path)) {\n path = path.match(regexTags);\n each(path, function (item, index) {\n // @ts-ignore\n item = item.match(regexDot);\n if (item[0].length > 1) {\n var tag = item[0].charAt(0);\n // @ts-ignore\n item.splice(1, 0, item[0].substr(1));\n // @ts-ignore\n item[0] = tag;\n }\n // @ts-ignore\n each(item, function (sub, i) {\n if (!isNaN(sub)) {\n // @ts-ignore\n item[i] = +sub;\n }\n });\n // @ts-ignore\n path[index] = item;\n });\n return path;\n }\n}\nexport default parsePath;\n//# sourceMappingURL=parse-path.js.map","import { isArray } from '@antv/util';\nvar SPACES = '\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029';\nvar PATH_COMMAND = new RegExp('([a-z])[' + SPACES + ',]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[' + SPACES + ']*,?[' + SPACES + ']*)+)', 'ig');\nvar PATH_VALUES = new RegExp('(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[' + SPACES + ']*,?[' + SPACES + ']*', 'ig');\n// Parses given path string into an array of arrays of path segments\nexport default function parsePathString(pathString) {\n if (!pathString) {\n return null;\n }\n if (isArray(pathString)) {\n return pathString;\n }\n var paramCounts = {\n a: 7,\n c: 6,\n o: 2,\n h: 1,\n l: 2,\n m: 2,\n r: 4,\n q: 4,\n s: 4,\n t: 2,\n v: 1,\n u: 3,\n z: 0,\n };\n var data = [];\n String(pathString).replace(PATH_COMMAND, function (a, b, c) {\n var params = [];\n var name = b.toLowerCase();\n c.replace(PATH_VALUES, function (a, b) {\n b && params.push(+b);\n });\n if (name === 'm' && params.length > 2) {\n data.push([b].concat(params.splice(0, 2)));\n name = 'l';\n b = b === 'm' ? 'l' : 'L';\n }\n if (name === 'o' && params.length === 1) {\n data.push([b, params[0]]);\n }\n if (name === 'r') {\n data.push([b].concat(params));\n }\n else {\n while (params.length >= paramCounts[name]) {\n data.push([b].concat(params.splice(0, paramCounts[name])));\n if (!paramCounts[name]) {\n break;\n }\n }\n }\n return '';\n });\n return data;\n}\n//# sourceMappingURL=parse-path-string.js.map","import { mod, toRadian } from '@antv/util';\n// 向量长度\nfunction vMag(v) {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n}\n// u.v/|u||v|,计算夹角的余弦值\nfunction vRatio(u, v) {\n // 当存在一个向量的长度为 0 时,夹角也为 0,即夹角的余弦值为 1\n return vMag(u) * vMag(v) ? (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v)) : 1;\n}\n// 向量角度\nfunction vAngle(u, v) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));\n}\n/**\n * 判断两个点是否重合,点坐标的格式为 [x, y]\n * @param {Array} point1 第一个点\n * @param {Array} point2 第二个点\n */\nexport function isSamePoint(point1, point2) {\n return point1[0] === point2[0] && point1[1] === point2[1];\n}\n// A 0:rx 1:ry 2:x-axis-rotation 3:large-arc-flag 4:sweep-flag 5: x 6: y\nexport default function getArcParams(startPoint, params) {\n var rx = params[1];\n var ry = params[2];\n var xRotation = mod(toRadian(params[3]), Math.PI * 2);\n var arcFlag = params[4];\n var sweepFlag = params[5];\n // 弧形起点坐标\n var x1 = startPoint[0];\n var y1 = startPoint[1];\n // 弧形终点坐标\n var x2 = params[6];\n var y2 = params[7];\n var xp = (Math.cos(xRotation) * (x1 - x2)) / 2.0 + (Math.sin(xRotation) * (y1 - y2)) / 2.0;\n var yp = (-1 * Math.sin(xRotation) * (x1 - x2)) / 2.0 + (Math.cos(xRotation) * (y1 - y2)) / 2.0;\n var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n var diff = rx * rx * (yp * yp) + ry * ry * (xp * xp);\n var f = diff ? Math.sqrt((rx * rx * (ry * ry) - diff) / diff) : 1;\n if (arcFlag === sweepFlag) {\n f *= -1;\n }\n if (isNaN(f)) {\n f = 0;\n }\n // 旋转前的起点坐标,且当长半轴和短半轴的长度为 0 时,坐标按 (0, 0) 处理\n var cxp = ry ? (f * rx * yp) / ry : 0;\n var cyp = rx ? (f * -ry * xp) / rx : 0;\n // 椭圆圆心坐标\n var cx = (x1 + x2) / 2.0 + Math.cos(xRotation) * cxp - Math.sin(xRotation) * cyp;\n var cy = (y1 + y2) / 2.0 + Math.sin(xRotation) * cxp + Math.cos(xRotation) * cyp;\n // 起始点的单位向量\n var u = [(xp - cxp) / rx, (yp - cyp) / ry];\n // 终止点的单位向量\n var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];\n // 计算起始点和圆心的连线,与 x 轴正方向的夹角\n var theta = vAngle([1, 0], u);\n // 计算圆弧起始点和终止点与椭圆圆心连线的夹角\n var dTheta = vAngle(u, v);\n if (vRatio(u, v) <= -1) {\n dTheta = Math.PI;\n }\n if (vRatio(u, v) >= 1) {\n dTheta = 0;\n }\n if (sweepFlag === 0 && dTheta > 0) {\n dTheta = dTheta - 2 * Math.PI;\n }\n if (sweepFlag === 1 && dTheta < 0) {\n dTheta = dTheta + 2 * Math.PI;\n }\n return {\n cx: cx,\n cy: cy,\n // 弧形的起点和终点相同时,长轴和短轴的长度按 0 处理\n rx: isSamePoint(startPoint, [x2, y2]) ? 0 : rx,\n ry: isSamePoint(startPoint, [x2, y2]) ? 0 : ry,\n startAngle: theta,\n endAngle: theta + dTheta,\n xRotation: xRotation,\n arcFlag: arcFlag,\n sweepFlag: sweepFlag,\n };\n}\n//# sourceMappingURL=get-arc-params.js.map","import getArcParams from './get-arc-params';\nimport { isSamePoint } from './get-arc-params';\nimport parsePath from './parse-path';\n// 点对称\nfunction toSymmetry(point, center) {\n return [center[0] + (center[0] - point[0]), center[1] + (center[1] - point[1])];\n}\nexport default function getSegments(path) {\n path = parsePath(path);\n var segments = [];\n var currentPoint = null; // 当前图形\n var nextParams = null; // 下一节点的 path 参数\n var startMovePoint = null; // 开始 M 的点,可能会有多个\n var lastStartMovePointIndex = 0; // 最近一个开始点 M 的索引\n var count = path.length;\n for (var i = 0; i < count; i++) {\n var params = path[i];\n nextParams = path[i + 1];\n var command = params[0];\n // 数学定义上的参数,便于后面的计算\n var segment = {\n command: command,\n prePoint: currentPoint,\n params: params,\n startTangent: null,\n endTangent: null,\n };\n switch (command) {\n case 'M':\n startMovePoint = [params[1], params[2]];\n lastStartMovePointIndex = i;\n break;\n case 'A':\n var arcParams = getArcParams(currentPoint, params);\n segment['arcParams'] = arcParams;\n break;\n default:\n break;\n }\n if (command === 'Z') {\n // 有了 Z 后,当前节点从开始 M 的点开始\n currentPoint = startMovePoint;\n // 如果当前点的命令为 Z,相当于当前点为最近一个 M 点,则下一个点直接指向最近一个 M 点的下一个点\n nextParams = path[lastStartMovePointIndex + 1];\n }\n else {\n var len = params.length;\n currentPoint = [params[len - 2], params[len - 1]];\n }\n if (nextParams && nextParams[0] === 'Z') {\n // 如果下一个点的命令为 Z,则下一个点直接指向最近一个 M 点\n nextParams = path[lastStartMovePointIndex];\n if (segments[lastStartMovePointIndex]) {\n // 如果下一个点的命令为 Z,则最近一个 M 点的前一个点为当前点\n segments[lastStartMovePointIndex].prePoint = currentPoint;\n }\n }\n segment['currentPoint'] = currentPoint;\n // 如果当前点与最近一个 M 点相同,则最近一个 M 点的前一个点为当前点的前一个点\n if (segments[lastStartMovePointIndex] &&\n isSamePoint(currentPoint, segments[lastStartMovePointIndex].currentPoint)) {\n segments[lastStartMovePointIndex].prePoint = segment.prePoint;\n }\n var nextPoint = nextParams ? [nextParams[nextParams.length - 2], nextParams[nextParams.length - 1]] : null;\n segment['nextPoint'] = nextPoint;\n // Add startTangent and endTangent\n var prePoint = segment.prePoint;\n if (['L', 'H', 'V'].includes(command)) {\n segment.startTangent = [prePoint[0] - currentPoint[0], prePoint[1] - currentPoint[1]];\n segment.endTangent = [currentPoint[0] - prePoint[0], currentPoint[1] - prePoint[1]];\n }\n else if (command === 'Q') {\n // 二次贝塞尔曲线只有一个控制点\n var cp = [params[1], params[2]];\n // 二次贝塞尔曲线的终点为 currentPoint\n segment.startTangent = [prePoint[0] - cp[0], prePoint[1] - cp[1]];\n segment.endTangent = [currentPoint[0] - cp[0], currentPoint[1] - cp[1]];\n }\n else if (command === 'T') {\n var preSegment = segments[i - 1];\n var cp = toSymmetry(preSegment.currentPoint, prePoint);\n if (preSegment.command === 'Q') {\n segment.command = 'Q';\n segment.startTangent = [prePoint[0] - cp[0], prePoint[1] - cp[1]];\n segment.endTangent = [currentPoint[0] - cp[0], currentPoint[1] - cp[1]];\n }\n else {\n segment.command = 'TL';\n segment.startTangent = [prePoint[0] - currentPoint[0], prePoint[1] - currentPoint[1]];\n segment.endTangent = [currentPoint[0] - prePoint[0], currentPoint[1] - prePoint[1]];\n }\n }\n else if (command === 'C') {\n // 三次贝塞尔曲线有两个控制点\n var cp1 = [params[1], params[2]];\n var cp2 = [params[3], params[4]];\n segment.startTangent = [prePoint[0] - cp1[0], prePoint[1] - cp1[1]];\n segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]];\n }\n else if (command === 'S') {\n var preSegment = segments[i - 1];\n var cp1 = toSymmetry(preSegment.currentPoint, prePoint);\n var cp2 = [params[1], params[2]];\n if (preSegment.command === 'C') {\n segment.command = 'C'; // 将 S 命令变换为 C 命令\n segment.startTangent = [prePoint[0] - cp1[0], prePoint[1] - cp1[1]];\n segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]];\n }\n else {\n segment.command = 'SQ'; // 将 S 命令变换为 SQ 命令\n segment.startTangent = [prePoint[0] - cp2[0], prePoint[1] - cp2[1]];\n segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]];\n }\n }\n else if (command === 'A') {\n var d = 0.001;\n var _a = segment['arcParams'] || {}, _b = _a.cx, cx = _b === void 0 ? 0 : _b, _c = _a.cy, cy = _c === void 0 ? 0 : _c, _d = _a.rx, rx = _d === void 0 ? 0 : _d, _e = _a.ry, ry = _e === void 0 ? 0 : _e, _f = _a.sweepFlag, sweepFlag = _f === void 0 ? 0 : _f, _g = _a.startAngle, startAngle = _g === void 0 ? 0 : _g, _h = _a.endAngle, endAngle = _h === void 0 ? 0 : _h;\n if (sweepFlag === 0) {\n d *= -1;\n }\n var dx1 = rx * Math.cos(startAngle - d) + cx;\n var dy1 = ry * Math.sin(startAngle - d) + cy;\n segment.startTangent = [dx1 - startMovePoint[0], dy1 - startMovePoint[1]];\n var dx2 = rx * Math.cos(startAngle + endAngle + d) + cx;\n var dy2 = ry * Math.sin(startAngle + endAngle - d) + cy;\n segment.endTangent = [prePoint[0] - dx2, prePoint[1] - dy2];\n }\n segments.push(segment);\n }\n return segments;\n}\n//# sourceMappingURL=path-2-segments.js.map","import { Quad as QuadUtil, Cubic as CubicUtil, Arc as EllipseArcUtil } from '@antv/g-math';\nimport { path2Segments } from '@antv/path-util';\nimport { isNumberEqual } from '@antv/util';\nimport { mergeArrowBBox } from './util';\nfunction getPathBox(segments, lineWidth) {\n var xArr = [];\n var yArr = [];\n var segmentsWithAngle = [];\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n var currentPoint = segment.currentPoint, params = segment.params, prePoint = segment.prePoint;\n var box = void 0;\n switch (segment.command) {\n case 'Q':\n box = QuadUtil.box(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4]);\n break;\n case 'C':\n box = CubicUtil.box(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4], params[5], params[6]);\n break;\n case 'A':\n var arcParams = segment.arcParams;\n box = EllipseArcUtil.box(arcParams.cx, arcParams.cy, arcParams.rx, arcParams.ry, arcParams.xRotation, arcParams.startAngle, arcParams.endAngle);\n break;\n default:\n xArr.push(currentPoint[0]);\n yArr.push(currentPoint[1]);\n break;\n }\n if (box) {\n segment.box = box;\n xArr.push(box.x, box.x + box.width);\n yArr.push(box.y, box.y + box.height);\n }\n if (lineWidth && (segment.command === 'L' || segment.command === 'M') && segment.prePoint && segment.nextPoint) {\n segmentsWithAngle.push(segment);\n }\n }\n // bbox calculation should ignore NaN for path attribute\n // ref: https://github.com/antvis/g/issues/210\n xArr = xArr.filter(function (item) { return !Number.isNaN(item); });\n yArr = yArr.filter(function (item) { return !Number.isNaN(item); });\n var minX = Math.min.apply(null, xArr);\n var minY = Math.min.apply(null, yArr);\n var maxX = Math.max.apply(null, xArr);\n var maxY = Math.max.apply(null, yArr);\n if (segmentsWithAngle.length === 0) {\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n }\n for (var i = 0; i < segmentsWithAngle.length; i++) {\n var segment = segmentsWithAngle[i];\n var currentPoint = segment.currentPoint;\n var extra = void 0;\n if (currentPoint[0] === minX) {\n extra = getExtraFromSegmentWithAngle(segment, lineWidth);\n minX = minX - extra.xExtra;\n }\n else if (currentPoint[0] === maxX) {\n extra = getExtraFromSegmentWithAngle(segment, lineWidth);\n maxX = maxX + extra.xExtra;\n }\n if (currentPoint[1] === minY) {\n extra = getExtraFromSegmentWithAngle(segment, lineWidth);\n minY = minY - extra.yExtra;\n }\n else if (currentPoint[1] === maxY) {\n extra = getExtraFromSegmentWithAngle(segment, lineWidth);\n maxY = maxY + extra.yExtra;\n }\n }\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n}\nfunction getExtraFromSegmentWithAngle(segment, lineWidth) {\n var prePoint = segment.prePoint, currentPoint = segment.currentPoint, nextPoint = segment.nextPoint;\n var currentAndPre = Math.pow(currentPoint[0] - prePoint[0], 2) + Math.pow(currentPoint[1] - prePoint[1], 2);\n var currentAndNext = Math.pow(currentPoint[0] - nextPoint[0], 2) + Math.pow(currentPoint[1] - nextPoint[1], 2);\n var preAndNext = Math.pow(prePoint[0] - nextPoint[0], 2) + Math.pow(prePoint[1] - nextPoint[1], 2);\n // 以 currentPoint 为顶点的夹角\n var currentAngle = Math.acos((currentAndPre + currentAndNext - preAndNext) / (2 * Math.sqrt(currentAndPre) * Math.sqrt(currentAndNext)));\n // 夹角为空、 0 或 PI 时,不需要计算夹角处的额外宽度\n // 注意: 由于计算精度问题,夹角为 0 的情况计算出来的角度可能是一个很小的值,还需要判断其与 0 是否近似相等\n if (!currentAngle || Math.sin(currentAngle) === 0 || isNumberEqual(currentAngle, 0)) {\n return {\n xExtra: 0,\n yExtra: 0,\n };\n }\n var xAngle = Math.abs(Math.atan2(nextPoint[1] - currentPoint[1], nextPoint[0] - currentPoint[0]));\n var yAngle = Math.abs(Math.atan2(nextPoint[0] - currentPoint[0], nextPoint[1] - currentPoint[1]));\n // 将夹角转为锐角\n xAngle = xAngle > Math.PI / 2 ? Math.PI - xAngle : xAngle;\n yAngle = yAngle > Math.PI / 2 ? Math.PI - yAngle : yAngle;\n // 这里不考虑在水平和垂直方向的投影,直接使用最大差值\n // 由于上层统一加减了二分之一线宽,这里需要进行弥补\n var extra = {\n // 水平方向投影\n xExtra: Math.cos(currentAngle / 2 - xAngle) * ((lineWidth / 2) * (1 / Math.sin(currentAngle / 2))) - lineWidth / 2 || 0,\n // 垂直方向投影\n yExtra: Math.cos(yAngle - currentAngle / 2) * ((lineWidth / 2) * (1 / Math.sin(currentAngle / 2))) - lineWidth / 2 || 0,\n };\n return extra;\n}\nexport default function (shape) {\n var attrs = shape.attr();\n var path = attrs.path, stroke = attrs.stroke;\n var lineWidth = stroke ? attrs.lineWidth : 0; // 只有有 stroke 时,lineWidth 才生效\n var segments = shape.get('segments') || path2Segments(path);\n var _a = getPathBox(segments, lineWidth), x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n var bbox = {\n minX: x,\n minY: y,\n maxX: x + width,\n maxY: y + height,\n };\n bbox = mergeArrowBBox(shape, bbox);\n return {\n x: bbox.minX,\n y: bbox.minY,\n width: bbox.maxX - bbox.minX,\n height: bbox.maxY - bbox.minY,\n };\n}\n//# sourceMappingURL=path.js.map","import { register, getMethod } from './register';\nimport rect from './rect';\nimport circle from './circle';\nimport polyline from './polyline';\nimport polygon from './polygon';\nimport text from './text';\nimport path from './path';\nimport line from './line';\nimport ellipse from './ellipse';\nregister('rect', rect);\nregister('image', rect); // image 使用 rect 的包围盒计算\nregister('circle', circle);\nregister('marker', circle); // marker 使用 circle 的计算方案\nregister('polyline', polyline);\nregister('polygon', polygon);\nregister('text', text);\nregister('path', path);\nregister('line', line);\nregister('ellipse', ellipse);\nexport { getMethod as getBBoxMethod };\n//# sourceMappingURL=index.js.map","import { Util } from '@antv/g-math';\nexport default function (shape) {\n var attrs = shape.attr();\n var points = attrs.points;\n var xArr = [];\n var yArr = [];\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n xArr.push(point[0]);\n yArr.push(point[1]);\n }\n return Util.getBBoxByArray(xArr, yArr);\n}\n//# sourceMappingURL=polygon.js.map","import { getTextWidth, getTextHeight, assembleFont } from '../util/text';\nexport default function (shape) {\n var attrs = shape.attr();\n var x = attrs.x, y = attrs.y, text = attrs.text, fontSize = attrs.fontSize, lineHeight = attrs.lineHeight;\n var font = attrs.font;\n if (!font) {\n // 如果未组装 font\n font = assembleFont(attrs);\n }\n var width = getTextWidth(text, font);\n var bbox;\n if (!width) {\n // 如果width不存在,四点共其实点\n bbox = {\n x: x,\n y: y,\n width: 0,\n height: 0,\n };\n }\n else {\n var textAlign = attrs.textAlign, textBaseline = attrs.textBaseline;\n var height = getTextHeight(text, fontSize, lineHeight); // attrs.height\n // 默认左右对齐:left, 默认上下对齐 bottom\n var point = {\n x: x,\n y: y - height,\n };\n if (textAlign) {\n if (textAlign === 'end' || textAlign === 'right') {\n point.x -= width;\n }\n else if (textAlign === 'center') {\n point.x -= width / 2;\n }\n }\n if (textBaseline) {\n if (textBaseline === 'top') {\n point.y += height;\n }\n else if (textBaseline === 'middle') {\n point.y += height / 2;\n }\n }\n bbox = {\n x: point.x,\n y: point.y,\n width: width,\n height: height,\n };\n }\n return bbox;\n}\n//# sourceMappingURL=text.js.map","import { mergeArrowBBox } from './util';\nexport default function (shape) {\n var attrs = shape.attr();\n var x1 = attrs.x1, y1 = attrs.y1, x2 = attrs.x2, y2 = attrs.y2;\n var minX = Math.min(x1, x2);\n var maxX = Math.max(x1, x2);\n var minY = Math.min(y1, y2);\n var maxY = Math.max(y1, y2);\n var bbox = {\n minX: minX,\n maxX: maxX,\n minY: minY,\n maxY: maxY,\n };\n bbox = mergeArrowBBox(shape, bbox);\n return {\n x: bbox.minX,\n y: bbox.minY,\n width: bbox.maxX - bbox.minX,\n height: bbox.maxY - bbox.minY,\n };\n}\n//# sourceMappingURL=line.js.map","export default function (shape) {\n var attrs = shape.attr();\n var x = attrs.x, y = attrs.y, rx = attrs.rx, ry = attrs.ry;\n return {\n x: x - rx,\n y: y - ry,\n width: rx * 2,\n height: ry * 2,\n };\n}\n//# sourceMappingURL=ellipse.js.map","// http://schepers.cc/getting-to-the-point\nexport default function catmullRom2Bezier(crp, z) {\n var d = [];\n // @ts-ignore\n for (var i = 0, iLen = crp.length; iLen - 2 * !z > i; i += 2) {\n var p = [{\n x: +crp[i - 2],\n y: +crp[i - 1],\n }, {\n x: +crp[i],\n y: +crp[i + 1],\n }, {\n x: +crp[i + 2],\n y: +crp[i + 3],\n }, {\n x: +crp[i + 4],\n y: +crp[i + 5],\n }];\n if (z) {\n if (!i) {\n p[0] = {\n x: +crp[iLen - 2],\n y: +crp[iLen - 1],\n };\n }\n else if (iLen - 4 === i) {\n p[3] = {\n x: +crp[0],\n y: +crp[1],\n };\n }\n else if (iLen - 2 === i) {\n p[2] = {\n x: +crp[0],\n y: +crp[1],\n };\n p[3] = {\n x: +crp[2],\n y: +crp[3],\n };\n }\n }\n else {\n if (iLen - 4 === i) {\n p[3] = p[2];\n }\n else if (!i) {\n p[0] = {\n x: +crp[i],\n y: +crp[i + 1],\n };\n }\n }\n d.push(['C',\n (-p[0].x + 6 * p[1].x + p[2].x) / 6,\n (-p[0].y + 6 * p[1].y + p[2].y) / 6,\n (p[1].x + 6 * p[2].x - p[3].x) / 6,\n (p[1].y + 6 * p[2].y - p[3].y) / 6,\n p[2].x,\n p[2].y,\n ]);\n }\n return d;\n}\n//# sourceMappingURL=catmull-rom-2-bezier.js.map","function decasteljau(points, t) {\n var left = [];\n var right = [];\n function recurse(points, t) {\n if (points.length === 1) {\n left.push(points[0]);\n right.push(points[0]);\n }\n else {\n var middlePoints = [];\n for (var i = 0; i < points.length - 1; i++) {\n if (i === 0) {\n left.push(points[0]);\n }\n if (i === points.length - 2) {\n right.push(points[i + 1]);\n }\n middlePoints[i] = [(1 - t) * points[i][0] + t * points[i + 1][0], (1 - t) * points[i][1] + t * points[i + 1][1]];\n }\n recurse(middlePoints, t);\n }\n }\n if (points.length) {\n recurse(points, t);\n }\n return { left: left, right: right.reverse() };\n}\nfunction splitCurve(start, end, count) {\n var points = [[start[1], start[2]]];\n count = count || 2;\n var segments = [];\n if (end[0] === 'A') {\n points.push(end[6]);\n points.push(end[7]);\n }\n else if (end[0] === 'C') {\n points.push([end[1], end[2]]);\n points.push([end[3], end[4]]);\n points.push([end[5], end[6]]);\n }\n else if (end[0] === 'S' || end[0] === 'Q') {\n points.push([end[1], end[2]]);\n points.push([end[3], end[4]]);\n }\n else {\n points.push([end[1], end[2]]);\n }\n var leftSegments = points;\n var t = 1 / count;\n for (var i = 0; i < count - 1; i++) {\n var rt = t / (1 - t * i);\n var split = decasteljau(leftSegments, rt);\n segments.push(split.left);\n leftSegments = split.right;\n }\n segments.push(leftSegments);\n var result = segments.map(function (segment) {\n var cmd = [];\n if (segment.length === 4) {\n cmd.push('C');\n cmd = cmd.concat(segment[2]);\n }\n if (segment.length >= 3) {\n if (segment.length === 3) {\n cmd.push('Q');\n }\n cmd = cmd.concat(segment[1]);\n }\n if (segment.length === 2) {\n cmd.push('L');\n }\n cmd = cmd.concat(segment[segment.length - 1]);\n return cmd;\n });\n return result;\n}\nfunction splitSegment(start, end, count) {\n if (count === 1) {\n return [[].concat(start)];\n }\n var segments = [];\n if (end[0] === 'L' || end[0] === 'C' || end[0] === 'Q') {\n segments = segments.concat(splitCurve(start, end, count));\n }\n else {\n var temp = [].concat(start);\n if (temp[0] === 'M') {\n temp[0] = 'L';\n }\n for (var i = 0; i <= count - 1; i++) {\n segments.push(temp);\n }\n }\n return segments;\n}\nexport default function fillPath(source, target) {\n if (source.length === 1) {\n return source;\n }\n var sourceLen = source.length - 1;\n var targetLen = target.length - 1;\n var ratio = sourceLen / targetLen;\n var segmentsToFill = [];\n if (source.length === 1 && source[0][0] === 'M') {\n for (var i = 0; i < targetLen - sourceLen; i++) {\n source.push(source[0]);\n }\n return source;\n }\n for (var i = 0; i < targetLen; i++) {\n var index = Math.floor(ratio * i);\n segmentsToFill[index] = (segmentsToFill[index] || 0) + 1;\n }\n var filled = segmentsToFill.reduce(function (filled, count, i) {\n if (i === sourceLen) {\n return filled.concat(source[sourceLen]);\n }\n return filled.concat(splitSegment(source[i], source[i + 1], count));\n }, []);\n filled.unshift(source[0]);\n if (target[targetLen] === 'Z' || target[targetLen] === 'z') {\n filled.push('Z');\n }\n return filled;\n}\n//# sourceMappingURL=fill-path.js.map","import { isEqual } from '@antv/util';\nfunction getMinDiff(del, add, modify) {\n var type = null;\n var min = modify;\n if (add < min) {\n min = add;\n type = 'add';\n }\n if (del < min) {\n min = del;\n type = 'del';\n }\n return {\n type: type,\n min: min,\n };\n}\n/*\n * https://en.wikipedia.org/wiki/Levenshtein_distance\n * 计算两条path的编辑距离\n */\nvar levenshteinDistance = function (source, target) {\n var sourceLen = source.length;\n var targetLen = target.length;\n var sourceSegment, targetSegment;\n var temp = 0;\n if (sourceLen === 0 || targetLen === 0) {\n return null;\n }\n var dist = [];\n for (var i = 0; i <= sourceLen; i++) {\n dist[i] = [];\n dist[i][0] = { min: i };\n }\n for (var j = 0; j <= targetLen; j++) {\n dist[0][j] = { min: j };\n }\n for (var i = 1; i <= sourceLen; i++) {\n sourceSegment = source[i - 1];\n for (var j = 1; j <= targetLen; j++) {\n targetSegment = target[j - 1];\n if (isEqual(sourceSegment, targetSegment)) {\n temp = 0;\n }\n else {\n temp = 1;\n }\n var del = dist[i - 1][j].min + 1;\n var add = dist[i][j - 1].min + 1;\n var modify = dist[i - 1][j - 1].min + temp;\n dist[i][j] = getMinDiff(del, add, modify);\n }\n }\n return dist;\n};\nexport default function fillPathByDiff(source, target) {\n var diffMatrix = levenshteinDistance(source, target);\n var sourceLen = source.length;\n var targetLen = target.length;\n var changes = [];\n var index = 1;\n var minPos = 1;\n // 如果source和target不是完全不相等\n // @ts-ignore\n if (diffMatrix[sourceLen][targetLen] !== sourceLen) {\n // 获取从source到target所需改动\n for (var i = 1; i <= sourceLen; i++) {\n var min = diffMatrix[i][i].min;\n minPos = i;\n for (var j = index; j <= targetLen; j++) {\n if (diffMatrix[i][j].min < min) {\n min = diffMatrix[i][j].min;\n minPos = j;\n }\n }\n index = minPos;\n if (diffMatrix[i][index].type) {\n changes.push({ index: i - 1, type: diffMatrix[i][index].type });\n }\n }\n // 对source进行增删path\n for (var i = changes.length - 1; i >= 0; i--) {\n index = changes[i].index;\n if (changes[i].type === 'add') {\n // @ts-ignore\n source.splice(index, 0, [].concat(source[index]));\n }\n else {\n // @ts-ignore\n source.splice(index, 1);\n }\n }\n }\n // source尾部补齐\n sourceLen = source.length;\n if (sourceLen < targetLen) {\n for (var i = 0; i < (targetLen - sourceLen); i++) {\n if (source[sourceLen - 1][0] === 'z' || source[sourceLen - 1][0] === 'Z') {\n // @ts-ignore\n source.splice(sourceLen - 2, 0, source[sourceLen - 2]);\n }\n else {\n // @ts-ignore\n source.push(source[sourceLen - 1]);\n }\n }\n }\n return source;\n}\n//# sourceMappingURL=fill-path-by-diff.js.map","/*\n * 抽取pathSegment中的关键点\n * M,L,A,Q,H,V一个端点\n * Q, S抽取一个端点,一个控制点\n * C抽取一个端点,两个控制点\n */\nfunction _getSegmentPoints(segment) {\n var points = [];\n switch (segment[0]) {\n case 'M':\n points.push([segment[1], segment[2]]);\n break;\n case 'L':\n points.push([segment[1], segment[2]]);\n break;\n case 'A':\n points.push([segment[6], segment[7]]);\n break;\n case 'Q':\n points.push([segment[3], segment[4]]);\n points.push([segment[1], segment[2]]);\n break;\n case 'T':\n points.push([segment[1], segment[2]]);\n break;\n case 'C':\n points.push([segment[5], segment[6]]);\n points.push([segment[1], segment[2]]);\n points.push([segment[3], segment[4]]);\n break;\n case 'S':\n points.push([segment[3], segment[4]]);\n points.push([segment[1], segment[2]]);\n break;\n case 'H':\n points.push([segment[1], segment[1]]);\n break;\n case 'V':\n points.push([segment[1], segment[1]]);\n break;\n default:\n }\n return points;\n}\n// 将两个点均分成count个点\nfunction _splitPoints(points, former, count) {\n var result = [].concat(points);\n var index;\n var t = 1 / (count + 1);\n var formerEnd = _getSegmentPoints(former)[0];\n for (var i = 1; i <= count; i++) {\n t *= i;\n index = Math.floor(points.length * t);\n if (index === 0) {\n result.unshift([formerEnd[0] * t + points[index][0] * (1 - t), formerEnd[1] * t + points[index][1] * (1 - t)]);\n }\n else {\n result.splice(index, 0, [formerEnd[0] * t + points[index][0] * (1 - t), formerEnd[1] * t + points[index][1] * (1 - t)]);\n }\n }\n return result;\n}\nexport default function formatPath(fromPath, toPath) {\n if (fromPath.length <= 1) {\n return fromPath;\n }\n var points;\n for (var i = 0; i < toPath.length; i++) {\n if (fromPath[i][0] !== toPath[i][0]) {\n // 获取fromPath的pathSegment的端点,根据toPath的指令对其改造\n points = _getSegmentPoints(fromPath[i]);\n switch (toPath[i][0]) {\n case 'M':\n fromPath[i] = ['M'].concat(points[0]);\n break;\n case 'L':\n fromPath[i] = ['L'].concat(points[0]);\n break;\n case 'A':\n fromPath[i] = [].concat(toPath[i]);\n fromPath[i][6] = points[0][0];\n fromPath[i][7] = points[0][1];\n break;\n case 'Q':\n if (points.length < 2) {\n if (i > 0) {\n points = _splitPoints(points, fromPath[i - 1], 1);\n }\n else {\n fromPath[i] = toPath[i];\n break;\n }\n }\n fromPath[i] = ['Q'].concat(points.reduce(function (arr, i) { return arr.concat(i); }, []));\n break;\n case 'T':\n fromPath[i] = ['T'].concat(points[0]);\n break;\n case 'C':\n if (points.length < 3) {\n if (i > 0) {\n points = _splitPoints(points, fromPath[i - 1], 2);\n }\n else {\n fromPath[i] = toPath[i];\n break;\n }\n }\n fromPath[i] = ['C'].concat(points.reduce(function (arr, i) { return arr.concat(i); }, []));\n break;\n case 'S':\n if (points.length < 2) {\n if (i > 0) {\n points = _splitPoints(points, fromPath[i - 1], 1);\n }\n else {\n fromPath[i] = toPath[i];\n break;\n }\n }\n fromPath[i] = ['S'].concat(points.reduce(function (arr, i) { return arr.concat(i); }, []));\n break;\n default:\n fromPath[i] = toPath[i];\n }\n }\n }\n return fromPath;\n}\n//# sourceMappingURL=format-path.js.map","export default function rectPath(x, y, w, h, r) {\n if (r) {\n return [\n ['M', +x + (+r), y],\n ['l', w - r * 2, 0],\n ['a', r, r, 0, 0, 1, r, r],\n ['l', 0, h - r * 2],\n ['a', r, r, 0, 0, 1, -r, r],\n ['l', r * 2 - w, 0],\n ['a', r, r, 0, 0, 1, -r, -r],\n ['l', 0, r * 2 - h],\n ['a', r, r, 0, 0, 1, r, -r],\n ['z'],\n ];\n }\n return [\n ['M', x, y],\n ['l', w, 0],\n ['l', 0, h],\n ['l', -w, 0],\n ['z'],\n ];\n // res.parsePathArray = parsePathArray;\n}\n//# sourceMappingURL=rect-path.js.map","import parsePathString from './parse-path-string';\nvar REGEX_MD = /[a-z]/;\nfunction toSymmetry(p, c) {\n return [\n c[0] + (c[0] - p[0]),\n c[1] + (c[1] - p[1]),\n ];\n}\nexport default function pathToAbsolute(pathString) {\n var pathArray = parsePathString(pathString);\n if (!pathArray || !pathArray.length) {\n return [\n ['M', 0, 0],\n ];\n }\n var needProcess = false; // 如果存在小写的命令或者 V,H,T,S 则需要处理\n for (var i = 0; i < pathArray.length; i++) {\n var cmd = pathArray[i][0];\n // 如果存在相对位置的命令,则中断返回\n if (REGEX_MD.test(cmd) || ['V', 'H', 'T', 'S'].indexOf(cmd) >= 0) {\n needProcess = true;\n break;\n }\n }\n // 如果不存在相对命令,则直接返回\n // 如果在业务上都写绝对路径,这种方式最快,仅做了一次检测\n if (!needProcess) {\n return pathArray;\n }\n var res = [];\n var x = 0;\n var y = 0;\n var mx = 0;\n var my = 0;\n var start = 0;\n var pa0;\n var dots;\n var first = pathArray[0];\n if (first[0] === 'M' || first[0] === 'm') {\n x = +first[1];\n y = +first[2];\n mx = x;\n my = y;\n start++;\n res[0] = ['M', x, y];\n }\n for (var i = start, ii = pathArray.length; i < ii; i++) {\n var pa = pathArray[i];\n var preParams = res[i - 1]; // 取前一个已经处理后的节点,否则会出现问题\n var r = [];\n var cmd = pa[0];\n var upCmd = cmd.toUpperCase();\n if (cmd !== upCmd) {\n r[0] = upCmd;\n switch (upCmd) {\n case 'A':\n r[1] = pa[1];\n r[2] = pa[2];\n r[3] = pa[3];\n r[4] = pa[4];\n r[5] = pa[5];\n r[6] = +pa[6] + x;\n r[7] = +pa[7] + y;\n break;\n case 'V':\n r[1] = +pa[1] + y;\n break;\n case 'H':\n r[1] = +pa[1] + x;\n break;\n case 'M':\n mx = +pa[1] + x;\n my = +pa[2] + y;\n break; // for lint\n default:\n for (var j = 1, jj = pa.length; j < jj; j++) {\n r[j] = +pa[j] + ((j % 2) ? x : y);\n }\n }\n }\n else { // 如果本来已经大写,则不处理\n r = pathArray[i];\n }\n // 需要在外面统一做,同时处理 V,H,S,T 等特殊指令\n switch (upCmd) {\n case 'Z':\n x = +mx;\n y = +my;\n break;\n case 'H':\n x = r[1];\n r = ['L', x, y];\n break;\n case 'V':\n y = r[1];\n r = ['L', x, y];\n break;\n case 'T':\n x = r[1];\n y = r[2];\n // 以 x, y 为中心的,上一个控制点的对称点\n // 需要假设上一个节点的命令为 Q\n var symetricT = toSymmetry([preParams[1], preParams[2]], [preParams[3], preParams[4]]);\n r = ['Q', symetricT[0], symetricT[1], x, y];\n break;\n case 'S':\n x = r[r.length - 2];\n y = r[r.length - 1];\n // 以 x,y 为中心,取上一个控制点,\n // 需要假设上一个线段为 C 或者 S\n var length_1 = preParams.length;\n var symetricS = toSymmetry([preParams[length_1 - 4], preParams[length_1 - 3]], [preParams[length_1 - 2], preParams[length_1 - 1]]);\n r = ['C', symetricS[0], symetricS[1], r[1], r[2], x, y];\n break;\n case 'M':\n mx = r[r.length - 2];\n my = r[r.length - 1];\n break; // for lint\n default:\n x = r[r.length - 2];\n y = r[r.length - 1];\n }\n res.push(r);\n }\n return res;\n}\n//# sourceMappingURL=path-2-absolute.js.map","import path2Absolute from './path-2-absolute';\nvar a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {\n // for more information of where this math came from visit:\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n if (rx === ry) {\n rx += 1;\n }\n var _120 = (Math.PI * 120) / 180;\n var rad = (Math.PI / 180) * (+angle || 0);\n var res = [];\n var xy;\n var f1;\n var f2;\n var cx;\n var cy;\n var rotate = function (x, y, rad) {\n var X = x * Math.cos(rad) - y * Math.sin(rad);\n var Y = x * Math.sin(rad) + y * Math.cos(rad);\n return {\n x: X,\n y: Y,\n };\n };\n if (!recursive) {\n xy = rotate(x1, y1, -rad);\n x1 = xy.x;\n y1 = xy.y;\n xy = rotate(x2, y2, -rad);\n x2 = xy.x;\n y2 = xy.y;\n if (x1 === x2 && y1 === y2) {\n // 若弧的起始点和终点重叠则错开一点\n x2 += 1;\n y2 += 1;\n }\n // const cos = Math.cos(Math.PI / 180 * angle);\n // const sin = Math.sin(Math.PI / 180 * angle);\n var x = (x1 - x2) / 2;\n var y = (y1 - y2) / 2;\n var h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\n if (h > 1) {\n h = Math.sqrt(h);\n rx = h * rx;\n ry = h * ry;\n }\n var rx2 = rx * rx;\n var ry2 = ry * ry;\n var k = (large_arc_flag === sweep_flag ? -1 : 1) *\n Math.sqrt(Math.abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x)));\n cx = (k * rx * y) / ry + (x1 + x2) / 2;\n cy = (k * -ry * x) / rx + (y1 + y2) / 2;\n f1 = Math.asin(Number(((y1 - cy) / ry).toFixed(9)));\n f2 = Math.asin(Number(((y2 - cy) / ry).toFixed(9)));\n f1 = x1 < cx ? Math.PI - f1 : f1;\n f2 = x2 < cx ? Math.PI - f2 : f2;\n f1 < 0 && (f1 = Math.PI * 2 + f1);\n f2 < 0 && (f2 = Math.PI * 2 + f2);\n if (sweep_flag && f1 > f2) {\n f1 = f1 - Math.PI * 2;\n }\n if (!sweep_flag && f2 > f1) {\n f2 = f2 - Math.PI * 2;\n }\n }\n else {\n f1 = recursive[0];\n f2 = recursive[1];\n cx = recursive[2];\n cy = recursive[3];\n }\n var df = f2 - f1;\n if (Math.abs(df) > _120) {\n var f2old = f2;\n var x2old = x2;\n var y2old = y2;\n f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);\n x2 = cx + rx * Math.cos(f2);\n y2 = cy + ry * Math.sin(f2);\n res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);\n }\n df = f2 - f1;\n var c1 = Math.cos(f1);\n var s1 = Math.sin(f1);\n var c2 = Math.cos(f2);\n var s2 = Math.sin(f2);\n var t = Math.tan(df / 4);\n var hx = (4 / 3) * rx * t;\n var hy = (4 / 3) * ry * t;\n var m1 = [x1, y1];\n var m2 = [x1 + hx * s1, y1 - hy * c1];\n var m3 = [x2 + hx * s2, y2 - hy * c2];\n var m4 = [x2, y2];\n m2[0] = 2 * m1[0] - m2[0];\n m2[1] = 2 * m1[1] - m2[1];\n if (recursive) {\n return [m2, m3, m4].concat(res);\n }\n res = [m2, m3, m4]\n .concat(res)\n .join()\n .split(',');\n var newres = [];\n for (var i = 0, ii = res.length; i < ii; i++) {\n newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;\n }\n return newres;\n};\nvar l2c = function (x1, y1, x2, y2) {\n return [x1, y1, x2, y2, x2, y2];\n};\nvar q2c = function (x1, y1, ax, ay, x2, y2) {\n var _13 = 1 / 3;\n var _23 = 2 / 3;\n return [_13 * x1 + _23 * ax, _13 * y1 + _23 * ay, _13 * x2 + _23 * ax, _13 * y2 + _23 * ay, x2, y2];\n};\nexport default function pathTocurve(path, path2) {\n var p = path2Absolute(path);\n var p2 = path2 && path2Absolute(path2);\n var attrs = {\n x: 0,\n y: 0,\n bx: 0,\n by: 0,\n X: 0,\n Y: 0,\n qx: null,\n qy: null,\n };\n var attrs2 = {\n x: 0,\n y: 0,\n bx: 0,\n by: 0,\n X: 0,\n Y: 0,\n qx: null,\n qy: null,\n };\n var pcoms1 = []; // path commands of original path p\n var pcoms2 = []; // path commands of original path p2\n var pfirst = ''; // temporary holder for original path command\n var pcom = ''; // holder for previous path command of original path\n var ii;\n var processPath = function (path, d, pcom) {\n var nx, ny;\n if (!path) {\n return ['C', d.x, d.y, d.x, d.y, d.x, d.y];\n }\n !(path[0] in\n {\n T: 1,\n Q: 1,\n }) && (d.qx = d.qy = null);\n switch (path[0]) {\n case 'M':\n d.X = path[1];\n d.Y = path[2];\n break;\n case 'A':\n path = ['C'].concat(a2c.apply(0, [d.x, d.y].concat(path.slice(1))));\n break;\n case 'S':\n if (pcom === 'C' || pcom === 'S') {\n // In \"S\" case we have to take into account, if the previous command is C/S.\n nx = d.x * 2 - d.bx; // And reflect the previous\n ny = d.y * 2 - d.by; // command's control point relative to the current point.\n }\n else {\n // or some else or nothing\n nx = d.x;\n ny = d.y;\n }\n path = ['C', nx, ny].concat(path.slice(1));\n break;\n case 'T':\n if (pcom === 'Q' || pcom === 'T') {\n // In \"T\" case we have to take into account, if the previous command is Q/T.\n d.qx = d.x * 2 - d.qx; // And make a reflection similar\n d.qy = d.y * 2 - d.qy; // to case \"S\".\n }\n else {\n // or something else or nothing\n d.qx = d.x;\n d.qy = d.y;\n }\n path = ['C'].concat(q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));\n break;\n case 'Q':\n d.qx = path[1];\n d.qy = path[2];\n path = ['C'].concat(q2c(d.x, d.y, path[1], path[2], path[3], path[4]));\n break;\n case 'L':\n path = ['C'].concat(l2c(d.x, d.y, path[1], path[2]));\n break;\n case 'H':\n path = ['C'].concat(l2c(d.x, d.y, path[1], d.y));\n break;\n case 'V':\n path = ['C'].concat(l2c(d.x, d.y, d.x, path[1]));\n break;\n case 'Z':\n path = ['C'].concat(l2c(d.x, d.y, d.X, d.Y));\n break;\n default:\n break;\n }\n return path;\n };\n var fixArc = function (pp, i) {\n if (pp[i].length > 7) {\n pp[i].shift();\n var pi = pp[i];\n while (pi.length) {\n pcoms1[i] = 'A'; // if created multiple C:s, their original seg is saved\n p2 && (pcoms2[i] = 'A'); // the same as above\n pp.splice(i++, 0, ['C'].concat(pi.splice(0, 6)));\n }\n pp.splice(i, 1);\n ii = Math.max(p.length, (p2 && p2.length) || 0);\n }\n };\n var fixM = function (path1, path2, a1, a2, i) {\n if (path1 && path2 && path1[i][0] === 'M' && path2[i][0] !== 'M') {\n path2.splice(i, 0, ['M', a2.x, a2.y]);\n a1.bx = 0;\n a1.by = 0;\n a1.x = path1[i][1];\n a1.y = path1[i][2];\n ii = Math.max(p.length, (p2 && p2.length) || 0);\n }\n };\n ii = Math.max(p.length, (p2 && p2.length) || 0);\n for (var i = 0; i < ii; i++) {\n p[i] && (pfirst = p[i][0]); // save current path command\n if (pfirst !== 'C') {\n // C is not saved yet, because it may be result of conversion\n pcoms1[i] = pfirst; // Save current path command\n i && (pcom = pcoms1[i - 1]); // Get previous path command pcom\n }\n p[i] = processPath(p[i], attrs, pcom); // Previous path command is inputted to processPath\n if (pcoms1[i] !== 'A' && pfirst === 'C')\n pcoms1[i] = 'C'; // A is the only command\n // which may produce multiple C:s\n // so we have to make sure that C is also C in original path\n fixArc(p, i); // fixArc adds also the right amount of A:s to pcoms1\n if (p2) {\n // the same procedures is done to p2\n p2[i] && (pfirst = p2[i][0]);\n if (pfirst !== 'C') {\n pcoms2[i] = pfirst;\n i && (pcom = pcoms2[i - 1]);\n }\n p2[i] = processPath(p2[i], attrs2, pcom);\n if (pcoms2[i] !== 'A' && pfirst === 'C') {\n pcoms2[i] = 'C';\n }\n fixArc(p2, i);\n }\n fixM(p, p2, attrs, attrs2, i);\n fixM(p2, p, attrs2, attrs, i);\n var seg = p[i];\n var seg2 = p2 && p2[i];\n var seglen = seg.length;\n var seg2len = p2 && seg2.length;\n attrs.x = seg[seglen - 2];\n attrs.y = seg[seglen - 1];\n attrs.bx = parseFloat(seg[seglen - 4]) || attrs.x;\n attrs.by = parseFloat(seg[seglen - 3]) || attrs.y;\n attrs2.bx = p2 && (parseFloat(seg2[seg2len - 4]) || attrs2.x);\n attrs2.by = p2 && (parseFloat(seg2[seg2len - 3]) || attrs2.y);\n attrs2.x = p2 && seg2[seg2len - 2];\n attrs2.y = p2 && seg2[seg2len - 1];\n }\n return p2 ? [p, p2] : p;\n}\n//# sourceMappingURL=path-2-curve.js.map","import { isArray } from '@antv/util';\nimport rectPath from './rect-path';\nimport path2Curve from './path-2-curve';\nvar base3 = function (t, p1, p2, p3, p4) {\n var t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4;\n var t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\n return t * t2 - 3 * p1 + 3 * p2;\n};\nvar bezlen = function (x1, y1, x2, y2, x3, y3, x4, y4, z) {\n if (z === null) {\n z = 1;\n }\n z = z > 1 ? 1 : z < 0 ? 0 : z;\n var z2 = z / 2;\n var n = 12;\n var Tvalues = [-0.1252, 0.1252, -0.3678, 0.3678, -0.5873, 0.5873, -0.7699, 0.7699, -0.9041, 0.9041, -0.9816, 0.9816];\n var Cvalues = [0.2491, 0.2491, 0.2335, 0.2335, 0.2032, 0.2032, 0.1601, 0.1601, 0.1069, 0.1069, 0.0472, 0.0472];\n var sum = 0;\n for (var i = 0; i < n; i++) {\n var ct = z2 * Tvalues[i] + z2;\n var xbase = base3(ct, x1, x2, x3, x4);\n var ybase = base3(ct, y1, y2, y3, y4);\n var comb = xbase * xbase + ybase * ybase;\n sum += Cvalues[i] * Math.sqrt(comb);\n }\n return z2 * sum;\n};\nvar curveDim = function (x0, y0, x1, y1, x2, y2, x3, y3) {\n var tvalues = [];\n var bounds = [\n [],\n [],\n ];\n var a;\n var b;\n var c;\n var t;\n for (var i = 0; i < 2; ++i) {\n if (i === 0) {\n b = 6 * x0 - 12 * x1 + 6 * x2;\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n c = 3 * x1 - 3 * x0;\n }\n else {\n b = 6 * y0 - 12 * y1 + 6 * y2;\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n c = 3 * y1 - 3 * y0;\n }\n if (Math.abs(a) < 1e-12) {\n if (Math.abs(b) < 1e-12) {\n continue;\n }\n t = -c / b;\n if (t > 0 && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n var b2ac = b * b - 4 * c * a;\n var sqrtb2ac = Math.sqrt(b2ac);\n if (b2ac < 0) {\n continue;\n }\n var t1 = (-b + sqrtb2ac) / (2 * a);\n if (t1 > 0 && t1 < 1) {\n tvalues.push(t1);\n }\n var t2 = (-b - sqrtb2ac) / (2 * a);\n if (t2 > 0 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n var j = tvalues.length;\n var jlen = j;\n var mt;\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n bounds[0][j] = (mt * mt * mt * x0) + (3 * mt * mt * t * x1) + (3 * mt * t * t * x2) + (t * t * t * x3);\n bounds[1][j] = (mt * mt * mt * y0) + (3 * mt * mt * t * y1) + (3 * mt * t * t * y2) + (t * t * t * y3);\n }\n bounds[0][jlen] = x0;\n bounds[1][jlen] = y0;\n bounds[0][jlen + 1] = x3;\n bounds[1][jlen + 1] = y3;\n bounds[0].length = bounds[1].length = jlen + 2;\n return {\n min: {\n x: Math.min.apply(0, bounds[0]),\n y: Math.min.apply(0, bounds[1]),\n },\n max: {\n x: Math.max.apply(0, bounds[0]),\n y: Math.max.apply(0, bounds[1]),\n },\n };\n};\nvar intersect = function (x1, y1, x2, y2, x3, y3, x4, y4) {\n if (Math.max(x1, x2) < Math.min(x3, x4) ||\n Math.min(x1, x2) > Math.max(x3, x4) ||\n Math.max(y1, y2) < Math.min(y3, y4) ||\n Math.min(y1, y2) > Math.max(y3, y4)) {\n return;\n }\n var nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4);\n var ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4);\n var denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n if (!denominator) {\n return;\n }\n var px = nx / denominator;\n var py = ny / denominator;\n var px2 = +px.toFixed(2);\n var py2 = +py.toFixed(2);\n if (px2 < +Math.min(x1, x2).toFixed(2) ||\n px2 > +Math.max(x1, x2).toFixed(2) ||\n px2 < +Math.min(x3, x4).toFixed(2) ||\n px2 > +Math.max(x3, x4).toFixed(2) ||\n py2 < +Math.min(y1, y2).toFixed(2) ||\n py2 > +Math.max(y1, y2).toFixed(2) ||\n py2 < +Math.min(y3, y4).toFixed(2) ||\n py2 > +Math.max(y3, y4).toFixed(2)) {\n return;\n }\n return {\n x: px,\n y: py,\n };\n};\nvar isPointInsideBBox = function (bbox, x, y) {\n return x >= bbox.x &&\n x <= bbox.x + bbox.width &&\n y >= bbox.y &&\n y <= bbox.y + bbox.height;\n};\nvar box = function (x, y, width, height) {\n if (x === null) {\n x = y = width = height = 0;\n }\n if (y === null) {\n y = x.y;\n width = x.width;\n height = x.height;\n x = x.x;\n }\n return {\n x: x,\n y: y,\n width: width,\n w: width,\n height: height,\n h: height,\n x2: x + width,\n y2: y + height,\n cx: x + width / 2,\n cy: y + height / 2,\n r1: Math.min(width, height) / 2,\n r2: Math.max(width, height) / 2,\n r0: Math.sqrt(width * width + height * height) / 2,\n path: rectPath(x, y, width, height),\n vb: [x, y, width, height].join(' '),\n };\n};\nvar isBBoxIntersect = function (bbox1, bbox2) {\n // @ts-ignore\n bbox1 = box(bbox1);\n // @ts-ignore\n bbox2 = box(bbox2);\n return isPointInsideBBox(bbox2, bbox1.x, bbox1.y) || isPointInsideBBox(bbox2, bbox1.x2, bbox1.y) || isPointInsideBBox(bbox2, bbox1.x, bbox1.y2) || isPointInsideBBox(bbox2, bbox1.x2, bbox1.y2) || isPointInsideBBox(bbox1, bbox2.x, bbox2.y) || isPointInsideBBox(bbox1, bbox2.x2, bbox2.y) || isPointInsideBBox(bbox1, bbox2.x, bbox2.y2) || isPointInsideBBox(bbox1, bbox2.x2, bbox2.y2) || (bbox1.x < bbox2.x2 && bbox1.x > bbox2.x || bbox2.x < bbox1.x2 && bbox2.x > bbox1.x) && (bbox1.y < bbox2.y2 && bbox1.y > bbox2.y || bbox2.y < bbox1.y2 && bbox2.y > bbox1.y);\n};\nvar bezierBBox = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n if (!isArray(p1x)) {\n p1x = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y];\n }\n var bbox = curveDim.apply(null, p1x);\n return box(bbox.min.x, bbox.min.y, bbox.max.x - bbox.min.x, bbox.max.y - bbox.min.y);\n};\nvar findDotsAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n var t1 = 1 - t;\n var t13 = Math.pow(t1, 3);\n var t12 = Math.pow(t1, 2);\n var t2 = t * t;\n var t3 = t2 * t;\n var x = t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x;\n var y = t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y;\n var mx = p1x + 2 * t * (c1x - p1x) + t2 * (c2x - 2 * c1x + p1x);\n var my = p1y + 2 * t * (c1y - p1y) + t2 * (c2y - 2 * c1y + p1y);\n var nx = c1x + 2 * t * (c2x - c1x) + t2 * (p2x - 2 * c2x + c1x);\n var ny = c1y + 2 * t * (c2y - c1y) + t2 * (p2y - 2 * c2y + c1y);\n var ax = t1 * p1x + t * c1x;\n var ay = t1 * p1y + t * c1y;\n var cx = t1 * c2x + t * p2x;\n var cy = t1 * c2y + t * p2y;\n var alpha = (90 - Math.atan2(mx - nx, my - ny) * 180 / Math.PI);\n // (mx > nx || my < ny) && (alpha += 180);\n return {\n x: x,\n y: y,\n m: {\n x: mx,\n y: my,\n },\n n: {\n x: nx,\n y: ny,\n },\n start: {\n x: ax,\n y: ay,\n },\n end: {\n x: cx,\n y: cy,\n },\n alpha: alpha,\n };\n};\nvar interHelper = function (bez1, bez2, justCount) {\n // @ts-ignore\n var bbox1 = bezierBBox(bez1);\n // @ts-ignore\n var bbox2 = bezierBBox(bez2);\n if (!isBBoxIntersect(bbox1, bbox2)) {\n return justCount ? 0 : [];\n }\n var l1 = bezlen.apply(0, bez1);\n var l2 = bezlen.apply(0, bez2);\n var n1 = ~~(l1 / 8);\n var n2 = ~~(l2 / 8);\n var dots1 = [];\n var dots2 = [];\n var xy = {};\n var res = justCount ? 0 : [];\n for (var i = 0; i < n1 + 1; i++) {\n var d = findDotsAtSegment.apply(0, bez1.concat(i / n1));\n dots1.push({\n x: d.x,\n y: d.y,\n t: i / n1,\n });\n }\n for (var i = 0; i < n2 + 1; i++) {\n var d = findDotsAtSegment.apply(0, bez2.concat(i / n2));\n dots2.push({\n x: d.x,\n y: d.y,\n t: i / n2,\n });\n }\n for (var i = 0; i < n1; i++) {\n for (var j = 0; j < n2; j++) {\n var di = dots1[i];\n var di1 = dots1[i + 1];\n var dj = dots2[j];\n var dj1 = dots2[j + 1];\n var ci = Math.abs(di1.x - di.x) < 0.001 ? 'y' : 'x';\n var cj = Math.abs(dj1.x - dj.x) < 0.001 ? 'y' : 'x';\n var is = intersect(di.x, di.y, di1.x, di1.y, dj.x, dj.y, dj1.x, dj1.y);\n if (is) {\n if (xy[is.x.toFixed(4)] === is.y.toFixed(4)) {\n continue;\n }\n xy[is.x.toFixed(4)] = is.y.toFixed(4);\n var t1 = di.t + Math.abs((is[ci] - di[ci]) / (di1[ci] - di[ci])) * (di1.t - di.t);\n var t2 = dj.t + Math.abs((is[cj] - dj[cj]) / (dj1[cj] - dj[cj])) * (dj1.t - dj.t);\n if (t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1) {\n if (justCount) {\n // @ts-ignore\n res++;\n }\n else {\n // @ts-ignore\n res.push({\n x: is.x,\n y: is.y,\n t1: t1,\n t2: t2,\n });\n }\n }\n }\n }\n }\n return res;\n};\nvar interPathHelper = function (path1, path2, justCount) {\n // @ts-ignore\n path1 = path2Curve(path1);\n // @ts-ignore\n path2 = path2Curve(path2);\n var x1;\n var y1;\n var x2;\n var y2;\n var x1m;\n var y1m;\n var x2m;\n var y2m;\n var bez1;\n var bez2;\n var res = justCount ? 0 : [];\n for (var i = 0, ii = path1.length; i < ii; i++) {\n var pi = path1[i];\n if (pi[0] === 'M') {\n x1 = x1m = pi[1];\n y1 = y1m = pi[2];\n }\n else {\n if (pi[0] === 'C') {\n bez1 = [x1, y1].concat(pi.slice(1));\n x1 = bez1[6];\n y1 = bez1[7];\n }\n else {\n bez1 = [x1, y1, x1, y1, x1m, y1m, x1m, y1m];\n x1 = x1m;\n y1 = y1m;\n }\n for (var j = 0, jj = path2.length; j < jj; j++) {\n var pj = path2[j];\n if (pj[0] === 'M') {\n x2 = x2m = pj[1];\n y2 = y2m = pj[2];\n }\n else {\n if (pj[0] === 'C') {\n bez2 = [x2, y2].concat(pj.slice(1));\n x2 = bez2[6];\n y2 = bez2[7];\n }\n else {\n bez2 = [x2, y2, x2, y2, x2m, y2m, x2m, y2m];\n x2 = x2m;\n y2 = y2m;\n }\n var intr = interHelper(bez1, bez2, justCount);\n if (justCount) {\n // @ts-ignore\n res += intr;\n }\n else {\n // @ts-ignore\n for (var k = 0, kk = intr.length; k < kk; k++) {\n intr[k].segment1 = i;\n intr[k].segment2 = j;\n intr[k].bez1 = bez1;\n intr[k].bez2 = bez2;\n }\n // @ts-ignore\n res = res.concat(intr);\n }\n }\n }\n }\n }\n return res;\n};\nexport default function pathIntersection(path1, path2) {\n // @ts-ignore\n return interPathHelper(path1, path2);\n}\n//# sourceMappingURL=path-intersection.js.map","var p2s = /,?([a-z]),?/gi;\nexport default function parsePathArray(path) {\n return path.join(',').replace(p2s, '$1');\n}\n//# sourceMappingURL=parse-path-array.js.map","var isBetween = function (value, min, max) { return value >= min && value <= max; };\nexport default function getLineIntersect(p0, p1, p2, p3) {\n var tolerance = 0.001;\n var E = {\n x: p2.x - p0.x,\n y: p2.y - p0.y,\n };\n var D0 = {\n x: p1.x - p0.x,\n y: p1.y - p0.y,\n };\n var D1 = {\n x: p3.x - p2.x,\n y: p3.y - p2.y,\n };\n var kross = D0.x * D1.y - D0.y * D1.x;\n var sqrKross = kross * kross;\n var sqrLen0 = D0.x * D0.x + D0.y * D0.y;\n var sqrLen1 = D1.x * D1.x + D1.y * D1.y;\n var point = null;\n if (sqrKross > tolerance * sqrLen0 * sqrLen1) {\n var s = (E.x * D1.y - E.y * D1.x) / kross;\n var t = (E.x * D0.y - E.y * D0.x) / kross;\n if (isBetween(s, 0, 1) && isBetween(t, 0, 1)) {\n point = {\n x: p0.x + s * D0.x,\n y: p0.y + s * D0.y,\n };\n }\n }\n return point;\n}\n;\n//# sourceMappingURL=get-line-intersect.js.map","/**\n * @fileoverview 判断点是否在多边形内\n * @author dxq613@gmail.com\n */\n// 多边形的射线检测,参考:https://blog.csdn.net/WilliamSun0122/article/details/77994526\nvar tolerance = 1e-6;\n// 三态函数,判断两个double在eps精度下的大小关系\nfunction dcmp(x) {\n if (Math.abs(x) < tolerance) {\n return 0;\n }\n return x < 0 ? -1 : 1;\n}\n// 判断点Q是否在p1和p2的线段上\nfunction onSegment(p1, p2, q) {\n if ((q[0] - p1[0]) * (p2[1] - p1[1]) === (p2[0] - p1[0]) * (q[1] - p1[1]) &&\n Math.min(p1[0], p2[0]) <= q[0] &&\n q[0] <= Math.max(p1[0], p2[0]) &&\n Math.min(p1[1], p2[1]) <= q[1] &&\n q[1] <= Math.max(p1[1], p2[1])) {\n return true;\n }\n return false;\n}\n// 判断点P在多边形内-射线法\nexport default function isInPolygon(points, x, y) {\n var isHit = false;\n var n = points.length;\n if (n <= 2) {\n // svg 中点小于 3 个时,不显示,也无法被拾取\n return false;\n }\n for (var i = 0; i < n; i++) {\n var p1 = points[i];\n var p2 = points[(i + 1) % n];\n if (onSegment(p1, p2, [x, y])) {\n // 点在多边形一条边上\n return true;\n }\n // 前一个判断min(p1[1],p2[1])<P.y<=max(p1[1],p2[1])\n // 后一个判断被测点 在 射线与边交点 的左边\n if (dcmp(p1[1] - y) > 0 !== dcmp(p2[1] - y) > 0 &&\n dcmp(x - ((y - p1[1]) * (p1[0] - p2[0])) / (p1[1] - p2[1]) - p1[0]) < 0) {\n isHit = !isHit;\n }\n }\n return isHit;\n}\n//# sourceMappingURL=point-in-polygon.js.map","import isPointInPolygon from './point-in-polygon';\nimport getLineIntersect from './get-line-intersect';\nimport { each } from '@antv/util';\nfunction parseToLines(points) {\n var lines = [];\n var count = points.length;\n for (var i = 0; i < count - 1; i++) {\n var point = points[i];\n var next = points[i + 1];\n lines.push({\n from: {\n x: point[0],\n y: point[1]\n },\n to: {\n x: next[0],\n y: next[1]\n }\n });\n }\n if (lines.length > 1) {\n var first = points[0];\n var last = points[count - 1];\n lines.push({\n from: {\n x: last[0],\n y: last[1]\n },\n to: {\n x: first[0],\n y: first[1]\n }\n });\n }\n return lines;\n}\nfunction lineIntersectPolygon(lines, line) {\n var isIntersect = false;\n each(lines, function (l) {\n if (getLineIntersect(l.from, l.to, line.from, line.to)) {\n isIntersect = true;\n return false;\n }\n });\n return isIntersect;\n}\nfunction getBBox(points) {\n var xArr = points.map(function (p) { return p[0]; });\n var yArr = points.map(function (p) { return p[1]; });\n return {\n minX: Math.min.apply(null, xArr),\n maxX: Math.max.apply(null, xArr),\n minY: Math.min.apply(null, yArr),\n maxY: Math.max.apply(null, yArr)\n };\n}\nfunction intersectBBox(box1, box2) {\n return !(box2.minX > box1.maxX || box2.maxX < box1.minX || box2.minY > box1.maxY || box2.maxY < box1.minY);\n}\nexport default function isPolygonsIntersect(points1, points2) {\n // 空数组,或者一个点返回 false\n if (points1.length < 2 || points2.length < 2) {\n return false;\n }\n var bbox1 = getBBox(points1);\n var bbox2 = getBBox(points2);\n // 判定包围盒是否相交,比判定点是否在多边形内要快的多,可以筛选掉大多数情况\n if (!intersectBBox(bbox1, bbox2)) {\n return false;\n }\n var isIn = false;\n // 判定点是否在多边形内部,一旦有一个点在另一个多边形内,则返回\n each(points2, function (point) {\n if (isPointInPolygon(points1, point[0], point[1])) {\n isIn = true;\n return false;\n }\n });\n if (isIn) {\n return true;\n }\n // 两个多边形都需要判定\n each(points1, function (point) {\n if (isPointInPolygon(points2, point[0], point[1])) {\n isIn = true;\n return false;\n }\n });\n if (isIn) {\n return true;\n }\n var lines1 = parseToLines(points1);\n var lines2 = parseToLines(points2);\n var isIntersect = false;\n each(lines2, function (line) {\n if (lineIntersectPolygon(lines1, line)) {\n isIntersect = true;\n return false;\n }\n });\n return isIntersect;\n}\n//# sourceMappingURL=is-polygons-intersect.js.map","var __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nvar BrowserInfo = /** @class */ (function () {\n function BrowserInfo(name, version, os) {\n this.name = name;\n this.version = version;\n this.os = os;\n this.type = 'browser';\n }\n return BrowserInfo;\n}());\nexport { BrowserInfo };\nvar NodeInfo = /** @class */ (function () {\n function NodeInfo(version) {\n this.version = version;\n this.type = 'node';\n this.name = 'node';\n this.os = process.platform;\n }\n return NodeInfo;\n}());\nexport { NodeInfo };\nvar SearchBotDeviceInfo = /** @class */ (function () {\n function SearchBotDeviceInfo(name, version, os, bot) {\n this.name = name;\n this.version = version;\n this.os = os;\n this.bot = bot;\n this.type = 'bot-device';\n }\n return SearchBotDeviceInfo;\n}());\nexport { SearchBotDeviceInfo };\nvar BotInfo = /** @class */ (function () {\n function BotInfo() {\n this.type = 'bot';\n this.bot = true; // NOTE: deprecated test name instead\n this.name = 'bot';\n this.version = null;\n this.os = null;\n }\n return BotInfo;\n}());\nexport { BotInfo };\nvar ReactNativeInfo = /** @class */ (function () {\n function ReactNativeInfo() {\n this.type = 'react-native';\n this.name = 'react-native';\n this.version = null;\n this.os = null;\n }\n return ReactNativeInfo;\n}());\nexport { ReactNativeInfo };\n// tslint:disable-next-line:max-line-length\nvar SEARCHBOX_UA_REGEX = /alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/;\nvar SEARCHBOT_OS_REGEX = /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\\ Jeeves\\/Teoma|ia_archiver)/;\nvar REQUIRED_VERSION_PARTS = 3;\nvar userAgentRules = [\n ['aol', /AOLShield\\/([0-9\\._]+)/],\n ['edge', /Edge\\/([0-9\\._]+)/],\n ['edge-ios', /EdgiOS\\/([0-9\\._]+)/],\n ['yandexbrowser', /YaBrowser\\/([0-9\\._]+)/],\n ['kakaotalk', /KAKAOTALK\\s([0-9\\.]+)/],\n ['samsung', /SamsungBrowser\\/([0-9\\.]+)/],\n ['silk', /\\bSilk\\/([0-9._-]+)\\b/],\n ['miui', /MiuiBrowser\\/([0-9\\.]+)$/],\n ['beaker', /BeakerBrowser\\/([0-9\\.]+)/],\n ['edge-chromium', /EdgA?\\/([0-9\\.]+)/],\n [\n 'chromium-webview',\n /(?!Chrom.*OPR)wv\\).*Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/,\n ],\n ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],\n ['phantomjs', /PhantomJS\\/([0-9\\.]+)(:?\\s|$)/],\n ['crios', /CriOS\\/([0-9\\.]+)(:?\\s|$)/],\n ['firefox', /Firefox\\/([0-9\\.]+)(?:\\s|$)/],\n ['fxios', /FxiOS\\/([0-9\\.]+)/],\n ['opera-mini', /Opera Mini.*Version\\/([0-9\\.]+)/],\n ['opera', /Opera\\/([0-9\\.]+)(?:\\s|$)/],\n ['opera', /OPR\\/([0-9\\.]+)(:?\\s|$)/],\n ['ie', /Trident\\/7\\.0.*rv\\:([0-9\\.]+).*\\).*Gecko$/],\n ['ie', /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],\n ['ie', /MSIE\\s(7\\.0)/],\n ['bb10', /BB10;\\sTouch.*Version\\/([0-9\\.]+)/],\n ['android', /Android\\s([0-9\\.]+)/],\n ['ios', /Version\\/([0-9\\._]+).*Mobile.*Safari.*/],\n ['safari', /Version\\/([0-9\\._]+).*Safari/],\n ['facebook', /FBAV\\/([0-9\\.]+)/],\n ['instagram', /Instagram\\s([0-9\\.]+)/],\n ['ios-webview', /AppleWebKit\\/([0-9\\.]+).*Mobile/],\n ['ios-webview', /AppleWebKit\\/([0-9\\.]+).*Gecko\\)$/],\n ['searchbot', SEARCHBOX_UA_REGEX],\n];\nvar operatingSystemRules = [\n ['iOS', /iP(hone|od|ad)/],\n ['Android OS', /Android/],\n ['BlackBerry OS', /BlackBerry|BB10/],\n ['Windows Mobile', /IEMobile/],\n ['Amazon OS', /Kindle/],\n ['Windows 3.11', /Win16/],\n ['Windows 95', /(Windows 95)|(Win95)|(Windows_95)/],\n ['Windows 98', /(Windows 98)|(Win98)/],\n ['Windows 2000', /(Windows NT 5.0)|(Windows 2000)/],\n ['Windows XP', /(Windows NT 5.1)|(Windows XP)/],\n ['Windows Server 2003', /(Windows NT 5.2)/],\n ['Windows Vista', /(Windows NT 6.0)/],\n ['Windows 7', /(Windows NT 6.1)/],\n ['Windows 8', /(Windows NT 6.2)/],\n ['Windows 8.1', /(Windows NT 6.3)/],\n ['Windows 10', /(Windows NT 10.0)/],\n ['Windows ME', /Windows ME/],\n ['Open BSD', /OpenBSD/],\n ['Sun OS', /SunOS/],\n ['Chrome OS', /CrOS/],\n ['Linux', /(Linux)|(X11)/],\n ['Mac OS', /(Mac_PowerPC)|(Macintosh)/],\n ['QNX', /QNX/],\n ['BeOS', /BeOS/],\n ['OS/2', /OS\\/2/],\n];\nexport function detect(userAgent) {\n if (!!userAgent) {\n return parseUserAgent(userAgent);\n }\n if (typeof document === 'undefined' &&\n typeof navigator !== 'undefined' &&\n navigator.product === 'ReactNative') {\n return new ReactNativeInfo();\n }\n if (typeof navigator !== 'undefined') {\n return parseUserAgent(navigator.userAgent);\n }\n return getNodeVersion();\n}\nfunction matchUserAgent(ua) {\n // opted for using reduce here rather than Array#first with a regex.test call\n // this is primarily because using the reduce we only perform the regex\n // execution once rather than once for the test and for the exec again below\n // probably something that needs to be benchmarked though\n return (ua !== '' &&\n userAgentRules.reduce(function (matched, _a) {\n var browser = _a[0], regex = _a[1];\n if (matched) {\n return matched;\n }\n var uaMatch = regex.exec(ua);\n return !!uaMatch && [browser, uaMatch];\n }, false));\n}\nexport function browserName(ua) {\n var data = matchUserAgent(ua);\n return data ? data[0] : null;\n}\nexport function parseUserAgent(ua) {\n var matchedRule = matchUserAgent(ua);\n if (!matchedRule) {\n return null;\n }\n var name = matchedRule[0], match = matchedRule[1];\n if (name === 'searchbot') {\n return new BotInfo();\n }\n var versionParts = match[1] && match[1].split(/[._]/).slice(0, 3);\n if (versionParts) {\n if (versionParts.length < REQUIRED_VERSION_PARTS) {\n versionParts = __spreadArrays(versionParts, createVersionParts(REQUIRED_VERSION_PARTS - versionParts.length));\n }\n }\n else {\n versionParts = [];\n }\n var version = versionParts.join('.');\n var os = detectOS(ua);\n var searchBotMatch = SEARCHBOT_OS_REGEX.exec(ua);\n if (searchBotMatch && searchBotMatch[1]) {\n return new SearchBotDeviceInfo(name, version, os, searchBotMatch[1]);\n }\n return new BrowserInfo(name, version, os);\n}\nexport function detectOS(ua) {\n for (var ii = 0, count = operatingSystemRules.length; ii < count; ii++) {\n var _a = operatingSystemRules[ii], os = _a[0], regex = _a[1];\n var match = regex.exec(ua);\n if (match) {\n return os;\n }\n }\n return null;\n}\nexport function getNodeVersion() {\n var isNode = typeof process !== 'undefined' && process.version;\n return isNode ? new NodeInfo(process.version.slice(1)) : null;\n}\nfunction createVersionParts(count) {\n var output = [];\n for (var ii = 0; ii < count; ii++) {\n output.push('0');\n }\n return output;\n}\n","import * as Shape from './shape';\nexport * from '@antv/g-base';\nexport { IElement } from './interfaces';\nexport { Region } from './types';\nexport { default as Canvas } from './canvas';\nexport { default as Group } from './group';\nexport { Shape };\nexport { default as getArcParams } from './util/arc-params';\n\nexport const version = '0.5.6';\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/**\n * @fileoverview 圆\n * @author dxq613@gmail.com\n */\n\nimport ShapeBase from './base';\nimport { distance } from '../util/util';\n\nclass Circle extends ShapeBase {\n getDefaultAttrs() {\n const attrs = super.getDefaultAttrs();\n return {\n ...attrs,\n x: 0,\n y: 0,\n r: 0,\n };\n }\n\n isInStrokeOrPath(x, y, isStroke, isFill, lineWidth) {\n const attrs = this.attr();\n const cx = attrs.x;\n const cy = attrs.y;\n const r = attrs.r;\n const halfLineWidth = lineWidth / 2;\n const absDistance = distance(cx, cy, x, y);\n // 直接用距离,如果同时存在边和填充时,可以减少两次计算\n if (isFill && isStroke) {\n return absDistance <= r + halfLineWidth;\n }\n if (isFill) {\n return absDistance <= r;\n }\n if (isStroke) {\n return absDistance >= r - halfLineWidth && absDistance <= r + halfLineWidth;\n }\n return false;\n }\n\n createPath(context) {\n const attrs = this.attr();\n const cx = attrs.x;\n const cy = attrs.y;\n const r = attrs.r;\n context.beginPath();\n context.arc(cx, cy, r, 0, Math.PI * 2, false);\n context.closePath();\n }\n}\n\nexport default Circle;\n","/**\n * @fileoverview 椭圆\n * @author dxq613@gmail.com\n */\n\nimport ShapeBase from './base';\n\n// 根据椭圆公式计算 x*x/rx*rx + y*y/ry*ry;\nfunction ellipseDistance(squareX, squareY, rx, ry) {\n return squareX / (rx * rx) + squareY / (ry * ry);\n}\n\nclass Ellipse extends ShapeBase {\n getDefaultAttrs() {\n const attrs = super.getDefaultAttrs();\n return {\n ...attrs,\n x: 0,\n y: 0,\n rx: 0,\n ry: 0,\n };\n }\n\n isInStrokeOrPath(x, y, isStroke, isFill, lineWidth) {\n const attrs = this.attr();\n const halfLineWith = lineWidth / 2;\n const cx = attrs.x;\n const cy = attrs.y;\n const { rx, ry } = attrs;\n const squareX = (x - cx) * (x - cx);\n const squareY = (y - cy) * (y - cy);\n // 使用椭圆的公式: x*x/rx*rx + y*y/ry*ry = 1;\n if (isFill && isStroke) {\n return ellipseDistance(squareX, squareY, rx + halfLineWith, ry + halfLineWith) <= 1;\n }\n if (isFill) {\n return ellipseDistance(squareX, squareY, rx, ry) <= 1;\n }\n if (isStroke) {\n return (\n ellipseDistance(squareX, squareY, rx - halfLineWith, ry - halfLineWith) >= 1 &&\n ellipseDistance(squareX, squareY, rx + halfLineWith, ry + halfLineWith) <= 1\n );\n }\n return false;\n }\n\n createPath(context) {\n const attrs = this.attr();\n const cx = attrs.x;\n const cy = attrs.y;\n const rx = attrs.rx;\n const ry = attrs.ry;\n context.beginPath();\n // 兼容逻辑\n if (context.ellipse) {\n context.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2, false);\n } else {\n // 如果不支持,则使用圆来绘制,进行变形\n const r = rx > ry ? rx : ry;\n const scaleX = rx > ry ? 1 : rx / ry;\n const scaleY = rx > ry ? ry / rx : 1;\n context.save();\n context.translate(cx, cy);\n context.scale(scaleX, scaleY);\n context.arc(0, 0, r, 0, Math.PI * 2);\n context.restore();\n context.closePath();\n }\n }\n}\n\nexport default Ellipse;\n","/**\n * @fileoverview 图片\n * @author dxq613@gmail.com\n */\n\nimport ShapeBase from './base';\nimport { isString, isNil } from '../util/util';\nfunction isCanvas(dom) {\n return dom instanceof HTMLElement && isString(dom.nodeName) && dom.nodeName.toUpperCase() === 'CANVAS';\n}\n\nclass ImageShape extends ShapeBase {\n getDefaultAttrs() {\n const attrs = super.getDefaultAttrs();\n return {\n ...attrs,\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n };\n }\n\n initAttrs(attrs) {\n this._setImage(attrs.img);\n }\n\n // image 不计算 stroke\n isStroke() {\n return false;\n }\n\n // 仅仅使用包围盒检测来进行拾取\n // 所以不需要复写 isInStrokeOrPath 的方法\n isOnlyHitBox() {\n return true;\n }\n\n _afterLoading() {\n if (this.get('toDraw') === true) {\n const canvas = this.get('canvas');\n if (canvas) {\n // 这段应该改成局部渲染\n canvas.draw();\n } else {\n // 这种方式如果发生遮挡会出现问题\n this.createPath(this.get('context'));\n }\n }\n }\n\n _setImage(img) {\n const attrs = this.attrs;\n if (isString(img)) {\n const image = new Image();\n image.onload = () => {\n // 图片未加载完,则已经被销毁\n if (this.destroyed) {\n return false;\n }\n // 缓存原始地址,可以做对比,防止重复加载图片\n // 如果考虑到在加载过程中可能替换 img 属性,则情况更加复杂\n // this.set('imgSrc', img);\n // 这里会循环调用 _setImage 方法,但不会再走这个分支\n this.attr('img', image);\n this.set('loading', false);\n this._afterLoading();\n const callback = this.get('callback');\n if (callback) {\n callback.call(this);\n }\n };\n // 设置跨域\n image.crossOrigin = 'Anonymous';\n\n image.src = img;\n // loading 过程中不绘制\n this.set('loading', true);\n } else if (img instanceof Image) {\n // 如果是一个 image 对象,则设置宽高\n if (!attrs.width) {\n attrs.width = img.width;\n }\n if (!attrs.height) {\n attrs.height = img.height;\n }\n } else if (isCanvas(img)) {\n // 如果设置了 canvas 对象\n if (!attrs.width) {\n attrs.width = Number(img.getAttribute('width'));\n }\n\n if (!attrs.height) {\n attrs.height, Number(img.getAttribute('height'));\n }\n }\n }\n\n onAttrChange(name: string, value: any, originValue: any) {\n super.onAttrChange(name, value, originValue);\n // 如果加载的已经是当前图片,则不再处理\n if (name === 'img') {\n // 可以加缓冲,&& this.get('imgSrc') !== value\n this._setImage(value);\n }\n }\n\n createPath(context: CanvasRenderingContext2D) {\n // 正在加载则不绘制\n if (this.get('loading')) {\n this.set('toDraw', true); // 加载完成后绘制\n this.set('context', context);\n return;\n }\n const attrs = this.attr();\n const { x, y, width, height, sx, sy, swidth, sheight } = attrs;\n\n const img = attrs.img;\n if (img instanceof Image || isCanvas(img)) {\n if (!isNil(sx) && !isNil(sy) && !isNil(swidth) && !isNil(sheight)) {\n context.drawImage(img, sx, sy, swidth, sheight, x, y, width, height);\n } else {\n context.drawImage(img, x, y, width, height);\n }\n }\n }\n}\n\nexport default ImageShape;\n","/**\n * @fileoverview 圆\n * @author dxq613@gmail.com\n */\nimport { Line as LineUtil } from '@antv/g-math';\nimport ShapeBase from './base';\nimport inLine from '../util/in-stroke/line';\nimport * as ArrowUtil from '../util/arrow';\n\nclass Line extends ShapeBase {\n getDefaultAttrs() {\n const attrs = super.getDefaultAttrs();\n return {\n ...attrs,\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n startArrow: false,\n endArrow: false,\n };\n }\n\n initAttrs(attrs) {\n this.setArrow();\n }\n\n // 更新属性时,检测是否更改了箭头\n onAttrChange(name: string, value: any, originValue: any) {\n super.onAttrChange(name, value, originValue);\n // 由于箭头的绘制依赖于 line 的诸多 attrs,因此这里不再对每个 attr 进行判断,attr 每次变化都会影响箭头的更新\n this.setArrow();\n }\n\n setArrow() {\n const attrs = this.attr();\n const { x1, y1, x2, y2, startArrow, endArrow } = attrs;\n if (startArrow) {\n ArrowUtil.addStartArrow(this, attrs, x2, y2, x1, y1);\n }\n if (endArrow) {\n ArrowUtil.addEndArrow(this, attrs, x1, y1, x2, y2);\n }\n }\n\n isInStrokeOrPath(x, y, isStroke, isFill, lineWidth) {\n if (!isStroke || !lineWidth) {\n return false;\n }\n const { x1, y1, x2, y2 } = this.attr();\n return inLine(x1, y1, x2, y2, lineWidth, x, y);\n }\n\n createPath(context) {\n const attrs = this.attr();\n const { x1, y1, x2, y2, startArrow, endArrow } = attrs;\n let startArrowDistance = {\n dx: 0,\n dy: 0,\n };\n let endArrowDistance = {\n dx: 0,\n dy: 0,\n };\n\n if (startArrow && startArrow.d) {\n startArrowDistance = ArrowUtil.getShortenOffset(x1, y1, x2, y2, attrs.startArrow.d);\n }\n if (endArrow && endArrow.d) {\n endArrowDistance = ArrowUtil.getShortenOffset(x1, y1, x2, y2, attrs.endArrow.d);\n }\n\n context.beginPath();\n // 如果自定义箭头,线条相应缩进\n context.moveTo(x1 + startArrowDistance.dx, y1 + startArrowDistance.dy);\n context.lineTo(x2 - endArrowDistance.dx, y2 - endArrowDistance.dy);\n }\n\n afterDrawPath(context) {\n const startArrowShape = this.get('startArrowShape');\n const endArrowShape = this.get('endArrowShape');\n if (startArrowShape) {\n startArrowShape.draw(context);\n }\n if (endArrowShape) {\n endArrowShape.draw(context);\n }\n }\n\n /**\n * Get length of line\n * @return {number} length\n */\n getTotalLength() {\n const { x1, y1, x2, y2 } = this.attr();\n return LineUtil.length(x1, y1, x2, y2);\n }\n\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n getPoint(ratio: number) {\n const { x1, y1, x2, y2 } = this.attr();\n return LineUtil.pointAt(x1, y1, x2, y2, ratio);\n }\n}\n\nexport default Line;\n","/**\n * @fileoverview Marker\n * @author dxq613@gmail.com\n */\n\nimport { isNil } from '@antv/util';\nimport { path2Absolute } from '@antv/path-util';\nimport ShapeBase from './base';\nimport { isFunction } from '../util/util';\nimport { drawPath } from '../util/draw';\n\nconst Symbols = {\n // 圆\n circle(x, y, r) {\n return [\n ['M', x - r, y],\n ['A', r, r, 0, 1, 0, x + r, y],\n ['A', r, r, 0, 1, 0, x - r, y],\n ];\n },\n // 正方形\n square(x, y, r) {\n return [['M', x - r, y - r], ['L', x + r, y - r], ['L', x + r, y + r], ['L', x - r, y + r], ['Z']];\n },\n // 菱形\n diamond(x, y, r) {\n return [['M', x - r, y], ['L', x, y - r], ['L', x + r, y], ['L', x, y + r], ['Z']];\n },\n // 三角形\n triangle(x, y, r) {\n const diffY = r * Math.sin((1 / 3) * Math.PI);\n return [['M', x - r, y + diffY], ['L', x, y - diffY], ['L', x + r, y + diffY], ['Z']];\n },\n // 倒三角形\n 'triangle-down'(x, y, r) {\n const diffY = r * Math.sin((1 / 3) * Math.PI);\n return [['M', x - r, y - diffY], ['L', x + r, y - diffY], ['L', x, y + diffY], ['Z']];\n },\n};\n\nclass Marker extends ShapeBase {\n initAttrs(attrs) {\n this._resetParamsCache();\n }\n\n // 重置绘制 path 存储的缓存\n _resetParamsCache() {\n // 为了加速 path 的绘制、拾取和计算,这个地方可以缓存很多东西\n // 这些缓存都是第一次需要时计算和存储,虽然增加了复杂度,但是频繁调用的方法,性能有很大提升\n this.set('paramsCache', {}); // 清理缓存\n }\n\n // 更新属性时,检测是否更改了 path\n onAttrChange(name: string, value: any, originValue: any) {\n super.onAttrChange(name, value, originValue);\n if (['symbol', 'x', 'y', 'r', 'radius'].indexOf(name) !== -1) {\n // path 相关属性更改时,清理缓存\n this._resetParamsCache();\n }\n }\n\n // 仅仅使用包围盒检测来进行拾取\n // 所以不需要复写 isInStrokeOrPath 的方法\n isOnlyHitBox() {\n return true;\n }\n\n _getR(attrs) {\n // 兼容 r 和 radius 两种写法,推荐使用 r\n return isNil(attrs.r) ? attrs.radius : attrs.r;\n }\n\n _getPath() {\n const attrs = this.attr();\n const { x, y } = attrs;\n const symbol = attrs.symbol || 'circle';\n const r = this._getR(attrs);\n let method;\n let path;\n if (isFunction(symbol)) {\n method = symbol;\n path = method(x, y, r);\n // 将 path 转成绝对路径\n path = path2Absolute(path);\n } else {\n // 内置 symbol 的 path 都是绝对路径,直接绘制即可,不需要对 path 进行特殊处理\n method = Marker.Symbols[symbol];\n\n if (!method) {\n console.warn(`${symbol} marker is not supported.`);\n return null;\n }\n\n path = method(x, y, r);\n }\n\n return path;\n }\n\n createPath(context) {\n const path = this._getPath();\n const paramsCache = this.get('paramsCache');\n drawPath(this, context, { path }, paramsCache);\n }\n\n static Symbols = Symbols;\n}\n\nexport default Marker;\n","/**\n * @fileoverview path\n * @author dxq613@gmail.com\n */\nimport { Point } from '@antv/g-base';\nimport { Cubic as CubicUtil } from '@antv/g-math';\nimport { each, isNil } from '@antv/util';\nimport ShapeBase from './base';\nimport { path2Absolute, path2Segments } from '@antv/path-util';\nimport { drawPath } from '../util/draw';\nimport isPointInPath from '../util/in-path/point-in-path';\nimport isInPolygon from '../util/in-path/polygon';\nimport PathUtil from '../util/path';\nimport * as ArrowUtil from '../util/arrow';\n\n// 是否在多个多边形内部\nfunction isInPolygons(polygons, x, y) {\n let isHit = false;\n for (let i = 0; i < polygons.length; i++) {\n const points = polygons[i];\n isHit = isInPolygon(points, x, y);\n if (isHit) {\n break;\n }\n }\n return isHit;\n}\n\nclass Path extends ShapeBase {\n getDefaultAttrs() {\n const attrs = super.getDefaultAttrs();\n return {\n ...attrs,\n startArrow: false,\n endArrow: false,\n };\n }\n\n initAttrs(attrs) {\n this._setPathArr(attrs.path);\n this.setArrow();\n }\n\n // 更新属性时,检测是否更改了 path\n onAttrChange(name: string, value: any, originValue: any) {\n super.onAttrChange(name, value, originValue);\n if (name === 'path') {\n this._setPathArr(value);\n }\n // 由于箭头的绘制依赖于 line 的诸多 attrs,因此这里不再对每个 attr 进行判断,attr 每次变化都会影响箭头的更新\n this.setArrow();\n }\n\n // 将 path 转换成绝对路径\n _setPathArr(path) {\n // 转换 path 的格式\n this.attrs.path = path2Absolute(path);\n const hasArc = PathUtil.hasArc(path);\n // 为了加速 path 的绘制、拾取和计算,这个地方可以缓存很多东西\n // 这些缓存都是第一次需要时计算和存储,虽然增加了复杂度,但是频繁调用的方法,性能有很大提升\n this.set('hasArc', hasArc);\n this.set('paramsCache', {}); // 清理缓存\n this.set('segments', null); // 延迟生成 path,在动画场景下可能不会有拾取\n this.set('curve', null);\n this.set('tCache', null);\n this.set('totalLength', null);\n }\n\n getSegments() {\n let segments = this.get('segements');\n if (!segments) {\n segments = path2Segments(this.attr('path'));\n this.set('segments', segments);\n }\n return segments;\n }\n\n setArrow() {\n const attrs = this.attr();\n const { startArrow, endArrow } = attrs;\n\n if (startArrow) {\n const tangent = this.getStartTangent();\n ArrowUtil.addStartArrow(this, attrs, tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1]);\n }\n if (endArrow) {\n const tangent = this.getEndTangent();\n ArrowUtil.addEndArrow(this, attrs, tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1]);\n }\n }\n\n isInStrokeOrPath(x, y, isStroke, isFill, lineWidth) {\n const segments = this.getSegments();\n const hasArc = this.get('hasArc');\n let isHit = false;\n if (isStroke) {\n const length = this.getTotalLength();\n isHit = PathUtil.isPointInStroke(segments, lineWidth, x, y, length);\n }\n if (!isHit && isFill) {\n if (hasArc) {\n // 存在曲线时,暂时使用 canvas 的 api 计算,后续可以进行多边形切割\n isHit = isPointInPath(this, x, y);\n } else {\n const path = this.attr('path');\n const extractResutl = PathUtil.extractPolygons(path);\n // 提取出来的多边形包含闭合的和非闭合的,在这里统一按照多边形处理\n isHit = isInPolygons(extractResutl.polygons, x, y) || isInPolygons(extractResutl.polylines, x, y);\n }\n }\n return isHit;\n }\n\n createPath(context) {\n const attrs = this.attr();\n const paramsCache = this.get('paramsCache'); // 由于计算圆弧的参数成本很大,所以要缓存\n drawPath(this, context, attrs, paramsCache);\n }\n\n afterDrawPath(context: CanvasRenderingContext2D) {\n const startArrowShape = this.get('startArrowShape');\n const endArrowShape = this.get('endArrowShape');\n if (startArrowShape) {\n startArrowShape.draw(context);\n }\n if (endArrowShape) {\n endArrowShape.draw(context);\n }\n }\n\n /**\n * Get total length of path\n * @return {number} length\n */\n getTotalLength() {\n const totalLength = this.get('totalLength');\n if (!isNil(totalLength)) {\n return totalLength;\n }\n this._calculateCurve();\n this._setTcache();\n return this.get('totalLength');\n }\n\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n getPoint(ratio: number): Point {\n let tCache = this.get('tCache');\n if (!tCache) {\n this._calculateCurve();\n this._setTcache();\n tCache = this.get('tCache');\n }\n\n let subt;\n let index;\n\n const curve = this.get('curve');\n if (!tCache || tCache.length === 0) {\n if (curve) {\n return {\n x: curve[0][1],\n y: curve[0][2],\n };\n }\n return null;\n }\n each(tCache, (v, i) => {\n if (ratio >= v[0] && ratio <= v[1]) {\n subt = (ratio - v[0]) / (v[1] - v[0]);\n index = i;\n }\n });\n\n const seg = curve[index];\n if (isNil(seg) || isNil(index)) {\n return null;\n }\n const l = seg.length;\n const nextSeg = curve[index + 1];\n return CubicUtil.pointAt(\n seg[l - 2],\n seg[l - 1],\n nextSeg[1],\n nextSeg[2],\n nextSeg[3],\n nextSeg[4],\n nextSeg[5],\n nextSeg[6],\n subt\n );\n }\n\n _calculateCurve() {\n const { path } = this.attr();\n this.set('curve', PathUtil.pathToCurve(path));\n }\n\n _setTcache() {\n let totalLength = 0;\n let tempLength = 0;\n // 每段 curve 对应起止点的长度比例列表,形如: [[0, 0.25], [0.25, 0.6]. [0.6, 0.9], [0.9, 1]]\n const tCache = [];\n let segmentT;\n let segmentL;\n let segmentN;\n let l;\n const curve = this.get('curve');\n\n if (!curve) {\n return;\n }\n\n each(curve, (segment, i) => {\n segmentN = curve[i + 1];\n l = segment.length;\n if (segmentN) {\n totalLength +=\n CubicUtil.length(\n segment[l - 2],\n segment[l - 1],\n segmentN[1],\n segmentN[2],\n segmentN[3],\n segmentN[4],\n segmentN[5],\n segmentN[6]\n ) || 0;\n }\n });\n this.set('totalLength', totalLength);\n\n if (totalLength === 0) {\n this.set('tCache', []);\n return;\n }\n\n each(curve, (segment, i) => {\n segmentN = curve[i + 1];\n l = segment.length;\n if (segmentN) {\n segmentT = [];\n segmentT[0] = tempLength / totalLength;\n segmentL = CubicUtil.length(\n segment[l - 2],\n segment[l - 1],\n segmentN[1],\n segmentN[2],\n segmentN[3],\n segmentN[4],\n segmentN[5],\n segmentN[6]\n );\n // 当 path 不连续时,segmentL 可能为空,为空时需要作为 0 处理\n tempLength += segmentL || 0;\n segmentT[1] = tempLength / totalLength;\n tCache.push(segmentT);\n }\n });\n this.set('tCache', tCache);\n }\n\n /**\n * Get start tangent vector\n * @return {Array}\n */\n getStartTangent(): number[][] {\n const segments = this.getSegments();\n let result;\n if (segments.length > 1) {\n const startPoint = segments[0].currentPoint;\n const endPoint = segments[1].currentPoint;\n const tangent = segments[1].startTangent;\n result = [];\n if (tangent) {\n result.push([startPoint[0] - tangent[0], startPoint[1] - tangent[1]]);\n result.push([startPoint[0], startPoint[1]]);\n } else {\n result.push([endPoint[0], endPoint[1]]);\n result.push([startPoint[0], startPoint[1]]);\n }\n }\n return result;\n }\n\n /**\n * Get end tangent vector\n * @return {Array}\n */\n getEndTangent(): number[][] {\n const segments = this.getSegments();\n const length = segments.length;\n let result;\n if (length > 1) {\n const startPoint = segments[length - 2].currentPoint;\n const endPoint = segments[length - 1].currentPoint;\n const tangent = segments[length - 1].endTangent;\n result = [];\n if (tangent) {\n result.push([endPoint[0] - tangent[0], endPoint[1] - tangent[1]]);\n result.push([endPoint[0], endPoint[1]]);\n } else {\n result.push([startPoint[0], startPoint[1]]);\n result.push([endPoint[0], endPoint[1]]);\n }\n }\n return result;\n }\n}\n\nexport default Path;\n","/**\n * @fileoverview path 的一些工具\n * @author dxq613@gmail.com\n */\nimport { PathUtil } from '@antv/g-base';\nimport { Quad as QuadUtil } from '@antv/g-math';\nimport { Cubic as CubicUtil } from '@antv/g-math';\nimport { ext } from '@antv/matrix-util';\nimport * as vec3 from 'gl-matrix/vec3';\nimport { inBox } from './util';\nimport inLine from './in-stroke/line';\nimport inArc from './in-stroke/arc';\n\nconst { transform } = ext;\n\nfunction hasArc(path) {\n let hasArc = false;\n const count = path.length;\n for (let i = 0; i < count; i++) {\n const params = path[i];\n const cmd = params[0];\n if (cmd === 'C' || cmd === 'A' || cmd === 'Q') {\n hasArc = true;\n break;\n }\n }\n return hasArc;\n}\n\nfunction isPointInStroke(segments, lineWidth, x, y, length) {\n let isHit = false;\n const halfWidth = lineWidth / 2;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const { currentPoint, params, prePoint, box } = segment;\n // 如果在前面已经生成过包围盒,直接按照包围盒计算\n if (box && !inBox(box.x - halfWidth, box.y - halfWidth, box.width + lineWidth, box.height + lineWidth, x, y)) {\n continue;\n }\n switch (segment.command) {\n // L 和 Z 都是直线, M 不进行拾取\n case 'L':\n case 'Z':\n isHit = inLine(prePoint[0], prePoint[1], currentPoint[0], currentPoint[1], lineWidth, x, y);\n break;\n case 'Q':\n const qDistance = QuadUtil.pointDistance(\n prePoint[0],\n prePoint[1],\n params[1],\n params[2],\n params[3],\n params[4],\n x,\n y\n );\n isHit = qDistance <= lineWidth / 2;\n break;\n case 'C':\n const cDistance = CubicUtil.pointDistance(\n prePoint[0], // 上一段结束位置, 即 C 的起始点\n prePoint[1],\n params[1], // 'C' 的参数,1、2 为第一个控制点,3、4 为第二个控制点,5、6 为结束点\n params[2],\n params[3],\n params[4],\n params[5],\n params[6],\n x,\n y,\n length\n );\n isHit = cDistance <= lineWidth / 2;\n break;\n case 'A':\n // 计算点到椭圆圆弧的距离,暂时使用近似算法,后面可以改成切割法求最近距离\n const arcParams = segment.arcParams;\n const { cx, cy, rx, ry, startAngle, endAngle, xRotation } = arcParams;\n const p = [x, y, 1];\n const r = rx > ry ? rx : ry;\n const scaleX = rx > ry ? 1 : rx / ry;\n const scaleY = rx > ry ? ry / rx : 1;\n const m = transform(null, [\n ['t', -cx, -cy],\n ['r', -xRotation],\n ['s', 1 / scaleX, 1 / scaleY],\n ]);\n vec3.transformMat3(p, p, m);\n isHit = inArc(0, 0, r, startAngle, endAngle, lineWidth, p[0], p[1]);\n break;\n default:\n break;\n }\n if (isHit) {\n break;\n }\n }\n return isHit;\n}\n\n/**\n * 提取出内部的闭合多边形和非闭合的多边形,假设 path 不存在圆弧\n * @param {Array} path 路径\n * @returns {Array} 点的集合\n */\nfunction extractPolygons(path) {\n const count = path.length;\n const polygons = [];\n const polylines = [];\n let points = []; // 防止第一个命令不是 'M'\n for (let i = 0; i < count; i++) {\n const params = path[i];\n const cmd = params[0];\n if (cmd === 'M') {\n // 遇到 'M' 判定是否是新数组,新数组中没有点\n if (points.length) {\n // 如果存在点,则说明没有遇到 'Z',开始了一个新的多边形\n polylines.push(points);\n points = []; // 创建新的点\n }\n points.push([params[1], params[2]]);\n } else if (cmd === 'Z') {\n if (points.length) {\n // 存在点\n polygons.push(points);\n points = []; // 开始新的点集合\n }\n // 如果不存在点,同时 'Z',则说明是错误,不处理\n } else {\n points.push([params[1], params[2]]);\n }\n }\n // 说明 points 未放入 polygons 或者 polyline\n // 仅当只有一个 M,没有 Z 时会发生这种情况\n if (points.length > 0) {\n polylines.push(points);\n }\n return {\n polygons,\n polylines,\n };\n}\n\nexport default {\n hasArc,\n extractPolygons,\n isPointInStroke,\n ...PathUtil,\n};\n","/**\n * @fileoverview 多边形\n * @author dxq613@gmail.com\n */\n\nimport ShapeBase from './base';\nimport inPolyline from '../util/in-stroke/polyline';\nimport isInPolygon from '../util/in-path/polygon';\n\nclass Polygon extends ShapeBase {\n isInStrokeOrPath(x, y, isStroke, isFill, lineWidth) {\n const { points } = this.attr();\n let isHit = false;\n if (isStroke) {\n isHit = inPolyline(points, lineWidth, x, y, true);\n }\n if (!isHit && isFill) {\n isHit = isInPolygon(points, x, y); // isPointInPath(shape, x, y);\n }\n return isHit;\n }\n\n createPath(context) {\n const attrs = this.attr();\n const points = attrs.points;\n if (points.length < 2) {\n return;\n }\n context.beginPath();\n for (let i = 0; i < points.length; i++) {\n const point = points[i];\n if (i === 0) {\n context.moveTo(point[0], point[1]);\n } else {\n context.lineTo(point[0], point[1]);\n }\n }\n context.closePath();\n }\n}\n\nexport default Polygon;\n","/**\n * @fileoverview 多边形\n * @author dxq613@gmail.com\n */\nimport { Point } from '@antv/g-base';\nimport { Line as LineUtil } from '@antv/g-math';\nimport { Polyline as PolylineUtil } from '@antv/g-math';\nimport { each, isNil } from '@antv/util';\nimport ShapeBase from './base';\nimport inPolyline from '../util/in-stroke/polyline';\nimport * as ArrowUtil from '../util/arrow';\n\nclass PolyLine extends ShapeBase {\n getDefaultAttrs() {\n const attrs = super.getDefaultAttrs();\n return {\n ...attrs,\n startArrow: false,\n endArrow: false,\n };\n }\n\n initAttrs(attrs) {\n this.setArrow();\n }\n\n // 更新属性时,检测是否更改了 points\n onAttrChange(name: string, value: any, originValue: any) {\n super.onAttrChange(name, value, originValue);\n this.setArrow();\n if (['points'].indexOf(name) !== -1) {\n this._resetCache();\n }\n }\n\n _resetCache() {\n this.set('totalLength', null);\n this.set('tCache', null);\n }\n\n setArrow() {\n const attrs = this.attr();\n const { points, startArrow, endArrow } = this.attrs;\n const length = points.length;\n const x1 = points[0][0];\n const y1 = points[0][1];\n const x2 = points[length - 1][0];\n const y2 = points[length - 1][1];\n\n if (startArrow) {\n ArrowUtil.addStartArrow(this, attrs, points[1][0], points[1][1], x1, y1);\n }\n if (endArrow) {\n ArrowUtil.addEndArrow(this, attrs, points[length - 2][0], points[length - 2][1], x2, y2);\n }\n }\n\n // 不允许 fill\n isFill() {\n return false;\n }\n\n isInStrokeOrPath(x, y, isStroke, isFill, lineWidth) {\n // 没有设置 stroke 不能被拾取, 没有线宽不能被拾取\n if (!isStroke || !lineWidth) {\n return false;\n }\n const { points } = this.attr();\n return inPolyline(points, lineWidth, x, y, false);\n }\n\n // 始终填充\n isStroke() {\n return true;\n }\n\n createPath(context) {\n const { points, startArrow, endArrow } = this.attr();\n const length = points.length;\n if (points.length < 2) {\n return;\n }\n let x1 = points[0][0];\n let y1 = points[0][1];\n let x2 = points[length - 1][0];\n let y2 = points[length - 1][1];\n // 如果定义了箭头,并且是自定义箭头,线条相应缩进\n if (startArrow && startArrow.d) {\n const distance = ArrowUtil.getShortenOffset(x1, y1, points[1][0], points[1][1], startArrow.d);\n x1 += distance.dx;\n y1 += distance.dy;\n }\n if (endArrow && endArrow.d) {\n const distance = ArrowUtil.getShortenOffset(points[length - 2][0], points[length - 2][1], x2, y2, endArrow.d);\n x2 -= distance.dx;\n y2 -= distance.dy;\n }\n\n context.beginPath();\n context.moveTo(x1, y1);\n for (let i = 0; i < length - 1; i++) {\n const point = points[i];\n context.lineTo(point[0], point[1]);\n }\n context.lineTo(x2, y2);\n }\n\n afterDrawPath(context: CanvasRenderingContext2D) {\n const startArrowShape = this.get('startArrowShape');\n const endArrowShape = this.get('endArrowShape');\n if (startArrowShape) {\n startArrowShape.draw(context);\n }\n if (endArrowShape) {\n endArrowShape.draw(context);\n }\n }\n\n /**\n * Get length of polyline\n * @return {number} length\n */\n getTotalLength() {\n const { points } = this.attr();\n // get totalLength from cache\n const totalLength = this.get('totalLength');\n if (!isNil(totalLength)) {\n return totalLength;\n }\n this.set('totalLength', PolylineUtil.length(points));\n return this.get('totalLength');\n }\n\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n getPoint(ratio: number): Point {\n const { points } = this.attr();\n // get tCache from cache\n let tCache = this.get('tCache');\n if (!tCache) {\n this._setTcache();\n tCache = this.get('tCache');\n }\n\n let subt;\n let index;\n each(tCache, (v, i) => {\n if (ratio >= v[0] && ratio <= v[1]) {\n subt = (ratio - v[0]) / (v[1] - v[0]);\n index = i;\n }\n });\n return LineUtil.pointAt(points[index][0], points[index][1], points[index + 1][0], points[index + 1][1], subt);\n }\n\n _setTcache() {\n const { points } = this.attr();\n if (!points || points.length === 0) {\n return;\n }\n\n const totalLength = this.getTotalLength();\n if (totalLength <= 0) {\n return;\n }\n\n let tempLength = 0;\n const tCache = [];\n let segmentT;\n let segmentL;\n\n each(points, (p, i) => {\n if (points[i + 1]) {\n segmentT = [];\n segmentT[0] = tempLength / totalLength;\n segmentL = LineUtil.length(p[0], p[1], points[i + 1][0], points[i + 1][1]);\n tempLength += segmentL;\n segmentT[1] = tempLength / totalLength;\n tCache.push(segmentT);\n }\n });\n this.set('tCache', tCache);\n }\n\n /**\n * Get start tangent vector\n * @return {Array}\n */\n getStartTangent(): number[][] {\n const { points } = this.attr();\n const result = [];\n result.push([points[1][0], points[1][1]]);\n result.push([points[0][0], points[0][1]]);\n return result;\n }\n\n /**\n * Get end tangent vector\n * @return {Array}\n */\n getEndTangent(): number[][] {\n const { points } = this.attr();\n const l = points.length - 1;\n const result = [];\n result.push([points[l - 1][0], points[l - 1][1]]);\n result.push([points[l][0], points[l][1]]);\n return result;\n }\n}\n\nexport default PolyLine;\n","/**\n * @fileoverview 矩形\n * @author dxq613@gmail.com\n */\n\nimport ShapeBase from './base';\nimport { parseRadius } from '../util/parse';\nimport { inBox } from '../util/util';\nimport inRect from '../util/in-stroke/rect';\nimport inRectWithRadius from '../util/in-stroke/rect-radius';\nimport isPointInPath from '../util/in-path/point-in-path';\n\nclass Rect extends ShapeBase {\n getDefaultAttrs() {\n const attrs = super.getDefaultAttrs();\n return {\n ...attrs,\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n radius: 0,\n };\n }\n\n isInStrokeOrPath(x, y, isStroke, isFill, lineWidth) {\n const attrs = this.attr();\n const minX = attrs.x;\n const minY = attrs.y;\n const width = attrs.width;\n const height = attrs.height;\n const radius = attrs.radius;\n // 无圆角时的策略\n if (!radius) {\n const halfWidth = lineWidth / 2;\n // 同时填充和带有边框\n if (isFill && isStroke) {\n return inBox(minX - halfWidth, minY - halfWidth, width + halfWidth, height + halfWidth, x, y);\n }\n // 仅填充\n if (isFill) {\n return inBox(minX, minY, width, height, x, y);\n }\n if (isStroke) {\n return inRect(minX, minY, width, height, lineWidth, x, y);\n }\n } else {\n let isHit = false;\n if (isStroke) {\n isHit = inRectWithRadius(minX, minY, width, height, radius, lineWidth, x, y);\n }\n // 仅填充时带有圆角的矩形直接通过图形拾取\n // 以后可以改成纯数学的近似拾取,将圆弧切割成多边形\n if (!isHit && isFill) {\n isHit = isPointInPath(this, x, y);\n }\n return isHit;\n }\n }\n\n createPath(context) {\n const attrs = this.attr();\n const x = attrs.x;\n const y = attrs.y;\n const width = attrs.width;\n const height = attrs.height;\n const radius = attrs.radius;\n\n context.beginPath();\n if (radius === 0) {\n // 改成原生的rect方法\n context.rect(x, y, width, height);\n } else {\n const [r1, r2, r3, r4] = parseRadius(radius);\n context.moveTo(x + r1, y);\n context.lineTo(x + width - r2, y);\n r2 !== 0 && context.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0);\n context.lineTo(x + width, y + height - r3);\n r3 !== 0 && context.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2);\n context.lineTo(x + r4, y + height);\n r4 !== 0 && context.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI);\n context.lineTo(x, y + r1);\n r1 !== 0 && context.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5);\n context.closePath();\n }\n }\n}\n\nexport default Rect;\n","import { inBox } from '../util';\n\nexport default function inRect(minX, minY, width, height, lineWidth, x, y) {\n const halfWidth = lineWidth / 2;\n // 将四个边看做矩形来检测,比边的检测算法要快\n return (\n inBox(minX - halfWidth, minY - halfWidth, width, lineWidth, x, y) || // 上边\n inBox(minX + width - halfWidth, minY - halfWidth, lineWidth, height, x, y) || // 右边\n inBox(minX + halfWidth, minY + height - halfWidth, width, lineWidth, x, y) || // 下边\n inBox(minX - halfWidth, minY + halfWidth, lineWidth, height, x, y)\n ); // 左边\n}\n","import inLine from './line';\nimport inArc from './arc';\n\nexport default function rectWithRadius(minX, minY, width, height, radius, lineWidth, x, y) {\n const halfWidth = lineWidth / 2;\n return (\n inLine(minX + radius, minY, minX + width - radius, minY, lineWidth, x, y) ||\n inLine(minX + width, minY + radius, minX + width, minY + height - radius, lineWidth, x, y) ||\n inLine(minX + width - radius, minY + height, minX + radius, minY + height, lineWidth, x, y) ||\n inLine(minX, minY + height - radius, minX, minY + radius, lineWidth, x, y) ||\n inArc(minX + width - radius, minY + radius, radius, 1.5 * Math.PI, 2 * Math.PI, lineWidth, x, y) ||\n inArc(minX + width - radius, minY + height - radius, radius, 0, 0.5 * Math.PI, lineWidth, x, y) ||\n inArc(minX + radius, minY + height - radius, radius, 0.5 * Math.PI, Math.PI, lineWidth, x, y) ||\n inArc(minX + radius, minY + radius, radius, Math.PI, 1.5 * Math.PI, lineWidth, x, y)\n );\n}\n","/**\n * @fileoverview 文本\n * @author dxq613@gmail.com\n */\n\nimport ShapeBase from './base';\nimport { isNil, isString, each } from '../util/util';\nimport { getTextHeight, assembleFont } from '@antv/g-base';\nclass Text extends ShapeBase {\n // 默认文本属性\n getDefaultAttrs() {\n const attrs = super.getDefaultAttrs();\n return {\n ...attrs,\n x: 0,\n y: 0,\n text: null,\n fontSize: 12,\n fontFamily: 'sans-serif',\n fontStyle: 'normal',\n fontWeight: 'normal',\n fontVariant: 'normal',\n textAlign: 'start',\n textBaseline: 'bottom',\n };\n }\n\n // 仅仅使用包围盒检测来进行拾取\n isOnlyHitBox() {\n return true;\n }\n\n // 初始化时组合 font,同时判断 text 是否换行\n initAttrs(attrs) {\n this._assembleFont();\n if (attrs.text) {\n this._setText(attrs.text);\n }\n }\n // 组装字体\n _assembleFont() {\n const attrs = this.attrs;\n attrs.font = assembleFont(attrs);\n }\n\n // 如果文本换行,则缓存数组\n _setText(text) {\n let textArr = null;\n if (isString(text) && text.indexOf('\\n') !== -1) {\n textArr = text.split('\\n');\n }\n this.set('textArr', textArr);\n }\n\n // 更新属性时,检测是否更改了 font、text\n onAttrChange(name: string, value: any, originValue: any) {\n super.onAttrChange(name, value, originValue);\n if (name.startsWith('font')) {\n this._assembleFont();\n }\n if (name === 'text') {\n this._setText(value);\n }\n }\n\n // 这个方法在 text 时没有可以做的事情,如果要支持文字背景时可以考虑\n // createPath(context) {\n\n // }\n\n // 如果文本多行,需要获取文本间距\n _getSpaceingY() {\n const attrs = this.attrs;\n const lineHeight = attrs.lineHeight;\n const fontSize = attrs.fontSize * 1;\n return lineHeight ? lineHeight - fontSize : fontSize * 0.14;\n }\n\n // 绘制文本,考虑多行的场景\n _drawTextArr(context, textArr, isFill) {\n const attrs = this.attrs;\n const textBaseline = attrs.textBaseline;\n const x = attrs.x;\n const y = attrs.y;\n const fontSize = attrs.fontSize * 1;\n const spaceingY = this._getSpaceingY();\n const height = getTextHeight(attrs.text, attrs.fontSize, attrs.lineHeight);\n let subY;\n each(textArr, (subText, index: number) => {\n subY = y + index * (spaceingY + fontSize) - height + fontSize; // bottom;\n if (textBaseline === 'middle') subY += height - fontSize - (height - fontSize) / 2;\n if (textBaseline === 'top') subY += height - fontSize;\n if (isFill) {\n context.fillText(subText, x, subY);\n } else {\n context.strokeText(subText, x, subY);\n }\n });\n }\n\n // 绘制文本,同时考虑填充和绘制边框\n _drawText(context, isFill) {\n const attrs = this.attr();\n const x = attrs.x;\n const y = attrs.y;\n const textArr = this.get('textArr');\n if (textArr) {\n this._drawTextArr(context, textArr, isFill);\n } else {\n const text = attrs.text;\n if (isFill) {\n context.fillText(text, x, y);\n } else {\n context.strokeText(text, x, y);\n }\n }\n }\n\n // 复写绘制和填充的逻辑:对于文本,应该先绘制边框,再进行填充\n strokeAndFill(context) {\n const { lineWidth, opacity, strokeOpacity, fillOpacity } = this.attrs;\n\n if (this.isStroke()) {\n if (lineWidth > 0) {\n if (!isNil(strokeOpacity) && strokeOpacity !== 1) {\n context.globalAlpha = opacity;\n }\n this.stroke(context);\n }\n }\n\n if (this.isFill()) {\n if (!isNil(fillOpacity) && fillOpacity !== 1) {\n context.globalAlpha = fillOpacity;\n this.fill(context);\n context.globalAlpha = opacity;\n } else {\n this.fill(context);\n }\n }\n\n this.afterDrawPath(context);\n }\n\n // 复写填充逻辑\n fill(context) {\n this._drawText(context, true);\n }\n\n // 复写绘制边框的逻辑\n stroke(context) {\n this._drawText(context, false);\n }\n}\n\nexport default Text;\n","import { IElement as IBaseElement } from '@antv/g-base';\nimport { Region } from './types';\n\n// 导出 g-base 中的 interfaces\nexport * from '@antv/g-base';\n\n// 覆盖 g-base 中 IElement 的类型定义\nexport interface IElement extends IBaseElement {\n /**\n * 绘制图形元素\n * @param {CanvasRenderingContext2D} context 上下文\n * @param {Region} [region] 限制的区间,可以为空\n */\n draw(context: CanvasRenderingContext2D, region?: Region);\n\n /**\n * 跳过绘制时需要处理的逻辑\n */\n skipDraw();\n}\n","// 导出 g-base 中的 types\nexport * from '@antv/g-base';\n\nexport type Region = {\n minX: number;\n minY: number;\n maxX: number;\n maxY: number;\n};\n","import { AbstractCanvas } from '@antv/g-base';\nimport { ChangeType } from '@antv/g-base';\nimport { IElement } from './interfaces';\nimport { getShape } from './util/hit';\nimport * as Shape from './shape';\nimport Group from './group';\nimport { each, getPixelRatio, requestAnimationFrame, clearAnimationFrame } from './util/util';\nimport { applyAttrsToContext, drawChildren, getMergedRegion, mergeView, checkRefresh, clearChanged } from './util/draw';\n\nclass Canvas extends AbstractCanvas {\n getDefaultCfg() {\n const cfg = super.getDefaultCfg();\n // 设置渲染引擎为 canvas,只读属性\n cfg['renderer'] = 'canvas';\n // 是否自动绘制,不需要用户调用 draw 方法\n cfg['autoDraw'] = true;\n // 是否允许局部刷新图表\n cfg['localRefresh'] = true;\n cfg['refreshElements'] = [];\n // 是否在视图内自动裁剪\n cfg['clipView'] = true;\n // 是否使用快速拾取的方案,默认为 false,上层可以打开\n cfg['quickHit'] = false;\n return cfg;\n }\n\n /**\n * 一些方法调用会引起画布变化\n * @param {ChangeType} changeType 改变的类型\n */\n onCanvasChange(changeType: ChangeType) {\n /**\n * 触发画布更新的三种 changeType\n * 1. attr: 修改画布的绘图属性\n * 2. sort: 画布排序,图形的层次会发生变化\n * 3. changeSize: 改变画布大小\n */\n if (changeType === 'attr' || changeType === 'sort' || changeType === 'changeSize') {\n this.set('refreshElements', [this]);\n this.draw();\n }\n }\n\n getShapeBase() {\n return Shape;\n }\n\n getGroupBase() {\n return Group;\n }\n /**\n * 获取屏幕像素比\n */\n getPixelRatio() {\n const pixelRatio = this.get('pixelRatio') || getPixelRatio();\n // 不足 1 的取 1,超出 1 的取整\n return pixelRatio >= 1 ? Math.ceil(pixelRatio) : 1;\n }\n\n getViewRange() {\n return {\n minX: 0,\n minY: 0,\n maxX: this.cfg.width,\n maxY: this.cfg.height,\n };\n }\n\n // 复写基类的方法生成标签\n createDom(): HTMLElement {\n const element = document.createElement('canvas');\n const context = element.getContext('2d');\n // 缓存 context 对象\n this.set('context', context);\n return element;\n }\n setDOMSize(width: number, height: number) {\n super.setDOMSize(width, height);\n const context = this.get('context');\n const el = this.get('el');\n const pixelRatio = this.getPixelRatio();\n el.width = pixelRatio * width;\n el.height = pixelRatio * height;\n // 设置 canvas 元素的宽度和高度,会重置缩放,因此 context.scale 需要在每次设置宽、高后调用\n if (pixelRatio > 1) {\n context.scale(pixelRatio, pixelRatio);\n }\n }\n // 复写基类方法\n clear() {\n super.clear();\n this._clearFrame(); // 需要清理掉延迟绘制的帧\n const context = this.get('context');\n const element = this.get('el');\n context.clearRect(0, 0, element.width, element.height);\n }\n\n getShape(x: number, y: number) {\n let shape;\n if (this.get('quickHit')) {\n shape = getShape(this, x, y);\n } else {\n shape = super.getShape(x, y, null);\n }\n return shape;\n }\n // 对绘制区域边缘取整,避免浮点数问题\n _getRefreshRegion() {\n const elements = this.get('refreshElements');\n const viewRegion = this.getViewRange();\n let region;\n // 如果是当前画布整体发生了变化,则直接重绘整个画布\n if (elements.length && elements[0] === this) {\n region = viewRegion;\n } else {\n region = getMergedRegion(elements);\n if (region) {\n region.minX = Math.floor(region.minX);\n region.minY = Math.floor(region.minY);\n region.maxX = Math.ceil(region.maxX);\n region.maxY = Math.ceil(region.maxY);\n region.maxY += 1; // 在很多环境下字体的高低会不一致,附加一像素,避免残影\n const clipView = this.get('clipView');\n // 自动裁剪不在 view 内的区域\n if (clipView) {\n region = mergeView(region, viewRegion);\n }\n }\n }\n return region;\n }\n\n /**\n * 刷新图形元素,这里仅仅是放入队列,下次绘制时进行绘制\n * @param {IElement} element 图形元素\n */\n refreshElement(element: IElement) {\n const refreshElements = this.get('refreshElements');\n refreshElements.push(element);\n // if (this.get('autoDraw')) {\n // this._startDraw();\n // }\n }\n // 清理还在进行的绘制\n _clearFrame() {\n const drawFrame = this.get('drawFrame');\n if (drawFrame) {\n // 如果全部渲染时,存在局部渲染,则抛弃掉局部渲染\n clearAnimationFrame(drawFrame);\n this.set('drawFrame', null);\n this.set('refreshElements', []);\n }\n }\n\n // 手工调用绘制接口\n draw() {\n const drawFrame = this.get('drawFrame');\n if (this.get('autoDraw') && drawFrame) {\n return;\n }\n this._startDraw();\n }\n // 绘制所有图形\n _drawAll() {\n const context = this.get('context');\n const element = this.get('el');\n const children = this.getChildren() as IElement[];\n context.clearRect(0, 0, element.width, element.height);\n applyAttrsToContext(context, this);\n drawChildren(context, children);\n // 对于 https://github.com/antvis/g/issues/422 的场景,全局渲染的模式下也会记录更新的元素队列,因此全局渲染完后也需要置空\n this.set('refreshElements', []);\n }\n // 绘制局部\n _drawRegion() {\n const context = this.get('context');\n const refreshElements = this.get('refreshElements');\n const children = this.getChildren() as IElement[];\n const region = this._getRefreshRegion();\n // 需要注意可能没有 region 的场景\n // 一般发生在设置了 localRefresh ,在没有图形发生变化的情况下,用户调用了 draw\n if (region) {\n // 清理指定区域\n context.clearRect(region.minX, region.minY, region.maxX - region.minX, region.maxY - region.minY);\n // 保存上下文,设置 clip\n context.save();\n context.beginPath();\n context.rect(region.minX, region.minY, region.maxX - region.minX, region.maxY - region.minY);\n context.clip();\n applyAttrsToContext(context, this);\n // 确认更新的元素,这个优化可以提升 10 倍左右的性能,10W 个带有 group 的节点,局部渲染会从 90ms 下降到 5-6 ms\n checkRefresh(this, children, region);\n // 绘制子元素\n drawChildren(context, children, region);\n context.restore();\n } else if (refreshElements.length) {\n // 防止发生改变的 elements 没有 region 的场景,这会发生在多个情况下\n // 1. 空的 group\n // 2. 所有 elements 没有在绘图区域\n // 3. group 下面的 elements 隐藏掉\n // 如果不进行清理 hasChanged 的状态会不正确\n clearChanged(refreshElements);\n }\n each(refreshElements, (element) => {\n if (element.get('hasChanged')) {\n // 在视窗外的 Group 元素会加入到更新队列里,但实际却没有执行 draw() 逻辑,也就没有清除 hasChanged 标记\n // 即已经重绘完、但 hasChanged 标记没有清除的元素,需要统一清除掉。主要是 Group 存在问题,具体原因待排查\n element.set('hasChanged', false);\n }\n });\n this.set('refreshElements', []);\n }\n\n // 触发绘制\n _startDraw() {\n let drawFrame = this.get('drawFrame');\n if (!drawFrame) {\n drawFrame = requestAnimationFrame(() => {\n if (this.get('localRefresh')) {\n this._drawRegion();\n } else {\n this._drawAll();\n }\n this.set('drawFrame', null);\n });\n this.set('drawFrame', drawFrame);\n }\n }\n\n skipDraw() {}\n}\n\nexport default Canvas;\n","import { IContainer, IElement, IGroup, IShape, isAllowCapture, multiplyVec2, invert } from '@antv/g-base';\n\nfunction invertFromMatrix(v: number[], matrix: number[]): number[] {\n if (matrix) {\n const invertMatrix = invert(matrix);\n return multiplyVec2(invertMatrix, v);\n }\n return v;\n}\n\nfunction getRefXY(element: IElement, x: number, y: number) {\n // @ts-ignore\n const totalMatrix = element.getTotalMatrix();\n if (totalMatrix) {\n const [refX, refY] = invertFromMatrix([x, y, 1], totalMatrix);\n return [refX, refY];\n }\n return [x, y];\n}\n\n// 拾取前的检测,只有通过检测才能继续拾取\nfunction preTest(element: IElement, x: number, y: number) {\n // @ts-ignore\n if (element.isCanvas && element.isCanvas()) {\n return true;\n }\n // 不允许被拾取,则返回 null\n // @ts-ignore\n if (!isAllowCapture(element) || element.cfg.isInView === false) {\n return false;\n }\n\n if (element.cfg.clipShape) {\n // 如果存在 clip\n const [refX, refY] = getRefXY(element, x, y);\n if (element.isClipped(refX, refY)) {\n return false;\n }\n }\n // @ts-ignore ,这个地方调用过于频繁\n const bbox = element.cfg.cacheCanvasBBox || element.getCanvasBBox();\n // 如果没有缓存 bbox,则说明不可见\n // 注释掉的这段可能会加速拾取,上面的语句改写成 const bbox = element.cfg.cacheCanvasBBox;\n // 这时候的拾取假设图形/分组在上一次绘制都在视窗内,但是上面已经判定了 isInView 所以意义不大\n // 现在还调用 element.getCanvasBBox(); 一个很大的原因是便于单元测试\n // if (!bbox) {\n // return false;\n // }\n if (!(x >= bbox.minX && x <= bbox.maxX && y >= bbox.minY && y <= bbox.maxY)) {\n return false;\n }\n return true;\n}\n\n// 这个方法复写了 g-base 的 getShape\nexport function getShape(container: IContainer, x: number, y: number) {\n // 没有通过检测,则返回 null\n if (!preTest(container, x, y)) {\n return null;\n }\n let shape = null;\n const children = container.getChildren();\n const count = children.length;\n for (let i = count - 1; i >= 0; i--) {\n const child = children[i];\n if (child.isGroup()) {\n shape = getShape(child as IGroup, x, y);\n } else if (preTest(child, x, y)) {\n const curShape = child as IShape;\n const [refX, refY] = getRefXY(child, x, y);\n // @ts-ignore\n if (curShape.isInShape(refX, refY)) {\n shape = child;\n }\n }\n if (shape) {\n break;\n }\n }\n return shape;\n}\n","import * as glMatrix from \"./common.js\";\n/**\r\n * 3x3 Matrix\r\n * @module mat3\r\n */\n\n/**\r\n * Creates a new identity mat3\r\n *\r\n * @returns {mat3} a new 3x3 matrix\r\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(9);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n }\n\n out[0] = 1;\n out[4] = 1;\n out[8] = 1;\n return out;\n}\n/**\r\n * Copies the upper-left 3x3 values into the given mat3.\r\n *\r\n * @param {mat3} out the receiving 3x3 matrix\r\n * @param {ReadonlyMat4} a the source 4x4 matrix\r\n * @returns {mat3} out\r\n */\n\nexport function fromMat4(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[4];\n out[4] = a[5];\n out[5] = a[6];\n out[6] = a[8];\n out[7] = a[9];\n out[8] = a[10];\n return out;\n}\n/**\r\n * Creates a new mat3 initialized with values from an existing matrix\r\n *\r\n * @param {ReadonlyMat3} a matrix to clone\r\n * @returns {mat3} a new 3x3 matrix\r\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\r\n * Copy the values from one mat3 to another\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the source matrix\r\n * @returns {mat3} out\r\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\r\n * Create a new mat3 with the given values\r\n *\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\r\n * @returns {mat3} A new mat3\r\n */\n\nexport function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\r\n * Set the components of a mat3 to the given values\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\r\n * @returns {mat3} out\r\n */\n\nexport function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\r\n * Set a mat3 to the identity matrix\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @returns {mat3} out\r\n */\n\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\r\n * Transpose the values of a mat3\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the source matrix\r\n * @returns {mat3} out\r\n */\n\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a12 = a[5];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a01;\n out[5] = a[7];\n out[6] = a02;\n out[7] = a12;\n } else {\n out[0] = a[0];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a[1];\n out[4] = a[4];\n out[5] = a[7];\n out[6] = a[2];\n out[7] = a[5];\n out[8] = a[8];\n }\n\n return out;\n}\n/**\r\n * Inverts a mat3\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the source matrix\r\n * @returns {mat3} out\r\n */\n\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b01 = a22 * a11 - a12 * a21;\n var b11 = -a22 * a10 + a12 * a20;\n var b21 = a21 * a10 - a11 * a20; // Calculate the determinant\n\n var det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = b01 * det;\n out[1] = (-a22 * a01 + a02 * a21) * det;\n out[2] = (a12 * a01 - a02 * a11) * det;\n out[3] = b11 * det;\n out[4] = (a22 * a00 - a02 * a20) * det;\n out[5] = (-a12 * a00 + a02 * a10) * det;\n out[6] = b21 * det;\n out[7] = (-a21 * a00 + a01 * a20) * det;\n out[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n}\n/**\r\n * Calculates the adjugate of a mat3\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the source matrix\r\n * @returns {mat3} out\r\n */\n\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n out[0] = a11 * a22 - a12 * a21;\n out[1] = a02 * a21 - a01 * a22;\n out[2] = a01 * a12 - a02 * a11;\n out[3] = a12 * a20 - a10 * a22;\n out[4] = a00 * a22 - a02 * a20;\n out[5] = a02 * a10 - a00 * a12;\n out[6] = a10 * a21 - a11 * a20;\n out[7] = a01 * a20 - a00 * a21;\n out[8] = a00 * a11 - a01 * a10;\n return out;\n}\n/**\r\n * Calculates the determinant of a mat3\r\n *\r\n * @param {ReadonlyMat3} a the source matrix\r\n * @returns {Number} determinant of a\r\n */\n\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n}\n/**\r\n * Multiplies two mat3's\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the first operand\r\n * @param {ReadonlyMat3} b the second operand\r\n * @returns {mat3} out\r\n */\n\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b00 = b[0],\n b01 = b[1],\n b02 = b[2];\n var b10 = b[3],\n b11 = b[4],\n b12 = b[5];\n var b20 = b[6],\n b21 = b[7],\n b22 = b[8];\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n}\n/**\r\n * Translate a mat3 by the given vector\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the matrix to translate\r\n * @param {ReadonlyVec2} v vector to translate by\r\n * @returns {mat3} out\r\n */\n\nexport function translate(out, a, v) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n x = v[0],\n y = v[1];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a10;\n out[4] = a11;\n out[5] = a12;\n out[6] = x * a00 + y * a10 + a20;\n out[7] = x * a01 + y * a11 + a21;\n out[8] = x * a02 + y * a12 + a22;\n return out;\n}\n/**\r\n * Rotates a mat3 by the given angle\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat3} out\r\n */\n\nexport function rotate(out, a, rad) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c * a00 + s * a10;\n out[1] = c * a01 + s * a11;\n out[2] = c * a02 + s * a12;\n out[3] = c * a10 - s * a00;\n out[4] = c * a11 - s * a01;\n out[5] = c * a12 - s * a02;\n out[6] = a20;\n out[7] = a21;\n out[8] = a22;\n return out;\n}\n/**\r\n * Scales the mat3 by the dimensions in the given vec2\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the matrix to rotate\r\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\r\n * @returns {mat3} out\r\n **/\n\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1];\n out[0] = x * a[0];\n out[1] = x * a[1];\n out[2] = x * a[2];\n out[3] = y * a[3];\n out[4] = y * a[4];\n out[5] = y * a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\r\n * Creates a matrix from a vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat3.identity(dest);\r\n * mat3.translate(dest, dest, vec);\r\n *\r\n * @param {mat3} out mat3 receiving operation result\r\n * @param {ReadonlyVec2} v Translation vector\r\n * @returns {mat3} out\r\n */\n\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = v[0];\n out[7] = v[1];\n out[8] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a given angle\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat3.identity(dest);\r\n * mat3.rotate(dest, dest, rad);\r\n *\r\n * @param {mat3} out mat3 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat3} out\r\n */\n\nexport function fromRotation(out, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = -s;\n out[4] = c;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a vector scaling\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat3.identity(dest);\r\n * mat3.scale(dest, dest, vec);\r\n *\r\n * @param {mat3} out mat3 receiving operation result\r\n * @param {ReadonlyVec2} v Scaling vector\r\n * @returns {mat3} out\r\n */\n\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = v[1];\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\r\n * Copies the values from a mat2d into a mat3\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat2d} a the matrix to copy\r\n * @returns {mat3} out\r\n **/\n\nexport function fromMat2d(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = 0;\n out[3] = a[2];\n out[4] = a[3];\n out[5] = 0;\n out[6] = a[4];\n out[7] = a[5];\n out[8] = 1;\n return out;\n}\n/**\r\n * Calculates a 3x3 matrix from the given quaternion\r\n *\r\n * @param {mat3} out mat3 receiving operation result\r\n * @param {ReadonlyQuat} q Quaternion to create matrix from\r\n *\r\n * @returns {mat3} out\r\n */\n\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[3] = yx - wz;\n out[6] = zx + wy;\n out[1] = yx + wz;\n out[4] = 1 - xx - zz;\n out[7] = zy - wx;\n out[2] = zx - wy;\n out[5] = zy + wx;\n out[8] = 1 - xx - yy;\n return out;\n}\n/**\r\n * Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\r\n *\r\n * @param {mat3} out mat3 receiving operation result\r\n * @param {ReadonlyMat4} a Mat4 to derive the normal matrix from\r\n *\r\n * @returns {mat3} out\r\n */\n\nexport function normalFromMat4(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n return out;\n}\n/**\r\n * Generates a 2D projection matrix with the given bounds\r\n *\r\n * @param {mat3} out mat3 frustum matrix will be written into\r\n * @param {number} width Width of your gl context\r\n * @param {number} height Height of gl context\r\n * @returns {mat3} out\r\n */\n\nexport function projection(out, width, height) {\n out[0] = 2 / width;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = -2 / height;\n out[5] = 0;\n out[6] = -1;\n out[7] = 1;\n out[8] = 1;\n return out;\n}\n/**\r\n * Returns a string representation of a mat3\r\n *\r\n * @param {ReadonlyMat3} a matrix to represent as a string\r\n * @returns {String} string representation of the matrix\r\n */\n\nexport function str(a) {\n return \"mat3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \")\";\n}\n/**\r\n * Returns Frobenius norm of a mat3\r\n *\r\n * @param {ReadonlyMat3} a the matrix to calculate Frobenius norm of\r\n * @returns {Number} Frobenius norm\r\n */\n\nexport function frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);\n}\n/**\r\n * Adds two mat3's\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the first operand\r\n * @param {ReadonlyMat3} b the second operand\r\n * @returns {mat3} out\r\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n return out;\n}\n/**\r\n * Subtracts matrix b from matrix a\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the first operand\r\n * @param {ReadonlyMat3} b the second operand\r\n * @returns {mat3} out\r\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n return out;\n}\n/**\r\n * Multiply each element of the matrix by a scalar.\r\n *\r\n * @param {mat3} out the receiving matrix\r\n * @param {ReadonlyMat3} a the matrix to scale\r\n * @param {Number} b amount to scale the matrix's elements by\r\n * @returns {mat3} out\r\n */\n\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n return out;\n}\n/**\r\n * Adds two mat3's after multiplying each element of the second operand by a scalar value.\r\n *\r\n * @param {mat3} out the receiving vector\r\n * @param {ReadonlyMat3} a the first operand\r\n * @param {ReadonlyMat3} b the second operand\r\n * @param {Number} scale the amount to scale b's elements by before adding\r\n * @returns {mat3} out\r\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n return out;\n}\n/**\r\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyMat3} a The first matrix.\r\n * @param {ReadonlyMat3} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];\n}\n/**\r\n * Returns whether or not the matrices have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyMat3} a The first matrix.\r\n * @param {ReadonlyMat3} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3],\n a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7],\n a8 = a[8];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));\n}\n/**\r\n * Alias for {@link mat3.multiply}\r\n * @function\r\n */\n\nexport var mul = multiply;\n/**\r\n * Alias for {@link mat3.subtract}\r\n * @function\r\n */\n\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\n/**\r\n * 2 Dimensional Vector\r\n * @module vec2\r\n */\n\n/**\r\n * Creates a new, empty vec2\r\n *\r\n * @returns {vec2} a new 2D vector\r\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(2);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec2 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec2} a vector to clone\r\n * @returns {vec2} a new 2D vector\r\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\r\n * Creates a new vec2 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} a new 2D vector\r\n */\n\nexport function fromValues(x, y) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\r\n * Copy the values from one vec2 to another\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the source vector\r\n * @returns {vec2} out\r\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\r\n * Set the components of a vec2 to the given values\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} out\r\n */\n\nexport function set(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\r\n * Adds two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n}\n/**\r\n * Multiplies two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n}\n/**\r\n * Divides two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to ceil\r\n * @returns {vec2} out\r\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to floor\r\n * @returns {vec2} out\r\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n}\n/**\r\n * Math.round the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to round\r\n * @returns {vec2} out\r\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n return out;\n}\n/**\r\n * Scales a vec2 by a scalar number\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec2} out\r\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n}\n/**\r\n * Adds two vec2's after scaling the second operand by a scalar value\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec2} out\r\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec2's\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return Math.hypot(x, y);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec2's\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return x * x + y * y;\n}\n/**\r\n * Calculates the length of a vec2\r\n *\r\n * @param {ReadonlyVec2} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nexport function length(a) {\n var x = a[0],\n y = a[1];\n return Math.hypot(x, y);\n}\n/**\r\n * Calculates the squared length of a vec2\r\n *\r\n * @param {ReadonlyVec2} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nexport function squaredLength(a) {\n var x = a[0],\n y = a[1];\n return x * x + y * y;\n}\n/**\r\n * Negates the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to negate\r\n * @returns {vec2} out\r\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to invert\r\n * @returns {vec2} out\r\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n}\n/**\r\n * Normalize a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to normalize\r\n * @returns {vec2} out\r\n */\n\nexport function normalize(out, a) {\n var x = a[0],\n y = a[1];\n var len = x * x + y * y;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec2's\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\r\n * Computes the cross product of two vec2's\r\n * Note that the cross product must by definition produce a 3D vector\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec3} out\r\n */\n\nexport function cross(out, a, b) {\n var z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec2's\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec2} out\r\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0],\n ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec2} out\r\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n out[0] = Math.cos(r) * scale;\n out[1] = Math.sin(r) * scale;\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat2} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat2(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat2d\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat2d} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat2d(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat3\r\n * 3rd vector component is implicitly '1'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat3} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat4\r\n * 3rd vector component is implicitly '0'\r\n * 4th vector component is implicitly '1'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0];\n var y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n}\n/**\r\n * Rotate a 2D vector\r\n * @param {vec2} out The receiving vec2\r\n * @param {ReadonlyVec2} a The vec2 point to rotate\r\n * @param {ReadonlyVec2} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec2} out\r\n */\n\nexport function rotate(out, a, b, rad) {\n //Translate point to the origin\n var p0 = a[0] - b[0],\n p1 = a[1] - b[1],\n sinC = Math.sin(rad),\n cosC = Math.cos(rad); //perform rotation and translate to correct position\n\n out[0] = p0 * cosC - p1 * sinC + b[0];\n out[1] = p0 * sinC + p1 * cosC + b[1];\n return out;\n}\n/**\r\n * Get the angle between two 2D vectors\r\n * @param {ReadonlyVec2} a The first operand\r\n * @param {ReadonlyVec2} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\n\nexport function angle(a, b) {\n var x1 = a[0],\n y1 = a[1],\n x2 = b[0],\n y2 = b[1],\n // mag is the product of the magnitudes of a and b\n mag = Math.sqrt(x1 * x1 + y1 * y1) * Math.sqrt(x2 * x2 + y2 * y2),\n // mag &&.. short circuits if mag == 0\n cosine = mag && (x1 * x2 + y1 * y2) / mag; // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1\n\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\r\n * Set the components of a vec2 to zero\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @returns {vec2} out\r\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec2} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nexport function str(a) {\n return \"vec2(\" + a[0] + \", \" + a[1] + \")\";\n}\n/**\r\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec2} a The first vector.\r\n * @param {ReadonlyVec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec2} a The first vector.\r\n * @param {ReadonlyVec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1];\n var b0 = b[0],\n b1 = b[1];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));\n}\n/**\r\n * Alias for {@link vec2.length}\r\n * @function\r\n */\n\nexport var len = length;\n/**\r\n * Alias for {@link vec2.subtract}\r\n * @function\r\n */\n\nexport var sub = subtract;\n/**\r\n * Alias for {@link vec2.multiply}\r\n * @function\r\n */\n\nexport var mul = multiply;\n/**\r\n * Alias for {@link vec2.divide}\r\n * @function\r\n */\n\nexport var div = divide;\n/**\r\n * Alias for {@link vec2.distance}\r\n * @function\r\n */\n\nexport var dist = distance;\n/**\r\n * Alias for {@link vec2.squaredDistance}\r\n * @function\r\n */\n\nexport var sqrDist = squaredDistance;\n/**\r\n * Alias for {@link vec2.squaredLength}\r\n * @function\r\n */\n\nexport var sqrLen = squaredLength;\n/**\r\n * Perform some operation over an array of vec2s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 2;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n }\n\n return a;\n };\n}();"],"sourceRoot":""}
\No newline at end of file