| @@ -10,33 +10,45 @@ import { | |||
| IViewerPlugin, | |||
| IViewerPluginSync, | |||
| Texture, | |||
| ThreeViewer, | |||
| ThreeViewer, UndoManagerPlugin, | |||
| uploadFile, | |||
| Vector2, | |||
| Vector3, | |||
| Vector4, | |||
| } from 'threepipe' | |||
| import {UiObjectConfig} from 'uiconfig.js' | |||
| import {JSUndoManager} from 'ts-browser-helpers' | |||
| export class BlueprintJsUiPlugin extends UiConfigRendererBlueprint implements IViewerPluginSync { | |||
| declare ['constructor']: typeof BlueprintJsUiPlugin | |||
| static readonly PluginType = 'BlueprintJsUi' | |||
| enabled = true | |||
| static CONTAINER_SLOT = 'uiconfigMainPanelSlot' | |||
| constructor(container: HTMLElement = document.body) { | |||
| super(container, { | |||
| constructor(container?: HTMLElement) { | |||
| super(container ?? document.getElementById(BlueprintJsUiPlugin.CONTAINER_SLOT) ?? document.body, { | |||
| autoPostFrame: false, | |||
| }) | |||
| this.THREE = {Color, Vector4, Vector3, Vector2, Texture} as any | |||
| } | |||
| protected _viewer?: ThreeViewer | |||
| private _lastManager?: JSUndoManager | |||
| onAdded(viewer: ThreeViewer): void { | |||
| this._viewer = viewer | |||
| viewer.addEventListener('preRender', this._preRender) | |||
| viewer.addEventListener('postRender', this._postRender) | |||
| viewer.addEventListener('preFrame', this._preFrame) | |||
| viewer.addEventListener('postFrame', this._postFrame) | |||
| const undo = viewer.getOrAddPluginSync(UndoManagerPlugin) // yes, manual dependency | |||
| if (undo?.undoManager) { | |||
| this._lastManager?.dispose() | |||
| this._lastManager = this.undoManager | |||
| this.undoManager = undo.undoManager | |||
| if (this._lastManager) Object.assign(this.undoManager.presets, this._lastManager.presets) | |||
| } | |||
| } | |||
| onRemove(viewer: ThreeViewer): void { | |||
| this._viewer = undefined | |||
| @@ -44,9 +56,16 @@ export class BlueprintJsUiPlugin extends UiConfigRendererBlueprint implements IV | |||
| viewer.removeEventListener('postRender', this._postRender) | |||
| viewer.removeEventListener('preFrame', this._preFrame) | |||
| viewer.removeEventListener('postFrame', this._postFrame) | |||
| this.undoManager = this._lastManager | |||
| this._lastManager = undefined | |||
| this.dispose() | |||
| } | |||
| dispose() { | |||
| this.undoManager?.dispose() | |||
| this.unmount() | |||
| } | |||
| private _plugins: IViewerPlugin[] = [] | |||
| setupPlugins(...plugins: Class<IViewerPlugin>[]): void { | |||
| @@ -1,7 +1,7 @@ | |||
| { | |||
| "name": "@threepipe/plugins-extra-importers", | |||
| "description": "Extra Threepipe plugins for importing several file types.", | |||
| "version": "0.2.1", | |||
| "version": "0.2.2", | |||
| "devDependencies": { | |||
| }, | |||
| "dependencies": { | |||
| @@ -24,7 +24,7 @@ | |||
| }, | |||
| "exports": { | |||
| ".": { | |||
| "import": "./dist/index.mjs" | |||
| "import": "./dist/index.js" | |||
| }, | |||
| "./dist/": { | |||
| "import": "./dist/", | |||
| @@ -32,8 +32,8 @@ | |||
| } | |||
| }, | |||
| "type": "module", | |||
| "main": "dist/index.mjs", | |||
| "module": "dist/index.mjs", | |||
| "main": "dist/index.js", | |||
| "module": "dist/index.js", | |||
| "types": "dist/index.d.ts", | |||
| "files": [ | |||
| "dist", | |||
| @@ -1,19 +1,19 @@ | |||
| { | |||
| "name": "@threepipe/plugin-tweakpane", | |||
| "version": "0.4.2", | |||
| "version": "0.5.0", | |||
| "lockfileVersion": 3, | |||
| "requires": true, | |||
| "packages": { | |||
| "": { | |||
| "name": "@threepipe/plugin-tweakpane", | |||
| "version": "0.4.2", | |||
| "version": "0.5.0", | |||
| "license": "Apache-2.0", | |||
| "dependencies": { | |||
| "threepipe": "file:./../../src/" | |||
| }, | |||
| "devDependencies": { | |||
| "tweakpane-image-plugin": "https://github.com/repalash/tweakpane-image-plugin/releases/download/v1.1.404/package.tgz", | |||
| "uiconfig-tweakpane": "^0.0.8" | |||
| "uiconfig-tweakpane": "^0.0.10" | |||
| } | |||
| }, | |||
| "../../src": {}, | |||
| @@ -81,20 +81,22 @@ | |||
| } | |||
| }, | |||
| "node_modules/uiconfig-tweakpane": { | |||
| "version": "0.0.8", | |||
| "resolved": "https://registry.npmjs.org/uiconfig-tweakpane/-/uiconfig-tweakpane-0.0.8.tgz", | |||
| "integrity": "sha512-BZE/+6pW7qlywu4nhMjvzJ47IUORWn8rJsPpmcGqJgAz8G6MZjMXEW3Ey8EL41cVsDf5QSb0E/eTK8OWwuRfbA==", | |||
| "version": "0.0.10", | |||
| "resolved": "https://registry.npmjs.org/uiconfig-tweakpane/-/uiconfig-tweakpane-0.0.10.tgz", | |||
| "integrity": "sha512-VF67oUg7M9EXKR3IO+TXS6jP28qfT1ci/C4Inu8CjruJk8qBfUjuxKBU5kLXH97rE5dM0xLvLg/rYxRlpJ8mog==", | |||
| "dev": true, | |||
| "license": "MIT", | |||
| "dependencies": { | |||
| "@types/three": "^0.152.1", | |||
| "uiconfig.js": "^0.0.8" | |||
| "uiconfig.js": "^0.1.1" | |||
| } | |||
| }, | |||
| "node_modules/uiconfig.js": { | |||
| "version": "0.0.8", | |||
| "resolved": "https://registry.npmjs.org/uiconfig.js/-/uiconfig.js-0.0.8.tgz", | |||
| "integrity": "sha512-0H1OO4CNHP5O0LBy82YWWFCzDK+Yf/GtXnR3i968FkMkf0+3/JsW7MC8ea2CcPtsi8ni4TA1FrMOC+KrYmMnCQ==", | |||
| "dev": true | |||
| "version": "0.1.1", | |||
| "resolved": "https://registry.npmjs.org/uiconfig.js/-/uiconfig.js-0.1.1.tgz", | |||
| "integrity": "sha512-JzJyAgtFOfWVg964mmKKByULnhg4d5QpfsvXzj0T/Mncs1pK3/FACM+pAteLmT1xDeVDwwIU5s86UzlTiYwR/A==", | |||
| "dev": true, | |||
| "license": "MIT" | |||
| } | |||
| } | |||
| } | |||
| @@ -103,7 +103,7 @@ void main() { | |||
| #else | |||
| float linearZ = linstep(-cameraNearFar.x, -cameraNearFar.y, -vViewPosition.z); | |||
| #endif | |||
| vec2 packedZ = pack16(pow(linearZ, 0.5)); | |||
| vec2 packedZ = pack16(pow(max(0.,linearZ), 0.5)); | |||
| vec2 packedNormal = packNormal(normal); | |||
| #if IS_GLSL3 > 0 | |||
| @@ -1,7 +1,7 @@ | |||
| vec4 ChromaticAberration(in vec4 color) { | |||
| vec2 distFromCenter = vUv - 0.5; | |||
| vec2 aberrated = aberrationIntensity * pow(distFromCenter, vec2(2.0)); | |||
| vec2 aberrated = aberrationIntensity * pow(abs(distFromCenter), vec2(2.0)); | |||
| vec4 outColor = vec4( | |||
| tDiffuseTexelToLinear (texture2D(tDiffuse, vUv + aberrated)).r, | |||