From 62a4a74c1ab6a0b7d7785d2a59c3873e78151e3c Mon Sep 17 00:00:00 2001 From: Xiao Gui <xgui3783@gmail.com> Date: Tue, 16 Oct 2018 08:57:36 +0200 Subject: [PATCH] feat: displaying selected landmarks in 2d slices --- .../nehubaContainer.component.ts | 19 +++++- .../nehubaContainer.template.html | 68 +++++++++---------- 2 files changed, 48 insertions(+), 39 deletions(-) diff --git a/src/ui/nehubaContainer/nehubaContainer.component.ts b/src/ui/nehubaContainer/nehubaContainer.component.ts index e83f39094..43f2368a2 100644 --- a/src/ui/nehubaContainer/nehubaContainer.component.ts +++ b/src/ui/nehubaContainer/nehubaContainer.component.ts @@ -37,7 +37,8 @@ export class NehubaContainer implements OnInit, OnDestroy{ private newViewer$ : Observable<any> private selectedParcellation$ : Observable<any> private selectedRegions$ : Observable<any[]> - private selectedLandmarks$ : Observable<any[]> + public selectedLandmarks$ : Observable<any[]> + public selectedPtLandmarks$ : Observable<any[]> private hideSegmentations$ : Observable<boolean> private fetchedSpatialDatasets$ : Observable<Landmark[]> @@ -111,6 +112,10 @@ export class NehubaContainer implements OnInit, OnDestroy{ map(state => state.landmarksSelected) ) + this.selectedPtLandmarks$ = this.selectedLandmarks$.pipe( + map(lms => lms.filter(lm => lm.geometry.type === 'point')) + ) + this.fetchedSpatialDatasets$ = this.store.pipe( select('dataStore'), safeFilter('fetchedSpatialData'), @@ -533,7 +538,7 @@ export class NehubaContainer implements OnInit, OnDestroy{ const newSelectedSpatialDatas = selectedSpatialDatas.findIndex(data => data.name === spatialDatas[idx].name) >= 0 ? selectedSpatialDatas.filter(v => v.name !== spatialDatas[idx].name) - : selectedSpatialDatas.concat(spatialDatas[idx]) + : selectedSpatialDatas.concat(Object.assign({}, spatialDatas[idx], {_label: landmark}) ) this.store.dispatch({ type : SELECT_LANDMARKS, @@ -576,7 +581,7 @@ export class NehubaContainer implements OnInit, OnDestroy{ const pos = quadrant > 2 ? [0,0,0] : this.nanometersToOffsetPixelsFn && this.nanometersToOffsetPixelsFn[quadrant] ? - this.nanometersToOffsetPixelsFn[quadrant](data.position.map(n=>n*1e6)) : + this.nanometersToOffsetPixelsFn[quadrant](data.geometry.position.map(n=>n*1e6)) : [0,0,0] return pos } @@ -593,10 +598,18 @@ export class NehubaContainer implements OnInit, OnDestroy{ handleMouseEnterLandmark(spatialData:any){ spatialData.highlight = true + this.store.dispatch({ + type : MOUSE_OVER_LANDMARK, + landmark : spatialData._label + }) } handleMouseLeaveLandmark(spatialData:any){ spatialData.highlight = false + this.store.dispatch({ + type :MOUSE_OVER_LANDMARK, + landmark : null + }) } private handleParcellation(parcellation:any){ diff --git a/src/ui/nehubaContainer/nehubaContainer.template.html b/src/ui/nehubaContainer/nehubaContainer.template.html index f0dbd402a..49af021df 100644 --- a/src/ui/nehubaContainer/nehubaContainer.template.html +++ b/src/ui/nehubaContainer/nehubaContainer.template.html @@ -10,18 +10,16 @@ <layout-floating-container pos00 landmarkContainer> - <div *ngIf = "false"> - <nehuba-2dlandmark-unit - *ngFor = "let spatialData of (combinedSpatialData$ | async)" - (mouseenter) = "handleMouseEnterLandmark(spatialData)" - (mouseleave) = "handleMouseLeaveLandmark(spatialData)" - [highlight] = "spatialData.highlight ? spatialData.highlight : false" - [glyphiconClass] = "spatialData.type === 'userLandmark' ? 'glyphicon-chevron-down' : 'glyphicon-map-marker'" - [positionX] = "getPositionX(0,spatialData)" - [positionY] = "getPositionY(0,spatialData)" - [positionZ] = "getPositionZ(0,spatialData)"> - </nehuba-2dlandmark-unit> - </div> + <nehuba-2dlandmark-unit + *ngFor = "let spatialData of (selectedPtLandmarks$ | async)" + (mouseenter) = "handleMouseEnterLandmark(spatialData)" + (mouseleave) = "handleMouseLeaveLandmark(spatialData)" + [highlight] = "spatialData.highlight ? spatialData.highlight : false" + [glyphiconClass] = "spatialData.type === 'userLandmark' ? 'glyphicon-chevron-down' : 'glyphicon-map-marker'" + [positionX] = "getPositionX(0,spatialData)" + [positionY] = "getPositionY(0,spatialData)" + [positionZ] = "getPositionZ(0,spatialData)"> + </nehuba-2dlandmark-unit> <div *ngIf = "sliceViewLoading0$ | async" class = "loadingIndicator"> <div class = "spinnerAnimationCircle"> @@ -34,18 +32,17 @@ <layout-floating-container pos01 landmarkContainer> - <div *ngIf = "false"> - <nehuba-2dlandmark-unit - *ngFor = "let spatialData of (combinedSpatialData$ | async)" - (mouseenter) = "handleMouseEnterLandmark(spatialData)" - (mouseleave) = "handleMouseLeaveLandmark(spatialData)" - [highlight] = "spatialData.highlight ? spatialData.highlight : false" - [glyphiconClass] = "spatialData.type === 'userLandmark' ? 'glyphicon-chevron-down' : 'glyphicon-map-marker'" - [positionX] = "getPositionX(1,spatialData)" - [positionY] = "getPositionY(1,spatialData)" - [positionZ] = "getPositionZ(1,spatialData)"> - </nehuba-2dlandmark-unit> - </div> + <nehuba-2dlandmark-unit + *ngFor = "let spatialData of (selectedPtLandmarks$ | async)" + (mouseenter) = "handleMouseEnterLandmark(spatialData)" + (mouseleave) = "handleMouseLeaveLandmark(spatialData)" + [highlight] = "spatialData.highlight ? spatialData.highlight : false" + [glyphiconClass] = "spatialData.type === 'userLandmark' ? 'glyphicon-chevron-down' : 'glyphicon-map-marker'" + [positionX] = "getPositionX(1,spatialData)" + [positionY] = "getPositionY(1,spatialData)" + [positionZ] = "getPositionZ(1,spatialData)"> + </nehuba-2dlandmark-unit> + <div *ngIf = "sliceViewLoading1$ | async" class = "loadingIndicator"> <div class = "spinnerAnimationCircle"> @@ -57,18 +54,17 @@ <layout-floating-container pos10 landmarkContainer> - <div *ngIf = "false"> - <nehuba-2dlandmark-unit - *ngFor = "let spatialData of (combinedSpatialData$ | async)" - (mouseenter) = "handleMouseEnterLandmark(spatialData)" - (mouseleave) = "handleMouseLeaveLandmark(spatialData)" - [highlight] = "spatialData.highlight ? spatialData.highlight : false" - [glyphiconClass] = "spatialData.type === 'userLandmark' ? 'glyphicon-chevron-down' : 'glyphicon-map-marker'" - [positionX] = "getPositionX(2,spatialData)" - [positionY] = "getPositionY(2,spatialData)" - [positionZ] = "getPositionZ(2,spatialData)"> - </nehuba-2dlandmark-unit> - </div> + <nehuba-2dlandmark-unit + *ngFor = "let spatialData of (selectedPtLandmarks$ | async)" + (mouseenter) = "handleMouseEnterLandmark(spatialData)" + (mouseleave) = "handleMouseLeaveLandmark(spatialData)" + [highlight] = "spatialData.highlight ? spatialData.highlight : false" + [glyphiconClass] = "spatialData.type === 'userLandmark' ? 'glyphicon-chevron-down' : 'glyphicon-map-marker'" + [positionX] = "getPositionX(2,spatialData)" + [positionY] = "getPositionY(2,spatialData)" + [positionZ] = "getPositionZ(2,spatialData)"> + </nehuba-2dlandmark-unit> + <div *ngIf = "sliceViewLoading2$ | async" class = "loadingIndicator"> <div class = "spinnerAnimationCircle"> -- GitLab