| @@ -1,12 +1,12 @@ | |||
| { | |||
| "name": "@threepipe/plugin-geometry-generator", | |||
| "version": "0.3.2", | |||
| "version": "0.3.3", | |||
| "lockfileVersion": 3, | |||
| "requires": true, | |||
| "packages": { | |||
| "": { | |||
| "name": "@threepipe/plugin-geometry-generator", | |||
| "version": "0.3.2", | |||
| "version": "0.3.3", | |||
| "license": "Apache-2.0", | |||
| "dependencies": { | |||
| "threepipe": "file:./../../src/" | |||
| @@ -1,7 +1,7 @@ | |||
| { | |||
| "name": "@threepipe/plugin-geometry-generator", | |||
| "description": "Geometry generator plugin to create updatable parametric objects/geometries.", | |||
| "version": "0.3.2", | |||
| "version": "0.3.3", | |||
| "devDependencies": { | |||
| }, | |||
| "dependencies": { | |||
| @@ -27,7 +27,7 @@ | |||
| "replace": { | |||
| "dependencies": {}, | |||
| "peerDependencies": { | |||
| "threepipe": "^0.0.39" | |||
| "threepipe": "^0.0.40" | |||
| } | |||
| } | |||
| }, | |||
| @@ -23,7 +23,7 @@ export interface GeometryGenerator<T=any>{ | |||
| createUiConfig?(geometry: IGeometry): UiObjectConfig[] | |||
| } | |||
| function updateAttribute<T extends BufferAttribute=Float32BufferAttribute>(geometry: BufferGeometry, attribute: string, itemSize: number, array: any[], cls?: Class<T>) { | |||
| function updateAttribute<T extends BufferAttribute=Float32BufferAttribute>(geometry: BufferGeometry, attribute: string, itemSize: number, array: number[], cls?: Class<T>) { | |||
| const attr = geometry.getAttribute(attribute) as T | |||
| const count = array.length / itemSize | |||
| if (attr && attr.count === count) { | |||
| @@ -35,7 +35,7 @@ function updateAttribute<T extends BufferAttribute=Float32BufferAttribute>(geome | |||
| return attr | |||
| } | |||
| function updateIndices(geometry: BufferGeometry, indices: any[]) { | |||
| function updateIndices(geometry: BufferGeometry, indices: number[]) { | |||
| const index = geometry.index | |||
| if (index && index.count === indices.length) { | |||
| index.set(indices) | |||
| @@ -83,16 +83,17 @@ export abstract class AGeometryGenerator<Tp extends object=any> implements Geome | |||
| generate(g?: IGeometry, parameters: Partial<Tp> = {}): IGeometry|BufferGeometry2 { | |||
| const geometry: IGeometry = g ?? new BufferGeometry2() | |||
| if (!geometry.userData.generationParams) geometry.userData.generationParams = {type: this.type} | |||
| geometry.userData.generationParams.type = this.type | |||
| if ((parameters as any).type) { | |||
| if ((parameters as any).type && (parameters as any).type !== this.type) { | |||
| console.error('Cannot change type of generated geometry here, use the plugin instead') | |||
| return geometry | |||
| } | |||
| if (!geometry.userData.generationParams) geometry.userData.generationParams = {type: this.type} | |||
| geometry.userData.generationParams.type = this.type | |||
| const params = { | |||
| ...this.defaultParams, | |||
| ...geometry.userData.generationParams, | |||
| ...parameters, | |||
| type: this.type, | |||
| } as Tp | |||
| const {indices, vertices, normals, uvs, groups} = this._generateData(params) | |||
| @@ -13,7 +13,12 @@ export interface BoxGeometryGeneratorParams { | |||
| export class BoxGeometryGenerator extends AGeometryGenerator<BoxGeometryGeneratorParams> { | |||
| defaultParams = { | |||
| constructor(type = 'box', defaultParams?: BoxGeometryGeneratorParams) { | |||
| super(type) | |||
| if (defaultParams) Object.assign(this.defaultParams, defaultParams) | |||
| } | |||
| defaultParams: BoxGeometryGeneratorParams = { | |||
| width: 1, | |||
| height: 1, | |||
| depth: 1, | |||
| @@ -11,7 +11,12 @@ export interface CircleGeometryGeneratorParams { | |||
| export class CircleGeometryGenerator extends AGeometryGenerator<CircleGeometryGeneratorParams> { | |||
| defaultParams = { | |||
| constructor(type = 'circle', defaultParams?: CircleGeometryGeneratorParams) { | |||
| super(type) | |||
| if (defaultParams) Object.assign(this.defaultParams, defaultParams) | |||
| } | |||
| defaultParams: CircleGeometryGeneratorParams = { | |||
| radius: 1, | |||
| segments: 32, | |||
| thetaStart: 0, | |||
| @@ -15,7 +15,12 @@ export interface CylinderGeometryGeneratorParams { | |||
| export class CylinderGeometryGenerator extends AGeometryGenerator<CylinderGeometryGeneratorParams> { | |||
| defaultParams = { | |||
| constructor(type = 'cylinder', defaultParams?: CylinderGeometryGeneratorParams) { | |||
| super(type) | |||
| if (defaultParams) Object.assign(this.defaultParams, defaultParams) | |||
| } | |||
| defaultParams: CylinderGeometryGeneratorParams = { | |||
| radiusTop: 1, | |||
| radiusBottom: 1, | |||
| height: 1, | |||
| @@ -10,7 +10,12 @@ export interface PlaneGeometryGeneratorParams { | |||
| export class PlaneGeometryGenerator extends AGeometryGenerator<PlaneGeometryGeneratorParams> { | |||
| defaultParams = { | |||
| constructor(type = 'plane', defaultParams?: PlaneGeometryGeneratorParams) { | |||
| super(type) | |||
| if (defaultParams) Object.assign(this.defaultParams, defaultParams) | |||
| } | |||
| defaultParams: PlaneGeometryGeneratorParams = { | |||
| width: 1, | |||
| height: 1, | |||
| widthSegments: 2, | |||
| @@ -14,7 +14,12 @@ export interface SphereGeometryGeneratorParams { | |||
| export class SphereGeometryGenerator extends AGeometryGenerator<SphereGeometryGeneratorParams> { | |||
| defaultParams = { | |||
| constructor(type = 'sphere', defaultParams?: SphereGeometryGeneratorParams) { | |||
| super(type) | |||
| if (defaultParams) Object.assign(this.defaultParams, defaultParams) | |||
| } | |||
| defaultParams: SphereGeometryGeneratorParams = { | |||
| radius: 1, | |||
| widthSegments: 32, | |||
| heightSegments: 16, | |||
| @@ -12,7 +12,12 @@ export interface TorusGeometryGeneratorParams { | |||
| export class TorusGeometryGenerator extends AGeometryGenerator<TorusGeometryGeneratorParams> { | |||
| defaultParams = { | |||
| constructor(type = 'torus', defaultParams?: TorusGeometryGeneratorParams) { | |||
| super(type) | |||
| if (defaultParams) Object.assign(this.defaultParams, defaultParams) | |||
| } | |||
| defaultParams: TorusGeometryGeneratorParams = { | |||
| radius: 1, | |||
| tube: 0.4, | |||
| radialSegments: 12, | |||