// jshint esversion: 6
	import * as THREE from 'three';

	// a tube among two ellipses laying in 2 parallel planes at distance 'height'
	export function ellipticaltubeGeometry(x1Radius, y1Radius, x2Radius, y2Radius, height, numPoints=16) {
		const egeometry = new THREE.BufferGeometry();
		const ellipse1 = new THREE.EllipseCurve(
			0,  0,            // ax, aY
			x1Radius, y1Radius,
			0,  2 * Math.PI,  // aStartAngle, aEndAngle
			false,            // aClockwise
			0                 // aRotation
		);
		const points1 = ellipse1.getPoints(numPoints);
		const ellipse2 = new THREE.EllipseCurve(
			0,  0,            // ax, aY
			x2Radius, y2Radius,
			0,  2 * Math.PI,  // aStartAngle, aEndAngle
			false,            // aClockwise
			0                // aRotation
		);

		const points2 = ellipse2.getPoints(numPoints);
		// console.log('points1', points1);
		const vertices3d = new Float32Array(numPoints*18);
		let j;
		for (let i=0; i<numPoints; i++) {
			j = (i + 1) % numPoints;
			// first face
			vertices3d[i*18+0] = points1[i].x;
			vertices3d[i*18+1] = points1[i].y;
			vertices3d[i*18+2] = 0;
			vertices3d[i*18+3] = points2[i].x;
			vertices3d[i*18+4] = points2[i].y;
			vertices3d[i*18+5] = height;
			vertices3d[i*18+6] = points1[j].x;
			vertices3d[i*18+7] = points1[j].y;
			vertices3d[i*18+8] = 0;
			// second face
			vertices3d[i*18+9] = points2[i].x;
			vertices3d[i*18+10] = points2[i].y;
			vertices3d[i*18+11] = height;
			vertices3d[i*18+12] = points2[j].x;
			vertices3d[i*18+13] = points2[j].y;
			vertices3d[i*18+14] = height;
			vertices3d[i*18+15] = points1[j].x;
			vertices3d[i*18+16] = points1[j].y;
			vertices3d[i*18+17] = 0;
		}
		egeometry.setAttribute('position', new THREE.BufferAttribute(vertices3d, 3));
		egeometry.height = height;
		return egeometry;
	}