| IViewerPlugin, | IViewerPlugin, | ||||
| IViewerPluginSync, | IViewerPluginSync, | ||||
| Texture, | Texture, | ||||
| ThreeViewer, | |||||
| ThreeViewer, UndoManagerPlugin, | |||||
| uploadFile, | uploadFile, | ||||
| Vector2, | Vector2, | ||||
| Vector3, | Vector3, | ||||
| Vector4, | Vector4, | ||||
| } from 'threepipe' | } from 'threepipe' | ||||
| import {UiObjectConfig} from 'uiconfig.js' | import {UiObjectConfig} from 'uiconfig.js' | ||||
| import {JSUndoManager} from 'ts-browser-helpers' | |||||
| export class BlueprintJsUiPlugin extends UiConfigRendererBlueprint implements IViewerPluginSync { | export class BlueprintJsUiPlugin extends UiConfigRendererBlueprint implements IViewerPluginSync { | ||||
| declare ['constructor']: typeof BlueprintJsUiPlugin | declare ['constructor']: typeof BlueprintJsUiPlugin | ||||
| static readonly PluginType = 'BlueprintJsUi' | static readonly PluginType = 'BlueprintJsUi' | ||||
| enabled = true | 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, | autoPostFrame: false, | ||||
| }) | }) | ||||
| this.THREE = {Color, Vector4, Vector3, Vector2, Texture} as any | this.THREE = {Color, Vector4, Vector3, Vector2, Texture} as any | ||||
| } | } | ||||
| protected _viewer?: ThreeViewer | protected _viewer?: ThreeViewer | ||||
| private _lastManager?: JSUndoManager | |||||
| onAdded(viewer: ThreeViewer): void { | onAdded(viewer: ThreeViewer): void { | ||||
| this._viewer = viewer | this._viewer = viewer | ||||
| viewer.addEventListener('preRender', this._preRender) | viewer.addEventListener('preRender', this._preRender) | ||||
| viewer.addEventListener('postRender', this._postRender) | viewer.addEventListener('postRender', this._postRender) | ||||
| viewer.addEventListener('preFrame', this._preFrame) | viewer.addEventListener('preFrame', this._preFrame) | ||||
| viewer.addEventListener('postFrame', this._postFrame) | 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 { | onRemove(viewer: ThreeViewer): void { | ||||
| this._viewer = undefined | this._viewer = undefined | ||||
| viewer.removeEventListener('postRender', this._postRender) | viewer.removeEventListener('postRender', this._postRender) | ||||
| viewer.removeEventListener('preFrame', this._preFrame) | viewer.removeEventListener('preFrame', this._preFrame) | ||||
| viewer.removeEventListener('postFrame', this._postFrame) | viewer.removeEventListener('postFrame', this._postFrame) | ||||
| this.undoManager = this._lastManager | |||||
| this._lastManager = undefined | |||||
| this.dispose() | this.dispose() | ||||
| } | } | ||||
| dispose() { | |||||
| this.undoManager?.dispose() | |||||
| this.unmount() | |||||
| } | |||||
| private _plugins: IViewerPlugin[] = [] | private _plugins: IViewerPlugin[] = [] | ||||
| setupPlugins(...plugins: Class<IViewerPlugin>[]): void { | setupPlugins(...plugins: Class<IViewerPlugin>[]): void { |
| { | { | ||||
| "name": "@threepipe/plugins-extra-importers", | "name": "@threepipe/plugins-extra-importers", | ||||
| "description": "Extra Threepipe plugins for importing several file types.", | "description": "Extra Threepipe plugins for importing several file types.", | ||||
| "version": "0.2.1", | |||||
| "version": "0.2.2", | |||||
| "devDependencies": { | "devDependencies": { | ||||
| }, | }, | ||||
| "dependencies": { | "dependencies": { | ||||
| }, | }, | ||||
| "exports": { | "exports": { | ||||
| ".": { | ".": { | ||||
| "import": "./dist/index.mjs" | |||||
| "import": "./dist/index.js" | |||||
| }, | }, | ||||
| "./dist/": { | "./dist/": { | ||||
| "import": "./dist/", | "import": "./dist/", | ||||
| } | } | ||||
| }, | }, | ||||
| "type": "module", | "type": "module", | ||||
| "main": "dist/index.mjs", | |||||
| "module": "dist/index.mjs", | |||||
| "main": "dist/index.js", | |||||
| "module": "dist/index.js", | |||||
| "types": "dist/index.d.ts", | "types": "dist/index.d.ts", | ||||
| "files": [ | "files": [ | ||||
| "dist", | "dist", |
| { | { | ||||
| "name": "@threepipe/plugin-tweakpane", | "name": "@threepipe/plugin-tweakpane", | ||||
| "version": "0.4.2", | |||||
| "version": "0.5.0", | |||||
| "lockfileVersion": 3, | "lockfileVersion": 3, | ||||
| "requires": true, | "requires": true, | ||||
| "packages": { | "packages": { | ||||
| "": { | "": { | ||||
| "name": "@threepipe/plugin-tweakpane", | "name": "@threepipe/plugin-tweakpane", | ||||
| "version": "0.4.2", | |||||
| "version": "0.5.0", | |||||
| "license": "Apache-2.0", | "license": "Apache-2.0", | ||||
| "dependencies": { | "dependencies": { | ||||
| "threepipe": "file:./../../src/" | "threepipe": "file:./../../src/" | ||||
| }, | }, | ||||
| "devDependencies": { | "devDependencies": { | ||||
| "tweakpane-image-plugin": "https://github.com/repalash/tweakpane-image-plugin/releases/download/v1.1.404/package.tgz", | "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": {}, | "../../src": {}, | ||||
| } | } | ||||
| }, | }, | ||||
| "node_modules/uiconfig-tweakpane": { | "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, | "dev": true, | ||||
| "license": "MIT", | |||||
| "dependencies": { | "dependencies": { | ||||
| "@types/three": "^0.152.1", | "@types/three": "^0.152.1", | ||||
| "uiconfig.js": "^0.0.8" | |||||
| "uiconfig.js": "^0.1.1" | |||||
| } | } | ||||
| }, | }, | ||||
| "node_modules/uiconfig.js": { | "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" | |||||
| } | } | ||||
| } | } | ||||
| } | } |
| #else | #else | ||||
| float linearZ = linstep(-cameraNearFar.x, -cameraNearFar.y, -vViewPosition.z); | float linearZ = linstep(-cameraNearFar.x, -cameraNearFar.y, -vViewPosition.z); | ||||
| #endif | #endif | ||||
| vec2 packedZ = pack16(pow(linearZ, 0.5)); | |||||
| vec2 packedZ = pack16(pow(max(0.,linearZ), 0.5)); | |||||
| vec2 packedNormal = packNormal(normal); | vec2 packedNormal = packNormal(normal); | ||||
| #if IS_GLSL3 > 0 | #if IS_GLSL3 > 0 |
| vec4 ChromaticAberration(in vec4 color) { | vec4 ChromaticAberration(in vec4 color) { | ||||
| vec2 distFromCenter = vUv - 0.5; | 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( | vec4 outColor = vec4( | ||||
| tDiffuseTexelToLinear (texture2D(tDiffuse, vUv + aberrated)).r, | tDiffuseTexelToLinear (texture2D(tDiffuse, vUv + aberrated)).r, |