UNPKG

scichart

Version:

Fast WebGL JavaScript Charting Library and Framework

109 lines (108 loc) 4.71 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.labelHelper = void 0; var AnchorPoint_1 = require("../../../types/AnchorPoint"); var LabelPlacement_1 = require("../../../types/LabelPlacement"); var PolarLabelMode_1 = require("../Axis/Polar/types/PolarLabelMode"); function radiansToDegrees(r) { return (180 * r) / Math.PI; } function normalizeAngle(a) { var normalized = a; while (normalized < 0) { normalized += 2 * Math.PI; } normalized = normalized % (2 * Math.PI); return normalized; } /** * Calculates label rotation for a polar chart with different label modes * @param mode - One of the following polar label modes {@link EPolarLabelMode} * @param angle - data point angle in radians * @returns an angle in radians to apply for the label when drawing */ function getPolarLabelRotation(mode, angle) { if (mode === PolarLabelMode_1.EPolarLabelMode.Parallel) { var aDeg = Math.round(radiansToDegrees(normalizeAngle(angle))); if (aDeg % 360 <= 180) { return angle - Math.PI / 2; } else { return angle - (3 * Math.PI) / 2; } } else if (mode === PolarLabelMode_1.EPolarLabelMode.Perpendicular) { if (Math.cos(angle) > 0) { return angle; } else { return angle - Math.PI; } } return 0; } function getLabelPlacementForRadialAxis(radialAxisLabelPlacement) { if (radialAxisLabelPlacement === LabelPlacement_1.ERadialAxisLabelPlacement.Top) { return AnchorPoint_1.EVerticalAnchorPoint.Bottom; } else if (radialAxisLabelPlacement === LabelPlacement_1.ERadialAxisLabelPlacement.Bottom) { return AnchorPoint_1.EVerticalAnchorPoint.Top; } else { return AnchorPoint_1.EVerticalAnchorPoint.Center; } } function getHorizontalAnchorPoint(angularAxisLabelPlacement, isInverse) { if (angularAxisLabelPlacement === LabelPlacement_1.EAngularAxisLabelPlacement.Outer) { return isInverse ? AnchorPoint_1.EHorizontalAnchorPoint.Right : AnchorPoint_1.EHorizontalAnchorPoint.Left; } else if (angularAxisLabelPlacement === LabelPlacement_1.EAngularAxisLabelPlacement.Inner) { return isInverse ? AnchorPoint_1.EHorizontalAnchorPoint.Left : AnchorPoint_1.EHorizontalAnchorPoint.Right; } else { return AnchorPoint_1.EHorizontalAnchorPoint.Center; } } function getVerticalAnchorPoint(angularAxisLabelPlacement, isInverse) { if (angularAxisLabelPlacement === LabelPlacement_1.EAngularAxisLabelPlacement.Outer) { return isInverse ? AnchorPoint_1.EVerticalAnchorPoint.Top : AnchorPoint_1.EVerticalAnchorPoint.Bottom; } else if (angularAxisLabelPlacement === LabelPlacement_1.EAngularAxisLabelPlacement.Inner) { return isInverse ? AnchorPoint_1.EVerticalAnchorPoint.Bottom : AnchorPoint_1.EVerticalAnchorPoint.Top; } else { return AnchorPoint_1.EVerticalAnchorPoint.Center; } } function getLabelRotationAndPlacementForAngularAxis(radians, labelMode, angularAxisLabelPlacement) { if (labelMode === PolarLabelMode_1.EPolarLabelMode.Parallel) { var angleInDegrees = exports.labelHelper.radiansToDegrees(Math.PI / 2 - radians); var isInverse = angleInDegrees < -90; return { resultAngle: isInverse ? angleInDegrees + 180 : angleInDegrees, horizontalAnchorPoint: AnchorPoint_1.EHorizontalAnchorPoint.Center, verticalAnchorPoint: getVerticalAnchorPoint(angularAxisLabelPlacement, isInverse) }; } else if (labelMode === PolarLabelMode_1.EPolarLabelMode.Perpendicular) { var angleInDegrees = exports.labelHelper.radiansToDegrees(-radians); var isInverse = angleInDegrees < -90 && angleInDegrees > -270; return { resultAngle: isInverse ? angleInDegrees + 180 : angleInDegrees, horizontalAnchorPoint: getHorizontalAnchorPoint(angularAxisLabelPlacement, isInverse), verticalAnchorPoint: AnchorPoint_1.EVerticalAnchorPoint.Center }; } return { resultAngle: 0, horizontalAnchorPoint: AnchorPoint_1.EHorizontalAnchorPoint.Center, verticalAnchorPoint: AnchorPoint_1.EVerticalAnchorPoint.Center }; } exports.labelHelper = { getPolarLabelRotation: getPolarLabelRotation, radiansToDegrees: radiansToDegrees, getLabelPlacementForRadialAxis: getLabelPlacementForRadialAxis, getLabelRotationAndPlacementForAngularAxis: getLabelRotationAndPlacementForAngularAxis, normalizeAngle: normalizeAngle };