@cornerstonejs/core
Version:
Cornerstone3D Core
82 lines (81 loc) • 2.87 kB
JavaScript
import { ViewportType } from '../../enums/index.js';
import { planarProjectionAdapter } from './Planar/planarProjectionAdapter.js';
import { volume3DProjectionAdapter } from './Volume3D/volume3DProjectionAdapter.js';
import { videoProjectionAdapter } from './Video/videoProjectionAdapter.js';
import { ecgProjectionAdapter } from './ECG/ecgProjectionAdapter.js';
import { wsiProjectionAdapter } from './WSI/wsiProjectionAdapter.js';
function getViewportType(request) {
const viewportType = request.viewportType ??
request.viewport?.type;
return viewportType === undefined ? undefined : String(viewportType);
}
class ViewportProjectionService {
constructor() {
this.adapters = new Map();
}
register(adapter) {
this.adapters.set(adapter.id, adapter);
}
unregister(adapterId) {
this.adapters.delete(adapterId);
}
getAdapter(viewport, request = {}) {
const projectionRequest = {
...request,
viewport,
};
const viewportType = getViewportType(projectionRequest);
for (const adapter of this.adapters.values()) {
if (request.kind && adapter.id !== request.kind) {
continue;
}
if (viewportType &&
!adapter.viewportTypes.some((type) => String(type) === viewportType)) {
continue;
}
return adapter;
}
}
get(viewport, request = {}) {
const adapter = this.getAdapter(viewport, request);
return adapter?.getSnapshot({
...request,
viewport,
});
}
getPresentation(viewport, request = {}) {
const adapter = this.getAdapter(viewport, request);
const snapshot = adapter?.getSnapshot({
...request,
viewport,
});
if (!snapshot) {
return;
}
return adapter.getPresentation(snapshot, request.selector);
}
withPresentation(viewport, presentation, request = {}, options) {
const adapter = this.getAdapter(viewport, request);
const snapshot = adapter?.getSnapshot({
...request,
viewport,
});
if (!snapshot) {
return;
}
return adapter.withPresentation(snapshot, presentation, options);
}
getRegisteredAdapters() {
return Array.from(this.adapters.values());
}
clear() {
this.adapters.clear();
}
}
const viewportProjection = new ViewportProjectionService();
viewportProjection.register(planarProjectionAdapter);
viewportProjection.register(volume3DProjectionAdapter);
viewportProjection.register(videoProjectionAdapter);
viewportProjection.register(ecgProjectionAdapter);
viewportProjection.register(wsiProjectionAdapter);
export { ViewportProjectionService, viewportProjection };