UNPKG

@polygonjs/polygonjs

Version:

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

72 lines (71 loc) 2.5 kB
"use strict"; 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); } }