Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | import { ConeGeometry, MeshBasicMaterial } from "three";
import Color from "../../lib/Color";
import Element from "../Element";
import { ENTITY_TYPES } from "../constants";
const DEFAULT_RADIUS = 5;
const DEFAULT_HEIGHT = 5;
const DEFAULT_RADIAL_SEGMENTS = 8;
const DEFAULT_HEIGHT_SEGMENTS = 1;
const DEFAULT_OPENENDED = false;
const DEFAULT_OPTIONS = {
radialSegments: DEFAULT_RADIAL_SEGMENTS,
heightSegments: DEFAULT_HEIGHT_SEGMENTS,
openEnded: DEFAULT_OPENENDED,
};
export default class Cone extends Element {
constructor(
radius = DEFAULT_RADIUS,
height = DEFAULT_HEIGHT,
color = Color.randomColor(true),
options = {},
) {
super({
...DEFAULT_OPTIONS,
radius,
height,
color,
...options,
});
this.radius = radius;
this.height = height;
this.color = color;
const { radialSegments, heightSegments, openEnded } = this.options;
const geometry = new ConeGeometry(
radius,
height,
radialSegments,
heightSegments,
openEnded,
);
const material = new MeshBasicMaterial({
color,
wireframe: false,
...options,
});
this.setBody({ geometry, material });
this.setEntityType(ENTITY_TYPES.MESH.TYPE);
this.setEntitySubtype(ENTITY_TYPES.MESH.SUBTYPES.CONE);
}
toJSON(parseJSON = false) {
if (this.isSerializable()) {
return {
...super.toJSON(parseJSON),
radius: this.radius,
height: this.height,
color: this.color,
};
}
}
static create(data = {}) {
const { radius, height, color, options } = data;
return new Cone(radius, height, color, options);
}
}
|