@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
72 lines (71 loc) • 2.5 kB
JavaScript
;
import { CADSopNode } from "./_BaseCAD";
import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig";
import { SopType } from "../../poly/registers/nodes/types/Sop";
import { CadLoaderSync } from "../../../core/geometry/modules/cad/CadLoaderSync";
import { CoreCadType } from "../../../core/geometry/modules/cad/CadCoreType";
import { CadObject } from "../../../core/geometry/modules/cad/CadObject";
import {
cadDowncast,
CadGC,
CadGeometryType,
cadGeometryTypeFromShape
} from "../../../core/geometry/modules/cad/CadCommon";
import { cadFilterObjects } from "../../../core/geometry/modules/cad/utils/CadFilter";
import { isBooleanTrue } from "../../../core/Type";
class CADLoftSopParamsConfig extends NodeParamsConfig {
constructor() {
super(...arguments);
/** @param create solid */
this.solid = ParamConfig.BOOLEAN(1);
}
/** @param create caps */
// cap = ParamConfig.BOOLEAN(1);
}
const ParamsConfig = new CADLoftSopParamsConfig();
export class CADLoftSopNode extends CADSopNode {
constructor() {
super(...arguments);
this.paramsConfig = ParamsConfig;
}
static type() {
return SopType.CAD_LOFT;
}
initializeNode() {
this.io.inputs.setCount(1);
}
cook(inputCoreGroups) {
const oc = CadLoaderSync.oc();
const inputCoreGroup = inputCoreGroups[0];
const newObjects = [];
const inputObjects = cadFilterObjects(inputCoreGroup.cadObjects(), [
CadGeometryType.VERTEX,
// CadGeometryType.EDGE,
CadGeometryType.WIRE
// CadGeometryType.FACE,
// CadGeometryType.SHELL,
]);
if (inputObjects && inputObjects.length != 0) {
CadGC.withGC((r) => {
const isSolid = isBooleanTrue(this.pv.solid);
const ruled = true;
const precision = oc.Precision.Approximation();
const api = r(new oc.BRepOffsetAPI_ThruSections(isSolid, ruled, precision));
for (const inputObject of inputObjects) {
if (CoreCadType.isWire(inputObject)) {
api.AddWire(cadDowncast(oc, inputObject.cadGeometry()));
} else if (CoreCadType.isVertex(inputObject)) {
api.AddVertex(cadDowncast(oc, inputObject.cadGeometry()));
}
}
const shape = api.Shape();
const type = cadGeometryTypeFromShape(oc, shape);
if (type) {
const newObject = new CadObject(shape, type);
newObjects.push(newObject);
}
});
}
this.setCADObjects(newObjects);
}
}