UNPKG

@polygonjs/polygonjs

Version:

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

73 lines (72 loc) 2.68 kB
"use strict"; import { CADSopNode } from "./_BaseCAD"; import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig"; import { step } from "../../../core/geometry/modules/cad/CadConstant"; import { CoreCadType } from "../../../core/geometry/modules/cad/CadCoreType"; import { CadGC, CadGeometryType, _createCadNumberHandle } from "../../../core/geometry/modules/cad/CadCommon"; import { cadEdgeCreate } from "../../../core/geometry/modules/cad/toObject3D/CadEdge"; import { CadObject } from "../../../core/geometry/modules/cad/CadObject"; import { SopType } from "../../poly/registers/nodes/types/Sop"; import { CadLoaderSync } from "../../../core/geometry/modules/cad/CadLoaderSync"; const v0 = _createCadNumberHandle(); const v1 = _createCadNumberHandle(); class CADCurveTrimSopParamsConfig extends NodeParamsConfig { constructor() { super(...arguments); /** @param min */ this.min = ParamConfig.FLOAT(0, { range: [0, 1], rangeLocked: [false, false], step }); /** @param max */ this.max = ParamConfig.FLOAT(1, { range: [0, 1], rangeLocked: [false, false], step }); } } const ParamsConfig = new CADCurveTrimSopParamsConfig(); export class CADCurveTrimSopNode extends CADSopNode { constructor() { super(...arguments); this.paramsConfig = ParamsConfig; } static type() { return SopType.CAD_CURVE_TRIM; } initializeNode() { this.io.inputs.setCount(1); } cook(inputCoreGroups) { const oc = CadLoaderSync.oc(); const inputCoreGroup = inputCoreGroups[0]; const inputObjects = inputCoreGroup.cadObjects(); const newObjects = []; if (inputObjects) { CadGC.withGC((r) => { for (const inputObject of inputObjects) { if (CoreCadType.isGeom2dCurve(inputObject)) { const curve = inputObject.cadGeometry(); const handle = r(new oc.Handle_Geom2d_Curve_2(curve)); const trimmedCurve = new oc.Geom2d_TrimmedCurve(handle, this.pv.min, this.pv.max, true, true); newObjects.push(new CadObject(trimmedCurve, CadGeometryType.CURVE_2D)); } else if (CoreCadType.isEdge(inputObject)) { const edge = inputObject.cadGeometry(); oc.BRep_Tool.Range_1(edge, v0, v1); const handle = oc.BRep_Tool.Curve_2(edge, v0.current, v1.current); const trimmedCurve = new oc.Geom_TrimmedCurve(handle, this.pv.min, this.pv.max, true, true); const newEdge = cadEdgeCreate(oc, trimmedCurve); newObjects.push(new CadObject(newEdge, CadGeometryType.EDGE)); } } }); } this.setCADObjects(newObjects); } }