Browse Source

删除点

master
修宁 7 months ago
parent
commit
ba312c1eb0
  1. 22
      src/model/ModelUtils.ts
  2. 23
      src/model/itemType/ToolboxLine.ts
  3. 12
      src/model/itemType/measure/MeasureToolbox.ts

22
src/model/ModelUtils.ts

@ -26,7 +26,7 @@ export function deletePointByKeyboard() {
return
}
if(!selectedObject.userData?.type){
if (!selectedObject.userData?.type) {
system.msg('选中的对象没有类型信息')
return
}
@ -77,7 +77,7 @@ export function quickCopyByMouse() {
// console.log('intersections:', intersections)
// 如果不在线上,查找0.2米内的有效点 Object3D, 如果有,则以这个点为起点, 延伸同类型的点,并让他们相连
findObject3DByCondition(viewport.scene, object => {
const r = findObject3DByCondition(viewport.scene, object => {
// 判断 object 是否是有效的 Object3D, 并且是当前 viewport 的对象
if (object instanceof THREE.Object3D && object.visible &&
object.userData.type && viewport.toolbox[object.userData.type]) {
@ -97,6 +97,11 @@ export function quickCopyByMouse() {
}
return false
})
if (!r || r.length === 0) {
system.msg('鼠标所在位置,没有可复制的对象')
return
}
}
//
@ -181,6 +186,19 @@ export function calcPositionUseSnap(e: MouseEvent, point: THREE.Vector3) {
return point
}
export function getAllControlPoints(): THREE.Object3D[] {
const allPoints: THREE.Object3D[] = []
getAllItemTypes().forEach((itemType: ItemTypeDefineOption) => {
if (itemType.clazz && itemType.clazz.pointArray) {
// 将每个 ItemType 的点添加到结果数组中
allPoints.push(...itemType.clazz.pointArray)
}
})
return allPoints
}
/**
* uuid Object3D
*/

23
src/model/itemType/ToolboxLine.ts

@ -1,7 +1,7 @@
import * as THREE from 'three'
import Toolbox from '@/model/itemType/Toolbox.ts'
import type ItemTypeLine from '@/model/itemType/ItemTypeLine.ts'
import { findObject3DById } from '@/model/ModelUtils.ts'
import { findObject3DById, getAllControlPoints } from '@/model/ModelUtils.ts'
import EventBus from '@/runtime/EventBus'
/**
@ -24,13 +24,13 @@ export default class ToolboxLine extends Toolbox {
afterMoveTemplateLine(line: THREE.Mesh, startPoint: THREE.Object3D, endPoint: THREE.Object3D) {
}
afterDeleteLine(line: THREE.Object3D, point: THREE.Object3D, relationPointIds: string[]) {
afterDeleteLine(line: THREE.Object3D, point: THREE.Object3D) {
}
stop() {
super.stop()
this.tempLine && this.viewport.scene.remove(this.tempLine)
this.tempLine && this.removeFromScene(this.tempLine)
this.tempLine = undefined
}
@ -44,9 +44,9 @@ export default class ToolboxLine extends Toolbox {
*
*/
deletePoint(point: THREE.Object3D) {
const relationPointIds = []
const allPoints = getAllControlPoints()
const deletedPoints = _.remove(this.itemType.pointArray, (p) => p.uuid === point.uuid)
const deletedPoints = _.remove(getAllControlPoints(), (p) => p.uuid === point.uuid)
if (!deletedPoints || deletedPoints.length !== 1) {
console.warn('没有找到要删除的点:', point.uuid)
return
@ -62,15 +62,10 @@ export default class ToolboxLine extends Toolbox {
}
// 找出与这个点相关的其他点
this.itemType.pointArray.forEach(p => {
allPoints.forEach(p => {
if (p.userData.center) {
relationPointIds.push(..._.filter(p.userData.center, i => i === point.uuid))
_.remove(p.userData.center, i => i === point.uuid)
relationPointIds.push(..._.filter(p.userData.in, i => i === point.uuid))
_.remove(p.userData.in, i => i === point.uuid)
relationPointIds.push(..._.filter(p.userData.out, i => i === point.uuid))
_.remove(p.userData.out, i => i === point.uuid)
}
})
@ -79,7 +74,7 @@ export default class ToolboxLine extends Toolbox {
_.forEach(point.userData.lines, (line) => {
const lineObject = findObject3DById(this.viewport.scene, line)
this.removeFromScene(lineObject)
this.afterDeleteLine(lineObject, point, relationPointIds)
this.afterDeleteLine(lineObject, point)
})
// 从场景中删除点
@ -136,7 +131,7 @@ export default class ToolboxLine extends Toolbox {
if (this.startPoint) {
this.afterAddPoint(this.startPoint, catchPoint)
}
this.tempLine && this.viewport.scene.remove(this.tempLine)
this.tempLine && this.removeFromScene(this.tempLine)
this.tempLine = undefined
return
}
@ -147,7 +142,7 @@ export default class ToolboxLine extends Toolbox {
return
}
this.tempLine && this.viewport.scene.remove(this.tempLine)
this.tempLine && this.removeFromScene(this.tempLine)
this.tempLine = undefined
return r
}

12
src/model/itemType/measure/MeasureToolbox.ts

@ -29,7 +29,7 @@ export default class MeasureToolbox extends ToolboxLine {
super.stop()
// 清除临时标签
this.tempLabel && this.viewport.scene.remove(this.tempLabel)
this.tempLabel && this.removeFromScene(this.tempLabel)
this.tempLabel = undefined
}
@ -39,7 +39,7 @@ export default class MeasureToolbox extends ToolboxLine {
return
}
this.tempLabel && this.viewport.scene.remove(this.tempLabel)
this.tempLabel && this.removeFromScene(this.tempLabel)
this.tempLabel = undefined
}
@ -51,10 +51,6 @@ export default class MeasureToolbox extends ToolboxLine {
this.measure.group.add(object)
}
removeFromScene(object: THREE.Object3D) {
this.measure.group.remove(object)
}
afterMoveTemplateLine(line: THREE.Mesh, startPoint: THREE.Object3D, endPoint: THREE.Object3D) {
super.afterMoveTemplateLine(line, startPoint, endPoint)
@ -67,8 +63,8 @@ export default class MeasureToolbox extends ToolboxLine {
this.addOrUpdateTempLabel(line, label, position)
}
afterDeleteLine(line: THREE.Object3D, point: THREE.Object3D, relationPointIds: string[]) {
super.afterDeleteLine(line, point, relationPointIds)
afterDeleteLine(line: THREE.Object3D, point: THREE.Object3D) {
super.afterDeleteLine(line, point)
// 删除临时标签
if (line?.userData?.labelId) {

Loading…
Cancel
Save