From b178d750986e227844f8de541f270e4a887fd16c Mon Sep 17 00:00:00 2001 From: Xiao Gui <xgui3783@gmail.com> Date: Tue, 20 Jul 2021 11:17:44 +0200 Subject: [PATCH] feat: add centroid support --- .../navigating/originDataset.prod.e2e-spec.js | 2 +- .../parcellationRegion/region.base.ts | 18 ++++++++++-------- .../regionMenu/regionMenu.component.ts | 3 ++- .../regionMenu/regionMenu.template.html | 3 ++- src/state/effects/viewerState.useEffect.ts | 3 ++- src/util/pureConstant.service.ts | 1 - src/util/siibraApiConstants/fn.ts | 6 ++++++ src/util/siibraApiConstants/types.ts | 4 ++-- 8 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 src/util/siibraApiConstants/fn.ts diff --git a/e2e/src/navigating/originDataset.prod.e2e-spec.js b/e2e/src/navigating/originDataset.prod.e2e-spec.js index ff4aea1de..db6c60dd2 100644 --- a/e2e/src/navigating/originDataset.prod.e2e-spec.js +++ b/e2e/src/navigating/originDataset.prod.e2e-spec.js @@ -1,6 +1,6 @@ const { AtlasPage } = require("../util") const { ARIA_LABELS } = require('../../../common/constants') -const { SHOW_CONNECTIVITY_DATA, SHOW_IN_OTHER_REF_SPACE, SHOW_ORIGIN_DATASET } = ARIA_LABELS +const { SHOW_ORIGIN_DATASET } = ARIA_LABELS const cssSelector = `[aria-label="${SHOW_ORIGIN_DATASET}"]` diff --git a/src/atlasComponents/parcellationRegion/region.base.ts b/src/atlasComponents/parcellationRegion/region.base.ts index 56321ecad..d954d08b1 100644 --- a/src/atlasComponents/parcellationRegion/region.base.ts +++ b/src/atlasComponents/parcellationRegion/region.base.ts @@ -3,11 +3,11 @@ import { select, Store, createSelector } from "@ngrx/store"; import { uiStateOpenSidePanel, uiStateExpandSidePanel, uiActionShowSidePanelConnectivity } from 'src/services/state/uiState.store.helper' import { distinctUntilChanged, switchMap, filter, map, withLatestFrom } from "rxjs/operators"; import { Observable, BehaviorSubject, combineLatest } from "rxjs"; -import { ARIA_LABELS } from 'common/constants' import { flattenRegions, getIdFromKgIdObj, rgbToHsl } from 'common/util' import { viewerStateSetConnectivityRegion, viewerStateNavigateToRegion, viewerStateToggleRegionSelect, viewerStateNewViewer, isNewerThan } from "src/services/state/viewerState.store.helper"; import { viewerStateFetchedTemplatesSelector, viewerStateGetSelectedAtlas, viewerStateSelectedTemplateFullInfoSelector, viewerStateSelectedTemplateSelector } from "src/services/state/viewerState/selectors"; import { strToRgb, verifyPositionArg, getRegionHemisphere } from 'common/util' +import { getPosFromRegion } from "src/util/siibraApiConstants/fn"; export class RegionBase { @@ -34,11 +34,19 @@ export class RegionBase { this._region = val this.region$.next(this._region) - this.position = val?.position + this.position = null // bug the centroid returned is currently nonsense // this.position = val?.props?.centroid_mm if (!this._region) return + if (val?.position) { + this.position = val?.position + } + const pos = getPosFromRegion(val) + if (pos) { + this.position = pos + } + const rgb = this._region.rgb || (this._region.labelIndex > 65500 && [255, 255, 255]) || strToRgb(`${this._region.ngId || this._region.name}${this._region.labelIndex}`) @@ -191,12 +199,6 @@ export class RegionBase { navigation, })) } - - public GO_TO_REGION_CENTROID = ARIA_LABELS.GO_TO_REGION_CENTROID - public SHOW_CONNECTIVITY_DATA = ARIA_LABELS.SHOW_CONNECTIVITY_DATA - public SHOW_IN_OTHER_REF_SPACE = ARIA_LABELS.SHOW_IN_OTHER_REF_SPACE - public SHOW_ORIGIN_DATASET = ARIA_LABELS.SHOW_ORIGIN_DATASET - public AVAILABILITY_IN_OTHER_REF_SPACE = ARIA_LABELS.AVAILABILITY_IN_OTHER_REF_SPACE } export const getRegionParentParcRefSpace = createSelector( diff --git a/src/atlasComponents/parcellationRegion/regionMenu/regionMenu.component.ts b/src/atlasComponents/parcellationRegion/regionMenu/regionMenu.component.ts index 8747535e5..879815ee4 100644 --- a/src/atlasComponents/parcellationRegion/regionMenu/regionMenu.component.ts +++ b/src/atlasComponents/parcellationRegion/regionMenu/regionMenu.component.ts @@ -2,7 +2,7 @@ import { Component, OnDestroy } from "@angular/core"; import { Store } from "@ngrx/store"; import { Observable, Subscription } from "rxjs"; import { RegionBase } from '../region.base' -import { CONST } from 'common/constants' +import { CONST, ARIA_LABELS } from 'common/constants' import { ComponentStore } from "src/viewerModule/componentStore"; @Component({ @@ -14,6 +14,7 @@ import { ComponentStore } from "src/viewerModule/componentStore"; export class RegionMenuComponent extends RegionBase implements OnDestroy { public CONST = CONST + public ARIA_LABELS = ARIA_LABELS private subscriptions: Subscription[] = [] public activePanelTitles$: Observable<string[]> diff --git a/src/atlasComponents/parcellationRegion/regionMenu/regionMenu.template.html b/src/atlasComponents/parcellationRegion/regionMenu/regionMenu.template.html index 2ce44030f..1c4f8bc1b 100644 --- a/src/atlasComponents/parcellationRegion/regionMenu/regionMenu.template.html +++ b/src/atlasComponents/parcellationRegion/regionMenu/regionMenu.template.html @@ -41,7 +41,7 @@ <!-- position --> <button mat-icon-button *ngIf="position" (click)="navigateToRegion()" - [matTooltip]="GO_TO_REGION_CENTROID + ': ' + (position | addUnitAndJoin : 'mm')"> + [matTooltip]="ARIA_LABELS.GO_TO_REGION_CENTROID + ': ' + (position | nmToMm | addUnitAndJoin : 'mm')"> <mat-icon fontSet="fas" fontIcon="fa-map-marked-alt"> </mat-icon> </button> @@ -51,6 +51,7 @@ <ng-container *ngFor="let info of infos"> <a *ngFor="let url of info.urls" [href]="url.doi | doiParserPipe" + [matTooltip]="ARIA_LABELS.EXPLORE_DATASET_IN_KG" target="_blank" mat-icon-button> <i class="fas fa-external-link-alt"></i> diff --git a/src/state/effects/viewerState.useEffect.ts b/src/state/effects/viewerState.useEffect.ts index 0c96a3b9a..27af76905 100644 --- a/src/state/effects/viewerState.useEffect.ts +++ b/src/state/effects/viewerState.useEffect.ts @@ -16,6 +16,7 @@ import { uiActionHideAllDatasets } from "src/services/state/uiState/actions"; import { viewerStateFetchedAtlasesSelector } from "src/services/state/viewerState/selectors"; import { viewerStateChangeNavigation } from "src/services/state/viewerState/actions"; import { cvtNavigationObjToNehubaConfig } from 'src/viewerModule/nehuba/util' +import { getPosFromRegion } from "src/util/siibraApiConstants/fn"; const defaultPerspectiveZoom = 1e6 const defaultZoom = 1e6 @@ -400,7 +401,7 @@ export class ViewerStateControllerUseEffect implements OnDestroy { }) } - const position = region.position || (region?.props?.centroid_mm || []).map((v: number) => v*1e6) + const position = region.position || getPosFromRegion(region) if (!position) { return generalActionError({ message: `${region.name} - does not have a position defined` diff --git a/src/util/pureConstant.service.ts b/src/util/pureConstant.service.ts index 129d0f276..411066e27 100644 --- a/src/util/pureConstant.service.ts +++ b/src/util/pureConstant.service.ts @@ -384,7 +384,6 @@ Raise/track issues at github repo: <a target = "_blank" href = "${this.repoUrl}" atlases.map( atlas => this.getSpacesAndParc(atlas.id).pipe( map(({ templateSpaces, parcellations }) => { - console.log({parcellations}) return { '@id': atlas.id, name: atlas.name, diff --git a/src/util/siibraApiConstants/fn.ts b/src/util/siibraApiConstants/fn.ts new file mode 100644 index 000000000..cf820dcf6 --- /dev/null +++ b/src/util/siibraApiConstants/fn.ts @@ -0,0 +1,6 @@ +import { TRegionDetail } from "./types"; + +export function getPosFromRegion(region: TRegionDetail){ + if (!region?.props?.[0]) return null + return region.props[0].centroid_mm.map(v => v*1e6) as [number, number, number] +} \ No newline at end of file diff --git a/src/util/siibraApiConstants/types.ts b/src/util/siibraApiConstants/types.ts index 1fadb0188..0efa98b92 100644 --- a/src/util/siibraApiConstants/types.ts +++ b/src/util/siibraApiConstants/types.ts @@ -143,11 +143,11 @@ export type TRegionDetail = { }[] hasRegionalMap: boolean props: { - centroid_mm: number[] + centroid_mm: [number, number, number] volume_mm: number surface_mm: number is_cortical: number - } + }[] links: { [key: string]: string } -- GitLab