From a55278e323a64e9e9b72b022fde155f7fcfb0425 Mon Sep 17 00:00:00 2001 From: wangxiaoshuang <825034831@qq.com> Date: Tue, 12 May 2026 10:29:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E5=89=B2=E6=A0=87=E8=AE=B0=E6=A9=A1?= =?UTF-8?q?=E7=9A=AE=E6=AA=AB=E5=B7=A5=E5=85=B7=E9=97=AE=E9=A2=98=E8=A7=A3?= =?UTF-8?q?=E5=86=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dicoms3D/components/Segmentations.vue | 165 +++++++++--------- .../components/helpers/segmentations.js | 1 - 2 files changed, 83 insertions(+), 83 deletions(-) diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/Segmentations.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/Segmentations.vue index 01d4ba30..9e0c4a1c 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/Segmentations.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/Segmentations.vue @@ -285,8 +285,8 @@ - - + @@ -294,6 +294,8 @@ {{ fileSizeFormatter(scope.row.FileSize) }} + + @@ -331,6 +333,7 @@ const { LabelMapEditWithContourTool, SegmentBidirectionalTool, CrosshairsTool, + BrushTool, utilities: CStUtils, } = cornerstoneTools; @@ -729,6 +732,9 @@ export default { toolGroup.setToolActive(toolName, { bindings: [{ mouseButton: MouseBindings.Primary }] }) + // if (toolName === 'CircularEraser') { + // console.log(toolGroup.getToolInstance(toolName)) + // } this.$emit('update:activeTool', toolName) this.setBrushSize(toolName) if (this.ThresholdTools.includes(toolName)) { @@ -799,17 +805,19 @@ export default { } let res = await restoreSegmentationVersion(data) if (res.IsSuccess) { - segmentation.removeSegmentation(this.segmentationId) - segmentation.state.removeSegmentation(this.segmentationId) let annotations = annotation.state.getAllAnnotations().filter(item => item.metadata.segmentationId && this.segmentationId === item.metadata.segmentationId && item.metadata.toolName === "SegmentBidirectional"); annotations.forEach(item => { annotation.state.removeAnnotation(item.annotationUID) }) - let volume = cache.getVolume(this.segmentationId) - // 1. 销毁 Volume 实例 - volume.destroy(); - // 2. 从缓存中移除 - volume.removeFromCache(); + // 只需要将分割数据清空,分割所需的蒙版volume可以复用不需要清除 + // 1.清除分割所需的蒙版volume(弃用) + // let volume = cache.getVolume(this.segmentationId) + // // 1. 销毁 Volume 实例 + // volume.destroy(); + // // 2. 从缓存中移除 + // volume.removeFromCache(); + // 2.清除分割数据及文件缓存 + segmentation.removeSegmentation(this.segmentationId) let imageId = null if (this.curSegmentGroup.oldSegUrl) { imageId = `wadouri:${this.OSSclientConfig.basePath}${this.curSegmentGroup.oldSegUrl}` @@ -821,10 +829,15 @@ export default { if (imageId && cache.getImage(imageId)) { cache.removeImageLoadObject(imageId) } - this.getSegmentation(this.segmentationId) - DicomEvent.$emit('renderSegmentationBychangeSegmention') + + let r = await this.getSegmentation(this.segmentationId) + if (!r) return false this.visible = false this.$message.success(this.$t("trials:reading:Segmentations:message:restoreSuccess")) + this.resetViewport() + this.$nextTick(() => { + DicomEvent.$emit('renderSegmentationBychangeSegmention') + }) } return false } catch (err) { @@ -1109,7 +1122,7 @@ export default { if (key === 'segmentGroup') { let group = this.segmentList.find(i => i.segmentationId === this.segmentationId) group.name = name - this.addOrUpdateSegmentation({ name, id: group.segmentationId }) + this.addOrUpdateSegmentation({ name, id: group.segmentationId, url: group.segUrl }) } else { item.SegmentLabel = name this.addOrUpdateSegment({ name: item.SegmentLabel, color: item.color, segmentIndex: item.segmentIndex, segmentationId: item.segmentationId, segmentJson: JSON.stringify({ stats: item.stats, bidirectional: item.bidirectional }), id: item.id }) @@ -1630,24 +1643,6 @@ export default { let segmentList = list ? list : this.segmentList if (segmentList.length <= 0) return false this.$emit("setToolsPassive") - // let questionNeedChange = false; - // if (saveSegment) { - // for (let i = 0; i < segmentList.length; i++) { - // let segmentGroup = segmentList[i] - // let data = { - // SegmentationId: segmentGroup.segmentationId - // } - // let res = await this.getSegmentBindingList(data) - // if (res && res.length > 0) { - // questionNeedChange = true - // break - // } - // } - // if (questionNeedChange) { - // let confirm = await this.$confirm(this.$t("segment:confirm:questionNeedChange")) - // if (!confirm) return false - // } - // } this.$emit("update:globalLoading", true) this.$emit("update:loadingText", this.$t("segment:loadingText:saveSegmentation")) let IsBeSegment = false @@ -1827,60 +1822,66 @@ export default { } }, async getSegmentation(segmentationId) { - try { - this.$emit('setToolsPassive') - let data = { - SeriesId: this.series.Id, - VisitTaskId: this.series.TaskInfo.VisitTaskId, - PageSize: 9999, - PageIndex: 1, - } - this.loading = true; - let res = await getSegmentationList(data); - this.loading = false; - if (res.IsSuccess) { - // this.segmentList = [] - // this.segmentationId = null; - // this.segmentIndex = null; - let list = res.Result.CurrentPageData; - for (let i = 0; i < list.length; i++) { - let item = list[i] - if (item.Id !== segmentationId) continue; - let obj = this.segmentList.find(i => i.segmentationId === item.Id) - if (!obj) continue; - obj.name = item.SegmentationName; - obj.segUrl = item.SEGUrl; - obj.isSaved = item.IsSaved; - obj.segmentationId = item.Id; - obj.segments = [] - if (!this.segmentationId) { - this.segmentationId = obj.segmentationId - } - let segments = await this.getSegmentList(item.Id) - segments.forEach((s, index) => { - let SegmentJson = s.SegmentJson ? JSON.parse(s.SegmentJson) : {}; - let o = { - segmentIndex: s.SegmentNumber, - segmentationId: s.SegmentationId, - SegmentLabel: s.SegmentName, - color: s.ColorRgb, - stats: SegmentJson.stats, - bidirectional: SegmentJson.bidirectional, - bidirectionalView: true, - view: true, - lock: s.IsLock, - id: s.Id - } - obj.segments.push(o) - - }) - this.segmentIndex = obj.segments[0].segmentIndex + return new Promise(async (resolve, reject) => { + try { + let data = { + SeriesId: this.series.Id, + VisitTaskId: this.series.TaskInfo.VisitTaskId, + PageSize: 9999, + PageIndex: 1, } - this.isloaded = false + this.loading = true; + let res = await getSegmentationList(data); + this.loading = false; + if (res.IsSuccess) { + // this.segmentList = [] + // this.segmentationId = null; + // this.segmentIndex = null; + let list = res.Result.CurrentPageData; + for (let i = 0; i < list.length; i++) { + let item = list[i] + if (item.Id !== segmentationId) continue; + let obj = this.segmentList.find(i => i.segmentationId === item.Id) + if (!obj) continue; + obj.name = item.SegmentationName; + obj.segUrl = item.SEGUrl; + obj.isSaved = item.IsSaved; + obj.segmentationId = item.Id; + obj.segments = [] + if (!this.segmentationId) { + this.segmentationId = obj.segmentationId + } + let segments = await this.getSegmentList(item.Id) + segments.forEach((s, index) => { + let SegmentJson = s.SegmentJson ? JSON.parse(s.SegmentJson) : {}; + let o = { + segmentIndex: s.SegmentNumber, + segmentationId: s.SegmentationId, + SegmentLabel: s.SegmentName, + color: s.ColorRgb, + stats: SegmentJson.stats, + bidirectional: SegmentJson.bidirectional, + bidirectionalView: true, + view: true, + lock: s.IsLock, + id: s.Id + } + obj.segments.push(o) + + }) + this.segmentIndex = obj.segments[0].segmentIndex + } + this.isloaded = false + resolve(true) + } else { + resolve(false) + } + } catch (err) { + console.log(err) + resolve(false) } - } catch (err) { - console.log(err) - } + }) + }, // 获取分割组 async getSegmentationList() { diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/helpers/segmentations.js b/src/views/trials/trials-panel/reading/dicoms3D/components/helpers/segmentations.js index 29865d89..6a33e468 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/helpers/segmentations.js +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/helpers/segmentations.js @@ -67,7 +67,6 @@ async function readSegmentation(obj, series, segmentationId, isFile = false) { const imageIdObj = await cornerstoneDICOMImageLoader.wadouri.loadImage(`wadouri:${Vue.prototype.OSSclientConfig.basePath}${obj}`).promise imageId = imageIdObj.imageId } - console.log(imageId, 'imageId') const image = await imageLoader.loadAndCacheImage(imageId); if (!image) {