corrade-nucleus-nucleons – Blame information for rev

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 /**
2 * @license Highcharts JS v5.0.10 (2017-03-31)
3 *
4 * 3D features for Highcharts JS
5 *
6 * @license: www.highcharts.com/license
7 */
8 'use strict';
9 (function(factory) {
10 if (typeof module === 'object' && module.exports) {
11 module.exports = factory;
12 } else {
13 factory(Highcharts);
14 }
15 }(function(Highcharts) {
16 (function(H) {
17 /**
18 * (c) 2010-2017 Torstein Honsi
19 *
20 * License: www.highcharts.com/license
21 */
22 /**
23 * Mathematical Functionility
24 */
25 var deg2rad = H.deg2rad,
26 pick = H.pick;
27 /**
28 * Apply 3-D rotation
29 * Euler Angles (XYZ): cosA = cos(Alfa|Roll), cosB = cos(Beta|Pitch), cosG = cos(Gamma|Yaw)
30 *
31 * Composite rotation:
32 * | cosB * cosG | cosB * sinG | -sinB |
33 * | sinA * sinB * cosG - cosA * sinG | sinA * sinB * sinG + cosA * cosG | sinA * cosB |
34 * | cosA * sinB * cosG + sinA * sinG | cosA * sinB * sinG - sinA * cosG | cosA * cosB |
35 *
36 * Now, Gamma/Yaw is not used (angle=0), so we assume cosG = 1 and sinG = 0, so we get:
37 * | cosB | 0 | - sinB |
38 * | sinA * sinB | cosA | sinA * cosB |
39 * | cosA * sinB | - sinA | cosA * cosB |
40 *
41 * But in browsers, y is reversed, so we get sinA => -sinA. The general result is:
42 * | cosB | 0 | - sinB | | x | | px |
43 * | - sinA * sinB | cosA | - sinA * cosB | x | y | = | py |
44 * | cosA * sinB | sinA | cosA * cosB | | z | | pz |
45 */
46 function rotate3D(x, y, z, angles) {
47 return {
48 x: angles.cosB * x - angles.sinB * z,
49 y: -angles.sinA * angles.sinB * x + angles.cosA * y - angles.cosB * angles.sinA * z,
50 z: angles.cosA * angles.sinB * x + angles.sinA * y + angles.cosA * angles.cosB * z
51 };
52 }
53  
54 function perspective3D(coordinate, origin, distance) {
55 var projection = ((distance > 0) && (distance < Number.POSITIVE_INFINITY)) ? distance / (coordinate.z + origin.z + distance) : 1;
56 return {
57 x: coordinate.x * projection,
58 y: coordinate.y * projection
59 };
60 }
61  
62 /**
63 * Transforms a given array of points according to the angles in chart.options.
64 * Parameters:
65 * - points: the array of points
66 * - chart: the chart
67 * - insidePlotArea: wether to verifiy the points are inside the plotArea
68 * Returns:
69 * - an array of transformed points
70 */
71 H.perspective = function(points, chart, insidePlotArea) {
72 var options3d = chart.options.chart.options3d,
73 inverted = insidePlotArea ? chart.inverted : false,
74 origin = {
75 x: chart.plotWidth / 2,
76 y: chart.plotHeight / 2,
77 z: options3d.depth / 2,
78 vd: pick(options3d.depth, 1) * pick(options3d.viewDistance, 0)
79 },
80 scale = chart.scale3d || 1,
81 beta = deg2rad * options3d.beta * (inverted ? -1 : 1),
82 alpha = deg2rad * options3d.alpha * (inverted ? -1 : 1),
83 angles = {
84 cosA: Math.cos(alpha),
85 cosB: Math.cos(-beta),
86 sinA: Math.sin(alpha),
87 sinB: Math.sin(-beta)
88 };
89  
90 if (!insidePlotArea) {
91 origin.x += chart.plotLeft;
92 origin.y += chart.plotTop;
93 }
94  
95 // Transform each point
96 return H.map(points, function(point) {
97 var rotated = rotate3D(
98 (inverted ? point.y : point.x) - origin.x,
99 (inverted ? point.x : point.y) - origin.y,
100 (point.z || 0) - origin.z,
101 angles
102 ),
103 coordinate = perspective3D(rotated, origin, origin.vd); // Apply perspective
104  
105 // Apply translation
106 coordinate.x = coordinate.x * scale + origin.x;
107 coordinate.y = coordinate.y * scale + origin.y;
108 coordinate.z = rotated.z * scale + origin.z;
109  
110 return {
111 x: (inverted ? coordinate.y : coordinate.x),
112 y: (inverted ? coordinate.x : coordinate.y),
113 z: coordinate.z
114 };
115 });
116 };
117  
118 /**
119 * Calculate a distance from camera to points - made for calculating zIndex of scatter points.
120 * Parameters:
121 * - coordinates: The coordinates of the specific point
122 * - chart: the chart
123 * Returns:
124 * - a distance from camera to point
125 */
126 H.pointCameraDistance = function(coordinates, chart) {
127 var options3d = chart.options.chart.options3d,
128 cameraPosition = {
129 x: chart.plotWidth / 2,
130 y: chart.plotHeight / 2,
131 z: pick(options3d.depth, 1) * pick(options3d.viewDistance, 0) + options3d.depth
132 },
133 distance = Math.sqrt(Math.pow(cameraPosition.x - coordinates.plotX, 2) + Math.pow(cameraPosition.y - coordinates.plotY, 2) + Math.pow(cameraPosition.z - coordinates.plotZ, 2));
134 return distance;
135 };
136  
137 }(Highcharts));
138 (function(H) {
139 /**
140 * (c) 2010-2017 Torstein Honsi
141 *
142 * License: www.highcharts.com/license
143 */
144 var cos = Math.cos,
145 PI = Math.PI,
146 sin = Math.sin;
147  
148  
149 var animObject = H.animObject,
150 charts = H.charts,
151 color = H.color,
152 defined = H.defined,
153 deg2rad = H.deg2rad,
154 each = H.each,
155 extend = H.extend,
156 inArray = H.inArray,
157 map = H.map,
158 merge = H.merge,
159 perspective = H.perspective,
160 pick = H.pick,
161 SVGElement = H.SVGElement,
162 SVGRenderer = H.SVGRenderer,
163 wrap = H.wrap;
164 /***
165 EXTENSION TO THE SVG-RENDERER TO ENABLE 3D SHAPES
166 ***/
167 ////// HELPER METHODS //////
168  
169 var dFactor = (4 * (Math.sqrt(2) - 1) / 3) / (PI / 2);
170  
171  
172 //Shoelace algorithm -- http://en.wikipedia.org/wiki/Shoelace_formula
173 function shapeArea(vertexes) {
174 var area = 0,
175 i,
176 j;
177 for (i = 0; i < vertexes.length; i++) {
178 < vertexes.length; i++) { j = (i + 1) % vertexes.length;
179 < vertexes.length; i++) { area += vertexes[i].x * vertexes[j].y - vertexes[j].x * vertexes[i].y;
180 < vertexes.length; i++) { }
181 < vertexes.length; i++) { return area / 2;
182 < vertexes.length; i++) { }
183  
184 < vertexes.length; i++) { function averageZ(vertexes) {
185 < vertexes.length; i++) { var z = 0,
186 < vertexes.length; i++) { i;
187 < vertexes.length; i++) { for (i = 0; i < vertexes.length; i++) {
188 < vertexes.length; i++) { z += vertexes[i].z;
189 < vertexes.length; i++) { }
190 < vertexes.length; i++) { return vertexes.length ? z / vertexes.length : 0;
191 < vertexes.length; i++) { }
192  
193 < vertexes.length; i++) { /** Method to construct a curved path
194 < vertexes.length; i++) { * Can 'wrap' around more then 180 degrees
195 < vertexes.length; i++) { */
196 < vertexes.length; i++) { function curveTo(cx, cy, rx, ry, start, end, dx, dy) {
197 < vertexes.length; i++) { var result = [],
198 < vertexes.length; i++) { arcAngle = end - start;
199 < vertexes.length; i++) { if ((end > start) && (end - start > Math.PI / 2 + 0.0001)) {
200 < vertexes.length; i++) { result = result.concat(curveTo(cx, cy, rx, ry, start, start + (Math.PI / 2), dx, dy));
201 < vertexes.length; i++) { result = result.concat(curveTo(cx, cy, rx, ry, start + (Math.PI / 2), end, dx, dy));
202 < vertexes.length; i++) { return result;
203 < vertexes.length; i++) { }
204 < vertexes.length; i++) { if ((end < start) && (start - end > Math.PI / 2 + 0.0001)) {
205 < vertexes.length; i++) { result = result.concat(curveTo(cx, cy, rx, ry, start, start - (Math.PI / 2), dx, dy));
206 < vertexes.length; i++) { result = result.concat(curveTo(cx, cy, rx, ry, start - (Math.PI / 2), end, dx, dy));
207 < vertexes.length; i++) { return result;
208 < vertexes.length; i++) { }
209 < vertexes.length; i++) { return [
210 < vertexes.length; i++) { 'C',
211 < vertexes.length; i++) { cx + (rx * Math.cos(start)) - ((rx * dFactor * arcAngle) * Math.sin(start)) + dx,
212 < vertexes.length; i++) { cy + (ry * Math.sin(start)) + ((ry * dFactor * arcAngle) * Math.cos(start)) + dy,
213 < vertexes.length; i++) { cx + (rx * Math.cos(end)) + ((rx * dFactor * arcAngle) * Math.sin(end)) + dx,
214 < vertexes.length; i++) { cy + (ry * Math.sin(end)) - ((ry * dFactor * arcAngle) * Math.cos(end)) + dy,
215  
216 < vertexes.length; i++) { cx + (rx * Math.cos(end)) + dx,
217 < vertexes.length; i++) { cy + (ry * Math.sin(end)) + dy
218 < vertexes.length; i++) { ];
219 < vertexes.length; i++) { }
220  
221  
222  
223 < vertexes.length; i++) { SVGRenderer.prototype.toLinePath = function(points, closed) {
224 < vertexes.length; i++) { var result = [];
225  
226 < vertexes.length; i++) { // Put "L x y" for each point
227 < vertexes.length; i++) { each(points, function(point) {
228 < vertexes.length; i++) { result.push('L', point.x, point.y);
229 < vertexes.length; i++) { });
230  
231 < vertexes.length; i++) { if (points.length) {
232 < vertexes.length; i++) { // Set the first element to M
233 < vertexes.length; i++) { result[0] = 'M';
234  
235 < vertexes.length; i++) { // If it is a closed line, add Z
236 < vertexes.length; i++) { if (closed) {
237 < vertexes.length; i++) { result.push('Z');
238 < vertexes.length; i++) { }
239 < vertexes.length; i++) { }
240  
241 < vertexes.length; i++) { return result;
242 < vertexes.length; i++) { };
243  
244 < vertexes.length; i++) { ////// CUBOIDS //////
245 < vertexes.length; i++) { SVGRenderer.prototype.cuboid = function(shapeArgs) {
246  
247 < vertexes.length; i++) { var result = this.g(),
248 < vertexes.length; i++) { destroy = result.destroy,
249 < vertexes.length; i++) { paths = this.cuboidPath(shapeArgs);
250  
251  
252 < vertexes.length; i++) { result.attr({
253 < vertexes.length; i++) { 'stroke-linejoin': 'round'
254 < vertexes.length; i++) { });
255  
256  
257 < vertexes.length; i++) { // create the 3 sides
258 < vertexes.length; i++) { result.front = this.path(paths[0]).attr({
259 < vertexes.length; i++) { 'class': 'highcharts-3d-front',
260 < vertexes.length; i++) { zIndex: paths[3]
261 < vertexes.length; i++) { }).add(result);
262 < vertexes.length; i++) { result.top = this.path(paths[1]).attr({
263 < vertexes.length; i++) { 'class': 'highcharts-3d-top',
264 < vertexes.length; i++) { zIndex: paths[4]
265 < vertexes.length; i++) { }).add(result);
266 < vertexes.length; i++) { result.side = this.path(paths[2]).attr({
267 < vertexes.length; i++) { 'class': 'highcharts-3d-side',
268 < vertexes.length; i++) { zIndex: paths[5]
269 < vertexes.length; i++) { }).add(result);
270  
271 < vertexes.length; i++) { // apply the fill everywhere, the top a bit brighter, the side a bit darker
272 < vertexes.length; i++) { result.fillSetter = function(fill) {
273 < vertexes.length; i++) { this.front.attr({
274 < vertexes.length; i++) { fill: fill
275 < vertexes.length; i++) { });
276 < vertexes.length; i++) { this.top.attr({
277 < vertexes.length; i++) { fill: color(fill).brighten(0.1).get()
278 < vertexes.length; i++) { });
279 < vertexes.length; i++) { this.side.attr({
280 < vertexes.length; i++) { fill: color(fill).brighten(-0.1).get()
281 < vertexes.length; i++) { });
282  
283 < vertexes.length; i++) { this.color = fill;
284 < vertexes.length; i++) { return this;
285 < vertexes.length; i++) { };
286  
287 < vertexes.length; i++) { // apply opacaity everywhere
288 < vertexes.length; i++) { result.opacitySetter = function(opacity) {
289 < vertexes.length; i++) { this.front.attr({
290 < vertexes.length; i++) { opacity: opacity
291 < vertexes.length; i++) { });
292 < vertexes.length; i++) { this.top.attr({
293 < vertexes.length; i++) { opacity: opacity
294 < vertexes.length; i++) { });
295 < vertexes.length; i++) { this.side.attr({
296 < vertexes.length; i++) { opacity: opacity
297 < vertexes.length; i++) { });
298 < vertexes.length; i++) { return this;
299 < vertexes.length; i++) { };
300  
301 < vertexes.length; i++) { result.attr = function(args, val) {
302  
303 < vertexes.length; i++) { // Resolve setting attributes by string name
304 < vertexes.length; i++) { if (typeof args === 'string' && typeof val !== 'undefined') {
305 < vertexes.length; i++) { var key = args;
306 < vertexes.length; i++) { args = {};
307 < vertexes.length; i++) { args[key] = val;
308 < vertexes.length; i++) { }
309  
310 < vertexes.length; i++) { if (args.shapeArgs || defined(args.x)) {
311 < vertexes.length; i++) { var shapeArgs = args.shapeArgs || args;
312 < vertexes.length; i++) { var paths = this.renderer.cuboidPath(shapeArgs);
313 < vertexes.length; i++) { this.front.attr({
314 < vertexes.length; i++) { d: paths[0],
315 < vertexes.length; i++) { zIndex: paths[3]
316 < vertexes.length; i++) { });
317 < vertexes.length; i++) { this.top.attr({
318 < vertexes.length; i++) { d: paths[1],
319 < vertexes.length; i++) { zIndex: paths[4]
320 < vertexes.length; i++) { });
321 < vertexes.length; i++) { this.side.attr({
322 < vertexes.length; i++) { d: paths[2],
323 < vertexes.length; i++) { zIndex: paths[5]
324 < vertexes.length; i++) { });
325 < vertexes.length; i++) { } else {
326 < vertexes.length; i++) { return H.SVGElement.prototype.attr.call(this, args); // getter returns value
327 < vertexes.length; i++) { }
328  
329 < vertexes.length; i++) { return this;
330 < vertexes.length; i++) { };
331  
332 < vertexes.length; i++) { result.animate = function(args, duration, complete) {
333 < vertexes.length; i++) { if (defined(args.x) && defined(args.y)) {
334 < vertexes.length; i++) { var paths = this.renderer.cuboidPath(args);
335 < vertexes.length; i++) { this.front.attr({
336 < vertexes.length; i++) { zIndex: paths[3]
337 < vertexes.length; i++) { }).animate({
338 < vertexes.length; i++) { d: paths[0]
339 < vertexes.length; i++) { }, duration, complete);
340 < vertexes.length; i++) { this.top.attr({
341 < vertexes.length; i++) { zIndex: paths[4]
342 < vertexes.length; i++) { }).animate({
343 < vertexes.length; i++) { d: paths[1]
344 < vertexes.length; i++) { }, duration, complete);
345 < vertexes.length; i++) { this.side.attr({
346 < vertexes.length; i++) { zIndex: paths[5]
347 < vertexes.length; i++) { }).animate({
348 < vertexes.length; i++) { d: paths[2]
349 < vertexes.length; i++) { }, duration, complete);
350 < vertexes.length; i++) { this.attr({
351 < vertexes.length; i++) { zIndex: -paths[6] // #4774
352 < vertexes.length; i++) { });
353 < vertexes.length; i++) { } else if (args.opacity) {
354 < vertexes.length; i++) { this.front.animate(args, duration, complete);
355 < vertexes.length; i++) { this.top.animate(args, duration, complete);
356 < vertexes.length; i++) { this.side.animate(args, duration, complete);
357 < vertexes.length; i++) { } else {
358 < vertexes.length; i++) { SVGElement.prototype.animate.call(this, args, duration, complete);
359 < vertexes.length; i++) { }
360 < vertexes.length; i++) { return this;
361 < vertexes.length; i++) { };
362  
363 < vertexes.length; i++) { // destroy all children
364 < vertexes.length; i++) { result.destroy = function() {
365 < vertexes.length; i++) { this.front.destroy();
366 < vertexes.length; i++) { this.top.destroy();
367 < vertexes.length; i++) { this.side.destroy();
368  
369 < vertexes.length; i++) { return destroy.call(this);
370 < vertexes.length; i++) { };
371  
372 < vertexes.length; i++) { // Apply the Z index to the cuboid group
373 < vertexes.length; i++) { result.attr({
374 < vertexes.length; i++) { zIndex: -paths[6]
375 < vertexes.length; i++) { });
376  
377 < vertexes.length; i++) { return result;
378 < vertexes.length; i++) { };
379  
380 < vertexes.length; i++) { /**
381 < vertexes.length; i++) { * Generates a cuboid
382 < vertexes.length; i++) { */
383 < vertexes.length; i++) { SVGRenderer.prototype.cuboidPath = function(shapeArgs) {
384 < vertexes.length; i++) { var x = shapeArgs.x,
385 < vertexes.length; i++) { y = shapeArgs.y,
386 < vertexes.length; i++) { z = shapeArgs.z,
387 < vertexes.length; i++) { h = shapeArgs.height,
388 < vertexes.length; i++) { w = shapeArgs.width,
389 < vertexes.length; i++) { d = shapeArgs.depth,
390 < vertexes.length; i++) { chart = charts[this.chartIndex];
391  
392 < vertexes.length; i++) { // The 8 corners of the cube
393 < vertexes.length; i++) { var pArr = [{
394 < vertexes.length; i++) { x: x,
395 < vertexes.length; i++) { y: y,
396 < vertexes.length; i++) { z: z
397 < vertexes.length; i++) { },
398 < vertexes.length; i++) { {
399 < vertexes.length; i++) { x: x + w,
400 < vertexes.length; i++) { y: y,
401 < vertexes.length; i++) { z: z
402 < vertexes.length; i++) { },
403 < vertexes.length; i++) { {
404 < vertexes.length; i++) { x: x + w,
405 < vertexes.length; i++) { y: y + h,
406 < vertexes.length; i++) { z: z
407 < vertexes.length; i++) { },
408 < vertexes.length; i++) { {
409 < vertexes.length; i++) { x: x,
410 < vertexes.length; i++) { y: y + h,
411 < vertexes.length; i++) { z: z
412 < vertexes.length; i++) { },
413 < vertexes.length; i++) { {
414 < vertexes.length; i++) { x: x,
415 < vertexes.length; i++) { y: y + h,
416 < vertexes.length; i++) { z: z + d
417 < vertexes.length; i++) { },
418 < vertexes.length; i++) { {
419 < vertexes.length; i++) { x: x + w,
420 < vertexes.length; i++) { y: y + h,
421 < vertexes.length; i++) { z: z + d
422 < vertexes.length; i++) { },
423 < vertexes.length; i++) { {
424 < vertexes.length; i++) { x: x + w,
425 < vertexes.length; i++) { y: y,
426 < vertexes.length; i++) { z: z + d
427 < vertexes.length; i++) { },
428 < vertexes.length; i++) { {
429 < vertexes.length; i++) { x: x,
430 < vertexes.length; i++) { y: y,
431 < vertexes.length; i++) { z: z + d
432 < vertexes.length; i++) { }
433 < vertexes.length; i++) { ];
434  
435 < vertexes.length; i++) { // apply perspective
436 < vertexes.length; i++) { pArr = perspective(pArr, chart, shapeArgs.insidePlotArea);
437  
438 < vertexes.length; i++) { // helper method to decide which side is visible
439 < vertexes.length; i++) { function mapPath(i) {
440 < vertexes.length; i++) { return pArr[i];
441 < vertexes.length; i++) { }
442 < vertexes.length; i++) { var pickShape = function(path1, path2) {
443 < vertexes.length; i++) { var ret = [];
444 < vertexes.length; i++) { path1 = map(path1, mapPath);
445 < vertexes.length; i++) { path2 = map(path2, mapPath);
446 < vertexes.length; i++) { if (shapeArea(path1) < 0) {
447 < vertexes.length; i++) { ret = path1;
448 < vertexes.length; i++) { } else if (shapeArea(path2) < 0) {
449 < vertexes.length; i++) { ret = path2;
450 < vertexes.length; i++) { }
451 < vertexes.length; i++) { return ret;
452 < vertexes.length; i++) { };
453  
454 < vertexes.length; i++) { // front or back
455 < vertexes.length; i++) { var front = [3, 2, 1, 0];
456 < vertexes.length; i++) { var back = [7, 6, 5, 4];
457 < vertexes.length; i++) { var path1 = pickShape(front, back);
458  
459 < vertexes.length; i++) { // top or bottom
460 < vertexes.length; i++) { var top = [1, 6, 7, 0];
461 < vertexes.length; i++) { var bottom = [4, 5, 2, 3];
462 < vertexes.length; i++) { var path2 = pickShape(top, bottom);
463  
464 < vertexes.length; i++) { // side
465 < vertexes.length; i++) { var right = [1, 2, 5, 6];
466 < vertexes.length; i++) { var left = [0, 7, 4, 3];
467 < vertexes.length; i++) { var path3 = pickShape(right, left);
468  
469 < vertexes.length; i++) { return [this.toLinePath(path1, true), this.toLinePath(path2, true), this.toLinePath(path3, true), averageZ(path1), averageZ(path2), averageZ(path3), averageZ(map(bottom, mapPath)) * 9e9]; // #4774
470 < vertexes.length; i++) { };
471  
472 < vertexes.length; i++) { ////// SECTORS //////
473 < vertexes.length; i++) { H.SVGRenderer.prototype.arc3d = function(attribs) {
474  
475 < vertexes.length; i++) { var wrapper = this.g(),
476 < vertexes.length; i++) { renderer = wrapper.renderer,
477 < vertexes.length; i++) { customAttribs = ['x', 'y', 'r', 'innerR', 'start', 'end'];
478  
479 < vertexes.length; i++) { /**
480 < vertexes.length; i++) { * Get custom attributes. Don't mutate the original object and return an object with only custom attr.
481 < vertexes.length; i++) { */
482 < vertexes.length; i++) { function suckOutCustom(params) {
483 < vertexes.length; i++) { var hasCA = false,
484 < vertexes.length; i++) { ca = {};
485  
486 < vertexes.length; i++) { params = merge(params); // Don't mutate the original object
487  
488 < vertexes.length; i++) { for (var key in params) {
489 < vertexes.length; i++) { if (inArray(key, customAttribs) !== -1) {
490 < vertexes.length; i++) { ca[key] = params[key];
491 < vertexes.length; i++) { delete params[key];
492 < vertexes.length; i++) { hasCA = true;
493 < vertexes.length; i++) { }
494 < vertexes.length; i++) { }
495 < vertexes.length; i++) { return hasCA ? ca : false;
496 < vertexes.length; i++) { }
497  
498 < vertexes.length; i++) { attribs = merge(attribs);
499  
500 < vertexes.length; i++) { attribs.alpha *= deg2rad;
501 < vertexes.length; i++) { attribs.beta *= deg2rad;
502  
503 < vertexes.length; i++) { // Create the different sub sections of the shape
504 < vertexes.length; i++) { wrapper.top = renderer.path();
505 < vertexes.length; i++) { wrapper.side1 = renderer.path();
506 < vertexes.length; i++) { wrapper.side2 = renderer.path();
507 < vertexes.length; i++) { wrapper.inn = renderer.path();
508 < vertexes.length; i++) { wrapper.out = renderer.path();
509  
510 < vertexes.length; i++) { /**
511 < vertexes.length; i++) { * Add all faces
512 < vertexes.length; i++) { */
513 < vertexes.length; i++) { wrapper.onAdd = function() {
514 < vertexes.length; i++) { var parent = wrapper.parentGroup,
515 < vertexes.length; i++) { className = wrapper.attr('class');
516 < vertexes.length; i++) { wrapper.top.add(wrapper);
517  
518 < vertexes.length; i++) { // These faces are added outside the wrapper group because the z index
519 < vertexes.length; i++) { // relates to neighbour elements as well
520 < vertexes.length; i++) { each(['out', 'inn', 'side1', 'side2'], function(face) {
521 < vertexes.length; i++) { wrapper[face]
522 < vertexes.length; i++) { .addClass(className + ' highcharts-3d-side')
523 < vertexes.length; i++) { .add(parent);
524 < vertexes.length; i++) { });
525 < vertexes.length; i++) { };
526  
527 < vertexes.length; i++) { /**
528 < vertexes.length; i++) { * Compute the transformed paths and set them to the composite shapes
529 < vertexes.length; i++) { */
530 < vertexes.length; i++) { wrapper.setPaths = function(attribs) {
531  
532 < vertexes.length; i++) { var paths = wrapper.renderer.arc3dPath(attribs),
533 < vertexes.length; i++) { zIndex = paths.zTop * 100;
534  
535 < vertexes.length; i++) { wrapper.attribs = attribs;
536  
537 < vertexes.length; i++) { wrapper.top.attr({
538 < vertexes.length; i++) { d: paths.top,
539 < vertexes.length; i++) { zIndex: paths.zTop
540 < vertexes.length; i++) { });
541 < vertexes.length; i++) { wrapper.inn.attr({
542 < vertexes.length; i++) { d: paths.inn,
543 < vertexes.length; i++) { zIndex: paths.zInn
544 < vertexes.length; i++) { });
545 < vertexes.length; i++) { wrapper.out.attr({
546 < vertexes.length; i++) { d: paths.out,
547 < vertexes.length; i++) { zIndex: paths.zOut
548 < vertexes.length; i++) { });
549 < vertexes.length; i++) { wrapper.side1.attr({
550 < vertexes.length; i++) { d: paths.side1,
551 < vertexes.length; i++) { zIndex: paths.zSide1
552 < vertexes.length; i++) { });
553 < vertexes.length; i++) { wrapper.side2.attr({
554 < vertexes.length; i++) { d: paths.side2,
555 < vertexes.length; i++) { zIndex: paths.zSide2
556 < vertexes.length; i++) { });
557  
558  
559 < vertexes.length; i++) { // show all children
560 < vertexes.length; i++) { wrapper.zIndex = zIndex;
561 < vertexes.length; i++) { wrapper.attr({
562 < vertexes.length; i++) { zIndex: zIndex
563 < vertexes.length; i++) { });
564  
565 < vertexes.length; i++) { // Set the radial gradient center the first time
566 < vertexes.length; i++) { if (attribs.center) {
567 < vertexes.length; i++) { wrapper.top.setRadialReference(attribs.center);
568 < vertexes.length; i++) { delete attribs.center;
569 < vertexes.length; i++) { }
570 < vertexes.length; i++) { };
571 < vertexes.length; i++) { wrapper.setPaths(attribs);
572  
573 < vertexes.length; i++) { // Apply the fill to the top and a darker shade to the sides
574 < vertexes.length; i++) { wrapper.fillSetter = function(value) {
575 < vertexes.length; i++) { var darker = color(value).brighten(-0.1).get();
576  
577 < vertexes.length; i++) { this.fill = value;
578  
579 < vertexes.length; i++) { this.side1.attr({
580 < vertexes.length; i++) { fill: darker
581 < vertexes.length; i++) { });
582 < vertexes.length; i++) { this.side2.attr({
583 < vertexes.length; i++) { fill: darker
584 < vertexes.length; i++) { });
585 < vertexes.length; i++) { this.inn.attr({
586 < vertexes.length; i++) { fill: darker
587 < vertexes.length; i++) { });
588 < vertexes.length; i++) { this.out.attr({
589 < vertexes.length; i++) { fill: darker
590 < vertexes.length; i++) { });
591 < vertexes.length; i++) { this.top.attr({
592 < vertexes.length; i++) { fill: value
593 < vertexes.length; i++) { });
594 < vertexes.length; i++) { return this;
595 < vertexes.length; i++) { };
596  
597 < vertexes.length; i++) { // Apply the same value to all. These properties cascade down to the children
598 < vertexes.length; i++) { // when set to the composite arc3d.
599 < vertexes.length; i++) { each(['opacity', 'translateX', 'translateY', 'visibility'], function(setter) {
600 < vertexes.length; i++) { wrapper[setter + 'Setter'] = function(value, key) {
601 < vertexes.length; i++) { wrapper[key] = value;
602 < vertexes.length; i++) { each(['out', 'inn', 'side1', 'side2', 'top'], function(el) {
603 < vertexes.length; i++) { wrapper[el].attr(key, value);
604 < vertexes.length; i++) { });
605 < vertexes.length; i++) { };
606 < vertexes.length; i++) { });
607  
608 < vertexes.length; i++) { /**
609 < vertexes.length; i++) { * Override attr to remove shape attributes and use those to set child paths
610 < vertexes.length; i++) { */
611 < vertexes.length; i++) { wrap(wrapper, 'attr', function(proceed, params) {
612 < vertexes.length; i++) { var ca;
613 < vertexes.length; i++) { if (typeof params === 'object') {
614 < vertexes.length; i++) { ca = suckOutCustom(params);
615 < vertexes.length; i++) { if (ca) {
616 < vertexes.length; i++) { extend(wrapper.attribs, ca);
617 < vertexes.length; i++) { wrapper.setPaths(wrapper.attribs);
618 < vertexes.length; i++) { }
619 < vertexes.length; i++) { }
620 < vertexes.length; i++) { return proceed.apply(this, [].slice.call(arguments, 1));
621 < vertexes.length; i++) { });
622  
623 < vertexes.length; i++) { /**
624 < vertexes.length; i++) { * Override the animate function by sucking out custom parameters related to the shapes directly,
625 < vertexes.length; i++) { * and update the shapes from the animation step.
626 < vertexes.length; i++) { */
627 < vertexes.length; i++) { wrap(wrapper, 'animate', function(proceed, params, animation, complete) {
628 < vertexes.length; i++) { var ca,
629 < vertexes.length; i++) { from = this.attribs,
630 < vertexes.length; i++) { to,
631 < vertexes.length; i++) { anim;
632  
633 < vertexes.length; i++) { // Attribute-line properties connected to 3D. These shouldn't have been in the
634 < vertexes.length; i++) { // attribs collection in the first place.
635 < vertexes.length; i++) { delete params.center;
636 < vertexes.length; i++) { delete params.z;
637 < vertexes.length; i++) { delete params.depth;
638 < vertexes.length; i++) { delete params.alpha;
639 < vertexes.length; i++) { delete params.beta;
640  
641 < vertexes.length; i++) { anim = animObject(pick(animation, this.renderer.globalAnimation));
642  
643 < vertexes.length; i++) { if (anim.duration) {
644 < vertexes.length; i++) { ca = suckOutCustom(params);
645 < vertexes.length; i++) { params.dummy = 1; // Params need to have a property in order for the step to run (#5765)
646  
647 < vertexes.length; i++) { if (ca) {
648 < vertexes.length; i++) { to = ca;
649 < vertexes.length; i++) { anim.step = function(a, fx) {
650 < vertexes.length; i++) { function interpolate(key) {
651 < vertexes.length; i++) { return from[key] + (pick(to[key], from[key]) - from[key]) * fx.pos;
652 < vertexes.length; i++) { }
653  
654 < vertexes.length; i++) { if (fx.prop === 'dummy') {
655 < vertexes.length; i++) { fx.elem.setPaths(merge(from, {
656 < vertexes.length; i++) { x: interpolate('x'),
657 < vertexes.length; i++) { y: interpolate('y'),
658 < vertexes.length; i++) { r: interpolate('r'),
659 < vertexes.length; i++) { innerR: interpolate('innerR'),
660 < vertexes.length; i++) { start: interpolate('start'),
661 < vertexes.length; i++) { end: interpolate('end')
662 < vertexes.length; i++) { }));
663 < vertexes.length; i++) { }
664 < vertexes.length; i++) { };
665 < vertexes.length; i++) { }
666 < vertexes.length; i++) { animation = anim; // Only when duration (#5572)
667 < vertexes.length; i++) { }
668 < vertexes.length; i++) { return proceed.call(this, params, animation, complete);
669 < vertexes.length; i++) { });
670  
671 < vertexes.length; i++) { // destroy all children
672 < vertexes.length; i++) { wrapper.destroy = function() {
673 < vertexes.length; i++) { this.top.destroy();
674 < vertexes.length; i++) { this.out.destroy();
675 < vertexes.length; i++) { this.inn.destroy();
676 < vertexes.length; i++) { this.side1.destroy();
677 < vertexes.length; i++) { this.side2.destroy();
678  
679 < vertexes.length; i++) { SVGElement.prototype.destroy.call(this);
680 < vertexes.length; i++) { };
681 < vertexes.length; i++) { // hide all children
682 < vertexes.length; i++) { wrapper.hide = function() {
683 < vertexes.length; i++) { this.top.hide();
684 < vertexes.length; i++) { this.out.hide();
685 < vertexes.length; i++) { this.inn.hide();
686 < vertexes.length; i++) { this.side1.hide();
687 < vertexes.length; i++) { this.side2.hide();
688 < vertexes.length; i++) { };
689 < vertexes.length; i++) { wrapper.show = function() {
690 < vertexes.length; i++) { this.top.show();
691 < vertexes.length; i++) { this.out.show();
692 < vertexes.length; i++) { this.inn.show();
693 < vertexes.length; i++) { this.side1.show();
694 < vertexes.length; i++) { this.side2.show();
695 < vertexes.length; i++) { };
696 < vertexes.length; i++) { return wrapper;
697 < vertexes.length; i++) { };
698  
699 < vertexes.length; i++) { /**
700 < vertexes.length; i++) { * Generate the paths required to draw a 3D arc
701 < vertexes.length; i++) { */
702 < vertexes.length; i++) { SVGRenderer.prototype.arc3dPath = function(shapeArgs) {
703 < vertexes.length; i++) { var cx = shapeArgs.x, // x coordinate of the center
704 < vertexes.length; i++) { cy = shapeArgs.y, // y coordinate of the center
705 < vertexes.length; i++) { start = shapeArgs.start, // start angle
706 < vertexes.length; i++) { end = shapeArgs.end - 0.00001, // end angle
707 < vertexes.length; i++) { r = shapeArgs.r, // radius
708 < vertexes.length; i++) { ir = shapeArgs.innerR, // inner radius
709 < vertexes.length; i++) { d = shapeArgs.depth, // depth
710 < vertexes.length; i++) { alpha = shapeArgs.alpha, // alpha rotation of the chart
711 < vertexes.length; i++) { beta = shapeArgs.beta; // beta rotation of the chart
712  
713 < vertexes.length; i++) { // Derived Variables
714 < vertexes.length; i++) { var cs = Math.cos(start), // cosinus of the start angle
715 < vertexes.length; i++) { ss = Math.sin(start), // sinus of the start angle
716 < vertexes.length; i++) { ce = Math.cos(end), // cosinus of the end angle
717 < vertexes.length; i++) { se = Math.sin(end), // sinus of the end angle
718 < vertexes.length; i++) { rx = r * Math.cos(beta), // x-radius
719 < vertexes.length; i++) { ry = r * Math.cos(alpha), // y-radius
720 < vertexes.length; i++) { irx = ir * Math.cos(beta), // x-radius (inner)
721 < vertexes.length; i++) { iry = ir * Math.cos(alpha), // y-radius (inner)
722 < vertexes.length; i++) { dx = d * Math.sin(beta), // distance between top and bottom in x
723 < vertexes.length; i++) { dy = d * Math.sin(alpha); // distance between top and bottom in y
724  
725 < vertexes.length; i++) { // TOP
726 < vertexes.length; i++) { var top = ['M', cx + (rx * cs), cy + (ry * ss)];
727 < vertexes.length; i++) { top = top.concat(curveTo(cx, cy, rx, ry, start, end, 0, 0));
728 < vertexes.length; i++) { top = top.concat([
729 < vertexes.length; i++) { 'L', cx + (irx * ce), cy + (iry * se)
730 < vertexes.length; i++) { ]);
731 < vertexes.length; i++) { top = top.concat(curveTo(cx, cy, irx, iry, end, start, 0, 0));
732 < vertexes.length; i++) { top = top.concat(['Z']);
733 < vertexes.length; i++) { // OUTSIDE
734 < vertexes.length; i++) { var b = (beta > 0 ? Math.PI / 2 : 0),
735 < vertexes.length; i++) { a = (alpha > 0 ? 0 : Math.PI / 2);
736  
737 < vertexes.length; i++) { var start2 = start > -b ? start : (end > -b ? -b : start),
738 < vertexes.length; i++) { end2 = end < PI - a ? end : (start < PI - a ? PI - a : end),
739 < vertexes.length; i++) { midEnd = 2 * PI - a;
740  
741 < vertexes.length; i++) { // When slice goes over bottom middle, need to add both, left and right outer side.
742 < vertexes.length; i++) { // Additionally, when we cross right hand edge, create sharp edge. Outer shape/wall:
743 < vertexes.length; i++) { //
744 < vertexes.length; i++) { // -------
745 < vertexes.length; i++) { // / ^ \
746 < vertexes.length; i++) { // 4) / / \ \ 1)
747 < vertexes.length; i++) { // / / \ \
748 < vertexes.length; i++) { // / / \ \
749 < vertexes.length; i++) { // (c)=> ==== ==== <=(d)
750 < vertexes.length; i++) { // \ \ / /
751 < vertexes.length; i++) { // \ \<=(a)/ /
752 < vertexes.length; i++) { // \ \ / / <=(b)
753 < vertexes.length; i++) { // 3) \ v / 2)
754 < vertexes.length; i++) { // -------
755 < vertexes.length; i++) { //
756 < vertexes.length; i++) { // (a) - inner side
757 < vertexes.length; i++) { // (b) - outer side
758 < vertexes.length; i++) { // (c) - left edge (sharp)
759 < vertexes.length; i++) { // (d) - right edge (sharp)
760 < vertexes.length; i++) { // 1..n - rendering order for startAngle = 0, when set to e.g 90, order changes clockwise (1->2, 2->3, n->1) and counterclockwise for negative startAngle
761  
762 < vertexes.length; i++) { var out = ['M', cx + (rx * cos(start2)), cy + (ry * sin(start2))];
763 < vertexes.length; i++) { out = out.concat(curveTo(cx, cy, rx, ry, start2, end2, 0, 0));
764  
765 < vertexes.length; i++) { if (end > midEnd && start < midEnd) { // When shape is wide, it can cross both, (c) and (d) edges, when using startAngle
766 < vertexes.length; i++) { // Go to outer side
767 < vertexes.length; i++) { out = out.concat([
768 < vertexes.length; i++) { 'L', cx + (rx * cos(end2)) + dx, cy + (ry * sin(end2)) + dy
769 < vertexes.length; i++) { ]);
770 < vertexes.length; i++) { // Curve to the right edge of the slice (d)
771 < vertexes.length; i++) { out = out.concat(curveTo(cx, cy, rx, ry, end2, midEnd, dx, dy));
772 < vertexes.length; i++) { // Go to the inner side
773 < vertexes.length; i++) { out = out.concat([
774 < vertexes.length; i++) { 'L', cx + (rx * cos(midEnd)), cy + (ry * sin(midEnd))
775 < vertexes.length; i++) { ]);
776 < vertexes.length; i++) { // Curve to the true end of the slice
777 < vertexes.length; i++) { out = out.concat(curveTo(cx, cy, rx, ry, midEnd, end, 0, 0));
778 < vertexes.length; i++) { // Go to the outer side
779 < vertexes.length; i++) { out = out.concat([
780 < vertexes.length; i++) { 'L', cx + (rx * cos(end)) + dx, cy + (ry * sin(end)) + dy
781 < vertexes.length; i++) { ]);
782 < vertexes.length; i++) { // Go back to middle (d)
783 < vertexes.length; i++) { out = out.concat(curveTo(cx, cy, rx, ry, end, midEnd, dx, dy));
784 < vertexes.length; i++) { out = out.concat([
785 < vertexes.length; i++) { 'L', cx + (rx * cos(midEnd)), cy + (ry * sin(midEnd))
786 < vertexes.length; i++) { ]);
787 < vertexes.length; i++) { // Go back to the left edge
788 < vertexes.length; i++) { out = out.concat(curveTo(cx, cy, rx, ry, midEnd, end2, 0, 0));
789 < vertexes.length; i++) { } else if (end > PI - a && start < PI - a) { // But shape can cross also only (c) edge:
790 < vertexes.length; i++) { // Go to outer side
791 < vertexes.length; i++) { out = out.concat([
792 < vertexes.length; i++) { 'L', cx + (rx * Math.cos(end2)) + dx, cy + (ry * Math.sin(end2)) + dy
793 < vertexes.length; i++) { ]);
794 < vertexes.length; i++) { // Curve to the true end of the slice
795 < vertexes.length; i++) { out = out.concat(curveTo(cx, cy, rx, ry, end2, end, dx, dy));
796 < vertexes.length; i++) { // Go to the inner side
797 < vertexes.length; i++) { out = out.concat([
798 < vertexes.length; i++) { 'L', cx + (rx * Math.cos(end)), cy + (ry * Math.sin(end))
799 < vertexes.length; i++) { ]);
800 < vertexes.length; i++) { // Go back to the artifical end2
801 < vertexes.length; i++) { out = out.concat(curveTo(cx, cy, rx, ry, end, end2, 0, 0));
802 < vertexes.length; i++) { }
803  
804 < vertexes.length; i++) { out = out.concat([
805 < vertexes.length; i++) { 'L', cx + (rx * Math.cos(end2)) + dx, cy + (ry * Math.sin(end2)) + dy
806 < vertexes.length; i++) { ]);
807 < vertexes.length; i++) { out = out.concat(curveTo(cx, cy, rx, ry, end2, start2, dx, dy));
808 < vertexes.length; i++) { out = out.concat(['Z']);
809  
810 < vertexes.length; i++) { // INSIDE
811 < vertexes.length; i++) { var inn = ['M', cx + (irx * cs), cy + (iry * ss)];
812 < vertexes.length; i++) { inn = inn.concat(curveTo(cx, cy, irx, iry, start, end, 0, 0));
813 < vertexes.length; i++) { inn = inn.concat([
814 < vertexes.length; i++) { 'L', cx + (irx * Math.cos(end)) + dx, cy + (iry * Math.sin(end)) + dy
815 < vertexes.length; i++) { ]);
816 < vertexes.length; i++) { inn = inn.concat(curveTo(cx, cy, irx, iry, end, start, dx, dy));
817 < vertexes.length; i++) { inn = inn.concat(['Z']);
818  
819 < vertexes.length; i++) { // SIDES
820 < vertexes.length; i++) { var side1 = [
821 < vertexes.length; i++) { 'M', cx + (rx * cs), cy + (ry * ss),
822 < vertexes.length; i++) { 'L', cx + (rx * cs) + dx, cy + (ry * ss) + dy,
823 < vertexes.length; i++) { 'L', cx + (irx * cs) + dx, cy + (iry * ss) + dy,
824 < vertexes.length; i++) { 'L', cx + (irx * cs), cy + (iry * ss),
825 < vertexes.length; i++) { 'Z'
826 < vertexes.length; i++) { ];
827 < vertexes.length; i++) { var side2 = [
828 < vertexes.length; i++) { 'M', cx + (rx * ce), cy + (ry * se),
829 < vertexes.length; i++) { 'L', cx + (rx * ce) + dx, cy + (ry * se) + dy,
830 < vertexes.length; i++) { 'L', cx + (irx * ce) + dx, cy + (iry * se) + dy,
831 < vertexes.length; i++) { 'L', cx + (irx * ce), cy + (iry * se),
832 < vertexes.length; i++) { 'Z'
833 < vertexes.length; i++) { ];
834  
835 < vertexes.length; i++) { // correction for changed position of vanishing point caused by alpha and beta rotations
836 < vertexes.length; i++) { var angleCorr = Math.atan2(dy, -dx),
837 < vertexes.length; i++) { angleEnd = Math.abs(end + angleCorr),
838 < vertexes.length; i++) { angleStart = Math.abs(start + angleCorr),
839 < vertexes.length; i++) { angleMid = Math.abs((start + end) / 2 + angleCorr);
840  
841 < vertexes.length; i++) { // set to 0-PI range
842 < vertexes.length; i++) { function toZeroPIRange(angle) {
843 < vertexes.length; i++) { angle = angle % (2 * Math.PI);
844 < vertexes.length; i++) { if (angle > Math.PI) {
845 < vertexes.length; i++) { angle = 2 * Math.PI - angle;
846 < vertexes.length; i++) { }
847 < vertexes.length; i++) { return angle;
848 < vertexes.length; i++) { }
849 < vertexes.length; i++) { angleEnd = toZeroPIRange(angleEnd);
850 < vertexes.length; i++) { angleStart = toZeroPIRange(angleStart);
851 < vertexes.length; i++) { angleMid = toZeroPIRange(angleMid);
852  
853 < vertexes.length; i++) { // *1e5 is to compensate pInt in zIndexSetter
854 < vertexes.length; i++) { var incPrecision = 1e5,
855 < vertexes.length; i++) { a1 = angleMid * incPrecision,
856 < vertexes.length; i++) { a2 = angleStart * incPrecision,
857 < vertexes.length; i++) { a3 = angleEnd * incPrecision;
858  
859 < vertexes.length; i++) { return {
860 < vertexes.length; i++) { top: top,
861 < vertexes.length; i++) { zTop: Math.PI * incPrecision + 1, // max angle is PI, so this is allways higher
862 < vertexes.length; i++) { out: out,
863 < vertexes.length; i++) { zOut: Math.max(a1, a2, a3),
864 < vertexes.length; i++) { inn: inn,
865 < vertexes.length; i++) { zInn: Math.max(a1, a2, a3),
866 < vertexes.length; i++) { side1: side1,
867 < vertexes.length; i++) { zSide1: a3 * 0.99, // to keep below zOut and zInn in case of same values
868 < vertexes.length; i++) { side2: side2,
869 < vertexes.length; i++) { zSide2: a2 * 0.99
870 < vertexes.length; i++) { };
871 < vertexes.length; i++) { };
872  
873 < vertexes.length; i++) { }(Highcharts));
874 < vertexes.length; i++) { (function(H) {
875 < vertexes.length; i++) { /**
876 < vertexes.length; i++) { * (c) 2010-2017 Torstein Honsi
877 < vertexes.length; i++) { *
878 < vertexes.length; i++) { * License: www.highcharts.com/license
879 < vertexes.length; i++) { */
880 < vertexes.length; i++) { var Chart = H.Chart,
881 < vertexes.length; i++) { each = H.each,
882 < vertexes.length; i++) { merge = H.merge,
883 < vertexes.length; i++) { perspective = H.perspective,
884 < vertexes.length; i++) { pick = H.pick,
885 < vertexes.length; i++) { wrap = H.wrap;
886  
887 < vertexes.length; i++) { /***
888 < vertexes.length; i++) { EXTENSION FOR 3D CHARTS
889 < vertexes.length; i++) { ***/
890 < vertexes.length; i++) { // Shorthand to check the is3d flag
891 < vertexes.length; i++) { Chart.prototype.is3d = function() {
892 < vertexes.length; i++) { return this.options.chart.options3d && this.options.chart.options3d.enabled; // #4280
893 < vertexes.length; i++) { };
894  
895 < vertexes.length; i++) { Chart.prototype.propsRequireDirtyBox.push('chart.options3d');
896 < vertexes.length; i++) { Chart.prototype.propsRequireUpdateSeries.push('chart.options3d');
897  
898 < vertexes.length; i++) { /**
899 < vertexes.length; i++) { * Calculate scale of the 3D view. That is required to
900 < vertexes.length; i++) { * fit chart's 3D projection into the actual plotting area. Reported as #4933.
901 < vertexes.length; i++) { * @notice This function should ideally take the plot values instead of a chart object,
902 < vertexes.length; i++) { * but since the chart object is needed for perspective it is not practical.
903 < vertexes.length; i++) { * Possible to make both getScale and perspective more logical and also immutable.
904 < vertexes.length; i++) { * @param {Object} chart Chart object
905 < vertexes.length; i++) { * @param {Number} chart.plotLeft
906 < vertexes.length; i++) { * @param {Number} chart.plotWidth
907 < vertexes.length; i++) { * @param {Number} chart.plotTop
908 < vertexes.length; i++) { * @param {Number} chart.plotHeight
909 < vertexes.length; i++) { * @param {Number} depth The depth of the chart
910 < vertexes.length; i++) { * @return {Number} The scale to fit the 3D chart into the plotting area.
911 < vertexes.length; i++) { */
912 < vertexes.length; i++) { function getScale(chart, depth) {
913 < vertexes.length; i++) { var plotLeft = chart.plotLeft,
914 < vertexes.length; i++) { plotRight = chart.plotWidth + plotLeft,
915 < vertexes.length; i++) { plotTop = chart.plotTop,
916 < vertexes.length; i++) { plotBottom = chart.plotHeight + plotTop,
917 < vertexes.length; i++) { originX = plotLeft + chart.plotWidth / 2,
918 < vertexes.length; i++) { originY = plotTop + chart.plotHeight / 2,
919 < vertexes.length; i++) { bbox3d = {
920 < vertexes.length; i++) { minX: Number.MAX_VALUE,
921 < vertexes.length; i++) { maxX: -Number.MAX_VALUE,
922 < vertexes.length; i++) { minY: Number.MAX_VALUE,
923 < vertexes.length; i++) { maxY: -Number.MAX_VALUE
924 < vertexes.length; i++) { },
925 < vertexes.length; i++) { corners,
926 < vertexes.length; i++) { scale = 1;
927  
928 < vertexes.length; i++) { // Top left corners:
929 < vertexes.length; i++) { corners = [{
930 < vertexes.length; i++) { x: plotLeft,
931 < vertexes.length; i++) { y: plotTop,
932 < vertexes.length; i++) { z: 0
933 < vertexes.length; i++) { }, {
934 < vertexes.length; i++) { x: plotLeft,
935 < vertexes.length; i++) { y: plotTop,
936 < vertexes.length; i++) { z: depth
937 < vertexes.length; i++) { }];
938  
939 < vertexes.length; i++) { // Top right corners:
940 < vertexes.length; i++) { each([0, 1], function(i) {
941 < vertexes.length; i++) { corners.push({
942 < vertexes.length; i++) { x: plotRight,
943 < vertexes.length; i++) { y: corners[i].y,
944 < vertexes.length; i++) { z: corners[i].z
945 < vertexes.length; i++) { });
946 < vertexes.length; i++) { });
947  
948 < vertexes.length; i++) { // All bottom corners:
949 < vertexes.length; i++) { each([0, 1, 2, 3], function(i) {
950 < vertexes.length; i++) { corners.push({
951 < vertexes.length; i++) { x: corners[i].x,
952 < vertexes.length; i++) { y: plotBottom,
953 < vertexes.length; i++) { z: corners[i].z
954 < vertexes.length; i++) { });
955 < vertexes.length; i++) { });
956  
957 < vertexes.length; i++) { // Calculate 3D corners:
958 < vertexes.length; i++) { corners = perspective(corners, chart, false);
959  
960 < vertexes.length; i++) { // Get bounding box of 3D element:
961 < vertexes.length; i++) { each(corners, function(corner) {
962 < vertexes.length; i++) { bbox3d.minX = Math.min(bbox3d.minX, corner.x);
963 < vertexes.length; i++) { bbox3d.maxX = Math.max(bbox3d.maxX, corner.x);
964 < vertexes.length; i++) { bbox3d.minY = Math.min(bbox3d.minY, corner.y);
965 < vertexes.length; i++) { bbox3d.maxY = Math.max(bbox3d.maxY, corner.y);
966 < vertexes.length; i++) { });
967  
968 < vertexes.length; i++) { // Left edge:
969 < vertexes.length; i++) { if (plotLeft > bbox3d.minX) {
970 < vertexes.length; i++) { scale = Math.min(scale, 1 - Math.abs((plotLeft + originX) / (bbox3d.minX + originX)) % 1);
971 < vertexes.length; i++) { }
972  
973 < vertexes.length; i++) { // Right edge:
974 < vertexes.length; i++) { if (plotRight < bbox3d.maxX) {
975 < vertexes.length; i++) {< bbox3d.maxX) { scale = Math.min(scale, (plotRight - originX) / (bbox3d.maxX - originX));
976 < vertexes.length; i++) {< bbox3d.maxX) { }
977  
978 < vertexes.length; i++) {< bbox3d.maxX) { // Top edge:
979 < vertexes.length; i++) {< bbox3d.maxX) { if (plotTop > bbox3d.minY) {
980 < vertexes.length; i++) {< bbox3d.maxX) { if (bbox3d.minY < 0) {
981 < vertexes.length; i++) {< bbox3d.maxX) { scale = Math.min(scale, (plotTop + originY) / (-bbox3d.minY + plotTop + originY));
982 < vertexes.length; i++) {< bbox3d.maxX) { } else {
983 < vertexes.length; i++) {< bbox3d.maxX) { scale = Math.min(scale, 1 - (plotTop + originY) / (bbox3d.minY + originY) % 1);
984 < vertexes.length; i++) {< bbox3d.maxX) { }
985 < vertexes.length; i++) {< bbox3d.maxX) { }
986  
987 < vertexes.length; i++) {< bbox3d.maxX) { // Bottom edge:
988 < vertexes.length; i++) {< bbox3d.maxX) { if (plotBottom < bbox3d.maxY) {
989 < vertexes.length; i++) {< bbox3d.maxX) { scale = Math.min(scale, Math.abs((plotBottom - originY) / (bbox3d.maxY - originY)));
990 < vertexes.length; i++) {< bbox3d.maxX) { }
991  
992 < vertexes.length; i++) {< bbox3d.maxX) { return scale;
993 < vertexes.length; i++) {< bbox3d.maxX) { }
994  
995  
996  
997 < vertexes.length; i++) {< bbox3d.maxX) { H.wrap(H.Chart.prototype, 'isInsidePlot', function(proceed) {
998 < vertexes.length; i++) {< bbox3d.maxX) { return this.is3d() || proceed.apply(this, [].slice.call(arguments, 1));
999 < vertexes.length; i++) {< bbox3d.maxX) { });
1000  
1001 < vertexes.length; i++) {< bbox3d.maxX) { var defaultOptions = H.getOptions();
1002 < vertexes.length; i++) {< bbox3d.maxX) { merge(true, defaultOptions, {
1003 < vertexes.length; i++) {< bbox3d.maxX) { chart: {
1004 < vertexes.length; i++) {< bbox3d.maxX) { options3d: {
1005 < vertexes.length; i++) {< bbox3d.maxX) { enabled: false,
1006 < vertexes.length; i++) {< bbox3d.maxX) { alpha: 0,
1007 < vertexes.length; i++) {< bbox3d.maxX) { beta: 0,
1008 < vertexes.length; i++) {< bbox3d.maxX) { depth: 100,
1009 < vertexes.length; i++) {< bbox3d.maxX) { fitToPlot: true,
1010 < vertexes.length; i++) {< bbox3d.maxX) { viewDistance: 25,
1011 < vertexes.length; i++) {< bbox3d.maxX) { frame: {
1012 < vertexes.length; i++) {< bbox3d.maxX) { bottom: {
1013 < vertexes.length; i++) {< bbox3d.maxX) { size: 1
1014 < vertexes.length; i++) {< bbox3d.maxX) { },
1015 < vertexes.length; i++) {< bbox3d.maxX) { side: {
1016 < vertexes.length; i++) {< bbox3d.maxX) { size: 1
1017 < vertexes.length; i++) {< bbox3d.maxX) { },
1018 < vertexes.length; i++) {< bbox3d.maxX) { back: {
1019 < vertexes.length; i++) {< bbox3d.maxX) { size: 1
1020 < vertexes.length; i++) {< bbox3d.maxX) { }
1021 < vertexes.length; i++) {< bbox3d.maxX) { }
1022 < vertexes.length; i++) {< bbox3d.maxX) { }
1023 < vertexes.length; i++) {< bbox3d.maxX) { }
1024 < vertexes.length; i++) {< bbox3d.maxX) { });
1025  
1026  
1027  
1028 < vertexes.length; i++) {< bbox3d.maxX) { wrap(Chart.prototype, 'setClassName', function(proceed) {
1029 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
1030  
1031 < vertexes.length; i++) {< bbox3d.maxX) { if (this.is3d()) {
1032 < vertexes.length; i++) {< bbox3d.maxX) { this.container.className += ' highcharts-3d-chart';
1033 < vertexes.length; i++) {< bbox3d.maxX) { }
1034 < vertexes.length; i++) {< bbox3d.maxX) { });
1035  
1036 < vertexes.length; i++) {< bbox3d.maxX) { H.wrap(H.Chart.prototype, 'setChartSize', function(proceed) {
1037 < vertexes.length; i++) {< bbox3d.maxX) { var chart = this,
1038 < vertexes.length; i++) {< bbox3d.maxX) { options3d = chart.options.chart.options3d;
1039  
1040 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(chart, [].slice.call(arguments, 1));
1041  
1042 < vertexes.length; i++) {< bbox3d.maxX) { if (chart.is3d()) {
1043 < vertexes.length; i++) {< bbox3d.maxX) { var inverted = chart.inverted,
1044 < vertexes.length; i++) {< bbox3d.maxX) { clipBox = chart.clipBox,
1045 < vertexes.length; i++) {< bbox3d.maxX) { margin = chart.margin,
1046 < vertexes.length; i++) {< bbox3d.maxX) { x = inverted ? 'y' : 'x',
1047 < vertexes.length; i++) {< bbox3d.maxX) { y = inverted ? 'x' : 'y',
1048 < vertexes.length; i++) {< bbox3d.maxX) { w = inverted ? 'height' : 'width',
1049 < vertexes.length; i++) {< bbox3d.maxX) { h = inverted ? 'width' : 'height';
1050  
1051 < vertexes.length; i++) {< bbox3d.maxX) { clipBox[x] = -(margin[3] || 0);
1052 < vertexes.length; i++) {< bbox3d.maxX) { clipBox[y] = -(margin[0] || 0);
1053 < vertexes.length; i++) {< bbox3d.maxX) { clipBox[w] = chart.chartWidth + (margin[3] || 0) + (margin[1] || 0);
1054 < vertexes.length; i++) {< bbox3d.maxX) { clipBox[h] = chart.chartHeight + (margin[0] || 0) + (margin[2] || 0);
1055  
1056 < vertexes.length; i++) {< bbox3d.maxX) { // Set scale, used later in perspective method():
1057 < vertexes.length; i++) {< bbox3d.maxX) { chart.scale3d = 1; // @notice getScale uses perspective, so scale3d has to be reset.
1058 < vertexes.length; i++) {< bbox3d.maxX) { if (options3d.fitToPlot === true) {
1059 < vertexes.length; i++) {< bbox3d.maxX) { chart.scale3d = getScale(chart, options3d.depth);
1060 < vertexes.length; i++) {< bbox3d.maxX) { }
1061 < vertexes.length; i++) {< bbox3d.maxX) { }
1062 < vertexes.length; i++) {< bbox3d.maxX) { });
1063  
1064 < vertexes.length; i++) {< bbox3d.maxX) { wrap(Chart.prototype, 'redraw', function(proceed) {
1065 < vertexes.length; i++) {< bbox3d.maxX) { if (this.is3d()) {
1066 < vertexes.length; i++) {< bbox3d.maxX) { // Set to force a redraw of all elements
1067 < vertexes.length; i++) {< bbox3d.maxX) { this.isDirtyBox = true;
1068 < vertexes.length; i++) {< bbox3d.maxX) { }
1069 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
1070 < vertexes.length; i++) {< bbox3d.maxX) { });
1071  
1072 < vertexes.length; i++) {< bbox3d.maxX) { // Draw the series in the reverse order (#3803, #3917)
1073 < vertexes.length; i++) {< bbox3d.maxX) { wrap(Chart.prototype, 'renderSeries', function(proceed) {
1074 < vertexes.length; i++) {< bbox3d.maxX) { var series,
1075 < vertexes.length; i++) {< bbox3d.maxX) { i = this.series.length;
1076  
1077 < vertexes.length; i++) {< bbox3d.maxX) { if (this.is3d()) {
1078 < vertexes.length; i++) {< bbox3d.maxX) { while (i--) {
1079 < vertexes.length; i++) {< bbox3d.maxX) { series = this.series[i];
1080 < vertexes.length; i++) {< bbox3d.maxX) { series.translate();
1081 < vertexes.length; i++) {< bbox3d.maxX) { series.render();
1082 < vertexes.length; i++) {< bbox3d.maxX) { }
1083 < vertexes.length; i++) {< bbox3d.maxX) { } else {
1084 < vertexes.length; i++) {< bbox3d.maxX) { proceed.call(this);
1085 < vertexes.length; i++) {< bbox3d.maxX) { }
1086 < vertexes.length; i++) {< bbox3d.maxX) { });
1087  
1088 < vertexes.length; i++) {< bbox3d.maxX) { Chart.prototype.retrieveStacks = function(stacking) {
1089 < vertexes.length; i++) {< bbox3d.maxX) { var series = this.series,
1090 < vertexes.length; i++) {< bbox3d.maxX) { stacks = {},
1091 < vertexes.length; i++) {< bbox3d.maxX) { stackNumber,
1092 < vertexes.length; i++) {< bbox3d.maxX) { i = 1;
1093  
1094 < vertexes.length; i++) {< bbox3d.maxX) { each(this.series, function(s) {
1095 < vertexes.length; i++) {< bbox3d.maxX) { stackNumber = pick(s.options.stack, (stacking ? 0 : series.length - 1 - s.index)); // #3841, #4532
1096 < vertexes.length; i++) {< bbox3d.maxX) { if (!stacks[stackNumber]) {
1097 < vertexes.length; i++) {< bbox3d.maxX) { stacks[stackNumber] = {
1098 < vertexes.length; i++) {< bbox3d.maxX) { series: [s],
1099 < vertexes.length; i++) {< bbox3d.maxX) { position: i
1100 < vertexes.length; i++) {< bbox3d.maxX) { };
1101 < vertexes.length; i++) {< bbox3d.maxX) { i++;
1102 < vertexes.length; i++) {< bbox3d.maxX) { } else {
1103 < vertexes.length; i++) {< bbox3d.maxX) { stacks[stackNumber].series.push(s);
1104 < vertexes.length; i++) {< bbox3d.maxX) { }
1105 < vertexes.length; i++) {< bbox3d.maxX) { });
1106  
1107 < vertexes.length; i++) {< bbox3d.maxX) { stacks.totalStacks = i + 1;
1108 < vertexes.length; i++) {< bbox3d.maxX) { return stacks;
1109 < vertexes.length; i++) {< bbox3d.maxX) { };
1110  
1111 < vertexes.length; i++) {< bbox3d.maxX) { }(Highcharts));
1112 < vertexes.length; i++) {< bbox3d.maxX) { (function(H) {
1113 < vertexes.length; i++) {< bbox3d.maxX) { /**
1114 < vertexes.length; i++) {< bbox3d.maxX) { * (c) 2010-2017 Torstein Honsi
1115 < vertexes.length; i++) {< bbox3d.maxX) { *
1116 < vertexes.length; i++) {< bbox3d.maxX) { * License: www.highcharts.com/license
1117 < vertexes.length; i++) {< bbox3d.maxX) { */
1118 < vertexes.length; i++) {< bbox3d.maxX) { var ZAxis,
1119  
1120 < vertexes.length; i++) {< bbox3d.maxX) { Axis = H.Axis,
1121 < vertexes.length; i++) {< bbox3d.maxX) { Chart = H.Chart,
1122 < vertexes.length; i++) {< bbox3d.maxX) { each = H.each,
1123 < vertexes.length; i++) {< bbox3d.maxX) { extend = H.extend,
1124 < vertexes.length; i++) {< bbox3d.maxX) { merge = H.merge,
1125 < vertexes.length; i++) {< bbox3d.maxX) { perspective = H.perspective,
1126 < vertexes.length; i++) {< bbox3d.maxX) { pick = H.pick,
1127 < vertexes.length; i++) {< bbox3d.maxX) { splat = H.splat,
1128 < vertexes.length; i++) {< bbox3d.maxX) { Tick = H.Tick,
1129 < vertexes.length; i++) {< bbox3d.maxX) { wrap = H.wrap;
1130 < vertexes.length; i++) {< bbox3d.maxX) { /***
1131 < vertexes.length; i++) {< bbox3d.maxX) { EXTENSION TO THE AXIS
1132 < vertexes.length; i++) {< bbox3d.maxX) { ***/
1133 < vertexes.length; i++) {< bbox3d.maxX) { wrap(Axis.prototype, 'setOptions', function(proceed, userOptions) {
1134 < vertexes.length; i++) {< bbox3d.maxX) { var options;
1135 < vertexes.length; i++) {< bbox3d.maxX) { proceed.call(this, userOptions);
1136 < vertexes.length; i++) {< bbox3d.maxX) { if (this.chart.is3d() && this.coll !== 'colorAxis') {
1137 < vertexes.length; i++) {< bbox3d.maxX) { options = this.options;
1138 < vertexes.length; i++) {< bbox3d.maxX) { options.tickWidth = pick(options.tickWidth, 0);
1139 < vertexes.length; i++) {< bbox3d.maxX) { options.gridLineWidth = pick(options.gridLineWidth, 1);
1140 < vertexes.length; i++) {< bbox3d.maxX) { }
1141 < vertexes.length; i++) {< bbox3d.maxX) { });
1142  
1143 < vertexes.length; i++) {< bbox3d.maxX) { wrap(Axis.prototype, 'render', function(proceed) {
1144 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
1145  
1146 < vertexes.length; i++) {< bbox3d.maxX) { // Do not do this if the chart is not 3D
1147 < vertexes.length; i++) {< bbox3d.maxX) { if (!this.chart.is3d() || this.coll === 'colorAxis') {
1148 < vertexes.length; i++) {< bbox3d.maxX) { return;
1149 < vertexes.length; i++) {< bbox3d.maxX) { }
1150  
1151 < vertexes.length; i++) {< bbox3d.maxX) { var chart = this.chart,
1152 < vertexes.length; i++) {< bbox3d.maxX) { renderer = chart.renderer,
1153 < vertexes.length; i++) {< bbox3d.maxX) { options3d = chart.options.chart.options3d,
1154 < vertexes.length; i++) {< bbox3d.maxX) { frame = options3d.frame,
1155 < vertexes.length; i++) {< bbox3d.maxX) { fbottom = frame.bottom,
1156 < vertexes.length; i++) {< bbox3d.maxX) { fback = frame.back,
1157 < vertexes.length; i++) {< bbox3d.maxX) { fside = frame.side,
1158 < vertexes.length; i++) {< bbox3d.maxX) { depth = options3d.depth,
1159 < vertexes.length; i++) {< bbox3d.maxX) { height = this.height,
1160 < vertexes.length; i++) {< bbox3d.maxX) { width = this.width,
1161 < vertexes.length; i++) {< bbox3d.maxX) { left = this.left,
1162 < vertexes.length; i++) {< bbox3d.maxX) { top = this.top;
1163  
1164 < vertexes.length; i++) {< bbox3d.maxX) { if (this.isZAxis) {
1165 < vertexes.length; i++) {< bbox3d.maxX) { return;
1166 < vertexes.length; i++) {< bbox3d.maxX) { }
1167 < vertexes.length; i++) {< bbox3d.maxX) { if (this.horiz) {
1168 < vertexes.length; i++) {< bbox3d.maxX) { var bottomShape = {
1169 < vertexes.length; i++) {< bbox3d.maxX) { x: left,
1170 < vertexes.length; i++) {< bbox3d.maxX) { y: top + (chart.xAxis[0].opposite ? -fbottom.size : height),
1171 < vertexes.length; i++) {< bbox3d.maxX) { z: 0,
1172 < vertexes.length; i++) {< bbox3d.maxX) { width: width,
1173 < vertexes.length; i++) {< bbox3d.maxX) { height: fbottom.size,
1174 < vertexes.length; i++) {< bbox3d.maxX) { depth: depth,
1175 < vertexes.length; i++) {< bbox3d.maxX) { insidePlotArea: false
1176 < vertexes.length; i++) {< bbox3d.maxX) { };
1177 < vertexes.length; i++) {< bbox3d.maxX) { if (!this.bottomFrame) {
1178 < vertexes.length; i++) {< bbox3d.maxX) { this.bottomFrame = renderer.cuboid(bottomShape).attr({
1179 < vertexes.length; i++) {< bbox3d.maxX) { 'class': 'highcharts-3d-frame highcharts-3d-frame-bottom',
1180 < vertexes.length; i++) {< bbox3d.maxX) { 'zIndex': (chart.yAxis[0].reversed && options3d.alpha > 0 ? 4 : -1)
1181 < vertexes.length; i++) {< bbox3d.maxX) { }).add();
1182  
1183  
1184 < vertexes.length; i++) {< bbox3d.maxX) { this.bottomFrame.attr({
1185 < vertexes.length; i++) {< bbox3d.maxX) { fill: fbottom.color || 'none',
1186 < vertexes.length; i++) {< bbox3d.maxX) { stroke: fbottom.color || 'none'
1187 < vertexes.length; i++) {< bbox3d.maxX) { });
1188  
1189 < vertexes.length; i++) {< bbox3d.maxX) { } else {
1190 < vertexes.length; i++) {< bbox3d.maxX) { this.bottomFrame.animate(bottomShape);
1191 < vertexes.length; i++) {< bbox3d.maxX) { }
1192 < vertexes.length; i++) {< bbox3d.maxX) { } else {
1193 < vertexes.length; i++) {< bbox3d.maxX) { // BACK
1194 < vertexes.length; i++) {< bbox3d.maxX) { var backShape = {
1195 < vertexes.length; i++) {< bbox3d.maxX) { x: left + (chart.yAxis[0].opposite ? 0 : -fside.size),
1196 < vertexes.length; i++) {< bbox3d.maxX) { y: top + (chart.xAxis[0].opposite ? -fbottom.size : 0),
1197 < vertexes.length; i++) {< bbox3d.maxX) { z: depth,
1198 < vertexes.length; i++) {< bbox3d.maxX) { width: width + fside.size,
1199 < vertexes.length; i++) {< bbox3d.maxX) { height: height + fbottom.size,
1200 < vertexes.length; i++) {< bbox3d.maxX) { depth: fback.size,
1201 < vertexes.length; i++) {< bbox3d.maxX) { insidePlotArea: false
1202 < vertexes.length; i++) {< bbox3d.maxX) { };
1203 < vertexes.length; i++) {< bbox3d.maxX) { if (!this.backFrame) {
1204 < vertexes.length; i++) {< bbox3d.maxX) { this.backFrame = renderer.cuboid(backShape).attr({
1205 < vertexes.length; i++) {< bbox3d.maxX) { 'class': 'highcharts-3d-frame highcharts-3d-frame-back',
1206 < vertexes.length; i++) {< bbox3d.maxX) { zIndex: -3
1207 < vertexes.length; i++) {< bbox3d.maxX) { }).add();
1208  
1209  
1210 < vertexes.length; i++) {< bbox3d.maxX) { this.backFrame.attr({
1211 < vertexes.length; i++) {< bbox3d.maxX) { fill: fback.color || 'none',
1212 < vertexes.length; i++) {< bbox3d.maxX) { stroke: fback.color || 'none'
1213 < vertexes.length; i++) {< bbox3d.maxX) { });
1214  
1215 < vertexes.length; i++) {< bbox3d.maxX) { } else {
1216 < vertexes.length; i++) {< bbox3d.maxX) { this.backFrame.animate(backShape);
1217 < vertexes.length; i++) {< bbox3d.maxX) { }
1218 < vertexes.length; i++) {< bbox3d.maxX) { var sideShape = {
1219 < vertexes.length; i++) {< bbox3d.maxX) { x: left + (chart.yAxis[0].opposite ? width : -fside.size),
1220 < vertexes.length; i++) {< bbox3d.maxX) { y: top + (chart.xAxis[0].opposite ? -fbottom.size : 0),
1221 < vertexes.length; i++) {< bbox3d.maxX) { z: 0,
1222 < vertexes.length; i++) {< bbox3d.maxX) { width: fside.size,
1223 < vertexes.length; i++) {< bbox3d.maxX) { height: height + fbottom.size,
1224 < vertexes.length; i++) {< bbox3d.maxX) { depth: depth,
1225 < vertexes.length; i++) {< bbox3d.maxX) { insidePlotArea: false
1226 < vertexes.length; i++) {< bbox3d.maxX) { };
1227 < vertexes.length; i++) {< bbox3d.maxX) { if (!this.sideFrame) {
1228 < vertexes.length; i++) {< bbox3d.maxX) { this.sideFrame = renderer.cuboid(sideShape).attr({
1229 < vertexes.length; i++) {< bbox3d.maxX) { 'class': 'highcharts-3d-frame highcharts-3d-frame-side',
1230 < vertexes.length; i++) {< bbox3d.maxX) { zIndex: -2
1231 < vertexes.length; i++) {< bbox3d.maxX) { }).add();
1232  
1233  
1234 < vertexes.length; i++) {< bbox3d.maxX) { this.sideFrame.attr({
1235 < vertexes.length; i++) {< bbox3d.maxX) { fill: fside.color || 'none',
1236 < vertexes.length; i++) {< bbox3d.maxX) { stroke: fside.color || 'none'
1237 < vertexes.length; i++) {< bbox3d.maxX) { });
1238  
1239  
1240 < vertexes.length; i++) {< bbox3d.maxX) { } else {
1241 < vertexes.length; i++) {< bbox3d.maxX) { this.sideFrame.animate(sideShape);
1242 < vertexes.length; i++) {< bbox3d.maxX) { }
1243 < vertexes.length; i++) {< bbox3d.maxX) { }
1244 < vertexes.length; i++) {< bbox3d.maxX) { });
1245  
1246 < vertexes.length; i++) {< bbox3d.maxX) { wrap(Axis.prototype, 'getPlotLinePath', function(proceed) {
1247 < vertexes.length; i++) {< bbox3d.maxX) { var path = proceed.apply(this, [].slice.call(arguments, 1));
1248  
1249 < vertexes.length; i++) {< bbox3d.maxX) { // Do not do this if the chart is not 3D
1250 < vertexes.length; i++) {< bbox3d.maxX) { if (!this.chart.is3d() || this.coll === 'colorAxis') {
1251 < vertexes.length; i++) {< bbox3d.maxX) { return path;
1252 < vertexes.length; i++) {< bbox3d.maxX) { }
1253  
1254 < vertexes.length; i++) {< bbox3d.maxX) { if (path === null) {
1255 < vertexes.length; i++) {< bbox3d.maxX) { return path;
1256 < vertexes.length; i++) {< bbox3d.maxX) { }
1257  
1258 < vertexes.length; i++) {< bbox3d.maxX) { var chart = this.chart,
1259 < vertexes.length; i++) {< bbox3d.maxX) { options3d = chart.options.chart.options3d,
1260 < vertexes.length; i++) {< bbox3d.maxX) { d = this.isZAxis ? chart.plotWidth : options3d.depth,
1261 < vertexes.length; i++) {< bbox3d.maxX) { opposite = this.opposite;
1262 < vertexes.length; i++) {< bbox3d.maxX) { if (this.horiz) {
1263 < vertexes.length; i++) {< bbox3d.maxX) { opposite = !opposite;
1264 < vertexes.length; i++) {< bbox3d.maxX) { }
1265 < vertexes.length; i++) {< bbox3d.maxX) { var pArr = [
1266 < vertexes.length; i++) {< bbox3d.maxX) { this.swapZ({
1267 < vertexes.length; i++) {< bbox3d.maxX) { x: path[1],
1268 < vertexes.length; i++) {< bbox3d.maxX) { y: path[2],
1269 < vertexes.length; i++) {< bbox3d.maxX) { z: (opposite ? d : 0)
1270 < vertexes.length; i++) {< bbox3d.maxX) { }),
1271 < vertexes.length; i++) {< bbox3d.maxX) { this.swapZ({
1272 < vertexes.length; i++) {< bbox3d.maxX) { x: path[1],
1273 < vertexes.length; i++) {< bbox3d.maxX) { y: path[2],
1274 < vertexes.length; i++) {< bbox3d.maxX) { z: d
1275 < vertexes.length; i++) {< bbox3d.maxX) { }),
1276 < vertexes.length; i++) {< bbox3d.maxX) { this.swapZ({
1277 < vertexes.length; i++) {< bbox3d.maxX) { x: path[4],
1278 < vertexes.length; i++) {< bbox3d.maxX) { y: path[5],
1279 < vertexes.length; i++) {< bbox3d.maxX) { z: d
1280 < vertexes.length; i++) {< bbox3d.maxX) { }),
1281 < vertexes.length; i++) {< bbox3d.maxX) { this.swapZ({
1282 < vertexes.length; i++) {< bbox3d.maxX) { x: path[4],
1283 < vertexes.length; i++) {< bbox3d.maxX) { y: path[5],
1284 < vertexes.length; i++) {< bbox3d.maxX) { z: (opposite ? 0 : d)
1285 < vertexes.length; i++) {< bbox3d.maxX) { })
1286 < vertexes.length; i++) {< bbox3d.maxX) { ];
1287  
1288 < vertexes.length; i++) {< bbox3d.maxX) { pArr = perspective(pArr, this.chart, false);
1289 < vertexes.length; i++) {< bbox3d.maxX) { path = this.chart.renderer.toLinePath(pArr, false);
1290  
1291 < vertexes.length; i++) {< bbox3d.maxX) { return path;
1292 < vertexes.length; i++) {< bbox3d.maxX) { });
1293  
1294 < vertexes.length; i++) {< bbox3d.maxX) { // Do not draw axislines in 3D
1295 < vertexes.length; i++) {< bbox3d.maxX) { wrap(Axis.prototype, 'getLinePath', function(proceed) {
1296 < vertexes.length; i++) {< bbox3d.maxX) { return this.chart.is3d() ? [] : proceed.apply(this, [].slice.call(arguments, 1));
1297 < vertexes.length; i++) {< bbox3d.maxX) { });
1298  
1299 < vertexes.length; i++) {< bbox3d.maxX) { wrap(Axis.prototype, 'getPlotBandPath', function(proceed) {
1300 < vertexes.length; i++) {< bbox3d.maxX) { // Do not do this if the chart is not 3D
1301 < vertexes.length; i++) {< bbox3d.maxX) { if (!this.chart.is3d() || this.coll === 'colorAxis') {
1302 < vertexes.length; i++) {< bbox3d.maxX) { return proceed.apply(this, [].slice.call(arguments, 1));
1303 < vertexes.length; i++) {< bbox3d.maxX) { }
1304  
1305 < vertexes.length; i++) {< bbox3d.maxX) { var args = arguments,
1306 < vertexes.length; i++) {< bbox3d.maxX) { from = args[1],
1307 < vertexes.length; i++) {< bbox3d.maxX) { to = args[2],
1308 < vertexes.length; i++) {< bbox3d.maxX) { toPath = this.getPlotLinePath(to),
1309 < vertexes.length; i++) {< bbox3d.maxX) { path = this.getPlotLinePath(from);
1310  
1311 < vertexes.length; i++) {< bbox3d.maxX) { if (path && toPath) {
1312 < vertexes.length; i++) {< bbox3d.maxX) { path.push(
1313 < vertexes.length; i++) {< bbox3d.maxX) { 'L',
1314 < vertexes.length; i++) {< bbox3d.maxX) { toPath[10], // These two do not exist in the regular getPlotLine
1315 < vertexes.length; i++) {< bbox3d.maxX) { toPath[11], // ---- # 3005
1316 < vertexes.length; i++) {< bbox3d.maxX) { 'L',
1317 < vertexes.length; i++) {< bbox3d.maxX) { toPath[7],
1318 < vertexes.length; i++) {< bbox3d.maxX) { toPath[8],
1319 < vertexes.length; i++) {< bbox3d.maxX) { 'L',
1320 < vertexes.length; i++) {< bbox3d.maxX) { toPath[4],
1321 < vertexes.length; i++) {< bbox3d.maxX) { toPath[5],
1322 < vertexes.length; i++) {< bbox3d.maxX) { 'L',
1323 < vertexes.length; i++) {< bbox3d.maxX) { toPath[1],
1324 < vertexes.length; i++) {< bbox3d.maxX) { toPath[2]
1325 < vertexes.length; i++) {< bbox3d.maxX) { );
1326 < vertexes.length; i++) {< bbox3d.maxX) { } else { // outside the axis area
1327 < vertexes.length; i++) {< bbox3d.maxX) { path = null;
1328 < vertexes.length; i++) {< bbox3d.maxX) { }
1329  
1330 < vertexes.length; i++) {< bbox3d.maxX) { return path;
1331 < vertexes.length; i++) {< bbox3d.maxX) { });
1332  
1333 < vertexes.length; i++) {< bbox3d.maxX) { /***
1334 < vertexes.length; i++) {< bbox3d.maxX) { EXTENSION TO THE TICKS
1335 < vertexes.length; i++) {< bbox3d.maxX) { ***/
1336  
1337 < vertexes.length; i++) {< bbox3d.maxX) { wrap(Tick.prototype, 'getMarkPath', function(proceed) {
1338 < vertexes.length; i++) {< bbox3d.maxX) { var path = proceed.apply(this, [].slice.call(arguments, 1));
1339  
1340 < vertexes.length; i++) {< bbox3d.maxX) { // Do not do this if the chart is not 3D
1341 < vertexes.length; i++) {< bbox3d.maxX) { if (!this.axis.chart.is3d() || this.coll === 'colorAxis') {
1342 < vertexes.length; i++) {< bbox3d.maxX) { return path;
1343 < vertexes.length; i++) {< bbox3d.maxX) { }
1344  
1345 < vertexes.length; i++) {< bbox3d.maxX) { var pArr = [
1346 < vertexes.length; i++) {< bbox3d.maxX) { this.axis.swapZ({
1347 < vertexes.length; i++) {< bbox3d.maxX) { x: path[1],
1348 < vertexes.length; i++) {< bbox3d.maxX) { y: path[2],
1349 < vertexes.length; i++) {< bbox3d.maxX) { z: 0
1350 < vertexes.length; i++) {< bbox3d.maxX) { }),
1351 < vertexes.length; i++) {< bbox3d.maxX) { this.axis.swapZ({
1352 < vertexes.length; i++) {< bbox3d.maxX) { x: path[4],
1353 < vertexes.length; i++) {< bbox3d.maxX) { y: path[5],
1354 < vertexes.length; i++) {< bbox3d.maxX) { z: 0
1355 < vertexes.length; i++) {< bbox3d.maxX) { })
1356 < vertexes.length; i++) {< bbox3d.maxX) { ];
1357  
1358 < vertexes.length; i++) {< bbox3d.maxX) { pArr = perspective(pArr, this.axis.chart, false);
1359 < vertexes.length; i++) {< bbox3d.maxX) { path = [
1360 < vertexes.length; i++) {< bbox3d.maxX) { 'M', pArr[0].x, pArr[0].y,
1361 < vertexes.length; i++) {< bbox3d.maxX) { 'L', pArr[1].x, pArr[1].y
1362 < vertexes.length; i++) {< bbox3d.maxX) { ];
1363 < vertexes.length; i++) {< bbox3d.maxX) { return path;
1364 < vertexes.length; i++) {< bbox3d.maxX) { });
1365  
1366 < vertexes.length; i++) {< bbox3d.maxX) { wrap(Tick.prototype, 'getLabelPosition', function(proceed) {
1367 < vertexes.length; i++) {< bbox3d.maxX) { var pos = proceed.apply(this, [].slice.call(arguments, 1));
1368  
1369 < vertexes.length; i++) {< bbox3d.maxX) { // Do not do this if the chart is not 3D
1370 < vertexes.length; i++) {< bbox3d.maxX) { if (this.axis.chart.is3d() && this.coll !== 'colorAxis') {
1371 < vertexes.length; i++) {< bbox3d.maxX) { pos = perspective([this.axis.swapZ({
1372 < vertexes.length; i++) {< bbox3d.maxX) { x: pos.x,
1373 < vertexes.length; i++) {< bbox3d.maxX) { y: pos.y,
1374 < vertexes.length; i++) {< bbox3d.maxX) { z: 0
1375 < vertexes.length; i++) {< bbox3d.maxX) { })], this.axis.chart, false)[0];
1376 < vertexes.length; i++) {< bbox3d.maxX) { }
1377 < vertexes.length; i++) {< bbox3d.maxX) { return pos;
1378 < vertexes.length; i++) {< bbox3d.maxX) { });
1379  
1380 < vertexes.length; i++) {< bbox3d.maxX) { H.wrap(Axis.prototype, 'getTitlePosition', function(proceed) {
1381 < vertexes.length; i++) {< bbox3d.maxX) { var is3d = this.chart.is3d() && this.coll !== 'colorAxis',
1382 < vertexes.length; i++) {< bbox3d.maxX) { pos,
1383 < vertexes.length; i++) {< bbox3d.maxX) { axisTitleMargin;
1384  
1385 < vertexes.length; i++) {< bbox3d.maxX) { // Pull out the axis title margin, that is not subject to the perspective
1386 < vertexes.length; i++) {< bbox3d.maxX) { if (is3d) {
1387 < vertexes.length; i++) {< bbox3d.maxX) { axisTitleMargin = this.axisTitleMargin;
1388 < vertexes.length; i++) {< bbox3d.maxX) { this.axisTitleMargin = 0;
1389 < vertexes.length; i++) {< bbox3d.maxX) { }
1390  
1391 < vertexes.length; i++) {< bbox3d.maxX) { pos = proceed.apply(this, [].slice.call(arguments, 1));
1392  
1393 < vertexes.length; i++) {< bbox3d.maxX) { if (is3d) {
1394 < vertexes.length; i++) {< bbox3d.maxX) { pos = perspective([this.swapZ({
1395 < vertexes.length; i++) {< bbox3d.maxX) { x: pos.x,
1396 < vertexes.length; i++) {< bbox3d.maxX) { y: pos.y,
1397 < vertexes.length; i++) {< bbox3d.maxX) { z: 0
1398 < vertexes.length; i++) {< bbox3d.maxX) { })], this.chart, false)[0];
1399  
1400 < vertexes.length; i++) {< bbox3d.maxX) { // Re-apply the axis title margin outside the perspective
1401 < vertexes.length; i++) {< bbox3d.maxX) { pos[this.horiz ? 'y' : 'x'] += (this.horiz ? 1 : -1) * // horizontal axis reverses the margin ...
1402 < vertexes.length; i++) {< bbox3d.maxX) { (this.opposite ? -1 : 1) * // ... so does opposite axes
1403 < vertexes.length; i++) {< bbox3d.maxX) { axisTitleMargin;
1404 < vertexes.length; i++) {< bbox3d.maxX) { this.axisTitleMargin = axisTitleMargin;
1405 < vertexes.length; i++) {< bbox3d.maxX) { }
1406 < vertexes.length; i++) {< bbox3d.maxX) { return pos;
1407 < vertexes.length; i++) {< bbox3d.maxX) { });
1408  
1409 < vertexes.length; i++) {< bbox3d.maxX) { wrap(Axis.prototype, 'drawCrosshair', function(proceed) {
1410 < vertexes.length; i++) {< bbox3d.maxX) { var args = arguments;
1411 < vertexes.length; i++) {< bbox3d.maxX) { if (this.chart.is3d()) {
1412 < vertexes.length; i++) {< bbox3d.maxX) { if (args[2]) {
1413 < vertexes.length; i++) {< bbox3d.maxX) { args[2] = {
1414 < vertexes.length; i++) {< bbox3d.maxX) { plotX: args[2].plotXold || args[2].plotX,
1415 < vertexes.length; i++) {< bbox3d.maxX) { plotY: args[2].plotYold || args[2].plotY
1416 < vertexes.length; i++) {< bbox3d.maxX) { };
1417 < vertexes.length; i++) {< bbox3d.maxX) { }
1418 < vertexes.length; i++) {< bbox3d.maxX) { }
1419 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(args, 1));
1420 < vertexes.length; i++) {< bbox3d.maxX) { });
1421  
1422 < vertexes.length; i++) {< bbox3d.maxX) { wrap(Axis.prototype, 'destroy', function(proceed) {
1423 < vertexes.length; i++) {< bbox3d.maxX) { each(['backFrame', 'bottomFrame', 'sideFrame'], function(prop) {
1424 < vertexes.length; i++) {< bbox3d.maxX) { if (this[prop]) {
1425 < vertexes.length; i++) {< bbox3d.maxX) { this[prop] = this[prop].destroy();
1426 < vertexes.length; i++) {< bbox3d.maxX) { }
1427 < vertexes.length; i++) {< bbox3d.maxX) { }, this);
1428 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
1429 < vertexes.length; i++) {< bbox3d.maxX) { });
1430  
1431 < vertexes.length; i++) {< bbox3d.maxX) { /***
1432 < vertexes.length; i++) {< bbox3d.maxX) { Z-AXIS
1433 < vertexes.length; i++) {< bbox3d.maxX) { ***/
1434  
1435 < vertexes.length; i++) {< bbox3d.maxX) { Axis.prototype.swapZ = function(p, insidePlotArea) {
1436 < vertexes.length; i++) {< bbox3d.maxX) { if (this.isZAxis) {
1437 < vertexes.length; i++) {< bbox3d.maxX) { var plotLeft = insidePlotArea ? 0 : this.chart.plotLeft;
1438 < vertexes.length; i++) {< bbox3d.maxX) { var chart = this.chart;
1439 < vertexes.length; i++) {< bbox3d.maxX) { return {
1440 < vertexes.length; i++) {< bbox3d.maxX) { x: plotLeft + (chart.yAxis[0].opposite ? p.z : chart.xAxis[0].width - p.z),
1441 < vertexes.length; i++) {< bbox3d.maxX) { y: p.y,
1442 < vertexes.length; i++) {< bbox3d.maxX) { z: p.x - plotLeft
1443 < vertexes.length; i++) {< bbox3d.maxX) { };
1444 < vertexes.length; i++) {< bbox3d.maxX) { }
1445 < vertexes.length; i++) {< bbox3d.maxX) { return p;
1446 < vertexes.length; i++) {< bbox3d.maxX) { };
1447  
1448 < vertexes.length; i++) {< bbox3d.maxX) { ZAxis = H.ZAxis = function() {
1449 < vertexes.length; i++) {< bbox3d.maxX) { this.init.apply(this, arguments);
1450 < vertexes.length; i++) {< bbox3d.maxX) { };
1451 < vertexes.length; i++) {< bbox3d.maxX) { extend(ZAxis.prototype, Axis.prototype);
1452 < vertexes.length; i++) {< bbox3d.maxX) { extend(ZAxis.prototype, {
1453 < vertexes.length; i++) {< bbox3d.maxX) { isZAxis: true,
1454 < vertexes.length; i++) {< bbox3d.maxX) { setOptions: function(userOptions) {
1455 < vertexes.length; i++) {< bbox3d.maxX) { userOptions = merge({
1456 < vertexes.length; i++) {< bbox3d.maxX) { offset: 0,
1457 < vertexes.length; i++) {< bbox3d.maxX) { lineWidth: 0
1458 < vertexes.length; i++) {< bbox3d.maxX) { }, userOptions);
1459 < vertexes.length; i++) {< bbox3d.maxX) { Axis.prototype.setOptions.call(this, userOptions);
1460 < vertexes.length; i++) {< bbox3d.maxX) { this.coll = 'zAxis';
1461 < vertexes.length; i++) {< bbox3d.maxX) { },
1462 < vertexes.length; i++) {< bbox3d.maxX) { setAxisSize: function() {
1463 < vertexes.length; i++) {< bbox3d.maxX) { Axis.prototype.setAxisSize.call(this);
1464 < vertexes.length; i++) {< bbox3d.maxX) { this.width = this.len = this.chart.options.chart.options3d.depth;
1465 < vertexes.length; i++) {< bbox3d.maxX) { this.right = this.chart.chartWidth - this.width - this.left;
1466 < vertexes.length; i++) {< bbox3d.maxX) { },
1467 < vertexes.length; i++) {< bbox3d.maxX) { getSeriesExtremes: function() {
1468 < vertexes.length; i++) {< bbox3d.maxX) { var axis = this,
1469 < vertexes.length; i++) {< bbox3d.maxX) { chart = axis.chart;
1470  
1471 < vertexes.length; i++) {< bbox3d.maxX) { axis.hasVisibleSeries = false;
1472  
1473 < vertexes.length; i++) {< bbox3d.maxX) { // Reset properties in case we're redrawing (#3353)
1474 < vertexes.length; i++) {< bbox3d.maxX) { axis.dataMin = axis.dataMax = axis.ignoreMinPadding = axis.ignoreMaxPadding = null;
1475  
1476 < vertexes.length; i++) {< bbox3d.maxX) { if (axis.buildStacks) {
1477 < vertexes.length; i++) {< bbox3d.maxX) { axis.buildStacks();
1478 < vertexes.length; i++) {< bbox3d.maxX) { }
1479  
1480 < vertexes.length; i++) {< bbox3d.maxX) { // loop through this axis' series
1481 < vertexes.length; i++) {< bbox3d.maxX) { each(axis.series, function(series) {
1482  
1483 < vertexes.length; i++) {< bbox3d.maxX) { if (series.visible || !chart.options.chart.ignoreHiddenSeries) {
1484  
1485 < vertexes.length; i++) {< bbox3d.maxX) { var seriesOptions = series.options,
1486 < vertexes.length; i++) {< bbox3d.maxX) { zData,
1487 < vertexes.length; i++) {< bbox3d.maxX) { threshold = seriesOptions.threshold;
1488  
1489 < vertexes.length; i++) {< bbox3d.maxX) { axis.hasVisibleSeries = true;
1490  
1491 < vertexes.length; i++) {< bbox3d.maxX) { // Validate threshold in logarithmic axes
1492 < vertexes.length; i++) {< bbox3d.maxX) { if (axis.positiveValuesOnly && threshold <= 0) {
1493 < vertexes.length; i++) {< bbox3d.maxX) { threshold = null;
1494 < vertexes.length; i++) {< bbox3d.maxX) { }
1495  
1496 < vertexes.length; i++) {< bbox3d.maxX) { zData = series.zData;
1497 < vertexes.length; i++) {< bbox3d.maxX) { if (zData.length) {
1498 < vertexes.length; i++) {< bbox3d.maxX) { axis.dataMin = Math.min(pick(axis.dataMin, zData[0]), Math.min.apply(null, zData));
1499 < vertexes.length; i++) {< bbox3d.maxX) { axis.dataMax = Math.max(pick(axis.dataMax, zData[0]), Math.max.apply(null, zData));
1500 < vertexes.length; i++) {< bbox3d.maxX) { }
1501 < vertexes.length; i++) {< bbox3d.maxX) { }
1502 < vertexes.length; i++) {< bbox3d.maxX) { });
1503 < vertexes.length; i++) {< bbox3d.maxX) { }
1504 < vertexes.length; i++) {< bbox3d.maxX) { });
1505  
1506  
1507 < vertexes.length; i++) {< bbox3d.maxX) { /**
1508 < vertexes.length; i++) {< bbox3d.maxX) { * Extend the chart getAxes method to also get the color axis
1509 < vertexes.length; i++) {< bbox3d.maxX) { */
1510 < vertexes.length; i++) {< bbox3d.maxX) { wrap(Chart.prototype, 'getAxes', function(proceed) {
1511 < vertexes.length; i++) {< bbox3d.maxX) { var chart = this,
1512 < vertexes.length; i++) {< bbox3d.maxX) { options = this.options,
1513 < vertexes.length; i++) {< bbox3d.maxX) { zAxisOptions = options.zAxis = splat(options.zAxis || {});
1514  
1515 < vertexes.length; i++) {< bbox3d.maxX) { proceed.call(this);
1516  
1517 < vertexes.length; i++) {< bbox3d.maxX) { if (!chart.is3d()) {
1518 < vertexes.length; i++) {< bbox3d.maxX) { return;
1519 < vertexes.length; i++) {< bbox3d.maxX) { }
1520 < vertexes.length; i++) {< bbox3d.maxX) { this.zAxis = [];
1521 < vertexes.length; i++) {< bbox3d.maxX) { each(zAxisOptions, function(axisOptions, i) {
1522 < vertexes.length; i++) {< bbox3d.maxX) { axisOptions.index = i;
1523 < vertexes.length; i++) {< bbox3d.maxX) { axisOptions.isX = true; //Z-Axis is shown horizontally, so it's kind of a X-Axis
1524 < vertexes.length; i++) {< bbox3d.maxX) { var zAxis = new ZAxis(chart, axisOptions);
1525 < vertexes.length; i++) {< bbox3d.maxX) { zAxis.setScale();
1526 < vertexes.length; i++) {< bbox3d.maxX) { });
1527 < vertexes.length; i++) {< bbox3d.maxX) { });
1528  
1529 < vertexes.length; i++) {< bbox3d.maxX) { }(Highcharts));
1530 < vertexes.length; i++) {< bbox3d.maxX) { (function(H) {
1531 < vertexes.length; i++) {< bbox3d.maxX) { /**
1532 < vertexes.length; i++) {< bbox3d.maxX) { * (c) 2010-2017 Torstein Honsi
1533 < vertexes.length; i++) {< bbox3d.maxX) { *
1534 < vertexes.length; i++) {< bbox3d.maxX) { * License: www.highcharts.com/license
1535 < vertexes.length; i++) {< bbox3d.maxX) { */
1536 < vertexes.length; i++) {< bbox3d.maxX) { var each = H.each,
1537 < vertexes.length; i++) {< bbox3d.maxX) { perspective = H.perspective,
1538 < vertexes.length; i++) {< bbox3d.maxX) { pick = H.pick,
1539 < vertexes.length; i++) {< bbox3d.maxX) { Series = H.Series,
1540 < vertexes.length; i++) {< bbox3d.maxX) { seriesTypes = H.seriesTypes,
1541 < vertexes.length; i++) {< bbox3d.maxX) { svg = H.svg,
1542 < vertexes.length; i++) {< bbox3d.maxX) { wrap = H.wrap;
1543 < vertexes.length; i++) {< bbox3d.maxX) { /***
1544 < vertexes.length; i++) {< bbox3d.maxX) { EXTENSION FOR 3D COLUMNS
1545 < vertexes.length; i++) {< bbox3d.maxX) { ***/
1546 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.column.prototype, 'translate', function(proceed) {
1547 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
1548  
1549 < vertexes.length; i++) {< bbox3d.maxX) { // Do not do this if the chart is not 3D
1550 < vertexes.length; i++) {< bbox3d.maxX) { if (!this.chart.is3d()) {
1551 < vertexes.length; i++) {< bbox3d.maxX) { return;
1552 < vertexes.length; i++) {< bbox3d.maxX) { }
1553  
1554 < vertexes.length; i++) {< bbox3d.maxX) { var series = this,
1555 < vertexes.length; i++) {< bbox3d.maxX) { chart = series.chart,
1556 < vertexes.length; i++) {< bbox3d.maxX) { seriesOptions = series.options,
1557 < vertexes.length; i++) {< bbox3d.maxX) { depth = seriesOptions.depth || 25;
1558  
1559 < vertexes.length; i++) {< bbox3d.maxX) { var stack = seriesOptions.stacking ? (seriesOptions.stack || 0) : series._i;
1560 < vertexes.length; i++) {< bbox3d.maxX) { var z = stack * (depth + (seriesOptions.groupZPadding || 1));
1561  
1562 < vertexes.length; i++) {< bbox3d.maxX) { if (seriesOptions.grouping !== false) {
1563 < vertexes.length; i++) {< bbox3d.maxX) { z = 0;
1564 < vertexes.length; i++) {< bbox3d.maxX) { }
1565  
1566 < vertexes.length; i++) {< bbox3d.maxX) { z += (seriesOptions.groupZPadding || 1);
1567  
1568 < vertexes.length; i++) {< bbox3d.maxX) { each(series.data, function(point) {
1569 < vertexes.length; i++) {< bbox3d.maxX) { if (point.y !== null) {
1570 < vertexes.length; i++) {< bbox3d.maxX) { var shapeArgs = point.shapeArgs,
1571 < vertexes.length; i++) {< bbox3d.maxX) { tooltipPos = point.tooltipPos;
1572  
1573 < vertexes.length; i++) {< bbox3d.maxX) { point.shapeType = 'cuboid';
1574 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.z = z;
1575 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.depth = depth;
1576 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.insidePlotArea = true;
1577  
1578 < vertexes.length; i++) {< bbox3d.maxX) { // Translate the tooltip position in 3d space
1579 < vertexes.length; i++) {< bbox3d.maxX) { tooltipPos = perspective([{
1580 < vertexes.length; i++) {< bbox3d.maxX) { x: tooltipPos[0],
1581 < vertexes.length; i++) {< bbox3d.maxX) { y: tooltipPos[1],
1582 < vertexes.length; i++) {< bbox3d.maxX) { z: z
1583 < vertexes.length; i++) {< bbox3d.maxX) { }], chart, true)[0];
1584 < vertexes.length; i++) {< bbox3d.maxX) { point.tooltipPos = [tooltipPos.x, tooltipPos.y];
1585 < vertexes.length; i++) {< bbox3d.maxX) { }
1586 < vertexes.length; i++) {< bbox3d.maxX) { });
1587 < vertexes.length; i++) {< bbox3d.maxX) { // store for later use #4067
1588 < vertexes.length; i++) {< bbox3d.maxX) { series.z = z;
1589 < vertexes.length; i++) {< bbox3d.maxX) { });
1590  
1591 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.column.prototype, 'animate', function(proceed) {
1592 < vertexes.length; i++) {< bbox3d.maxX) { if (!this.chart.is3d()) {
1593 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
1594 < vertexes.length; i++) {< bbox3d.maxX) { } else {
1595 < vertexes.length; i++) {< bbox3d.maxX) { var args = arguments,
1596 < vertexes.length; i++) {< bbox3d.maxX) { init = args[1],
1597 < vertexes.length; i++) {< bbox3d.maxX) { yAxis = this.yAxis,
1598 < vertexes.length; i++) {< bbox3d.maxX) { series = this,
1599 < vertexes.length; i++) {< bbox3d.maxX) { reversed = this.yAxis.reversed;
1600  
1601 < vertexes.length; i++) {< bbox3d.maxX) { if (svg) { // VML is too slow anyway
1602 < vertexes.length; i++) {< bbox3d.maxX) { if (init) {
1603 < vertexes.length; i++) {< bbox3d.maxX) { each(series.data, function(point) {
1604 < vertexes.length; i++) {< bbox3d.maxX) { if (point.y !== null) {
1605 < vertexes.length; i++) {< bbox3d.maxX) { point.height = point.shapeArgs.height;
1606 < vertexes.length; i++) {< bbox3d.maxX) { point.shapey = point.shapeArgs.y; //#2968
1607 < vertexes.length; i++) {< bbox3d.maxX) { point.shapeArgs.height = 1;
1608 < vertexes.length; i++) {< bbox3d.maxX) { if (!reversed) {
1609 < vertexes.length; i++) {< bbox3d.maxX) { if (point.stackY) {
1610 < vertexes.length; i++) {< bbox3d.maxX) { point.shapeArgs.y = point.plotY + yAxis.translate(point.stackY);
1611 < vertexes.length; i++) {< bbox3d.maxX) { } else {
1612 < vertexes.length; i++) {< bbox3d.maxX) { point.shapeArgs.y = point.plotY + (point.negative ? -point.height : point.height);
1613 < vertexes.length; i++) {< bbox3d.maxX) { }
1614 < vertexes.length; i++) {< bbox3d.maxX) { }
1615 < vertexes.length; i++) {< bbox3d.maxX) { }
1616 < vertexes.length; i++) {< bbox3d.maxX) { });
1617  
1618 < vertexes.length; i++) {< bbox3d.maxX) { } else { // run the animation
1619 < vertexes.length; i++) {< bbox3d.maxX) { each(series.data, function(point) {
1620 < vertexes.length; i++) {< bbox3d.maxX) { if (point.y !== null) {
1621 < vertexes.length; i++) {< bbox3d.maxX) { point.shapeArgs.height = point.height;
1622 < vertexes.length; i++) {< bbox3d.maxX) { point.shapeArgs.y = point.shapey; //#2968
1623 < vertexes.length; i++) {< bbox3d.maxX) { // null value do not have a graphic
1624 < vertexes.length; i++) {< bbox3d.maxX) { if (point.graphic) {
1625 < vertexes.length; i++) {< bbox3d.maxX) { point.graphic.animate(point.shapeArgs, series.options.animation);
1626 < vertexes.length; i++) {< bbox3d.maxX) { }
1627 < vertexes.length; i++) {< bbox3d.maxX) { }
1628 < vertexes.length; i++) {< bbox3d.maxX) { });
1629  
1630 < vertexes.length; i++) {< bbox3d.maxX) { // redraw datalabels to the correct position
1631 < vertexes.length; i++) {< bbox3d.maxX) { this.drawDataLabels();
1632  
1633 < vertexes.length; i++) {< bbox3d.maxX) { // delete this function to allow it only once
1634 < vertexes.length; i++) {< bbox3d.maxX) { series.animate = null;
1635 < vertexes.length; i++) {< bbox3d.maxX) { }
1636 < vertexes.length; i++) {< bbox3d.maxX) { }
1637 < vertexes.length; i++) {< bbox3d.maxX) { }
1638 < vertexes.length; i++) {< bbox3d.maxX) { });
1639  
1640 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.column.prototype, 'init', function(proceed) {
1641 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
1642  
1643 < vertexes.length; i++) {< bbox3d.maxX) { if (this.chart.is3d()) {
1644 < vertexes.length; i++) {< bbox3d.maxX) { var seriesOptions = this.options,
1645 < vertexes.length; i++) {< bbox3d.maxX) { grouping = seriesOptions.grouping,
1646 < vertexes.length; i++) {< bbox3d.maxX) { stacking = seriesOptions.stacking,
1647 < vertexes.length; i++) {< bbox3d.maxX) { reversedStacks = pick(this.yAxis.options.reversedStacks, true),
1648 < vertexes.length; i++) {< bbox3d.maxX) { z = 0;
1649  
1650 < vertexes.length; i++) {< bbox3d.maxX) { if (!(grouping !== undefined && !grouping)) {
1651 < vertexes.length; i++) {< bbox3d.maxX) { var stacks = this.chart.retrieveStacks(stacking),
1652 < vertexes.length; i++) {< bbox3d.maxX) { stack = seriesOptions.stack || 0,
1653 < vertexes.length; i++) {< bbox3d.maxX) { i; // position within the stack
1654 < vertexes.length; i++) {< bbox3d.maxX) { for (i = 0; i < stacks[stack].series.length; i++) {
1655 < vertexes.length; i++) {< bbox3d.maxX) { if (stacks[stack].series[i] === this) {
1656 < vertexes.length; i++) {< bbox3d.maxX) { break;
1657 < vertexes.length; i++) {< bbox3d.maxX) { }
1658 < vertexes.length; i++) {< bbox3d.maxX) { }
1659 < vertexes.length; i++) {< bbox3d.maxX) { z = (10 * (stacks.totalStacks - stacks[stack].position)) + (reversedStacks ? i : -i); // #4369
1660  
1661 < vertexes.length; i++) {< bbox3d.maxX) { // In case when axis is reversed, columns are also reversed inside the group (#3737)
1662 < vertexes.length; i++) {< bbox3d.maxX) { if (!this.xAxis.reversed) {
1663 < vertexes.length; i++) {< bbox3d.maxX) { z = (stacks.totalStacks * 10) - z;
1664 < vertexes.length; i++) {< bbox3d.maxX) { }
1665 < vertexes.length; i++) {< bbox3d.maxX) { }
1666  
1667 < vertexes.length; i++) {< bbox3d.maxX) { seriesOptions.zIndex = z;
1668 < vertexes.length; i++) {< bbox3d.maxX) { }
1669 < vertexes.length; i++) {< bbox3d.maxX) { });
1670  
1671  
1672 < vertexes.length; i++) {< bbox3d.maxX) { function pointAttribs(proceed) {
1673 < vertexes.length; i++) {< bbox3d.maxX) { var attr = proceed.apply(this, [].slice.call(arguments, 1));
1674  
1675 < vertexes.length; i++) {< bbox3d.maxX) { if (this.chart.is3d()) {
1676 < vertexes.length; i++) {< bbox3d.maxX) { // Set the fill color to the fill color to provide a smooth edge
1677 < vertexes.length; i++) {< bbox3d.maxX) { attr.stroke = this.options.edgeColor || attr.fill;
1678 < vertexes.length; i++) {< bbox3d.maxX) { attr['stroke-width'] = pick(this.options.edgeWidth, 1); // #4055
1679 < vertexes.length; i++) {< bbox3d.maxX) { }
1680  
1681 < vertexes.length; i++) {< bbox3d.maxX) { return attr;
1682 < vertexes.length; i++) {< bbox3d.maxX) { }
1683  
1684 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.column.prototype, 'pointAttribs', pointAttribs);
1685 < vertexes.length; i++) {< bbox3d.maxX) { if (seriesTypes.columnrange) {
1686 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.columnrange.prototype, 'pointAttribs', pointAttribs);
1687 < vertexes.length; i++) {< bbox3d.maxX) { }
1688  
1689  
1690 < vertexes.length; i++) {< bbox3d.maxX) { function draw3DPoints(proceed) {
1691 < vertexes.length; i++) {< bbox3d.maxX) { // Do not do this if the chart is not 3D
1692 < vertexes.length; i++) {< bbox3d.maxX) { if (this.chart.is3d()) {
1693 < vertexes.length; i++) {< bbox3d.maxX) { var grouping = this.chart.options.plotOptions.column.grouping;
1694 < vertexes.length; i++) {< bbox3d.maxX) { if (grouping !== undefined && !grouping && this.group.zIndex !== undefined && !this.zIndexSet) {
1695 < vertexes.length; i++) {< bbox3d.maxX) { this.group.attr({
1696 < vertexes.length; i++) {< bbox3d.maxX) { zIndex: this.group.zIndex * 10
1697 < vertexes.length; i++) {< bbox3d.maxX) { });
1698 < vertexes.length; i++) {< bbox3d.maxX) { this.zIndexSet = true; // #4062 set zindex only once
1699 < vertexes.length; i++) {< bbox3d.maxX) { }
1700 < vertexes.length; i++) {< bbox3d.maxX) { }
1701  
1702 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
1703 < vertexes.length; i++) {< bbox3d.maxX) { }
1704  
1705 < vertexes.length; i++) {< bbox3d.maxX) { wrap(Series.prototype, 'alignDataLabel', function(proceed) {
1706  
1707 < vertexes.length; i++) {< bbox3d.maxX) { // Only do this for 3D columns and columnranges
1708 < vertexes.length; i++) {< bbox3d.maxX) { if (this.chart.is3d() && (this.type === 'column' || this.type === 'columnrange')) {
1709 < vertexes.length; i++) {< bbox3d.maxX) { var series = this,
1710 < vertexes.length; i++) {< bbox3d.maxX) { chart = series.chart;
1711  
1712 < vertexes.length; i++) {< bbox3d.maxX) { var args = arguments,
1713 < vertexes.length; i++) {< bbox3d.maxX) { alignTo = args[4];
1714  
1715 < vertexes.length; i++) {< bbox3d.maxX) { var pos = ({
1716 < vertexes.length; i++) {< bbox3d.maxX) { x: alignTo.x,
1717 < vertexes.length; i++) {< bbox3d.maxX) { y: alignTo.y,
1718 < vertexes.length; i++) {< bbox3d.maxX) { z: series.z
1719 < vertexes.length; i++) {< bbox3d.maxX) { });
1720 < vertexes.length; i++) {< bbox3d.maxX) { pos = perspective([pos], chart, true)[0];
1721 < vertexes.length; i++) {< bbox3d.maxX) { alignTo.x = pos.x;
1722 < vertexes.length; i++) {< bbox3d.maxX) { alignTo.y = pos.y;
1723 < vertexes.length; i++) {< bbox3d.maxX) { }
1724  
1725 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
1726 < vertexes.length; i++) {< bbox3d.maxX) { });
1727  
1728 < vertexes.length; i++) {< bbox3d.maxX) { if (seriesTypes.columnrange) {
1729 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.columnrange.prototype, 'drawPoints', draw3DPoints);
1730 < vertexes.length; i++) {< bbox3d.maxX) { }
1731  
1732 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.column.prototype, 'drawPoints', draw3DPoints);
1733  
1734 < vertexes.length; i++) {< bbox3d.maxX) { /***
1735 < vertexes.length; i++) {< bbox3d.maxX) { EXTENSION FOR 3D CYLINDRICAL COLUMNS
1736 < vertexes.length; i++) {< bbox3d.maxX) { Not supported
1737 < vertexes.length; i++) {< bbox3d.maxX) { ***/
1738 < vertexes.length; i++) {< bbox3d.maxX) { /*
1739 < vertexes.length; i++) {< bbox3d.maxX) { var defaultOptions = H.getOptions();
1740 < vertexes.length; i++) {< bbox3d.maxX) { defaultOptions.plotOptions.cylinder = H.merge(defaultOptions.plotOptions.column);
1741 < vertexes.length; i++) {< bbox3d.maxX) { var CylinderSeries = H.extendClass(seriesTypes.column, {
1742 < vertexes.length; i++) {< bbox3d.maxX) { type: 'cylinder'
1743 < vertexes.length; i++) {< bbox3d.maxX) { });
1744 < vertexes.length; i++) {< bbox3d.maxX) { seriesTypes.cylinder = CylinderSeries;
1745  
1746 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.cylinder.prototype, 'translate', function (proceed) {
1747 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
1748  
1749 < vertexes.length; i++) {< bbox3d.maxX) { // Do not do this if the chart is not 3D
1750 < vertexes.length; i++) {< bbox3d.maxX) { if (!this.chart.is3d()) {
1751 < vertexes.length; i++) {< bbox3d.maxX) { return;
1752 < vertexes.length; i++) {< bbox3d.maxX) { }
1753  
1754 < vertexes.length; i++) {< bbox3d.maxX) { var series = this,
1755 < vertexes.length; i++) {< bbox3d.maxX) { chart = series.chart,
1756 < vertexes.length; i++) {< bbox3d.maxX) { options = chart.options,
1757 < vertexes.length; i++) {< bbox3d.maxX) { cylOptions = options.plotOptions.cylinder,
1758 < vertexes.length; i++) {< bbox3d.maxX) { options3d = options.chart.options3d,
1759 < vertexes.length; i++) {< bbox3d.maxX) { depth = cylOptions.depth || 0,
1760 < vertexes.length; i++) {< bbox3d.maxX) { alpha = chart.alpha3d;
1761  
1762 < vertexes.length; i++) {< bbox3d.maxX) { var z = cylOptions.stacking ? (this.options.stack || 0) * depth : series._i * depth;
1763 < vertexes.length; i++) {< bbox3d.maxX) { z += depth / 2;
1764  
1765 < vertexes.length; i++) {< bbox3d.maxX) { if (cylOptions.grouping !== false) { z = 0; }
1766  
1767 < vertexes.length; i++) {< bbox3d.maxX) { each(series.data, function (point) {
1768 < vertexes.length; i++) {< bbox3d.maxX) { var shapeArgs = point.shapeArgs,
1769 < vertexes.length; i++) {< bbox3d.maxX) { deg2rad = H.deg2rad;
1770 < vertexes.length; i++) {< bbox3d.maxX) { point.shapeType = 'arc3d';
1771 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.x += depth / 2;
1772 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.z = z;
1773 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.start = 0;
1774 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.end = 2 * PI;
1775 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.r = depth * 0.95;
1776 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.innerR = 0;
1777 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.depth = shapeArgs.height * (1 / sin((90 - alpha) * deg2rad)) - z;
1778 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.alpha = 90 - alpha;
1779 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.beta = 0;
1780 < vertexes.length; i++) {< bbox3d.maxX) { });
1781 < vertexes.length; i++) {< bbox3d.maxX) { });
1782 < vertexes.length; i++) {< bbox3d.maxX) { */
1783  
1784 < vertexes.length; i++) {< bbox3d.maxX) { }(Highcharts));
1785 < vertexes.length; i++) {< bbox3d.maxX) { (function(H) {
1786 < vertexes.length; i++) {< bbox3d.maxX) { /**
1787 < vertexes.length; i++) {< bbox3d.maxX) { * (c) 2010-2017 Torstein Honsi
1788 < vertexes.length; i++) {< bbox3d.maxX) { *
1789 < vertexes.length; i++) {< bbox3d.maxX) { * License: www.highcharts.com/license
1790 < vertexes.length; i++) {< bbox3d.maxX) { */
1791 < vertexes.length; i++) {< bbox3d.maxX) { var deg2rad = H.deg2rad,
1792 < vertexes.length; i++) {< bbox3d.maxX) { each = H.each,
1793 < vertexes.length; i++) {< bbox3d.maxX) { pick = H.pick,
1794 < vertexes.length; i++) {< bbox3d.maxX) { seriesTypes = H.seriesTypes,
1795 < vertexes.length; i++) {< bbox3d.maxX) { svg = H.svg,
1796 < vertexes.length; i++) {< bbox3d.maxX) { wrap = H.wrap;
1797  
1798 < vertexes.length; i++) {< bbox3d.maxX) { /***
1799 < vertexes.length; i++) {< bbox3d.maxX) { EXTENSION FOR 3D PIES
1800 < vertexes.length; i++) {< bbox3d.maxX) { ***/
1801  
1802 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.pie.prototype, 'translate', function(proceed) {
1803 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
1804  
1805 < vertexes.length; i++) {< bbox3d.maxX) { // Do not do this if the chart is not 3D
1806 < vertexes.length; i++) {< bbox3d.maxX) { if (!this.chart.is3d()) {
1807 < vertexes.length; i++) {< bbox3d.maxX) { return;
1808 < vertexes.length; i++) {< bbox3d.maxX) { }
1809  
1810 < vertexes.length; i++) {< bbox3d.maxX) { var series = this,
1811 < vertexes.length; i++) {< bbox3d.maxX) { seriesOptions = series.options,
1812 < vertexes.length; i++) {< bbox3d.maxX) { depth = seriesOptions.depth || 0,
1813 < vertexes.length; i++) {< bbox3d.maxX) { options3d = series.chart.options.chart.options3d,
1814 < vertexes.length; i++) {< bbox3d.maxX) { alpha = options3d.alpha,
1815 < vertexes.length; i++) {< bbox3d.maxX) { beta = options3d.beta,
1816 < vertexes.length; i++) {< bbox3d.maxX) { z = seriesOptions.stacking ? (seriesOptions.stack || 0) * depth : series._i * depth;
1817  
1818 < vertexes.length; i++) {< bbox3d.maxX) { z += depth / 2;
1819  
1820 < vertexes.length; i++) {< bbox3d.maxX) { if (seriesOptions.grouping !== false) {
1821 < vertexes.length; i++) {< bbox3d.maxX) { z = 0;
1822 < vertexes.length; i++) {< bbox3d.maxX) { }
1823  
1824 < vertexes.length; i++) {< bbox3d.maxX) { each(series.data, function(point) {
1825  
1826 < vertexes.length; i++) {< bbox3d.maxX) { var shapeArgs = point.shapeArgs,
1827 < vertexes.length; i++) {< bbox3d.maxX) { angle;
1828  
1829 < vertexes.length; i++) {< bbox3d.maxX) { point.shapeType = 'arc3d';
1830  
1831 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.z = z;
1832 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.depth = depth * 0.75;
1833 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.alpha = alpha;
1834 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.beta = beta;
1835 < vertexes.length; i++) {< bbox3d.maxX) { shapeArgs.center = series.center;
1836  
1837 < vertexes.length; i++) {< bbox3d.maxX) { angle = (shapeArgs.end + shapeArgs.start) / 2;
1838  
1839 < vertexes.length; i++) {< bbox3d.maxX) { point.slicedTranslation = {
1840 < vertexes.length; i++) {< bbox3d.maxX) { translateX: Math.round(Math.cos(angle) * seriesOptions.slicedOffset * Math.cos(alpha * deg2rad)),
1841 < vertexes.length; i++) {< bbox3d.maxX) { translateY: Math.round(Math.sin(angle) * seriesOptions.slicedOffset * Math.cos(alpha * deg2rad))
1842 < vertexes.length; i++) {< bbox3d.maxX) { };
1843 < vertexes.length; i++) {< bbox3d.maxX) { });
1844 < vertexes.length; i++) {< bbox3d.maxX) { });
1845  
1846 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.pie.prototype.pointClass.prototype, 'haloPath', function(proceed) {
1847 < vertexes.length; i++) {< bbox3d.maxX) { var args = arguments;
1848 < vertexes.length; i++) {< bbox3d.maxX) { return this.series.chart.is3d() ? [] : proceed.call(this, args[1]);
1849 < vertexes.length; i++) {< bbox3d.maxX) { });
1850  
1851  
1852 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.pie.prototype, 'pointAttribs', function(proceed, point, state) {
1853 < vertexes.length; i++) {< bbox3d.maxX) { var attr = proceed.call(this, point, state),
1854 < vertexes.length; i++) {< bbox3d.maxX) { options = this.options;
1855  
1856 < vertexes.length; i++) {< bbox3d.maxX) { if (this.chart.is3d()) {
1857 < vertexes.length; i++) {< bbox3d.maxX) { attr.stroke = options.edgeColor || point.color || this.color;
1858 < vertexes.length; i++) {< bbox3d.maxX) { attr['stroke-width'] = pick(options.edgeWidth, 1);
1859 < vertexes.length; i++) {< bbox3d.maxX) { }
1860  
1861 < vertexes.length; i++) {< bbox3d.maxX) { return attr;
1862 < vertexes.length; i++) {< bbox3d.maxX) { });
1863  
1864  
1865 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.pie.prototype, 'drawPoints', function(proceed) {
1866 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
1867  
1868 < vertexes.length; i++) {< bbox3d.maxX) { if (this.chart.is3d()) {
1869 < vertexes.length; i++) {< bbox3d.maxX) { each(this.points, function(point) {
1870 < vertexes.length; i++) {< bbox3d.maxX) { var graphic = point.graphic;
1871  
1872 < vertexes.length; i++) {< bbox3d.maxX) { // #4584 Check if has graphic - null points don't have it
1873 < vertexes.length; i++) {< bbox3d.maxX) { if (graphic) {
1874 < vertexes.length; i++) {< bbox3d.maxX) { // Hide null or 0 points (#3006, 3650)
1875 < vertexes.length; i++) {< bbox3d.maxX) { graphic[point.y && point.visible ? 'show' : 'hide']();
1876 < vertexes.length; i++) {< bbox3d.maxX) { }
1877 < vertexes.length; i++) {< bbox3d.maxX) { });
1878 < vertexes.length; i++) {< bbox3d.maxX) { }
1879 < vertexes.length; i++) {< bbox3d.maxX) { });
1880  
1881 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.pie.prototype, 'drawDataLabels', function(proceed) {
1882 < vertexes.length; i++) {< bbox3d.maxX) { if (this.chart.is3d()) {
1883 < vertexes.length; i++) {< bbox3d.maxX) { var series = this,
1884 < vertexes.length; i++) {< bbox3d.maxX) { chart = series.chart,
1885 < vertexes.length; i++) {< bbox3d.maxX) { options3d = chart.options.chart.options3d;
1886 < vertexes.length; i++) {< bbox3d.maxX) { each(series.data, function(point) {
1887 < vertexes.length; i++) {< bbox3d.maxX) { var shapeArgs = point.shapeArgs,
1888 < vertexes.length; i++) {< bbox3d.maxX) { r = shapeArgs.r,
1889 < vertexes.length; i++) {< bbox3d.maxX) { a1 = (shapeArgs.alpha || options3d.alpha) * deg2rad, //#3240 issue with datalabels for 0 and null values
1890 < vertexes.length; i++) {< bbox3d.maxX) { b1 = (shapeArgs.beta || options3d.beta) * deg2rad,
1891 < vertexes.length; i++) {< bbox3d.maxX) { a2 = (shapeArgs.start + shapeArgs.end) / 2,
1892 < vertexes.length; i++) {< bbox3d.maxX) { labelPos = point.labelPos,
1893 < vertexes.length; i++) {< bbox3d.maxX) { labelIndexes = [0, 2, 4], // [x1, y1, x2, y2, x3, y3]
1894 < vertexes.length; i++) {< bbox3d.maxX) { yOffset = (-r * (1 - Math.cos(a1)) * Math.sin(a2)), // + (sin(a2) > 0 ? sin(a1) * d : 0)
1895 < vertexes.length; i++) {< bbox3d.maxX) { xOffset = r * (Math.cos(b1) - 1) * Math.cos(a2);
1896  
1897 < vertexes.length; i++) {< bbox3d.maxX) { // Apply perspective on label positions
1898 < vertexes.length; i++) {< bbox3d.maxX) { each(labelIndexes, function(index) {
1899 < vertexes.length; i++) {< bbox3d.maxX) { labelPos[index] += xOffset;
1900 < vertexes.length; i++) {< bbox3d.maxX) { labelPos[index + 1] += yOffset;
1901 < vertexes.length; i++) {< bbox3d.maxX) { });
1902 < vertexes.length; i++) {< bbox3d.maxX) { });
1903 < vertexes.length; i++) {< bbox3d.maxX) { }
1904  
1905 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
1906 < vertexes.length; i++) {< bbox3d.maxX) { });
1907  
1908 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.pie.prototype, 'addPoint', function(proceed) {
1909 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
1910 < vertexes.length; i++) {< bbox3d.maxX) { if (this.chart.is3d()) {
1911 < vertexes.length; i++) {< bbox3d.maxX) { // destroy (and rebuild) everything!!!
1912 < vertexes.length; i++) {< bbox3d.maxX) { this.update(this.userOptions, true); // #3845 pass the old options
1913 < vertexes.length; i++) {< bbox3d.maxX) { }
1914 < vertexes.length; i++) {< bbox3d.maxX) { });
1915  
1916 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.pie.prototype, 'animate', function(proceed) {
1917 < vertexes.length; i++) {< bbox3d.maxX) { if (!this.chart.is3d()) {
1918 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
1919 < vertexes.length; i++) {< bbox3d.maxX) { } else {
1920 < vertexes.length; i++) {< bbox3d.maxX) { var args = arguments,
1921 < vertexes.length; i++) {< bbox3d.maxX) { init = args[1],
1922 < vertexes.length; i++) {< bbox3d.maxX) { animation = this.options.animation,
1923 < vertexes.length; i++) {< bbox3d.maxX) { attribs,
1924 < vertexes.length; i++) {< bbox3d.maxX) { center = this.center,
1925 < vertexes.length; i++) {< bbox3d.maxX) { group = this.group,
1926 < vertexes.length; i++) {< bbox3d.maxX) { markerGroup = this.markerGroup;
1927  
1928 < vertexes.length; i++) {< bbox3d.maxX) { if (svg) { // VML is too slow anyway
1929  
1930 < vertexes.length; i++) {< bbox3d.maxX) { if (animation === true) {
1931 < vertexes.length; i++) {< bbox3d.maxX) { animation = {};
1932 < vertexes.length; i++) {< bbox3d.maxX) { }
1933 < vertexes.length; i++) {< bbox3d.maxX) { // Initialize the animation
1934 < vertexes.length; i++) {< bbox3d.maxX) { if (init) {
1935  
1936 < vertexes.length; i++) {< bbox3d.maxX) { // Scale down the group and place it in the center
1937 < vertexes.length; i++) {< bbox3d.maxX) { group.oldtranslateX = group.translateX;
1938 < vertexes.length; i++) {< bbox3d.maxX) { group.oldtranslateY = group.translateY;
1939 < vertexes.length; i++) {< bbox3d.maxX) { attribs = {
1940 < vertexes.length; i++) {< bbox3d.maxX) { translateX: center[0],
1941 < vertexes.length; i++) {< bbox3d.maxX) { translateY: center[1],
1942 < vertexes.length; i++) {< bbox3d.maxX) { scaleX: 0.001, // #1499
1943 < vertexes.length; i++) {< bbox3d.maxX) { scaleY: 0.001
1944 < vertexes.length; i++) {< bbox3d.maxX) { };
1945  
1946 < vertexes.length; i++) {< bbox3d.maxX) { group.attr(attribs);
1947 < vertexes.length; i++) {< bbox3d.maxX) { if (markerGroup) {
1948 < vertexes.length; i++) {< bbox3d.maxX) { markerGroup.attrSetters = group.attrSetters;
1949 < vertexes.length; i++) {< bbox3d.maxX) { markerGroup.attr(attribs);
1950 < vertexes.length; i++) {< bbox3d.maxX) { }
1951  
1952 < vertexes.length; i++) {< bbox3d.maxX) { // Run the animation
1953 < vertexes.length; i++) {< bbox3d.maxX) { } else {
1954 < vertexes.length; i++) {< bbox3d.maxX) { attribs = {
1955 < vertexes.length; i++) {< bbox3d.maxX) { translateX: group.oldtranslateX,
1956 < vertexes.length; i++) {< bbox3d.maxX) { translateY: group.oldtranslateY,
1957 < vertexes.length; i++) {< bbox3d.maxX) { scaleX: 1,
1958 < vertexes.length; i++) {< bbox3d.maxX) { scaleY: 1
1959 < vertexes.length; i++) {< bbox3d.maxX) { };
1960 < vertexes.length; i++) {< bbox3d.maxX) { group.animate(attribs, animation);
1961  
1962 < vertexes.length; i++) {< bbox3d.maxX) { if (markerGroup) {
1963 < vertexes.length; i++) {< bbox3d.maxX) { markerGroup.animate(attribs, animation);
1964 < vertexes.length; i++) {< bbox3d.maxX) { }
1965  
1966 < vertexes.length; i++) {< bbox3d.maxX) { // Delete this function to allow it only once
1967 < vertexes.length; i++) {< bbox3d.maxX) { this.animate = null;
1968 < vertexes.length; i++) {< bbox3d.maxX) { }
1969  
1970 < vertexes.length; i++) {< bbox3d.maxX) { }
1971 < vertexes.length; i++) {< bbox3d.maxX) { }
1972 < vertexes.length; i++) {< bbox3d.maxX) { });
1973  
1974 < vertexes.length; i++) {< bbox3d.maxX) { }(Highcharts));
1975 < vertexes.length; i++) {< bbox3d.maxX) { (function(H) {
1976 < vertexes.length; i++) {< bbox3d.maxX) { /**
1977 < vertexes.length; i++) {< bbox3d.maxX) { * (c) 2010-2017 Torstein Honsi
1978 < vertexes.length; i++) {< bbox3d.maxX) { *
1979 < vertexes.length; i++) {< bbox3d.maxX) { * License: www.highcharts.com/license
1980 < vertexes.length; i++) {< bbox3d.maxX) { */
1981 < vertexes.length; i++) {< bbox3d.maxX) { var perspective = H.perspective,
1982 < vertexes.length; i++) {< bbox3d.maxX) { pick = H.pick,
1983 < vertexes.length; i++) {< bbox3d.maxX) { Point = H.Point,
1984 < vertexes.length; i++) {< bbox3d.maxX) { seriesTypes = H.seriesTypes,
1985 < vertexes.length; i++) {< bbox3d.maxX) { wrap = H.wrap;
1986  
1987 < vertexes.length; i++) {< bbox3d.maxX) { /***
1988 < vertexes.length; i++) {< bbox3d.maxX) { EXTENSION FOR 3D SCATTER CHART
1989 < vertexes.length; i++) {< bbox3d.maxX) { ***/
1990  
1991 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.scatter.prototype, 'translate', function(proceed) {
1992 < vertexes.length; i++) {< bbox3d.maxX) { //function translate3d(proceed) {
1993 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
1994  
1995 < vertexes.length; i++) {< bbox3d.maxX) { if (!this.chart.is3d()) {
1996 < vertexes.length; i++) {< bbox3d.maxX) { return;
1997 < vertexes.length; i++) {< bbox3d.maxX) { }
1998  
1999 < vertexes.length; i++) {< bbox3d.maxX) { var series = this,
2000 < vertexes.length; i++) {< bbox3d.maxX) { chart = series.chart,
2001 < vertexes.length; i++) {< bbox3d.maxX) { zAxis = pick(series.zAxis, chart.options.zAxis[0]),
2002 < vertexes.length; i++) {< bbox3d.maxX) { rawPoints = [],
2003 < vertexes.length; i++) {< bbox3d.maxX) { rawPoint,
2004 < vertexes.length; i++) {< bbox3d.maxX) { projectedPoints,
2005 < vertexes.length; i++) {< bbox3d.maxX) { projectedPoint,
2006 < vertexes.length; i++) {< bbox3d.maxX) { zValue,
2007 < vertexes.length; i++) {< bbox3d.maxX) { i;
2008  
2009 < vertexes.length; i++) {< bbox3d.maxX) { for (i = 0; i < series.data.length; i++) {
2010 < vertexes.length; i++) {< bbox3d.maxX) { rawPoint = series.data[i];
2011 < vertexes.length; i++) {< bbox3d.maxX) { zValue = zAxis.isLog && zAxis.val2lin ? zAxis.val2lin(rawPoint.z) : rawPoint.z; // #4562
2012 < vertexes.length; i++) {< bbox3d.maxX) { rawPoint.plotZ = zAxis.translate(zValue);
2013  
2014 < vertexes.length; i++) {< bbox3d.maxX) { rawPoint.isInside = rawPoint.isInside ? (zValue >= zAxis.min && zValue <= zAxis.max) : false;
2015  
2016 < vertexes.length; i++) {< bbox3d.maxX) { rawPoints.push({
2017 < vertexes.length; i++) {< bbox3d.maxX) { x: rawPoint.plotX,
2018 < vertexes.length; i++) {< bbox3d.maxX) { y: rawPoint.plotY,
2019 < vertexes.length; i++) {< bbox3d.maxX) { z: rawPoint.plotZ
2020 < vertexes.length; i++) {< bbox3d.maxX) { });
2021 < vertexes.length; i++) {< bbox3d.maxX) { }
2022  
2023 < vertexes.length; i++) {< bbox3d.maxX) { projectedPoints = perspective(rawPoints, chart, true);
2024  
2025 < vertexes.length; i++) {< bbox3d.maxX) { for (i = 0; i < series.data.length; i++) {
2026 < vertexes.length; i++) {< bbox3d.maxX) { rawPoint = series.data[i];
2027 < vertexes.length; i++) {< bbox3d.maxX) { projectedPoint = projectedPoints[i];
2028  
2029 < vertexes.length; i++) {< bbox3d.maxX) { rawPoint.plotXold = rawPoint.plotX;
2030 < vertexes.length; i++) {< bbox3d.maxX) { rawPoint.plotYold = rawPoint.plotY;
2031 < vertexes.length; i++) {< bbox3d.maxX) { rawPoint.plotZold = rawPoint.plotZ;
2032  
2033 < vertexes.length; i++) {< bbox3d.maxX) { rawPoint.plotX = projectedPoint.x;
2034 < vertexes.length; i++) {< bbox3d.maxX) { rawPoint.plotY = projectedPoint.y;
2035 < vertexes.length; i++) {< bbox3d.maxX) { rawPoint.plotZ = projectedPoint.z;
2036  
2037 < vertexes.length; i++) {< bbox3d.maxX) { }
2038  
2039 < vertexes.length; i++) {< bbox3d.maxX) { });
2040  
2041  
2042 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.scatter.prototype, 'init', function(proceed, chart, options) {
2043 < vertexes.length; i++) {< bbox3d.maxX) { if (chart.is3d()) {
2044 < vertexes.length; i++) {< bbox3d.maxX) { // add a third coordinate
2045 < vertexes.length; i++) {< bbox3d.maxX) { this.axisTypes = ['xAxis', 'yAxis', 'zAxis'];
2046 < vertexes.length; i++) {< bbox3d.maxX) { this.pointArrayMap = ['x', 'y', 'z'];
2047 < vertexes.length; i++) {< bbox3d.maxX) { this.parallelArrays = ['x', 'y', 'z'];
2048  
2049 < vertexes.length; i++) {< bbox3d.maxX) { // Require direct touch rather than using the k-d-tree, because the k-d-tree currently doesn't
2050 < vertexes.length; i++) {< bbox3d.maxX) { // take the xyz coordinate system into account (#4552)
2051 < vertexes.length; i++) {< bbox3d.maxX) { this.directTouch = true;
2052 < vertexes.length; i++) {< bbox3d.maxX) { }
2053  
2054 < vertexes.length; i++) {< bbox3d.maxX) { var result = proceed.apply(this, [chart, options]);
2055  
2056 < vertexes.length; i++) {< bbox3d.maxX) { if (this.chart.is3d()) {
2057 < vertexes.length; i++) {< bbox3d.maxX) { // Set a new default tooltip formatter
2058 < vertexes.length; i++) {< bbox3d.maxX) { var default3dScatterTooltip = 'x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>z: <b>{point.z}</b><br/>';
2059 < vertexes.length; i++) {< bbox3d.maxX) { if (this.userOptions.tooltip) {
2060 < vertexes.length; i++) {< bbox3d.maxX) { this.tooltipOptions.pointFormat = this.userOptions.tooltip.pointFormat || default3dScatterTooltip;
2061 < vertexes.length; i++) {< bbox3d.maxX) { } else {
2062 < vertexes.length; i++) {< bbox3d.maxX) { this.tooltipOptions.pointFormat = default3dScatterTooltip;
2063 < vertexes.length; i++) {< bbox3d.maxX) { }
2064 < vertexes.length; i++) {< bbox3d.maxX) { }
2065 < vertexes.length; i++) {< bbox3d.maxX) { return result;
2066 < vertexes.length; i++) {< bbox3d.maxX) { });
2067  
2068 < vertexes.length; i++) {< bbox3d.maxX) { /**
2069 < vertexes.length; i++) {< bbox3d.maxX) { * Updating zIndex for every point - based on the distance from point to camera
2070 < vertexes.length; i++) {< bbox3d.maxX) { */
2071 < vertexes.length; i++) {< bbox3d.maxX) { wrap(seriesTypes.scatter.prototype, 'pointAttribs', function(proceed, point) {
2072 < vertexes.length; i++) {< bbox3d.maxX) { var pointOptions = proceed.apply(this, [].slice.call(arguments, 1));
2073 < vertexes.length; i++) {< bbox3d.maxX) { if (this.chart.is3d() && point) {
2074 < vertexes.length; i++) {< bbox3d.maxX) { pointOptions.zIndex = H.pointCameraDistance(point, this.chart);
2075 < vertexes.length; i++) {< bbox3d.maxX) { }
2076 < vertexes.length; i++) {< bbox3d.maxX) { return pointOptions;
2077 < vertexes.length; i++) {< bbox3d.maxX) { });
2078  
2079  
2080 < vertexes.length; i++) {< bbox3d.maxX) { wrap(Point.prototype, 'applyOptions', function(proceed) {
2081 < vertexes.length; i++) {< bbox3d.maxX) { var point = proceed.apply(this, [].slice.call(arguments, 1));
2082  
2083 < vertexes.length; i++) {< bbox3d.maxX) { if (this.series.chart.is3d() && point.z === undefined) {
2084 < vertexes.length; i++) {< bbox3d.maxX) { point.z = 0;
2085 < vertexes.length; i++) {< bbox3d.maxX) { }
2086 < vertexes.length; i++) {< bbox3d.maxX) { return point;
2087 < vertexes.length; i++) {< bbox3d.maxX) { });
2088  
2089 < vertexes.length; i++) {< bbox3d.maxX) { }(Highcharts));
2090 < vertexes.length; i++) {< bbox3d.maxX) { (function(H) {
2091 < vertexes.length; i++) {< bbox3d.maxX) { /**
2092 < vertexes.length; i++) {< bbox3d.maxX) { * (c) 2010-2017 Torstein Honsi
2093 < vertexes.length; i++) {< bbox3d.maxX) { *
2094 < vertexes.length; i++) {< bbox3d.maxX) { * License: www.highcharts.com/license
2095 < vertexes.length; i++) {< bbox3d.maxX) { */
2096  
2097 < vertexes.length; i++) {< bbox3d.maxX) { var Axis = H.Axis,
2098 < vertexes.length; i++) {< bbox3d.maxX) { SVGRenderer = H.SVGRenderer,
2099 < vertexes.length; i++) {< bbox3d.maxX) { VMLRenderer = H.VMLRenderer;
2100  
2101 < vertexes.length; i++) {< bbox3d.maxX) { /**
2102 < vertexes.length; i++) {< bbox3d.maxX) { * Extension to the VML Renderer
2103 < vertexes.length; i++) {< bbox3d.maxX) { */
2104 < vertexes.length; i++) {< bbox3d.maxX) { if (VMLRenderer) {
2105  
2106 < vertexes.length; i++) {< bbox3d.maxX) { H.setOptions({
2107 < vertexes.length; i++) {< bbox3d.maxX) { animate: false
2108 < vertexes.length; i++) {< bbox3d.maxX) { });
2109  
2110 < vertexes.length; i++) {< bbox3d.maxX) { VMLRenderer.prototype.cuboid = SVGRenderer.prototype.cuboid;
2111 < vertexes.length; i++) {< bbox3d.maxX) { VMLRenderer.prototype.cuboidPath = SVGRenderer.prototype.cuboidPath;
2112  
2113 < vertexes.length; i++) {< bbox3d.maxX) { VMLRenderer.prototype.toLinePath = SVGRenderer.prototype.toLinePath;
2114  
2115 < vertexes.length; i++) {< bbox3d.maxX) { VMLRenderer.prototype.createElement3D = SVGRenderer.prototype.createElement3D;
2116  
2117 < vertexes.length; i++) {< bbox3d.maxX) { VMLRenderer.prototype.arc3d = function(shapeArgs) {
2118 < vertexes.length; i++) {< bbox3d.maxX) { var result = SVGRenderer.prototype.arc3d.call(this, shapeArgs);
2119 < vertexes.length; i++) {< bbox3d.maxX) { result.css({
2120 < vertexes.length; i++) {< bbox3d.maxX) { zIndex: result.zIndex
2121 < vertexes.length; i++) {< bbox3d.maxX) { });
2122 < vertexes.length; i++) {< bbox3d.maxX) { return result;
2123 < vertexes.length; i++) {< bbox3d.maxX) { };
2124  
2125 < vertexes.length; i++) {< bbox3d.maxX) { H.VMLRenderer.prototype.arc3dPath = H.SVGRenderer.prototype.arc3dPath;
2126  
2127 < vertexes.length; i++) {< bbox3d.maxX) { H.wrap(Axis.prototype, 'render', function(proceed) {
2128 < vertexes.length; i++) {< bbox3d.maxX) { proceed.apply(this, [].slice.call(arguments, 1));
2129 < vertexes.length; i++) {< bbox3d.maxX) { // VML doesn't support a negative z-index
2130 < vertexes.length; i++) {< bbox3d.maxX) { if (this.sideFrame) {
2131 < vertexes.length; i++) {< bbox3d.maxX) { this.sideFrame.css({
2132 < vertexes.length; i++) {< bbox3d.maxX) { zIndex: 0
2133 < vertexes.length; i++) {< bbox3d.maxX) { });
2134 < vertexes.length; i++) {< bbox3d.maxX) { this.sideFrame.front.attr({
2135 < vertexes.length; i++) {< bbox3d.maxX) { fill: this.sideFrame.color
2136 < vertexes.length; i++) {< bbox3d.maxX) { });
2137 < vertexes.length; i++) {< bbox3d.maxX) { }
2138 < vertexes.length; i++) {< bbox3d.maxX) { if (this.bottomFrame) {
2139 < vertexes.length; i++) {< bbox3d.maxX) { this.bottomFrame.css({
2140 < vertexes.length; i++) {< bbox3d.maxX) { zIndex: 1
2141 < vertexes.length; i++) {< bbox3d.maxX) { });
2142 < vertexes.length; i++) {< bbox3d.maxX) { this.bottomFrame.front.attr({
2143 < vertexes.length; i++) {< bbox3d.maxX) { fill: this.bottomFrame.color
2144 < vertexes.length; i++) {< bbox3d.maxX) { });
2145 < vertexes.length; i++) {< bbox3d.maxX) { }
2146 < vertexes.length; i++) {< bbox3d.maxX) { if (this.backFrame) {
2147 < vertexes.length; i++) {< bbox3d.maxX) { this.backFrame.css({
2148 < vertexes.length; i++) {< bbox3d.maxX) { zIndex: 0
2149 < vertexes.length; i++) {< bbox3d.maxX) { });
2150 < vertexes.length; i++) {< bbox3d.maxX) { this.backFrame.front.attr({
2151 < vertexes.length; i++) {< bbox3d.maxX) { fill: this.backFrame.color
2152 < vertexes.length; i++) {< bbox3d.maxX) { });
2153 < vertexes.length; i++) {< bbox3d.maxX) { }
2154 < vertexes.length; i++) {< bbox3d.maxX) { });
2155  
2156 < vertexes.length; i++) {< bbox3d.maxX) { }
2157  
2158  
2159 < vertexes.length; i++) {< bbox3d.maxX) { }(Highcharts));
2160 < vertexes.length; i++) {< bbox3d.maxX) {}));