starry / backend /libs /three /helpers /PolarGridHelper.js
k-l-lambda's picture
feat: add Python ML services (CPU mode) with model download
2b7aae2
import { LineSegments } from '../objects/LineSegments.js';
import { LineBasicMaterial } from '../materials/LineBasicMaterial.js';
import { Float32BufferAttribute } from '../core/BufferAttribute.js';
import { BufferGeometry } from '../core/BufferGeometry.js';
import { Color } from '../math/Color.js';
class PolarGridHelper extends LineSegments {
constructor(radius = 10, radials = 16, circles = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888) {
color1 = new Color(color1);
color2 = new Color(color2);
const vertices = [];
const colors = [];
// create the radials
for (let i = 0; i <= radials; i++) {
const v = (i / radials) * (Math.PI * 2);
const x = Math.sin(v) * radius;
const z = Math.cos(v) * radius;
vertices.push(0, 0, 0);
vertices.push(x, 0, z);
const color = i & 1 ? color1 : color2;
colors.push(color.r, color.g, color.b);
colors.push(color.r, color.g, color.b);
}
// create the circles
for (let i = 0; i <= circles; i++) {
const color = i & 1 ? color1 : color2;
const r = radius - (radius / circles) * i;
for (let j = 0; j < divisions; j++) {
// first vertex
let v = (j / divisions) * (Math.PI * 2);
let x = Math.sin(v) * r;
let z = Math.cos(v) * r;
vertices.push(x, 0, z);
colors.push(color.r, color.g, color.b);
// second vertex
v = ((j + 1) / divisions) * (Math.PI * 2);
x = Math.sin(v) * r;
z = Math.cos(v) * r;
vertices.push(x, 0, z);
colors.push(color.r, color.g, color.b);
}
}
const geometry = new BufferGeometry();
geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3));
geometry.setAttribute('color', new Float32BufferAttribute(colors, 3));
const material = new LineBasicMaterial({ vertexColors: true, toneMapped: false });
super(geometry, material);
this.type = 'PolarGridHelper';
}
}
export { PolarGridHelper };