Browse Source

节点删除

master
修宁 7 months ago
parent
commit
5df9ef6943
  1. 62
      src/core/ModelUtils.ts
  2. 15
      src/core/controls/SelectInspect.ts
  3. 2
      src/core/manager/StateManager.ts
  4. 2
      src/runtime/EventBus.ts

62
src/core/ModelUtils.ts

@ -5,6 +5,7 @@ import type Viewport from '@/core/engine/Viewport'
import { computeBoundsTree, disposeBoundsTree } from 'three-mesh-bvh' import { computeBoundsTree, disposeBoundsTree } from 'three-mesh-bvh'
import { Vector2 } from 'three/src/math/Vector2' import { Vector2 } from 'three/src/math/Vector2'
import type Toolbox from '@/model/itemType/Toolbox.ts' import type Toolbox from '@/model/itemType/Toolbox.ts'
import EventBus from '@/runtime/EventBus.ts'
/** /**
* *
@ -113,38 +114,35 @@ export function parseLineId(lineId): [LinkType, string, string] {
} }
export function deletePointByKeyboard() { export function deletePointByKeyboard() {
system.msg('Delete not impleted yet') const viewport: Viewport = window['viewport']
// const viewport: Viewport = window['viewport'] if (!viewport) {
// if (!viewport) { system.msg('没有找到当前视图')
// system.msg('没有找到当前视图') return
// return }
// }
// const entityId = viewport.state.selectedEntityId
// // 按下 Delete 键,删除当前选中的点 if (!entityId) {
// if (!viewport.state.selectedObject) { system.msg('没有选中任何点')
// system.msg('没有选中任何点') return
// return }
// }
// const stateManager = viewport.stateManager
// const selectedObject = viewport.state.selectedObject viewport.stateManager.beginStateUpdate()
// if (!(selectedObject instanceof THREE.Object3D)) { _.remove(stateManager.vdata.items, (item) => item.id === entityId)
// system.msg('选中的对象不是有效的点') viewport.stateManager.endStateUpdate()
// return
// } if (viewport.state.selectedEntityId === entityId) {
// viewport.state.selectedObject = undefined
// if (!selectedObject.userData?.type) { viewport.state.selectedItem = undefined
// system.msg('选中的对象没有类型信息') viewport.state.selectedEntityId = undefined
// return viewport.state.selectedObjectMeta = undefined
// } }
//
// const toolbox: Toolbox = viewport.toolbox[selectedObject.userData.type] EventBus.dispatch('entityDeleted', {
// if (!toolbox) { deleteEntityId: entityId
// system.msg('没有找到对应的工具箱') })
// return
// } system.msg('删除完成')
//
// viewport.state.cursorMode = 'normal'
// toolbox.deletePoint(selectedObject)
} }
export function escByKeyboard() { export function escByKeyboard() {

15
src/core/controls/SelectInspect.ts

@ -1,11 +1,9 @@
import * as THREE from 'three' import * as THREE from 'three'
import type IControls from './IControls' import type IControls from './IControls'
import { watch } from 'vue'
import type Viewport from '@/core/engine/Viewport' import type Viewport from '@/core/engine/Viewport'
import { Line2 } from 'three/examples/jsm/lines/Line2.js' 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 EventBus from '@/runtime/EventBus' import EventBus from '@/runtime/EventBus'
let pdFn, pmFn, puFn let pdFn, pmFn, puFn
@ -66,6 +64,15 @@ export default class SelectInspect implements IControls {
EventBus.on('selectedObjectChanged', (data) => { EventBus.on('selectedObjectChanged', (data) => {
this.updateSelectionBox(this.viewport.state.selectedObject) this.updateSelectionBox(this.viewport.state.selectedObject)
}) })
EventBus.on('entityDeleted', (data) => {
const id = data.deleteEntityId
// 如果删除的是当前选中对象,则清除选中状态
if (this.viewport.state.selectedEntityId === id) {
this.updateSelectionBox(null)
}
})
} }
/** /**
@ -74,6 +81,10 @@ export default class SelectInspect implements IControls {
updateSelectionBox(selectedObject: THREE.Object3D) { updateSelectionBox(selectedObject: THREE.Object3D) {
this.disposeSelectionBox() this.disposeSelectionBox()
if (!selectedObject) {
return
}
const expandAmount = 0.2 // 扩展包围盒的大小 const expandAmount = 0.2 // 扩展包围盒的大小
// 避免某些蒙皮网格的帧延迟效应(e.g. Michelle.glb) // 避免某些蒙皮网格的帧延迟效应(e.g. Michelle.glb)
selectedObject.updateWorldMatrix(false, true) selectedObject.updateWorldMatrix(false, true)

2
src/core/manager/StateManager.ts

@ -424,7 +424,7 @@ export default class StateManager {
* @private * @private
*/ */
private fullSync() { private fullSync() {
// 修补关系数据, 确保 center / in / out 关系满足一致性
this.vdata.items = ensureEntityRelationsConsistency(this.vdata.items) this.vdata.items = ensureEntityRelationsConsistency(this.vdata.items)
this.entityManager.beginEntityUpdate() this.entityManager.beginEntityUpdate()

2
src/runtime/EventBus.ts

@ -2,7 +2,7 @@ import mitt from 'mitt'
const instance = mitt() const instance = mitt()
export type DispatchNames = 'selectedObjectChanged' | 'catalogChanged' | 'dataLoadComplete' export type DispatchNames = 'selectedObjectChanged' | 'catalogChanged' | 'dataLoadComplete' | 'entityDeleted'
export default { export default {
dispatch(name: DispatchNames, data?: any) { dispatch(name: DispatchNames, data?: any) {

Loading…
Cancel
Save