Преглед на файлове

Add support for Object3DGeneratorPlugin in GeometryGeneratorPlugin and add params.material.

master
Palash Bansal преди 2 години
родител
ревизия
915c8b3720
No account linked to committer's email address

+ 2
- 2
plugins/geometry-generator/package-lock.json Целия файл

@@ -1,12 +1,12 @@
{
"name": "@threepipe/plugin-geometry-generator",
"version": "0.1.0",
"version": "0.2.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@threepipe/plugin-geometry-generator",
"version": "0.1.0",
"version": "0.2.0",
"license": "Apache-2.0",
"dependencies": {
"threepipe": "file:./../../src/"

+ 2
- 2
plugins/geometry-generator/package.json Целия файл

@@ -1,7 +1,7 @@
{
"name": "@threepipe/plugin-geometry-generator",
"description": "Geometry generator plugin to create updatable parametric objects/geometries.",
"version": "0.1.0",
"version": "0.2.0",
"devDependencies": {
},
"dependencies": {
@@ -17,7 +17,7 @@
],
"replace": {
"dependencies": {
"threepipe": "^0.0.19"
"threepipe": "^0.0.20"
}
}
},

+ 39
- 2
plugins/geometry-generator/src/GeometryGeneratorPlugin.ts Целия файл

@@ -1,4 +1,12 @@
import {AViewerPluginSync, BufferGeometry2, IGeometry, Mesh, PhysicalMaterial, ThreeViewer} from 'threepipe'
import {
AViewerPluginSync,
BufferGeometry2,
IGeometry,
Mesh2,
type Object3DGeneratorPlugin,
PhysicalMaterial,
ThreeViewer,
} from 'threepipe'
import {TorusGeometryGenerator} from './primitives/TorusGeometryGenerator'
import {CircleGeometryGenerator} from './primitives/CircleGeometryGenerator'
import {BoxGeometryGenerator} from './primitives/BoxGeometryGenerator'
@@ -30,7 +38,7 @@ export class GeometryGeneratorPlugin extends AViewerPluginSync<''> {
generateObject(type: string, params?: any) {
const generator = this.generators[type]
if (!generator) throw new Error('Unknown generator type: ' + type)
const obj = new Mesh(new BufferGeometry2(), new PhysicalMaterial())
const obj = new Mesh2(params.geometry ?? new BufferGeometry2(), params.material ?? new PhysicalMaterial())
generator.generate(obj.geometry, params)
obj.name = type
obj.geometry.name = 'Generated ' + type
@@ -53,6 +61,34 @@ export class GeometryGeneratorPlugin extends AViewerPluginSync<''> {
onAdded(v: ThreeViewer) {
super.onAdded(v)
v.scene.addEventListener('sceneUpdate', this._sceneUpdate)
this.refreshObject3DGenerator()
}

onRemove(viewer: ThreeViewer) {
this._removeObject3DGenerators()
super.onRemove(viewer)
}

protected _removeObject3DGenerators(refresh = true) {
const object3DGenerator = this._viewer?.getPlugin<Object3DGeneratorPlugin>('Object3DGeneratorPlugin')
if (!object3DGenerator) return
object3DGenerator.generators = Object.fromEntries(Object.entries(object3DGenerator.generators)
.filter(([k, _]) => !k.startsWith('geometry-'))) as any
refresh && object3DGenerator.uiConfig?.uiRefresh?.(true)
return object3DGenerator
}

refreshObject3DGenerator() {
const object3DGenerator = this._removeObject3DGenerators(false)
if (!object3DGenerator) return
Object.keys(this.generators).forEach(key=>{
object3DGenerator.generators['geometry-' + key] = (params: any)=>{
const obj = this.generateObject(key, params)
obj.name = key
return obj
}
})
object3DGenerator.uiConfig?.uiRefresh?.(true)
}

protected _sceneUpdate = (e: any)=>{
@@ -77,6 +113,7 @@ export class GeometryGeneratorPlugin extends AViewerPluginSync<''> {
children:
[()=>Object.keys(this.generators).map((v) => ({
type: 'button',
uuid: 'generate_' + v,
label: 'Generate ' + v,
value: async() => {
const obj = this.generateObject(v)

Loading…
Отказ
Запис