highcharts
Version:
JavaScript charting framework
129 lines (128 loc) • 3.33 kB
JavaScript
/* *
*
* (c) 2010-2024 Torstein Honsi
*
* License: www.highcharts.com/license
*
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
*
* */
'use strict';
import Axis from './Axis.js';
import D from '../Defaults.js';
const { defaultOptions } = D;
import U from '../Utilities.js';
const { addEvent, merge, pick, splat } = U;
/* *
*
* Functions
*
* */
/**
* @private
*/
function chartAddZAxis(options) {
return new ZAxis(this, options);
}
/**
* Get the Z axis in addition to the default X and Y.
* @private
*/
function onChartAfterCreateAxes() {
const zAxisOptions = this.options.zAxis = splat(this.options.zAxis || {});
if (!this.is3d()) {
return;
}
this.zAxis = [];
zAxisOptions.forEach((axisOptions) => {
this.addZAxis(axisOptions).setScale();
});
}
/* *
*
* Class
*
* */
/**
* 3D axis for z coordinates.
* @private
*/
class ZAxis extends Axis {
constructor() {
/* *
*
* Static Properties
*
* */
super(...arguments);
this.isZAxis = true;
}
static compose(ChartClass) {
const chartProto = ChartClass.prototype;
if (!chartProto.addZAxis) {
defaultOptions.zAxis = merge(defaultOptions.xAxis, {
offset: 0,
lineWidth: 0
});
chartProto.addZAxis = chartAddZAxis;
chartProto.collectionsWithInit.zAxis = [chartProto.addZAxis];
chartProto.collectionsWithUpdate.push('zAxis');
addEvent(ChartClass, 'afterCreateAxes', onChartAfterCreateAxes);
}
}
/* *
*
* Constructor
*
* */
init(chart, userOptions) {
// #14793, this used to be set on the prototype
this.isZAxis = true;
super.init(chart, userOptions, 'zAxis');
}
/* *
*
* Functions
*
* */
getSeriesExtremes() {
this.hasVisibleSeries = false;
// Reset properties in case we're redrawing (#3353)
this.dataMin = this.dataMax = this.ignoreMinPadding = (this.ignoreMaxPadding = void 0);
if (this.stacking) {
this.stacking.buildStacks();
}
// Loop through this axis' series
this.series.forEach((series) => {
if (series.reserveSpace()) {
let threshold = series.options.threshold;
this.hasVisibleSeries = true;
// Validate threshold in logarithmic axes
if (this.positiveValuesOnly && threshold <= 0) {
threshold = void 0;
}
const zData = series.getColumn('z');
if (zData.length) {
this.dataMin = Math.min(pick(this.dataMin, zData[0]), Math.min.apply(null, zData));
this.dataMax = Math.max(pick(this.dataMax, zData[0]), Math.max.apply(null, zData));
}
}
});
}
/**
* @private
*/
setAxisSize() {
const chart = this.chart;
super.setAxisSize();
this.width = this.len = (chart.options.chart.options3d &&
chart.options.chart.options3d.depth) || 0;
this.right = chart.chartWidth - this.width - this.left;
}
}
/* *
*
* Default Export
*
* */
export default ZAxis;