UNPKG

@polygonjs/polygonjs

Version:

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

68 lines (67 loc) 2.06 kB
"use strict"; import { CSGSopNode } from "./_BaseCSG"; import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig"; import { SopType } from "../../poly/registers/nodes/types/Sop"; import { primitives } from "@jscad/modeling"; import { MathUtils } from "three"; const { degToRad } = MathUtils; const { triangle } = primitives; var TriangleType = /* @__PURE__ */ ((TriangleType2) => { TriangleType2["AAA"] = "AAA"; TriangleType2["AAS"] = "AAS"; TriangleType2["ASA"] = "ASA"; TriangleType2["SAS"] = "SAS"; TriangleType2["SSA"] = "SSA"; TriangleType2["SSS"] = "SSS"; return TriangleType2; })(TriangleType || {}); const TRIANGLE_TYPES = [ "AAA" /* AAA */, "AAS" /* AAS */, "ASA" /* ASA */, "SAS" /* SAS */, "SSA" /* SSA */, "SSS" /* SSS */ ]; class CSGTriangleSopParamsConfig extends NodeParamsConfig { constructor() { super(...arguments); /** @param type */ this.type = ParamConfig.INTEGER(TRIANGLE_TYPES.indexOf("AAA" /* AAA */), { menu: { entries: TRIANGLE_TYPES.map((name, value) => ({ name, value })) } }); /** @param angles */ this.angles = ParamConfig.VECTOR2([60, 60]); } } const ParamsConfig = new CSGTriangleSopParamsConfig(); export class CSGTriangleSopNode extends CSGSopNode { constructor() { super(...arguments); this.paramsConfig = ParamsConfig; this._angles = [0, 0, 0]; } static type() { return SopType.CSG_TRIANGLE; } cook(inputCoreGroups) { try { const angles = this.pv.angles; const angle0 = degToRad(angles.x); const angle1 = degToRad(angles.y); const angle2 = Math.PI - (angle0 + angle1); this._angles[0] = angle0; this._angles[1] = angle1; this._angles[2] = angle2; const geo = triangle({ type: TRIANGLE_TYPES[this.pv.type], values: this._angles }); this.setCSGGeometry(geo); } catch (err) { const message = err instanceof Error ? err.message : "failed to create geometry"; this.states.error.set(message); this.setCSGObjects([]); } } }