UNPKG

ng-cornerstone

Version:

[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier) [![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.git

99 lines 13 kB
import { ElementRef, EventEmitter, HostBinding, Input, Output, ViewChild, Directive, } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "../core"; export class BaseViewportComponent { constructor(csService, zone) { this.csService = csService; this.zone = zone; this.active = false; this.viewportUpdated = new EventEmitter(); this.viewportDestroy = new EventEmitter(); } ngOnInit() { this.updateViewport(); if (this.imageInfo) { this.zone.runOutsideAngular(() => { this.renderImage(this.imageInfo); }); } if (this.imageInfo && this.segmentInfo) { this.zone.runOutsideAngular(() => { this.renderSegment(this.imageInfo, this.segmentInfo); }); } } ngOnChanges(changes) { const { imageInfo, segmentInfo } = changes; if (imageInfo && !imageInfo.isFirstChange() && this.imageInfo) { this.zone.runOutsideAngular(() => { this.renderImage(this.imageInfo); }); } if (segmentInfo && !segmentInfo.isFirstChange() && this.segmentInfo) { this.zone.runOutsideAngular(() => { this.renderSegment(this.imageInfo, this.segmentInfo); }); } } get renderingEngineId() { return this.csService.getRenderingEngineId(); } get renderingEngine() { return this.csService.getRenderingEngine(); } get toolGroup() { return this.csService.getToolGroup(); } updateViewport() { console.log('update viewport: ', this.viewportInput?.viewportId); if (!this.viewportInput || !this.viewportInput.viewportId) { console.warn('No viewport input provided'); return; } try { this.viewportInput.element = this.viewportElementRef.nativeElement; this.renderingEngine.enableElement(this.viewportInput); this.viewport = this.renderingEngine.getViewport(this.viewportInput.viewportId); this.viewportUpdated.emit(this.viewportInput?.viewportId); } catch (error) { console.error('Failed to update viewport:', error); } } renderImage(image) { console.warn('Render method not implemented in base viewport component'); } renderSegment(image, segment) { console.warn('Render method not implemented in base viewport component'); } ngOnDestroy() { if (this.viewportInput?.viewportId) { this.renderingEngine.disableElement(this.viewportInput.viewportId); this.viewportDestroy.emit(this.viewportInput.viewportId); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BaseViewportComponent, deps: [{ token: i1.CornerstoneService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: BaseViewportComponent, inputs: { viewportInput: "viewportInput", imageInfo: "imageInfo", segmentInfo: "segmentInfo", active: "active" }, outputs: { viewportUpdated: "viewportUpdated", viewportDestroy: "viewportDestroy" }, host: { properties: { "class.active": "this.active" } }, viewQueries: [{ propertyName: "viewportElementRef", first: true, predicate: ["imageBox"], descendants: true, read: ElementRef, static: true }], usesOnChanges: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BaseViewportComponent, decorators: [{ type: Directive }], ctorParameters: () => [{ type: i1.CornerstoneService }, { type: i0.NgZone }], propDecorators: { viewportInput: [{ type: Input }], imageInfo: [{ type: Input }], segmentInfo: [{ type: Input }], viewportElementRef: [{ type: ViewChild, args: ['imageBox', { read: ElementRef, static: true }] }], active: [{ type: Input }, { type: HostBinding, args: ['class.active'] }], viewportUpdated: [{ type: Output }], viewportDestroy: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS12aWV3cG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb3JuZXJzdG9uZS9zcmMvbGliL3ZpZXdwb3J0L2Jhc2Utdmlld3BvcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7OztBQUt2QixNQUFNLE9BQU8scUJBQXFCO0lBc0JoQyxZQUFzQixTQUE2QixFQUFZLElBQVk7UUFBckQsY0FBUyxHQUFULFNBQVMsQ0FBb0I7UUFBWSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBUDNFLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFZCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDN0Msb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBSXVCLENBQUM7SUFFL0UsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBVSxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBc0IsRUFBRSxJQUFJLENBQUMsV0FBWSxDQUFDLENBQUM7WUFDckUsQ0FBQyxDQUFD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QixxQkFBcUIscVhBVUQsVUFBVTs7NEZBVjlCLHFCQUFxQjtrQkFEakMsU0FBUzs0R0FHUixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUt6RCxNQUFNO3NCQUZMLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsY0FBYztnQkFHakIsZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgRGlyZWN0aXZlLFxuICBOZ1pvbmUsXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUeXBlcywgRW51bXMgfSBmcm9tICdAY29ybmVyc3RvbmVqcy9jb3JlJztcbmltcG9ydCB7IENvcm5lcnN0b25lU2VydmljZSwgSW1hZ2VJbmZvLCBpbWFnZUluZm9Ub1VuaXF1ZUlkIH0gZnJvbSAnLi4vY29yZSc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIEJhc2VWaWV3cG9ydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKVxuICB2aWV3cG9ydElucHV0PzogUGFydGlhbDxUeXBlcy5QdWJsaWNWaWV3cG9ydElucHV0PjtcblxuICBASW5wdXQoKVxuICBpbWFnZUluZm8/OiBJbWFnZUluZm87XG5cbiAgQElucHV0KClcbiAgc2VnbWVudEluZm8/OiBJbWFnZUluZm87XG5cbiAgQFZpZXdDaGlsZCgnaW1hZ2VCb3gnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICB2aWV3cG9ydEVsZW1lbnRSZWYhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFjdGl2ZScpXG4gIGFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSB2aWV3cG9ydFVwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHZpZXdwb3J0RGVzdHJveSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIHZpZXdwb3J0ITogVHlwZXMuSVZpZXdwb3J0O1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjc1NlcnZpY2U6IENvcm5lcnN0b25lU2VydmljZSwgcHJvdGVjdGVkIHpvbmU6IE5nWm9uZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0KCk7XG4gICAgaWYgKHRoaXMuaW1hZ2VJbmZvKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlckltYWdlKHRoaXMuaW1hZ2VJbmZvISk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaW1hZ2VJbmZvICYmIHRoaXMuc2VnbWVudEluZm8pIHtcbiAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIHRoaXMucmVuZGVyU2VnbWVudCh0aGlzLmltYWdlSW5mbyBhcyBJbWFnZUluZm8sIHRoaXMuc2VnbWVudEluZm8hKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IGltYWdlSW5mbywgc2VnbWVudEluZm8gfSA9IGNoYW5nZXM7XG5cbiAgICBpZiAoaW1hZ2VJbmZvICYmICFpbWFnZUluZm8uaXNGaXJzdENoYW5nZSgpICYmIHRoaXMuaW1hZ2VJbmZvKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlckltYWdlKHRoaXMuaW1hZ2VJbmZvISk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc2VnbWVudEluZm8gJiYgIXNlZ21lbnRJbmZvLmlzRmlyc3RDaGFuZ2UoKSAmJiB0aGlzLnNlZ21lbnRJbmZvKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlclNlZ21lbnQodGhpcy5pbWFnZUluZm8gYXMgSW1hZ2VJbmZvLCB0aGlzLnNlZ21lbnRJbmZvISk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgcmVuZGVyaW5nRW5naW5lSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3NTZXJ2aWNlLmdldFJlbmRlcmluZ0VuZ2luZUlkKCk7XG4gIH1cblxuICBnZXQgcmVuZGVyaW5nRW5naW5lKCkge1xuICAgIHJldHVybiB0aGlzLmNzU2VydmljZS5nZXRSZW5kZXJpbmdFbmdpbmUoKTtcbiAgfVxuXG4gIGdldCB0b29sR3JvdXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3NTZXJ2aWNlLmdldFRvb2xHcm91cCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVZpZXdwb3J0KCkge1xuICAgIGNvbnNvbGUubG9nKCd1cGRhdGUgdmlld3BvcnQ6ICcsIHRoaXMudmlld3BvcnRJbnB1dD8udmlld3BvcnRJZCk7XG5cbiAgICBpZiAoIXRoaXMudmlld3BvcnRJbnB1dCB8fCAhdGhpcy52aWV3cG9ydElucHV0LnZpZXdwb3J0SWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm8gdmlld3BvcnQgaW5wdXQgcHJvdmlkZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy52aWV3cG9ydElucHV0LmVsZW1lbnQgPSB0aGlzLnZpZXdwb3J0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgdGhpcy5yZW5kZXJpbmdFbmdpbmUuZW5hYmxlRWxlbWVudCh0aGlzLnZpZXdwb3J0SW5wdXQgYXMgVHlwZXMuUHVibGljVmlld3BvcnRJbnB1dCk7XG4gICAgICB0aGlzLnZpZXdwb3J0ID0gdGhpcy5yZW5kZXJpbmdFbmdpbmUuZ2V0Vmlld3BvcnQodGhpcy52aWV3cG9ydElucHV0LnZpZXdwb3J0SWQpO1xuICAgICAgdGhpcy52aWV3cG9ydFVwZGF0ZWQuZW1pdCh0aGlzLnZpZXdwb3J0SW5wdXQ/LnZpZXdwb3J0SWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIHZpZXdwb3J0OicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySW1hZ2UoaW1hZ2U6IEltYWdlSW5mbyk6IHZvaWQge1xuICAgIGNvbnNvbGUud2FybignUmVuZGVyIG1ldGhvZCBub3QgaW1wbGVtZW50ZWQgaW4gYmFzZSB2aWV3cG9ydCBjb21wb25lbnQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJTZWdtZW50KGltYWdlOiBJbWFnZUluZm8sIHNlZ21lbnQ6IEltYWdlSW5mbyk6IHZvaWQge1xuICAgIGNvbnNvbGUud2FybignUmVuZGVyIG1ldGhvZCBub3QgaW1wbGVtZW50ZWQgaW4gYmFzZSB2aWV3cG9ydCBjb21wb25lbnQnKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZXdwb3J0SW5wdXQ/LnZpZXdwb3J0SWQpIHtcbiAgICAgIHRoaXMucmVuZGVyaW5nRW5naW5lLmRpc2FibGVFbGVtZW50KHRoaXMudmlld3BvcnRJbnB1dC52aWV3cG9ydElkKTtcbiAgICAgIHRoaXMudmlld3BvcnREZXN0cm95LmVtaXQodGhpcy52aWV3cG9ydElucHV0LnZpZXdwb3J0SWQpO1xuICAgIH1cbiAgfVxufVxuIl19