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