1 line
60 KiB
JSON
1 line
60 KiB
JSON
{"ast":null,"code":"import \"core-js/modules/es.string.anchor.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.string.sub.js\";\nimport \"core-js/modules/es.array.fill.js\";\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { Point, Path, Polyline } from '../util/graphic.js';\nimport PathProxy from 'zrender/lib/core/PathProxy.js';\nimport { normalizeRadian } from 'zrender/lib/contain/util.js';\nimport { cubicProjectPoint, quadraticProjectPoint } from 'zrender/lib/core/curve.js';\nimport { defaults, retrieve2 } from 'zrender/lib/core/util.js';\nimport { invert } from 'zrender/lib/core/matrix.js';\nimport * as vector from 'zrender/lib/core/vector.js';\nimport { DISPLAY_STATES, SPECIAL_STATES } from '../util/states.js';\nvar PI2 = Math.PI * 2;\nvar CMD = PathProxy.CMD;\nvar DEFAULT_SEARCH_SPACE = ['top', 'right', 'bottom', 'left'];\n\nfunction getCandidateAnchor(pos, distance, rect, outPt, outDir) {\n var width = rect.width;\n var height = rect.height;\n\n switch (pos) {\n case 'top':\n outPt.set(rect.x + width / 2, rect.y - distance);\n outDir.set(0, -1);\n break;\n\n case 'bottom':\n outPt.set(rect.x + width / 2, rect.y + height + distance);\n outDir.set(0, 1);\n break;\n\n case 'left':\n outPt.set(rect.x - distance, rect.y + height / 2);\n outDir.set(-1, 0);\n break;\n\n case 'right':\n outPt.set(rect.x + width + distance, rect.y + height / 2);\n outDir.set(1, 0);\n break;\n }\n}\n\nfunction projectPointToArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y, out) {\n x -= cx;\n y -= cy;\n var d = Math.sqrt(x * x + y * y);\n x /= d;\n y /= d; // Intersect point.\n\n var ox = x * r + cx;\n var oy = y * r + cy;\n\n if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\n // Is a circle\n out[0] = ox;\n out[1] = oy;\n return d - r;\n }\n\n if (anticlockwise) {\n var tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n } else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n\n var angle = Math.atan2(y, x);\n\n if (angle < 0) {\n angle += PI2;\n }\n\n if (angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle) {\n // Project point is on the arc.\n out[0] = ox;\n out[1] = oy;\n return d - r;\n }\n\n var x1 = r * Math.cos(startAngle) + cx;\n var y1 = r * Math.sin(startAngle) + cy;\n var x2 = r * Math.cos(endAngle) + cx;\n var y2 = r * Math.sin(endAngle) + cy;\n var d1 = (x1 - x) * (x1 - x) + (y1 - y) * (y1 - y);\n var d2 = (x2 - x) * (x2 - x) + (y2 - y) * (y2 - y);\n\n if (d1 < d2) {\n out[0] = x1;\n out[1] = y1;\n return Math.sqrt(d1);\n } else {\n out[0] = x2;\n out[1] = y2;\n return Math.sqrt(d2);\n }\n}\n\nfunction projectPointToLine(x1, y1, x2, y2, x, y, out, limitToEnds) {\n var dx = x - x1;\n var dy = y - y1;\n var dx1 = x2 - x1;\n var dy1 = y2 - y1;\n var lineLen = Math.sqrt(dx1 * dx1 + dy1 * dy1);\n dx1 /= lineLen;\n dy1 /= lineLen; // dot product\n\n var projectedLen = dx * dx1 + dy * dy1;\n var t = projectedLen / lineLen;\n\n if (limitToEnds) {\n t = Math.min(Math.max(t, 0), 1);\n }\n\n t *= lineLen;\n var ox = out[0] = x1 + t * dx1;\n var oy = out[1] = y1 + t * dy1;\n return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));\n}\n\nfunction projectPointToRect(x1, y1, width, height, x, y, out) {\n if (width < 0) {\n x1 = x1 + width;\n width = -width;\n }\n\n if (height < 0) {\n y1 = y1 + height;\n height = -height;\n }\n\n var x2 = x1 + width;\n var y2 = y1 + height;\n var ox = out[0] = Math.min(Math.max(x, x1), x2);\n var oy = out[1] = Math.min(Math.max(y, y1), y2);\n return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));\n}\n\nvar tmpPt = [];\n\nfunction nearestPointOnRect(pt, rect, out) {\n var dist = projectPointToRect(rect.x, rect.y, rect.width, rect.height, pt.x, pt.y, tmpPt);\n out.set(tmpPt[0], tmpPt[1]);\n return dist;\n}\n/**\n * Calculate min distance corresponding point.\n * This method won't evaluate if point is in the path.\n */\n\n\nfunction nearestPointOnPath(pt, path, out) {\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n var x1;\n var y1;\n var minDist = Infinity;\n var data = path.data;\n var x = pt.x;\n var y = pt.y;\n\n for (var i = 0; i < data.length;) {\n var cmd = data[i++];\n\n if (i === 1) {\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n\n var d = minDist;\n\n switch (cmd) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n x0 = data[i++];\n y0 = data[i++];\n xi = x0;\n yi = y0;\n break;\n\n case CMD.L:\n d = projectPointToLine(xi, yi, data[i], data[i + 1], x, y, tmpPt, true);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.C:\n d = cubicProjectPoint(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.Q:\n d = quadraticProjectPoint(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.A:\n // TODO Arc 判断的开销比较大\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var theta = data[i++];\n var dTheta = data[i++]; // TODO Arc 旋转\n\n i += 1;\n var anticlockwise = !!(1 - data[i++]);\n x1 = Math.cos(theta) * rx + cx;\n y1 = Math.sin(theta) * ry + cy; // 不是直接使用 arc 命令\n\n if (i <= 1) {\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n } // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n\n\n var _x = (x - cx) * ry / rx + cx;\n\n d = projectPointToArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y, tmpPt);\n xi = Math.cos(theta + dTheta) * rx + cx;\n yi = Math.sin(theta + dTheta) * ry + cy;\n break;\n\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++];\n d = projectPointToRect(x0, y0, width, height, x, y, tmpPt);\n break;\n\n case CMD.Z:\n d = projectPointToLine(xi, yi, x0, y0, x, y, tmpPt, true);\n xi = x0;\n yi = y0;\n break;\n }\n\n if (d < minDist) {\n minDist = d;\n out.set(tmpPt[0], tmpPt[1]);\n }\n }\n\n return minDist;\n} // Temporal variable for intermediate usage.\n\n\nvar pt0 = new Point();\nvar pt1 = new Point();\nvar pt2 = new Point();\nvar dir = new Point();\nvar dir2 = new Point();\n/**\n * Calculate a proper guide line based on the label position and graphic element definition\n * @param label\n * @param labelRect\n * @param target\n * @param targetRect\n */\n\nexport function updateLabelLinePoints(target, labelLineModel) {\n if (!target) {\n return;\n }\n\n var labelLine = target.getTextGuideLine();\n var label = target.getTextContent(); // Needs to create text guide in each charts.\n\n if (!(label && labelLine)) {\n return;\n }\n\n var labelGuideConfig = target.textGuideLineConfig || {};\n var points = [[0, 0], [0, 0], [0, 0]];\n var searchSpace = labelGuideConfig.candidates || DEFAULT_SEARCH_SPACE;\n var labelRect = label.getBoundingRect().clone();\n labelRect.applyTransform(label.getComputedTransform());\n var minDist = Infinity;\n var anchorPoint = labelGuideConfig.anchor;\n var targetTransform = target.getComputedTransform();\n var targetInversedTransform = targetTransform && invert([], targetTransform);\n var len = labelLineModel.get('length2') || 0;\n\n if (anchorPoint) {\n pt2.copy(anchorPoint);\n }\n\n for (var i = 0; i < searchSpace.length; i++) {\n var candidate = searchSpace[i];\n getCandidateAnchor(candidate, 0, labelRect, pt0, dir);\n Point.scaleAndAdd(pt1, pt0, dir, len); // Transform to target coord space.\n\n pt1.transform(targetInversedTransform); // Note: getBoundingRect will ensure the `path` being created.\n\n var boundingRect = target.getBoundingRect();\n var dist = anchorPoint ? anchorPoint.distance(pt1) : target instanceof Path ? nearestPointOnPath(pt1, target.path, pt2) : nearestPointOnRect(pt1, boundingRect, pt2); // TODO pt2 is in the path\n\n if (dist < minDist) {\n minDist = dist; // Transform back to global space.\n\n pt1.transform(targetTransform);\n pt2.transform(targetTransform);\n pt2.toArray(points[0]);\n pt1.toArray(points[1]);\n pt0.toArray(points[2]);\n }\n }\n\n limitTurnAngle(points, labelLineModel.get('minTurnAngle'));\n labelLine.setShape({\n points: points\n });\n} // Temporal variable for the limitTurnAngle function\n\nvar tmpArr = [];\nvar tmpProjPoint = new Point();\n/**\n * Reduce the line segment attached to the label to limit the turn angle between two segments.\n * @param linePoints\n * @param minTurnAngle Radian of minimum turn angle. 0 - 180\n */\n\nexport function limitTurnAngle(linePoints, minTurnAngle) {\n if (!(minTurnAngle <= 180 && minTurnAngle > 0)) {\n return;\n }\n\n minTurnAngle = minTurnAngle / 180 * Math.PI; // The line points can be\n // /pt1----pt2 (label)\n // /\n // pt0/\n\n pt0.fromArray(linePoints[0]);\n pt1.fromArray(linePoints[1]);\n pt2.fromArray(linePoints[2]);\n Point.sub(dir, pt0, pt1);\n Point.sub(dir2, pt2, pt1);\n var len1 = dir.len();\n var len2 = dir2.len();\n\n if (len1 < 1e-3 || len2 < 1e-3) {\n return;\n }\n\n dir.scale(1 / len1);\n dir2.scale(1 / len2);\n var angleCos = dir.dot(dir2);\n var minTurnAngleCos = Math.cos(minTurnAngle);\n\n if (minTurnAngleCos < angleCos) {\n // Smaller than minTurnAngle\n // Calculate project point of pt0 on pt1-pt2\n var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);\n tmpProjPoint.fromArray(tmpArr); // Calculate new projected length with limited minTurnAngle and get the new connect point\n\n tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI - minTurnAngle)); // Limit the new calculated connect point between pt1 and pt2.\n\n var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);\n\n if (isNaN(t)) {\n return;\n }\n\n if (t < 0) {\n Point.copy(tmpProjPoint, pt1);\n } else if (t > 1) {\n Point.copy(tmpProjPoint, pt2);\n }\n\n tmpProjPoint.toArray(linePoints[1]);\n }\n}\n/**\n * Limit the angle of line and the surface\n * @param maxSurfaceAngle Radian of minimum turn angle. 0 - 180. 0 is same direction to normal. 180 is opposite\n */\n\nexport function limitSurfaceAngle(linePoints, surfaceNormal, maxSurfaceAngle) {\n if (!(maxSurfaceAngle <= 180 && maxSurfaceAngle > 0)) {\n return;\n }\n\n maxSurfaceAngle = maxSurfaceAngle / 180 * Math.PI;\n pt0.fromArray(linePoints[0]);\n pt1.fromArray(linePoints[1]);\n pt2.fromArray(linePoints[2]);\n Point.sub(dir, pt1, pt0);\n Point.sub(dir2, pt2, pt1);\n var len1 = dir.len();\n var len2 = dir2.len();\n\n if (len1 < 1e-3 || len2 < 1e-3) {\n return;\n }\n\n dir.scale(1 / len1);\n dir2.scale(1 / len2);\n var angleCos = dir.dot(surfaceNormal);\n var maxSurfaceAngleCos = Math.cos(maxSurfaceAngle);\n\n if (angleCos < maxSurfaceAngleCos) {\n // Calculate project point of pt0 on pt1-pt2\n var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);\n tmpProjPoint.fromArray(tmpArr);\n var HALF_PI = Math.PI / 2;\n var angle2 = Math.acos(dir2.dot(surfaceNormal));\n var newAngle = HALF_PI + angle2 - maxSurfaceAngle;\n\n if (newAngle >= HALF_PI) {\n // parallel\n Point.copy(tmpProjPoint, pt2);\n } else {\n // Calculate new projected length with limited minTurnAngle and get the new connect point\n tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI / 2 - newAngle)); // Limit the new calculated connect point between pt1 and pt2.\n\n var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);\n\n if (isNaN(t)) {\n return;\n }\n\n if (t < 0) {\n Point.copy(tmpProjPoint, pt1);\n } else if (t > 1) {\n Point.copy(tmpProjPoint, pt2);\n }\n }\n\n tmpProjPoint.toArray(linePoints[1]);\n }\n}\n\nfunction setLabelLineState(labelLine, ignore, stateName, stateModel) {\n var isNormal = stateName === 'normal';\n var stateObj = isNormal ? labelLine : labelLine.ensureState(stateName); // Make sure display.\n\n stateObj.ignore = ignore; // Set smooth\n\n var smooth = stateModel.get('smooth');\n\n if (smooth && smooth === true) {\n smooth = 0.3;\n }\n\n stateObj.shape = stateObj.shape || {};\n\n if (smooth > 0) {\n stateObj.shape.smooth = smooth;\n }\n\n var styleObj = stateModel.getModel('lineStyle').getLineStyle();\n isNormal ? labelLine.useStyle(styleObj) : stateObj.style = styleObj;\n}\n\nfunction buildLabelLinePath(path, shape) {\n var smooth = shape.smooth;\n var points = shape.points;\n\n if (!points) {\n return;\n }\n\n path.moveTo(points[0][0], points[0][1]);\n\n if (smooth > 0 && points.length >= 3) {\n var len1 = vector.dist(points[0], points[1]);\n var len2 = vector.dist(points[1], points[2]);\n\n if (!len1 || !len2) {\n path.lineTo(points[1][0], points[1][1]);\n path.lineTo(points[2][0], points[2][1]);\n return;\n }\n\n var moveLen = Math.min(len1, len2) * smooth;\n var midPoint0 = vector.lerp([], points[1], points[0], moveLen / len1);\n var midPoint2 = vector.lerp([], points[1], points[2], moveLen / len2);\n var midPoint1 = vector.lerp([], midPoint0, midPoint2, 0.5);\n path.bezierCurveTo(midPoint0[0], midPoint0[1], midPoint0[0], midPoint0[1], midPoint1[0], midPoint1[1]);\n path.bezierCurveTo(midPoint2[0], midPoint2[1], midPoint2[0], midPoint2[1], points[2][0], points[2][1]);\n } else {\n for (var i = 1; i < points.length; i++) {\n path.lineTo(points[i][0], points[i][1]);\n }\n }\n}\n/**\n * Create a label line if necessary and set it's style.\n */\n\n\nexport function setLabelLineStyle(targetEl, statesModels, defaultStyle) {\n var labelLine = targetEl.getTextGuideLine();\n var label = targetEl.getTextContent();\n\n if (!label) {\n // Not show label line if there is no label.\n if (labelLine) {\n targetEl.removeTextGuideLine();\n }\n\n return;\n }\n\n var normalModel = statesModels.normal;\n var showNormal = normalModel.get('show');\n var labelIgnoreNormal = label.ignore;\n\n for (var i = 0; i < DISPLAY_STATES.length; i++) {\n var stateName = DISPLAY_STATES[i];\n var stateModel = statesModels[stateName];\n var isNormal = stateName === 'normal';\n\n if (stateModel) {\n var stateShow = stateModel.get('show');\n var isLabelIgnored = isNormal ? labelIgnoreNormal : retrieve2(label.states[stateName] && label.states[stateName].ignore, labelIgnoreNormal);\n\n if (isLabelIgnored // Not show when label is not shown in this state.\n || !retrieve2(stateShow, showNormal) // Use normal state by default if not set.\n ) {\n var stateObj = isNormal ? labelLine : labelLine && labelLine.states[stateName];\n\n if (stateObj) {\n stateObj.ignore = true;\n }\n\n continue;\n } // Create labelLine if not exists\n\n\n if (!labelLine) {\n labelLine = new Polyline();\n targetEl.setTextGuideLine(labelLine); // Reset state of normal because it's new created.\n // NOTE: NORMAL should always been the first!\n\n if (!isNormal && (labelIgnoreNormal || !showNormal)) {\n setLabelLineState(labelLine, true, 'normal', statesModels.normal);\n } // Use same state proxy.\n\n\n if (targetEl.stateProxy) {\n labelLine.stateProxy = targetEl.stateProxy;\n }\n }\n\n setLabelLineState(labelLine, false, stateName, stateModel);\n }\n }\n\n if (labelLine) {\n defaults(labelLine.style, defaultStyle); // Not fill.\n\n labelLine.style.fill = null;\n var showAbove = normalModel.get('showAbove');\n var labelLineConfig = targetEl.textGuideLineConfig = targetEl.textGuideLineConfig || {};\n labelLineConfig.showAbove = showAbove || false; // Custom the buildPath.\n\n labelLine.buildPath = buildLabelLinePath;\n }\n}\nexport function getLabelLineStatesModels(itemModel, labelLineName) {\n labelLineName = labelLineName || 'labelLine';\n var statesModels = {\n normal: itemModel.getModel(labelLineName)\n };\n\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n statesModels[stateName] = itemModel.getModel([stateName, labelLineName]);\n }\n\n return statesModels;\n}","map":{"version":3,"sources":["D:/Work/WorkSpace/GitWorkSpace/TenShop/resource/ElectronicMall/src/ElectronicMallVue/node_modules/echarts/lib/label/labelGuideHelper.js"],"names":["Point","Path","Polyline","PathProxy","normalizeRadian","cubicProjectPoint","quadraticProjectPoint","defaults","retrieve2","invert","vector","DISPLAY_STATES","SPECIAL_STATES","PI2","Math","PI","CMD","DEFAULT_SEARCH_SPACE","getCandidateAnchor","pos","distance","rect","outPt","outDir","width","height","set","x","y","projectPointToArc","cx","cy","r","startAngle","endAngle","anticlockwise","out","d","sqrt","ox","oy","abs","tmp","angle","atan2","x1","cos","y1","sin","x2","y2","d1","d2","projectPointToLine","limitToEnds","dx","dy","dx1","dy1","lineLen","projectedLen","t","min","max","projectPointToRect","tmpPt","nearestPointOnRect","pt","dist","nearestPointOnPath","path","xi","yi","x0","y0","minDist","Infinity","data","i","length","cmd","M","L","C","Q","A","rx","ry","theta","dTheta","_x","R","Z","pt0","pt1","pt2","dir","dir2","updateLabelLinePoints","target","labelLineModel","labelLine","getTextGuideLine","label","getTextContent","labelGuideConfig","textGuideLineConfig","points","searchSpace","candidates","labelRect","getBoundingRect","clone","applyTransform","getComputedTransform","anchorPoint","anchor","targetTransform","targetInversedTransform","len","get","copy","candidate","scaleAndAdd","transform","boundingRect","toArray","limitTurnAngle","setShape","tmpArr","tmpProjPoint","linePoints","minTurnAngle","fromArray","sub","len1","len2","scale","angleCos","dot","minTurnAngleCos","tan","isNaN","limitSurfaceAngle","surfaceNormal","maxSurfaceAngle","maxSurfaceAngleCos","HALF_PI","angle2","acos","newAngle","setLabelLineState","ignore","stateName","stateModel","isNormal","stateObj","ensureState","smooth","shape","styleObj","getModel","getLineStyle","useStyle","style","buildLabelLinePath","moveTo","lineTo","moveLen","midPoint0","lerp","midPoint2","midPoint1","bezierCurveTo","setLabelLineStyle","targetEl","statesModels","defaultStyle","removeTextGuideLine","normalModel","normal","showNormal","labelIgnoreNormal","stateShow","isLabelIgnored","states","setTextGuideLine","stateProxy","fill","showAbove","labelLineConfig","buildPath","getLabelLineStatesModels","itemModel","labelLineName"],"mappings":"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","sourcesContent":["\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { Point, Path, Polyline } from '../util/graphic.js';\nimport PathProxy from 'zrender/lib/core/PathProxy.js';\nimport { normalizeRadian } from 'zrender/lib/contain/util.js';\nimport { cubicProjectPoint, quadraticProjectPoint } from 'zrender/lib/core/curve.js';\nimport { defaults, retrieve2 } from 'zrender/lib/core/util.js';\nimport { invert } from 'zrender/lib/core/matrix.js';\nimport * as vector from 'zrender/lib/core/vector.js';\nimport { DISPLAY_STATES, SPECIAL_STATES } from '../util/states.js';\nvar PI2 = Math.PI * 2;\nvar CMD = PathProxy.CMD;\nvar DEFAULT_SEARCH_SPACE = ['top', 'right', 'bottom', 'left'];\n\nfunction getCandidateAnchor(pos, distance, rect, outPt, outDir) {\n var width = rect.width;\n var height = rect.height;\n\n switch (pos) {\n case 'top':\n outPt.set(rect.x + width / 2, rect.y - distance);\n outDir.set(0, -1);\n break;\n\n case 'bottom':\n outPt.set(rect.x + width / 2, rect.y + height + distance);\n outDir.set(0, 1);\n break;\n\n case 'left':\n outPt.set(rect.x - distance, rect.y + height / 2);\n outDir.set(-1, 0);\n break;\n\n case 'right':\n outPt.set(rect.x + width + distance, rect.y + height / 2);\n outDir.set(1, 0);\n break;\n }\n}\n\nfunction projectPointToArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y, out) {\n x -= cx;\n y -= cy;\n var d = Math.sqrt(x * x + y * y);\n x /= d;\n y /= d; // Intersect point.\n\n var ox = x * r + cx;\n var oy = y * r + cy;\n\n if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\n // Is a circle\n out[0] = ox;\n out[1] = oy;\n return d - r;\n }\n\n if (anticlockwise) {\n var tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n } else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n\n var angle = Math.atan2(y, x);\n\n if (angle < 0) {\n angle += PI2;\n }\n\n if (angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle) {\n // Project point is on the arc.\n out[0] = ox;\n out[1] = oy;\n return d - r;\n }\n\n var x1 = r * Math.cos(startAngle) + cx;\n var y1 = r * Math.sin(startAngle) + cy;\n var x2 = r * Math.cos(endAngle) + cx;\n var y2 = r * Math.sin(endAngle) + cy;\n var d1 = (x1 - x) * (x1 - x) + (y1 - y) * (y1 - y);\n var d2 = (x2 - x) * (x2 - x) + (y2 - y) * (y2 - y);\n\n if (d1 < d2) {\n out[0] = x1;\n out[1] = y1;\n return Math.sqrt(d1);\n } else {\n out[0] = x2;\n out[1] = y2;\n return Math.sqrt(d2);\n }\n}\n\nfunction projectPointToLine(x1, y1, x2, y2, x, y, out, limitToEnds) {\n var dx = x - x1;\n var dy = y - y1;\n var dx1 = x2 - x1;\n var dy1 = y2 - y1;\n var lineLen = Math.sqrt(dx1 * dx1 + dy1 * dy1);\n dx1 /= lineLen;\n dy1 /= lineLen; // dot product\n\n var projectedLen = dx * dx1 + dy * dy1;\n var t = projectedLen / lineLen;\n\n if (limitToEnds) {\n t = Math.min(Math.max(t, 0), 1);\n }\n\n t *= lineLen;\n var ox = out[0] = x1 + t * dx1;\n var oy = out[1] = y1 + t * dy1;\n return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));\n}\n\nfunction projectPointToRect(x1, y1, width, height, x, y, out) {\n if (width < 0) {\n x1 = x1 + width;\n width = -width;\n }\n\n if (height < 0) {\n y1 = y1 + height;\n height = -height;\n }\n\n var x2 = x1 + width;\n var y2 = y1 + height;\n var ox = out[0] = Math.min(Math.max(x, x1), x2);\n var oy = out[1] = Math.min(Math.max(y, y1), y2);\n return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));\n}\n\nvar tmpPt = [];\n\nfunction nearestPointOnRect(pt, rect, out) {\n var dist = projectPointToRect(rect.x, rect.y, rect.width, rect.height, pt.x, pt.y, tmpPt);\n out.set(tmpPt[0], tmpPt[1]);\n return dist;\n}\n/**\n * Calculate min distance corresponding point.\n * This method won't evaluate if point is in the path.\n */\n\n\nfunction nearestPointOnPath(pt, path, out) {\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n var x1;\n var y1;\n var minDist = Infinity;\n var data = path.data;\n var x = pt.x;\n var y = pt.y;\n\n for (var i = 0; i < data.length;) {\n var cmd = data[i++];\n\n if (i === 1) {\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n\n var d = minDist;\n\n switch (cmd) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n x0 = data[i++];\n y0 = data[i++];\n xi = x0;\n yi = y0;\n break;\n\n case CMD.L:\n d = projectPointToLine(xi, yi, data[i], data[i + 1], x, y, tmpPt, true);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.C:\n d = cubicProjectPoint(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.Q:\n d = quadraticProjectPoint(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.A:\n // TODO Arc 判断的开销比较大\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var theta = data[i++];\n var dTheta = data[i++]; // TODO Arc 旋转\n\n i += 1;\n var anticlockwise = !!(1 - data[i++]);\n x1 = Math.cos(theta) * rx + cx;\n y1 = Math.sin(theta) * ry + cy; // 不是直接使用 arc 命令\n\n if (i <= 1) {\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n } // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n\n\n var _x = (x - cx) * ry / rx + cx;\n\n d = projectPointToArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y, tmpPt);\n xi = Math.cos(theta + dTheta) * rx + cx;\n yi = Math.sin(theta + dTheta) * ry + cy;\n break;\n\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++];\n d = projectPointToRect(x0, y0, width, height, x, y, tmpPt);\n break;\n\n case CMD.Z:\n d = projectPointToLine(xi, yi, x0, y0, x, y, tmpPt, true);\n xi = x0;\n yi = y0;\n break;\n }\n\n if (d < minDist) {\n minDist = d;\n out.set(tmpPt[0], tmpPt[1]);\n }\n }\n\n return minDist;\n} // Temporal variable for intermediate usage.\n\n\nvar pt0 = new Point();\nvar pt1 = new Point();\nvar pt2 = new Point();\nvar dir = new Point();\nvar dir2 = new Point();\n/**\n * Calculate a proper guide line based on the label position and graphic element definition\n * @param label\n * @param labelRect\n * @param target\n * @param targetRect\n */\n\nexport function updateLabelLinePoints(target, labelLineModel) {\n if (!target) {\n return;\n }\n\n var labelLine = target.getTextGuideLine();\n var label = target.getTextContent(); // Needs to create text guide in each charts.\n\n if (!(label && labelLine)) {\n return;\n }\n\n var labelGuideConfig = target.textGuideLineConfig || {};\n var points = [[0, 0], [0, 0], [0, 0]];\n var searchSpace = labelGuideConfig.candidates || DEFAULT_SEARCH_SPACE;\n var labelRect = label.getBoundingRect().clone();\n labelRect.applyTransform(label.getComputedTransform());\n var minDist = Infinity;\n var anchorPoint = labelGuideConfig.anchor;\n var targetTransform = target.getComputedTransform();\n var targetInversedTransform = targetTransform && invert([], targetTransform);\n var len = labelLineModel.get('length2') || 0;\n\n if (anchorPoint) {\n pt2.copy(anchorPoint);\n }\n\n for (var i = 0; i < searchSpace.length; i++) {\n var candidate = searchSpace[i];\n getCandidateAnchor(candidate, 0, labelRect, pt0, dir);\n Point.scaleAndAdd(pt1, pt0, dir, len); // Transform to target coord space.\n\n pt1.transform(targetInversedTransform); // Note: getBoundingRect will ensure the `path` being created.\n\n var boundingRect = target.getBoundingRect();\n var dist = anchorPoint ? anchorPoint.distance(pt1) : target instanceof Path ? nearestPointOnPath(pt1, target.path, pt2) : nearestPointOnRect(pt1, boundingRect, pt2); // TODO pt2 is in the path\n\n if (dist < minDist) {\n minDist = dist; // Transform back to global space.\n\n pt1.transform(targetTransform);\n pt2.transform(targetTransform);\n pt2.toArray(points[0]);\n pt1.toArray(points[1]);\n pt0.toArray(points[2]);\n }\n }\n\n limitTurnAngle(points, labelLineModel.get('minTurnAngle'));\n labelLine.setShape({\n points: points\n });\n} // Temporal variable for the limitTurnAngle function\n\nvar tmpArr = [];\nvar tmpProjPoint = new Point();\n/**\n * Reduce the line segment attached to the label to limit the turn angle between two segments.\n * @param linePoints\n * @param minTurnAngle Radian of minimum turn angle. 0 - 180\n */\n\nexport function limitTurnAngle(linePoints, minTurnAngle) {\n if (!(minTurnAngle <= 180 && minTurnAngle > 0)) {\n return;\n }\n\n minTurnAngle = minTurnAngle / 180 * Math.PI; // The line points can be\n // /pt1----pt2 (label)\n // /\n // pt0/\n\n pt0.fromArray(linePoints[0]);\n pt1.fromArray(linePoints[1]);\n pt2.fromArray(linePoints[2]);\n Point.sub(dir, pt0, pt1);\n Point.sub(dir2, pt2, pt1);\n var len1 = dir.len();\n var len2 = dir2.len();\n\n if (len1 < 1e-3 || len2 < 1e-3) {\n return;\n }\n\n dir.scale(1 / len1);\n dir2.scale(1 / len2);\n var angleCos = dir.dot(dir2);\n var minTurnAngleCos = Math.cos(minTurnAngle);\n\n if (minTurnAngleCos < angleCos) {\n // Smaller than minTurnAngle\n // Calculate project point of pt0 on pt1-pt2\n var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);\n tmpProjPoint.fromArray(tmpArr); // Calculate new projected length with limited minTurnAngle and get the new connect point\n\n tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI - minTurnAngle)); // Limit the new calculated connect point between pt1 and pt2.\n\n var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);\n\n if (isNaN(t)) {\n return;\n }\n\n if (t < 0) {\n Point.copy(tmpProjPoint, pt1);\n } else if (t > 1) {\n Point.copy(tmpProjPoint, pt2);\n }\n\n tmpProjPoint.toArray(linePoints[1]);\n }\n}\n/**\n * Limit the angle of line and the surface\n * @param maxSurfaceAngle Radian of minimum turn angle. 0 - 180. 0 is same direction to normal. 180 is opposite\n */\n\nexport function limitSurfaceAngle(linePoints, surfaceNormal, maxSurfaceAngle) {\n if (!(maxSurfaceAngle <= 180 && maxSurfaceAngle > 0)) {\n return;\n }\n\n maxSurfaceAngle = maxSurfaceAngle / 180 * Math.PI;\n pt0.fromArray(linePoints[0]);\n pt1.fromArray(linePoints[1]);\n pt2.fromArray(linePoints[2]);\n Point.sub(dir, pt1, pt0);\n Point.sub(dir2, pt2, pt1);\n var len1 = dir.len();\n var len2 = dir2.len();\n\n if (len1 < 1e-3 || len2 < 1e-3) {\n return;\n }\n\n dir.scale(1 / len1);\n dir2.scale(1 / len2);\n var angleCos = dir.dot(surfaceNormal);\n var maxSurfaceAngleCos = Math.cos(maxSurfaceAngle);\n\n if (angleCos < maxSurfaceAngleCos) {\n // Calculate project point of pt0 on pt1-pt2\n var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);\n tmpProjPoint.fromArray(tmpArr);\n var HALF_PI = Math.PI / 2;\n var angle2 = Math.acos(dir2.dot(surfaceNormal));\n var newAngle = HALF_PI + angle2 - maxSurfaceAngle;\n\n if (newAngle >= HALF_PI) {\n // parallel\n Point.copy(tmpProjPoint, pt2);\n } else {\n // Calculate new projected length with limited minTurnAngle and get the new connect point\n tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI / 2 - newAngle)); // Limit the new calculated connect point between pt1 and pt2.\n\n var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);\n\n if (isNaN(t)) {\n return;\n }\n\n if (t < 0) {\n Point.copy(tmpProjPoint, pt1);\n } else if (t > 1) {\n Point.copy(tmpProjPoint, pt2);\n }\n }\n\n tmpProjPoint.toArray(linePoints[1]);\n }\n}\n\nfunction setLabelLineState(labelLine, ignore, stateName, stateModel) {\n var isNormal = stateName === 'normal';\n var stateObj = isNormal ? labelLine : labelLine.ensureState(stateName); // Make sure display.\n\n stateObj.ignore = ignore; // Set smooth\n\n var smooth = stateModel.get('smooth');\n\n if (smooth && smooth === true) {\n smooth = 0.3;\n }\n\n stateObj.shape = stateObj.shape || {};\n\n if (smooth > 0) {\n stateObj.shape.smooth = smooth;\n }\n\n var styleObj = stateModel.getModel('lineStyle').getLineStyle();\n isNormal ? labelLine.useStyle(styleObj) : stateObj.style = styleObj;\n}\n\nfunction buildLabelLinePath(path, shape) {\n var smooth = shape.smooth;\n var points = shape.points;\n\n if (!points) {\n return;\n }\n\n path.moveTo(points[0][0], points[0][1]);\n\n if (smooth > 0 && points.length >= 3) {\n var len1 = vector.dist(points[0], points[1]);\n var len2 = vector.dist(points[1], points[2]);\n\n if (!len1 || !len2) {\n path.lineTo(points[1][0], points[1][1]);\n path.lineTo(points[2][0], points[2][1]);\n return;\n }\n\n var moveLen = Math.min(len1, len2) * smooth;\n var midPoint0 = vector.lerp([], points[1], points[0], moveLen / len1);\n var midPoint2 = vector.lerp([], points[1], points[2], moveLen / len2);\n var midPoint1 = vector.lerp([], midPoint0, midPoint2, 0.5);\n path.bezierCurveTo(midPoint0[0], midPoint0[1], midPoint0[0], midPoint0[1], midPoint1[0], midPoint1[1]);\n path.bezierCurveTo(midPoint2[0], midPoint2[1], midPoint2[0], midPoint2[1], points[2][0], points[2][1]);\n } else {\n for (var i = 1; i < points.length; i++) {\n path.lineTo(points[i][0], points[i][1]);\n }\n }\n}\n/**\n * Create a label line if necessary and set it's style.\n */\n\n\nexport function setLabelLineStyle(targetEl, statesModels, defaultStyle) {\n var labelLine = targetEl.getTextGuideLine();\n var label = targetEl.getTextContent();\n\n if (!label) {\n // Not show label line if there is no label.\n if (labelLine) {\n targetEl.removeTextGuideLine();\n }\n\n return;\n }\n\n var normalModel = statesModels.normal;\n var showNormal = normalModel.get('show');\n var labelIgnoreNormal = label.ignore;\n\n for (var i = 0; i < DISPLAY_STATES.length; i++) {\n var stateName = DISPLAY_STATES[i];\n var stateModel = statesModels[stateName];\n var isNormal = stateName === 'normal';\n\n if (stateModel) {\n var stateShow = stateModel.get('show');\n var isLabelIgnored = isNormal ? labelIgnoreNormal : retrieve2(label.states[stateName] && label.states[stateName].ignore, labelIgnoreNormal);\n\n if (isLabelIgnored // Not show when label is not shown in this state.\n || !retrieve2(stateShow, showNormal) // Use normal state by default if not set.\n ) {\n var stateObj = isNormal ? labelLine : labelLine && labelLine.states[stateName];\n\n if (stateObj) {\n stateObj.ignore = true;\n }\n\n continue;\n } // Create labelLine if not exists\n\n\n if (!labelLine) {\n labelLine = new Polyline();\n targetEl.setTextGuideLine(labelLine); // Reset state of normal because it's new created.\n // NOTE: NORMAL should always been the first!\n\n if (!isNormal && (labelIgnoreNormal || !showNormal)) {\n setLabelLineState(labelLine, true, 'normal', statesModels.normal);\n } // Use same state proxy.\n\n\n if (targetEl.stateProxy) {\n labelLine.stateProxy = targetEl.stateProxy;\n }\n }\n\n setLabelLineState(labelLine, false, stateName, stateModel);\n }\n }\n\n if (labelLine) {\n defaults(labelLine.style, defaultStyle); // Not fill.\n\n labelLine.style.fill = null;\n var showAbove = normalModel.get('showAbove');\n var labelLineConfig = targetEl.textGuideLineConfig = targetEl.textGuideLineConfig || {};\n labelLineConfig.showAbove = showAbove || false; // Custom the buildPath.\n\n labelLine.buildPath = buildLabelLinePath;\n }\n}\nexport function getLabelLineStatesModels(itemModel, labelLineName) {\n labelLineName = labelLineName || 'labelLine';\n var statesModels = {\n normal: itemModel.getModel(labelLineName)\n };\n\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n statesModels[stateName] = itemModel.getModel([stateName, labelLineName]);\n }\n\n return statesModels;\n}"]},"metadata":{},"sourceType":"module"} |