UNPKG

@polygonjs/polygonjs

Version:

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

58 lines (57 loc) 2.08 kB
"use strict"; import { CADSopNode } from "./_BaseCAD"; import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig"; import { cadGeometryTypeFromShape } from "../../../core/geometry/modules/cad/CadCommon"; import { CoreCadType } from "../../../core/geometry/modules/cad/CadCoreType"; import { SopType } from "../../poly/registers/nodes/types/Sop"; import { CadLoaderSync } from "../../../core/geometry/modules/cad/CadLoaderSync"; import { CadObject } from "../../../core/geometry/modules/cad/CadObject"; class CADMirrorSopParamsConfig extends NodeParamsConfig { constructor() { super(...arguments); /** @param origin */ // origin = ParamConfig.VECTOR3([0, 0, 0]); /** @param axis */ this.axis = ParamConfig.VECTOR3([0, 1, 0]); } } const ParamsConfig = new CADMirrorSopParamsConfig(); export class CADMirrorSopNode extends CADSopNode { constructor() { super(...arguments); this.paramsConfig = ParamsConfig; } static type() { return SopType.CAD_MIRROR; } initializeNode() { this.io.inputs.setCount(1); } cook(inputCoreGroups) { const oc = CadLoaderSync.oc(); const inputCoreGroup = inputCoreGroups[0]; const axis = CadLoaderSync.gp_Ax1; const dir = CadLoaderSync.gp_Dir; dir.SetCoord_2(this.pv.axis.x, this.pv.axis.y, this.pv.axis.z); axis.SetDirection(dir); const transform = CadLoaderSync.gp_Trsf; transform.SetMirror_2(axis); const newObjects = []; const inputObjects = inputCoreGroup.cadObjects(); if (inputObjects) { for (const object of inputObjects) { if (CoreCadType.isShape(object)) { const shape = object.cadGeometry(); const transformApi = new oc.BRepBuilderAPI_Transform_2(shape, transform, false); const mirroredShape = transformApi.Shape(); transformApi.delete(); const type = cadGeometryTypeFromShape(oc, mirroredShape); if (type) { newObjects.push(new CadObject(mirroredShape, type)); } } } } this.setCADObjects(newObjects); } }