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

23
src/model/itemType/ToolboxLine.ts

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

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

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

Loading…
Cancel
Save