@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
44 lines (43 loc) • 1.49 kB
JavaScript
;
import { BaseSopOperation } from "./_Base";
import { CoreGeometryUtilCircle } from "../../../core/geometry/util/Circle";
import { ObjectType } from "../../../core/geometry/Constant";
import { rotateGeometry } from "../../../core/Transform";
import { Vector3, CircleGeometry } from "three";
import { isBooleanTrue } from "../../../core/BooleanValue";
const DEFAULT_UP = new Vector3(0, 0, 1);
export class CircleSopOperation extends BaseSopOperation {
static type() {
return "circle";
}
cook(input_contents, params) {
if (isBooleanTrue(params.open)) {
return this._createCircle(params);
} else {
return this._createDisk(params);
}
}
_createCircle(params) {
const geometry = CoreGeometryUtilCircle.create(params);
this._setCenterAndDirection(geometry, params);
return this.createCoreGroupFromGeometry(geometry, ObjectType.LINE_SEGMENTS);
}
_createDisk(params) {
const geometry = new CircleGeometry(params.radius, params.segments);
this._setCenterAndDirection(geometry, params);
return this.createCoreGroupFromGeometry(geometry);
}
_setCenterAndDirection(geometry, params) {
rotateGeometry(geometry, DEFAULT_UP, params.direction);
geometry.translate(params.center.x, params.center.y, params.center.z);
}
}
CircleSopOperation.DEFAULT_PARAMS = {
radius: 1,
segments: 12,
open: true,
arcAngle: 360,
direction: new Vector3(0, 1, 0),
center: new Vector3(0, 0, 0),
connectLastPoint: true
};