scichart
Version:
Fast WebGL JavaScript Charting Library and Framework
109 lines (108 loc) • 4.71 kB
JavaScript
;
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
};