Преглед изворни кода

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 Прегледај датотеку

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

+ 2
- 2
plugins/geometry-generator/package.json Прегледај датотеку

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

+ 39
- 2
plugins/geometry-generator/src/GeometryGeneratorPlugin.ts Прегледај датотеку

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 {TorusGeometryGenerator} from './primitives/TorusGeometryGenerator'
import {CircleGeometryGenerator} from './primitives/CircleGeometryGenerator' import {CircleGeometryGenerator} from './primitives/CircleGeometryGenerator'
import {BoxGeometryGenerator} from './primitives/BoxGeometryGenerator' import {BoxGeometryGenerator} from './primitives/BoxGeometryGenerator'
generateObject(type: string, params?: any) { generateObject(type: string, params?: any) {
const generator = this.generators[type] const generator = this.generators[type]
if (!generator) throw new Error('Unknown generator type: ' + 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) generator.generate(obj.geometry, params)
obj.name = type obj.name = type
obj.geometry.name = 'Generated ' + type obj.geometry.name = 'Generated ' + type
onAdded(v: ThreeViewer) { onAdded(v: ThreeViewer) {
super.onAdded(v) super.onAdded(v)
v.scene.addEventListener('sceneUpdate', this._sceneUpdate) 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)=>{ protected _sceneUpdate = (e: any)=>{
children: children:
[()=>Object.keys(this.generators).map((v) => ({ [()=>Object.keys(this.generators).map((v) => ({
type: 'button', type: 'button',
uuid: 'generate_' + v,
label: 'Generate ' + v, label: 'Generate ' + v,
value: async() => { value: async() => {
const obj = this.generateObject(v) const obj = this.generateObject(v)

Loading…
Откажи
Сачувај