Browse Source

toolbox 支持

master
修宁 7 months ago
parent
commit
d6fa28db04
  1. 31
      src/designer/Viewport.ts
  2. 16
      src/designer/model2DEditor/tools/SelectInspect.ts

31
src/designer/Viewport.ts

@ -11,7 +11,6 @@ import { CSS3DRenderer } from 'three/examples/jsm/renderers/CSS3DRenderer'
import { CSS2DRenderer } from 'three/examples/jsm/renderers/CSS2DRenderer' import { CSS2DRenderer } from 'three/examples/jsm/renderers/CSS2DRenderer'
import { getAllItemTypes, type ItemTypeMeta } from '@/model/itemType/ItemTypeDefine.ts' import { getAllItemTypes, type ItemTypeMeta } from '@/model/itemType/ItemTypeDefine.ts'
import type { ItemTypeDefineOption } from '@/model/itemType/ItemTypeDefine.ts' import type { ItemTypeDefineOption } from '@/model/itemType/ItemTypeDefine.ts'
import EventBus from '@/runtime/EventBus'
import type Toolbox from '@/model/itemType/Toolbox.ts' import type Toolbox from '@/model/itemType/Toolbox.ts'
import { calcPositionUseSnap } from '@/model/ModelUtils.ts' import { calcPositionUseSnap } from '@/model/ModelUtils.ts'
@ -206,6 +205,34 @@ export default class Viewport {
} }
this.updateGridVisibility() this.updateGridVisibility()
})) }))
this.watchList.push(watch(() => this.state.cursorMode, (newVal: CursorMode) => {
if (!this.state.isReady) {
return
}
if (this.currentTool) {
this.currentTool.stop()
this.currentTool = null
}
if (newVal === 'normal' || !newVal) {
this.dragControl.dragControls.enabled = true
return
}
const currentTool = this.toolbox[newVal]
if (currentTool) {
// 选择标尺工具
this.currentTool = currentTool
this.dragControl.dragControls.enabled = false
} else {
system.showErrorDialog(`当前鼠标模式 ${newVal} 不支持`)
}
if (this.currentTool) {
this.currentTool.start(this.toolStartObject)
this.toolStartObject = null
}
}))
// 监听窗口大小变化 // 监听窗口大小变化
if (this.resizeObserver) { if (this.resizeObserver) {
@ -462,7 +489,7 @@ export interface ViewportState {
/** /**
* *
*/ */
cursorMode: CursorMode, cursorMode: string // CursorMode,
/** /**
* *

16
src/designer/model2DEditor/tools/SelectInspect.ts

@ -6,6 +6,7 @@ import { Line2 } from 'three/examples/jsm/lines/Line2.js'
import { LineGeometry } from 'three/examples/jsm/lines/LineGeometry.js' import { LineGeometry } from 'three/examples/jsm/lines/LineGeometry.js'
import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial.js' import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial.js'
import { getItemTypeByName } from '@/model/itemType/ItemTypeDefine.ts' import { getItemTypeByName } from '@/model/itemType/ItemTypeDefine.ts'
import EventBus from '@/runtime/EventBus'
let pdFn, pmFn, puFn let pdFn, pmFn, puFn
@ -62,7 +63,16 @@ export default class SelectInspect implements ITool {
puFn = this.onMouseUp.bind(this) puFn = this.onMouseUp.bind(this)
this.canvas.addEventListener('pointerup', puFn) this.canvas.addEventListener('pointerup', puFn)
this.viewport.watchList.push(watch(() => this.viewport.state.selectedObject, (selectedObject) => { this.viewport.watchList.push(watch(() => this.viewport.state.selectedObject, this.updateSelectionBox.bind(this)))
EventBus.$on('objectChanged', (data) => {
this.updateSelectionBox(this.viewport.state.selectedObject)
})
}
/**
* 线
*/
updateSelectionBox(selectedObject: THREE.Object3D) {
this.disposeSelectionBox() this.disposeSelectionBox()
this.viewport.state.selectedObjectMeta = null // 清除之前的元数据 this.viewport.state.selectedObjectMeta = null // 清除之前的元数据
@ -73,7 +83,6 @@ export default class SelectInspect implements ITool {
this.viewport.state.selectedObjectMeta = itemTypeDefine.getMeta(selectedObject) this.viewport.state.selectedObjectMeta = itemTypeDefine.getMeta(selectedObject)
const expandAmount = 0.2 // 扩展包围盒的大小 const expandAmount = 0.2 // 扩展包围盒的大小
// 避免某些蒙皮网格的帧延迟效应(e.g. Michelle.glb) // 避免某些蒙皮网格的帧延迟效应(e.g. Michelle.glb)
selectedObject.updateWorldMatrix(false, true) selectedObject.updateWorldMatrix(false, true)
@ -105,9 +114,6 @@ export default class SelectInspect implements ITool {
} }
} }
}))
} }
destory() { destory() {

Loading…
Cancel
Save