|
|
@ -4,6 +4,7 @@ import { numberToString } from '@/utils/webutils.ts' |
|
|
import type Measure from './Measure.ts' |
|
|
import type Measure from './Measure.ts' |
|
|
import type { CSS2DObject } from 'three/examples/jsm/renderers/CSS2DRenderer' |
|
|
import type { CSS2DObject } from 'three/examples/jsm/renderers/CSS2DRenderer' |
|
|
import Toolbox from '@/model/itemType/Toolbox.ts' |
|
|
import Toolbox from '@/model/itemType/Toolbox.ts' |
|
|
|
|
|
import { findObject3DById } from '@/model/ModelUtils.ts' |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 测量工具箱,用于处理测量相关的操作 |
|
|
* 测量工具箱,用于处理测量相关的操作 |
|
|
@ -50,6 +51,10 @@ 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) |
|
|
|
|
|
|
|
|
@ -59,21 +64,33 @@ export default class MeasureToolbox extends ToolboxLine { |
|
|
const dist = p0.distanceTo(point) |
|
|
const dist = p0.distanceTo(point) |
|
|
const label = `${numberToString(dist)} m` |
|
|
const label = `${numberToString(dist)} m` |
|
|
const position = new THREE.Vector3().addVectors(p0, point).multiplyScalar(0.5) |
|
|
const position = new THREE.Vector3().addVectors(p0, point).multiplyScalar(0.5) |
|
|
this.addOrUpdateTempLabel(label, position) |
|
|
this.addOrUpdateTempLabel(line, label, position) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
afterDeleteLine(line: THREE.Object3D, point: THREE.Object3D, relationPointIds: string[]) { |
|
|
|
|
|
super.afterDeleteLine(line, point, relationPointIds) |
|
|
|
|
|
|
|
|
|
|
|
// 删除临时标签
|
|
|
|
|
|
if (line?.userData?.labelId) { |
|
|
|
|
|
const label = findObject3DById(this.measure.group, line.userData.labelId) |
|
|
|
|
|
this.removeFromScene(label) |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 添加或更新临时标签和位置 |
|
|
* 添加或更新临时标签和位置 |
|
|
*/ |
|
|
*/ |
|
|
addOrUpdateTempLabel(label: string, position: THREE.Vector3) { |
|
|
addOrUpdateTempLabel(line: THREE.Mesh, label: string, position: THREE.Vector3) { |
|
|
if (!this.tempLabel) { |
|
|
if (!this.tempLabel) { |
|
|
this.tempLabel = this.measure.createLabel(label) |
|
|
this.tempLabel = this.measure.createLabel(label) |
|
|
this.tempLabel.name = MeasureToolbox.TMP_LABEL_NAME |
|
|
this.tempLabel.name = MeasureToolbox.TMP_LABEL_NAME |
|
|
|
|
|
this.tempLabel.uuid = THREE.MathUtils.generateUUID() |
|
|
this.tempLabel.userData = { |
|
|
this.tempLabel.userData = { |
|
|
mode: this.mode, |
|
|
mode: this.mode, |
|
|
type: Toolbox.TMP_TYPE |
|
|
type: Toolbox.TMP_TYPE |
|
|
} |
|
|
} |
|
|
this.viewport.scene.add(this.tempLabel) |
|
|
line.userData.labelId = this.tempLabel.uuid |
|
|
|
|
|
this.addToScene(this.tempLabel) |
|
|
} |
|
|
} |
|
|
this.tempLabel.position.set(position.x, position.y, position.z) |
|
|
this.tempLabel.position.set(position.x, position.y, position.z) |
|
|
this.tempLabel.element.innerHTML = label |
|
|
this.tempLabel.element.innerHTML = label |
|
|
|