UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

44 lines (43 loc) 1.49 kB
"use strict"; 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 };