|
|
@ -36,9 +36,13 @@ export interface LabelOption { |
|
|
export default class LabelManager implements IControls { |
|
|
export default class LabelManager implements IControls { |
|
|
viewport: Viewport |
|
|
viewport: Viewport |
|
|
private labelMap: Map<string, Text | CSS2DObject> = new Map() |
|
|
private labelMap: Map<string, Text | CSS2DObject> = new Map() |
|
|
|
|
|
private labelGroup: THREE.Group |
|
|
|
|
|
|
|
|
init(viewport: Viewport): void { |
|
|
init(viewport: Viewport): void { |
|
|
this.viewport = viewport |
|
|
this.viewport = viewport |
|
|
|
|
|
this.labelGroup = new THREE.Group() |
|
|
|
|
|
this.labelGroup.visible = false |
|
|
|
|
|
this.viewport.scene.add(this.labelGroup) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
createOrUpdateLabelByDistance(lineRef: Object3DLike, startPos: THREE.Vector3, endPos: THREE.Vector3, option: LabelOption): Text | CSS2DObject { |
|
|
createOrUpdateLabelByDistance(lineRef: Object3DLike, startPos: THREE.Vector3, endPos: THREE.Vector3, option: LabelOption): Text | CSS2DObject { |
|
|
@ -64,7 +68,7 @@ export default class LabelManager implements IControls { |
|
|
const labelObj = this.createLabelObject(option) |
|
|
const labelObj = this.createLabelObject(option) |
|
|
parentObj.userData.labelObjectId = labelObj.uuid |
|
|
parentObj.userData.labelObjectId = labelObj.uuid |
|
|
|
|
|
|
|
|
this.viewport.scene.add(labelObj) |
|
|
this.labelGroup.add(labelObj) |
|
|
|
|
|
|
|
|
if (labelObj instanceof CSS2DObject) { |
|
|
if (labelObj instanceof CSS2DObject) { |
|
|
labelObj.element.innerHTML = option.text |
|
|
labelObj.element.innerHTML = option.text |
|
|
@ -99,7 +103,7 @@ export default class LabelManager implements IControls { |
|
|
if (parentObj?.userData?.labelObjectId) { |
|
|
if (parentObj?.userData?.labelObjectId) { |
|
|
const labelObj = this.labelMap.get(parentObj.userData.labelObjectId) |
|
|
const labelObj = this.labelMap.get(parentObj.userData.labelObjectId) |
|
|
this.labelMap.delete(labelObj.uuid) |
|
|
this.labelMap.delete(labelObj.uuid) |
|
|
this.viewport.scene.remove(labelObj) |
|
|
this.labelGroup.remove(labelObj) |
|
|
labelObj.dispose() |
|
|
labelObj.dispose() |
|
|
parentObj.userData.labelObjectId = undefined |
|
|
parentObj.userData.labelObjectId = undefined |
|
|
} |
|
|
} |
|
|
@ -108,7 +112,7 @@ export default class LabelManager implements IControls { |
|
|
removeById(id: string): void { |
|
|
removeById(id: string): void { |
|
|
const labelObj = this.labelMap.get(id) |
|
|
const labelObj = this.labelMap.get(id) |
|
|
if (labelObj) { |
|
|
if (labelObj) { |
|
|
this.viewport.scene.remove(labelObj) |
|
|
this.labelGroup.remove(labelObj) |
|
|
this.labelMap.delete(id) |
|
|
this.labelMap.delete(id) |
|
|
labelObj.dispose() |
|
|
labelObj.dispose() |
|
|
} |
|
|
} |
|
|
@ -160,6 +164,8 @@ export default class LabelManager implements IControls { |
|
|
|
|
|
|
|
|
dispose(): void { |
|
|
dispose(): void { |
|
|
// 清理资源
|
|
|
// 清理资源
|
|
|
|
|
|
this.viewport.scene.remove(this.labelGroup) |
|
|
|
|
|
this.labelGroup.clear() |
|
|
this.viewport = undefined |
|
|
this.viewport = undefined |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|