Browse Source

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

master
Palash Bansal 11 months ago
parent
commit
19ebf26e24
No account linked to committer's email address

+ 2
- 2
package-lock.json View 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 View 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 View 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 View 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 View 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 View File

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

Loading…
Cancel
Save