Sfoglia il codice sorgente

Add trackUndo param in PickingPlugin.setSelectedObject, add Delete Object to object ui, version bump

master
Palash Bansal 11 mesi fa
parent
commit
19ebf26e24
Nessun account collegato all'indirizzo email del committer

+ 2
- 2
package-lock.json Vedi File

@@ -1,12 +1,12 @@
{
"name": "threepipe",
"version": "0.0.48",
"version": "0.0.49",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "threepipe",
"version": "0.0.48",
"version": "0.0.49",
"license": "Apache-2.0",
"dependencies": {
"@types/three": "https://github.com/repalash/three-ts-types/releases/download/v0.158.1004/package.tgz",

+ 1
- 1
package.json Vedi File

@@ -1,6 +1,6 @@
{
"name": "threepipe",
"version": "0.0.48",
"version": "0.0.49",
"description": "A modern 3D viewer framework built on top of three.js, written in TypeScript, designed to make creating high-quality, modular, and extensible 3D experiences on the web simple and enjoyable.",
"main": "dist/index.js",
"module": "dist/index.mjs",

+ 14
- 0
src/core/object/IObjectUi.ts Vedi File

@@ -189,6 +189,20 @@ export function makeIObject3DUiConfig(this: IObject3D, isMesh?:boolean): UiObjec
return this.pivotToBoundsCenter?.(true) // return value is the undo function
},
},
{
type: 'button',
label: 'Delete Object',
tags: ['context-menu'],
value: async()=>{
const res = await ThreeViewer.Dialog.confirm('Delete Object: Are you sure you want to delete this object?')
if (!res) return
const parent = this.parent
this.dispose(true)
return ()=>{ // undo
if (parent) parent.add(this)
}
},
},
{
type: 'folder',
label: 'Rotate model',

+ 4
- 4
src/plugins/interaction/PickingPlugin.ts Vedi File

@@ -86,13 +86,13 @@ export class PickingPlugin extends AViewerPluginSync<PickingPluginEventMap> {
return this._picker?.selectedObject as T || undefined
}

setSelectedObject(object: IObject3D|undefined, focusCamera = false) { // todo: listen to object disposed
setSelectedObject(object: IObject3D|undefined, focusCamera = false, trackUndo = true) { // todo: listen to object disposed
const disabled = this.isDisabled()
if (disabled && !object) return
if (!this._picker) return
const t = this.autoFocus
this.autoFocus = false
this._picker.selectedObject = object || null
this._picker.setSelected(object || null, trackUndo)
this.autoFocus = t
if (!disabled && object && (t || focusCamera)) this.focusObject(object)
}
@@ -203,7 +203,7 @@ export class PickingPlugin extends AViewerPluginSync<PickingPluginEventMap> {
s?.traverseAncestors((o) => {
if (o === this._viewer?.scene) inScene = true
})
if (!inScene) this.setSelectedObject(undefined)
if (!inScene) this.setSelectedObject(undefined, false, false)
}

protected _viewerListeners = {
@@ -219,7 +219,7 @@ export class PickingPlugin extends AViewerPluginSync<PickingPluginEventMap> {
private _onObjectSelectEvent: EventListener2<'select', ISceneEventMap, IScene> = (e)=>{
if (e.source === PickingPlugin.PluginType) return
if (e.object === undefined && e.value === undefined) console.error('e.object or e.value must be set for picking, can be null to unselect')
else this.setSelectedObject(e.object || e.value, this.autoFocus || e.focusCamera)
else this.setSelectedObject(e.object || e.value, this.autoFocus || e.focusCamera, true)
}

private _selectedObjectChanged: EventListener2<'selectedObjectChanged', ObjectPickerEventMap, ObjectPicker> = (e: any) => {

+ 4
- 4
src/three/utils/ObjectPicker.ts Vedi File

@@ -99,17 +99,17 @@ export class ObjectPicker extends EventDispatcher<ObjectPickerEventMap> {
}

set selectedObject(object) {
this._setSelected(object)
this.setSelected(object)
}

private _setSelected(object: IObject3D|null, record = true) {
setSelected(object: IObject3D|null, record = true) {
if (!this._selected.length && !object || this._selected.length === 1 && this._selected[0] === object) return
const current = [...this._selected]
this._selected = object ? Array.isArray(object) ? [...object] : [object] : []
this.dispatchEvent({type: 'selectedObjectChanged', object: this.selectedObject})
record && this.undoManager?.record({
undo: () => this._setSelected(current.length ? current[0] : null, false),
redo: () => this._setSelected(object, false),
undo: () => this.setSelected(current.length ? current[0] : null, false),
redo: () => this.setSelected(object, false),
})
}


+ 1
- 1
src/viewer/version.ts Vedi File

@@ -1 +1 @@
export const VERSION = '0.0.48'
export const VERSION = '0.0.49'

Loading…
Annulla
Salva