// 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; }