UNPKG

@polygonjs/polygonjs

Version:

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

39 lines (33 loc) 1.26 kB
import {BaseSopOperation} from './_Base'; import {CoreGroup} from '../../../core/geometry/Group'; import {LoopSubdivision} from './utils/Subdivide/three-subdivide'; import {Mesh, BufferGeometry} from 'three'; import {mergeVertices} from 'three/examples/jsm/utils/BufferGeometryUtils'; import {DefaultOperationParams} from '../../../core/operations/_Base'; interface SubdivideSopParams extends DefaultOperationParams { subdivisions: number; mergeVertices: boolean; } export class SubdivideSopOperation extends BaseSopOperation { static override readonly DEFAULT_PARAMS: SubdivideSopParams = { subdivisions: 1, mergeVertices: true, }; static override type(): Readonly<'subdivide'> { return 'subdivide'; } override cook(inputCoreGroups: CoreGroup[], params: SubdivideSopParams) { const coreGroup = inputCoreGroups[0]; const objects = coreGroup.threejsObjects(); for (let object of objects) { const geometry = (object as Mesh).geometry as BufferGeometry; if (geometry) { const subdividedGeometry = LoopSubdivision.modify(geometry, params.subdivisions, {}) as BufferGeometry; (object as Mesh).geometry = params.mergeVertices ? mergeVertices(subdividedGeometry) : subdividedGeometry; } } return coreGroup; } }