|
@@ -1,5 +1,5 @@
|
|
import { sdk } from './sdk'
|
|
import { sdk } from './sdk'
|
|
-import { toRaw, ref, watch, nextTick } from 'vue'
|
|
|
|
|
|
+import { toRaw, ref, watch, nextTick, watchEffect } from 'vue'
|
|
import {
|
|
import {
|
|
viewModeStack,
|
|
viewModeStack,
|
|
showLeftPanoStack,
|
|
showLeftPanoStack,
|
|
@@ -26,7 +26,8 @@ import {
|
|
SceneType,
|
|
SceneType,
|
|
backupFuseModels,
|
|
backupFuseModels,
|
|
MeasureType,
|
|
MeasureType,
|
|
- measures
|
|
|
|
|
|
+ measures,
|
|
|
|
+ fuseModelsLoaded
|
|
} from '@/store'
|
|
} from '@/store'
|
|
|
|
|
|
import TaggingComponent from '@/components/tagging/list.vue'
|
|
import TaggingComponent from '@/components/tagging/list.vue'
|
|
@@ -199,17 +200,19 @@ const associationTaggings = (el: HTMLDivElement) => {
|
|
|
|
|
|
// -----------------测量关联--------------------
|
|
// -----------------测量关联--------------------
|
|
|
|
|
|
-const sceneMeasureMap = new WeakMap<Measure , SceneMeasure>()
|
|
|
|
|
|
+const sceneMeasureMap = new Map<Measure , SceneMeasure>()
|
|
export const getSceneMeasure = (measure?: Measure | null) => measure && sceneMeasureMap.get(toRaw(measure))
|
|
export const getSceneMeasure = (measure?: Measure | null) => measure && sceneMeasureMap.get(toRaw(measure))
|
|
|
|
|
|
export const associationMessaure = <T extends MeasureType>(smMeasure: SceneMeasure<T>, measure: Measure<T>) => {
|
|
export const associationMessaure = <T extends MeasureType>(smMeasure: SceneMeasure<T>, measure: Measure<T>) => {
|
|
smMeasure.bus.on('update', ([points, modelIds]) => {
|
|
smMeasure.bus.on('update', ([points, modelIds]) => {
|
|
unSet(() => {
|
|
unSet(() => {
|
|
measure.positions = points.map((point, i) => ({ point, modelId: modelIds[i] }))
|
|
measure.positions = points.map((point, i) => ({ point, modelId: modelIds[i] }))
|
|
- measure.desc = measure.type === MeasureType.area
|
|
|
|
- ? (smMeasure as unknown as SceneMeasure<MeasureType.area>).getArea().value.toString()
|
|
|
|
- : (smMeasure as unknown as SceneMeasure<MeasureType.free>).getDistance().value.toString()
|
|
|
|
- console.log('===>', (smMeasure as unknown as SceneMeasure<MeasureType.free>).getDistance())
|
|
|
|
|
|
+ console.log('update messaure', measure.positions)
|
|
|
|
+ const length = measure.type === MeasureType.area
|
|
|
|
+ ? (smMeasure as unknown as SceneMeasure<MeasureType.area>).getArea()
|
|
|
|
+ : (smMeasure as unknown as SceneMeasure<MeasureType.free>).getDistance()
|
|
|
|
+
|
|
|
|
+ measure.desc = round(length.value, 2).toString()
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
|
|
@@ -224,11 +227,11 @@ const associationMessaures = (sdk: SDK) => {
|
|
for (const item of added) {
|
|
for (const item of added) {
|
|
const sceneMeasure = sdk.drawMeasure(
|
|
const sceneMeasure = sdk.drawMeasure(
|
|
item.type,
|
|
item.type,
|
|
- item.positions.map(position => position.point),
|
|
|
|
|
|
+ item.positions.map(position => ({...position.point})),
|
|
item.positions.map(position => position.modelId),
|
|
item.positions.map(position => position.modelId),
|
|
)
|
|
)
|
|
associationMessaure(sceneMeasure, item)
|
|
associationMessaure(sceneMeasure, item)
|
|
- sceneMeasureMap.set(item, sceneMeasure)
|
|
|
|
|
|
+ sceneMeasureMap.set(toRaw(item), sceneMeasure)
|
|
}
|
|
}
|
|
for (const item of deleted) {
|
|
for (const item of deleted) {
|
|
const sceneMeasure = getSceneMeasure(item)
|
|
const sceneMeasure = getSceneMeasure(item)
|
|
@@ -331,6 +334,12 @@ export const pauseSceneGuide = () => isScenePlayIng.value = false
|
|
|
|
|
|
export const setupAssociation = (mountEl: HTMLDivElement) => {
|
|
export const setupAssociation = (mountEl: HTMLDivElement) => {
|
|
associationModels(sdk)
|
|
associationModels(sdk)
|
|
- associationTaggings(mountEl)
|
|
|
|
- associationMessaures(sdk)
|
|
|
|
|
|
+
|
|
|
|
+ const stopWatch = watchEffect(() => {
|
|
|
|
+ if (fuseModelsLoaded.value) {
|
|
|
|
+ associationTaggings(mountEl)
|
|
|
|
+ associationMessaures(sdk)
|
|
|
|
+ stopWatch()
|
|
|
|
+ }
|
|
|
|
+ })
|
|
}
|
|
}
|