@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
68 lines (67 loc) • 2.06 kB
JavaScript
;
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([]);
}
}
}