-
{{ $t('trials:reading:Segmentations:button:getBidirectional') }}
@@ -450,6 +450,11 @@ export default {
this.actionConfiguration.contourBidirectional.data.segmentationId = segmentationId
this.actionConfiguration.contourBidirectional.data.segmentIndex = segmentIndex
},
+ addTip(item) {
+ this.calculateStatistics([item.segmentIndex], item.segmentationId, 'individual');
+ this.getBidirectional([item])
+
+ },
getBidirectional(list, DATA = null) {
list.forEach(item => {
this.createSegmentConfiguration(item.segmentIndex, item.segmentationId);
@@ -458,58 +463,57 @@ export default {
const renderingEngine = getRenderingEngine(this.renderingEngineId)
const viewportId = `${this.viewportKey}-${this.activeViewportIndex}`
const viewport = renderingEngine.getViewport(viewportId);
- this.$nextTick(() => {
- [viewport.element].forEach(async (element) => {
- const bidirectionalData =
- await CStUtils.segmentation.getSegmentLargestBidirectional({
- segmentationId: list[0].segmentationId,
- segmentIndices: list.map(item => item.segmentIndex),
- });
- if (bidirectionalData.length <= 0) {
- list.forEach(item => {
- let annotations = annotation.state.getAllAnnotations().filter(i => i.metadata.segmentationId === item.segmentationId && i.metadata.segmentIndex === item.segmentIndex);
- annotations.forEach(i => {
- annotation.state.removeAnnotation(i.annotationUID)
- })
- item.bidirectional = null
- })
-
- this.resetViewport(false)
-
- if (DATA) {
- this.segmentationId = DATA.SegmentationId;
- this.segmentIndex = DATA.SegmentMumber;
- setTimeout(() => {
- this.selectSegment(DATA)
- })
- }
- }
- bidirectionalData.forEach((bidirectional) => {
- const { segmentIndex } = bidirectional;
- const { majorAxis, minorAxis, maxMajor, maxMinor } = bidirectional;
- let item = list.find(i => i.segmentIndex === segmentIndex)
- SegmentBidirectionalTool.hydrate(viewportId, [majorAxis, minorAxis], {
- segmentIndex,
- segmentationId: item.segmentationId,
- });
- let an = annotation.state.getAllAnnotations().find(i => i.metadata.segmentationId === item.segmentationId && i.metadata.segmentIndex === bidirectional.segmentIndex && i.metadata.toolName === "SegmentBidirectional");
- if (an) {
- annotation.locking.setAnnotationLocked(an.annotationUID, true)
- annotation.visibility.setAnnotationVisibility(an.annotationUID, item.bidirectionalView)
- }
- item.bidirectional = bidirectional
- if (DATA) {
- this.segmentationId = DATA.SegmentationId;
- this.segmentIndex = DATA.SegmentMumber;
- setTimeout(() => {
- this.selectSegment(DATA)
- })
- }
- // render the bidirectional tool data
+ [viewport.element].forEach(async (element) => {
+ const bidirectionalData =
+ await CStUtils.segmentation.getSegmentLargestBidirectional({
+ segmentationId: list[0].segmentationId,
+ segmentIndices: list.map(item => item.segmentIndex),
});
+ console.log(bidirectionalData, 'bidirectionalData')
+ if (bidirectionalData.length <= 0) {
+ list.forEach(item => {
+ let annotations = annotation.state.getAllAnnotations().filter(i => i.metadata.segmentationId === item.segmentationId && i.metadata.segmentIndex === item.segmentIndex);
+ annotations.forEach(i => {
+ annotation.state.removeAnnotation(i.annotationUID)
+ })
+ item.bidirectional = null
+ })
+ this.resetViewport(false)
+
+ if (DATA) {
+ this.segmentationId = DATA.SegmentationId;
+ this.segmentIndex = DATA.SegmentMumber;
+ setTimeout(() => {
+ this.selectSegment(DATA)
+ })
+ }
+ }
+ bidirectionalData.forEach((bidirectional) => {
+ const { segmentIndex } = bidirectional;
+ const { majorAxis, minorAxis, maxMajor, maxMinor } = bidirectional;
+ let item = list.find(i => i.segmentIndex === segmentIndex)
+ SegmentBidirectionalTool.hydrate(viewportId, [majorAxis, minorAxis], {
+ segmentIndex,
+ segmentationId: item.segmentationId,
+ });
+ let an = annotation.state.getAllAnnotations().find(i => i.metadata.segmentationId === item.segmentationId && i.metadata.segmentIndex === bidirectional.segmentIndex && i.metadata.toolName === "SegmentBidirectional");
+ if (an) {
+ annotation.locking.setAnnotationLocked(an.annotationUID, true)
+ annotation.visibility.setAnnotationVisibility(an.annotationUID, item.bidirectionalView)
+ }
+ item.bidirectional = bidirectional
+ if (DATA) {
+ this.segmentationId = DATA.SegmentationId;
+ this.segmentIndex = DATA.SegmentMumber;
+ setTimeout(() => {
+ this.selectSegment(DATA)
+ })
+ }
+ // render the bidirectional tool data
});
- })
+
+ });
},
setToolActive(toolName) {
if (this.segmentList.length <= 0) return false
@@ -560,7 +564,7 @@ export default {
async jumpBidirectional(item) {
if (item.bidirectional) {
let an = annotation.state.getAllAnnotations().find(i => i.metadata.segmentationId === item.segmentationId && i.metadata.segmentIndex === item.segmentIndex && i.metadata.toolName === "SegmentBidirectional");
- // console.log(an, 'an')
+ console.log(an, 'an')
if (!an) return false
const renderingEngine = getRenderingEngine(this.renderingEngineId)
@@ -823,6 +827,7 @@ export default {
},
async customPrompt() {
try {
+ console.log(annotation.state.getAllAnnotations(), 'annotation.state.getAllAnnotations()')
const that = this
// 请输入标记名称
let message = this.$t('trials:reading:Segmentations:message:rename')
@@ -986,7 +991,10 @@ export default {
metaData
);
group.segments.forEach((item, index) => {
- generatedSegmentation.dataset.SegmentSequence[index].SegmentNumber = item.segmentIndex.toString()
+ if (generatedSegmentation.dataset.SegmentSequence[index]) {
+ generatedSegmentation.dataset.SegmentSequence[index].SegmentNumber = item.segmentIndex.toString()
+ }
+
})
if (!isFile) {
const buffer = Buffer.from(dcmjs.data.datasetToDict(generatedSegmentation.dataset).write());
@@ -1131,6 +1139,7 @@ export default {
if (toolName === 'ThresholdSphere') {
this.setDynamicRadius()
}
+ console.log(this.brushThreshold.dynamicRadius, 'this.brushThreshold.dynamicRadius')
},
setDynamicRadius() {
let volume = cache.getVolume(this.series.SeriesInstanceUid);
@@ -1182,7 +1191,7 @@ export default {
},
segmentationModifiedCallback(evt) {
const { detail } = evt;
- console.log(detail)
+ // console.log(detail)
if (detail.segmentIndex === 0) {
this.drawing = true
this.isDel = true
@@ -1200,7 +1209,7 @@ export default {
segmentIndices: indices,
mode,
});
-
+ console.log(stats)
if (mode === 'individual') {
const segmentStats = stats;
@@ -1263,8 +1272,9 @@ export default {
annotation.state.removeAnnotation(i.annotationUID)
}
})
- this.getBidirectional(segmentGroup.segments)
this.calculateStatistics(segmentIndexs, this.segmentationId, 'individual');
+ this.getBidirectional(segmentGroup.segments)
+
}
}
diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/VolumeViewport.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/VolumeViewport.vue
index aa52d3ab..73bc4d6a 100644
--- a/src/views/trials/trials-panel/reading/dicoms3D/components/VolumeViewport.vue
+++ b/src/views/trials/trials-panel/reading/dicoms3D/components/VolumeViewport.vue
@@ -180,6 +180,7 @@ export default {
// resizeObserver.observe(this.element)
this.element.addEventListener("CORNERSTONE_VOLUME_NEW_IMAGE", this.stackNewImage)
this.element.addEventListener('CORNERSTONE_VOI_MODIFIED', this.voiModified)
+ this.element.addEventListener('CORNERSTONE_IMAGE_RENDERED', this.imageRendered)
this.element.addEventListener('wheel', (e) => {
console.log('CORNERSTONE_STACK_VIEWPORT_SCROLL')
const renderingEngine = getRenderingEngine(this.renderingEngineId)
@@ -274,8 +275,6 @@ export default {
let imageId = imageIds[detail.imageIndex]
if (imageId) {
const imagePlaneModule = metaData.get('imagePlaneModule', imageId)
- // const voi = metaData.get('voiLutModule', imageId)
- // console.log(voi, 'voi')
this.imageInfo.imageOrientationPatient = imagePlaneModule.imageOrientationPatient
this.imageInfo.imagePositionPatient = imagePlaneModule.imagePositionPatient
this.imageInfo.size = `${imagePlaneModule.columns}*${imagePlaneModule.rows}`
@@ -326,6 +325,22 @@ export default {
this.$emit('upperRangeChange', Math.round(windowWidth))
}
},
+ imageRendered(e) {
+ const renderingEngine = getRenderingEngine(this.renderingEngineId)
+ const viewport = renderingEngine.getViewport(this.viewportId)
+ const properties = viewport.getProperties()
+
+ if (properties && properties.voiRange) {
+ var { lower, upper } = properties.voiRange
+ const { windowWidth, windowCenter } = csUtils.windowLevel.toWindowLevel(
+ lower,
+ upper
+ )
+ this.imageInfo.wwwc = `${Math.round(windowWidth)}/${Math.round(windowCenter)}`
+ }
+ const zoom = viewport.getZoom()
+ this.imageInfo.zoom = zoom.toFixed(4)
+ },
getOrientationMarker() {
const renderingEngine = getRenderingEngine(this.renderingEngineId)
const viewport = renderingEngine.getViewport(this.viewportId)
@@ -508,7 +523,10 @@ export default {
}
console.log("渲染成功")
}
- }]).then(res => {
+ }]).then(r => {
+ const voi = metaData.get('voiLutModule', res.volume._imageIds[Math.ceil((res.volume._imageIds.length - 1) / 2)])
+ this.$emit('setWwwc', { ww: voi.windowWidth[0], wc: voi.windowCenter[0], id: this.viewportId })
+ // console.log(viewport.getSlabThickness(), 'getSlabThickness')
if (data.segment) {
return DicomEvent.$emit("isloaded", { segment: data.segment })
}
@@ -528,13 +546,50 @@ export default {
const worldPoint = currentPoints.world
const renderingEngine = getRenderingEngine(this.renderingEngineId)
const viewport = renderingEngine.getViewport(this.viewportId)
- const imageData = viewport.getImageData()
- if (!imageData) return
- const index = imageData.imageData.worldToIndex(worldPoint)
+ let referencedImageId = viewport.getCurrentImageId()
+ const data = viewport.getImageData()
+ if (!data) return
+ const { dimensions, imageData, metadata, voxelManager } = data
+ const index = imageData.worldToIndex(worldPoint)
index[0] = Math.floor(index[0])
index[1] = Math.floor(index[1])
index[2] = Math.floor(index[2])
this.mousePosition.index = index
+ const modality = metadata.Modality
+ let ijk = csUtils.transformWorldToIndex(imageData, worldPoint)
+ ijk = vec3.round(ijk, ijk);
+ if (csUtils.indexWithinDimensions(ijk, dimensions)) {
+ this.isHandleOutsideImage = false
+ let value = voxelManager.getAtIJKPoint(ijk)
+ ijk[2] = viewport.getCurrentImageIdIndex()
+ let modalityUnit
+ if (modality === 'US') {
+ const calibratedResults = cornerstoneTools.utilities.getCalibratedProbeUnitsAndValue(image, [ijk])
+ const hasEnhancedRegionValues = calibratedResults.values.every(
+ (value) => value !== null
+ )
+ value = (hasEnhancedRegionValues ? calibratedResults.values : value)
+ modalityUnit = hasEnhancedRegionValues
+ ? calibratedResults.units
+ : 'raw';
+ } else {
+ const scalingModule = referencedImageId && metaData.get('scalingModule', referencedImageId)
+ const isSuvScaled = typeof scalingModule?.suvbw === 'number'
+ if (scalingModule && scalingModule.suvbw) {
+ const pixelUnitsOptions = {
+ isPreScaled: cornerstoneTools.utilities.viewport.isViewportPreScaled(viewport, referencedImageId),
+ isSuvScaled: isSuvScaled,
+ }
+ modalityUnit = cornerstoneTools.utilities.getPixelValueUnits(
+ modality,
+ referencedImageId,
+ pixelUnitsOptions
+ );
+ }
+ }
+ this.mousePosition.value = value
+ this.mousePosition.modalityUnit = modalityUnit
+ }
},
toggleTask(evt, visitTaskNum, i) {
this.$emit('activeViewport', this.viewportIndex)