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

68 lines 10.2 kB
import { ChangeDetectionStrategy, Component } from '@angular/core'; import { Enums } from '@cornerstonejs/core'; import { Enums as csToolEnum, segmentation } from '@cornerstonejs/tools'; import { ctVoiRange, imageInfoToUniqueId } from '../core'; import { BaseViewportComponent } from './base-viewport.component'; import * as i0 from "@angular/core"; import * as i1 from "../core"; export class StackViewportComponent extends BaseViewportComponent { constructor(csService, imageIdService, zone) { super(csService, zone); this.csService = csService; this.imageIdService = imageIdService; } ngOnInit() { // 确保视口类型设置为STACK if (this.viewportInput) { this.viewportInput.type = Enums.ViewportType.STACK; } super.ngOnInit(); } async renderImage(image) { console.log('render stack Image'); if (!image || !this.viewport || !this.viewportInput?.viewportId) { return; } try { // 获取ImageIds const imageIds = image.imageIds || []; // 设置Stack await this.viewport.setStack(imageIds); // 设置VOI范围 this.viewport.setProperties({ voiRange: ctVoiRange }); // 渲染视口 this.renderingEngine.renderViewport(this.viewport.id); } catch (error) { console.error('Failed to render stack viewport:', error); } } async renderSegment(image, segment) { if (!segment || !image || !this.viewport || !this.viewportInput?.viewportId) { return; } try { // 获取ImageIds const segmentationId = imageInfoToUniqueId(segment); segmentation.addSegmentationRepresentations(this.viewportInput.viewportId, [ { segmentationId: segmentationId, type: csToolEnum.SegmentationRepresentations.Labelmap, }, ]); } catch (error) { console.error('Failed to render segment in stack viewport:', error); } } get toolGroupId() { return `${this.viewportInput?.viewportId}_toolgroup`; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StackViewportComponent, deps: [{ token: i1.CornerstoneService }, { token: i1.ImageIdService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: StackViewportComponent, selector: "nc-stack-viewport", usesInheritance: true, ngImport: i0, template: `<div #imageBox class="dicom-viewer-viewport-container"></div>`, isInline: true, styles: [".dicom-viewer-viewport-container{display:block;height:100%;width:100%}:host{border:1px solid rgba(59,219,223,.85);box-sizing:border-box}:host:focus,:host:active,:host.active{border:1px solid green}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StackViewportComponent, decorators: [{ type: Component, args: [{ selector: 'nc-stack-viewport', template: `<div #imageBox class="dicom-viewer-viewport-container"></div>`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".dicom-viewer-viewport-container{display:block;height:100%;width:100%}:host{border:1px solid rgba(59,219,223,.85);box-sizing:border-box}:host:focus,:host:active,:host.active{border:1px solid green}\n"] }] }], ctorParameters: () => [{ type: i1.CornerstoneService }, { type: i1.ImageIdService }, { type: i0.NgZone }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stdmlld3BvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29ybmVyc3RvbmUvc3JjL2xpYi92aWV3cG9ydC9zdGFjay12aWV3cG9ydC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBMkMsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFhLEtBQUssRUFBa0MsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RixPQUFPLEVBQUUsS0FBSyxJQUFJLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RSxPQUFPLEVBQXNDLFVBQVUsRUFBRSxtQkFBbUIsRUFBYSxNQUFNLFNBQVMsQ0FBQztBQUN6RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7O0FBVWxFLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxxQkFBcUI7SUFDL0QsWUFBK0IsU0FBNkIsRUFBVSxjQUE4QixFQUFFLElBQVk7UUFDaEgsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQURNLGNBQVMsR0FBVCxTQUFTLENBQW9CO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO0lBRXBHLENBQUM7SUFFUSxRQUFRO1FBQ2YsaUJBQWlCO1FBQ2pCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQ3JELENBQUM7UUFDRCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVRLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBZ0I7UUFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUNoRSxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILGFBQWE7WUFDYixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUN0QyxVQUFVO1lBQ1YsTUFBTyxJQUFJLENBQUMsUUFBMkIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFM0QsVUFBVTtZQUNULElBQUksQ0FBQyxRQUEyQixDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBRTFFLE9BQU87WUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztJQUVRLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBZ0IsRUFBRSxPQUFrQjtRQUMvRCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDNUUsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxhQUFhO1lBQ2IsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEQsWUFBWSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFO2dCQUN6RTtvQkFDRSxjQUFjLEVBQUUsY0FBYztvQkFDOUIsSUFBSSxFQUFFLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxRQUFRO2lCQUN0RDthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0RSxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQVksV0FBVztRQUNyQixPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLFlBQVksQ0FBQztJQUN2RCxDQUFDOytHQXhEVSxzQkFBc0I7bUdBQXRCLHNCQUFzQixnRkFKdkIsK0RBQStEOzs0RkFJOUQsc0JBQXNCO2tCQU5sQyxTQUFTOytCQUNFLG1CQUFtQixZQUNuQiwrREFBK0QsbUJBRXhELHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENPTlNUQU5UUywgRW51bXMsIFR5cGVzLCB1dGlsaXRpZXMsIHZvbHVtZUxvYWRlciB9IGZyb20gJ0Bjb3JuZXJzdG9uZWpzL2NvcmUnO1xuaW1wb3J0IHsgRW51bXMgYXMgY3NUb29sRW51bSwgc2VnbWVudGF0aW9uIH0gZnJvbSAnQGNvcm5lcnN0b25lanMvdG9vbHMnO1xuaW1wb3J0IHsgQ29ybmVyc3RvbmVTZXJ2aWNlLCBJbWFnZUlkU2VydmljZSwgY3RWb2lSYW5nZSwgaW1hZ2VJbmZvVG9VbmlxdWVJZCwgSW1hZ2VJbmZvIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBCYXNlVmlld3BvcnRDb21wb25lbnQgfSBmcm9tICcuL2Jhc2Utdmlld3BvcnQuY29tcG9uZW50JztcbmltcG9ydCB7IElTdGFja1ZpZXdwb3J0IH0gZnJvbSAnQGNvcm5lcnN0b25lanMvY29yZS9kaXN0L2VzbS90eXBlcyc7XG5pbXBvcnQgeyBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmMtc3RhY2stdmlld3BvcnQnLFxuICB0ZW1wbGF0ZTogYDxkaXYgI2ltYWdlQm94IGNsYXNzPVwiZGljb20tdmlld2VyLXZpZXdwb3J0LWNvbnRhaW5lclwiPjwvZGl2PmAsXG4gIHN0eWxlVXJsczogWycuL3ZpZXdwb3J0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTdGFja1ZpZXdwb3J0Q29tcG9uZW50IGV4dGVuZHMgQmFzZVZpZXdwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgb3ZlcnJpZGUgY3NTZXJ2aWNlOiBDb3JuZXJzdG9uZVNlcnZpY2UsIHByaXZhdGUgaW1hZ2VJZFNlcnZpY2U6IEltYWdlSWRTZXJ2aWNlLCB6b25lOiBOZ1pvbmUpIHtcbiAgICBzdXBlcihjc1NlcnZpY2UsIHpvbmUpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8g56Gu5L+d6KeG5Y+j57G75Z6L6K6+572u5Li6U1RBQ0tcbiAgICBpZiAodGhpcy52aWV3cG9ydElucHV0KSB7XG4gICAgICB0aGlzLnZpZXdwb3J0SW5wdXQudHlwZSA9IEVudW1zLlZpZXdwb3J0VHlwZS5TVEFDSztcbiAgICB9XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHJlbmRlckltYWdlKGltYWdlOiBJbWFnZUluZm8pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZygncmVuZGVyIHN0YWNrIEltYWdlJyk7XG4gICAgaWYgKCFpbWFnZSB8fCAhdGhpcy52aWV3cG9ydCB8fCAhdGhpcy52aWV3cG9ydElucHV0Py52aWV3cG9ydElkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIOiOt+WPlkltYWdlSWRzXG4gICAgICBjb25zdCBpbWFnZUlkcyA9IGltYWdlLmltYWdlSWRzIHx8IFtdO1xuICAgICAgLy8g6K6+572uU3RhY2tcbiAgICAgIGF3YWl0ICh0aGlzLnZpZXdwb3J0IGFzIElTdGFja1ZpZXdwb3J0KS5zZXRTdGFjayhpbWFnZUlkcyk7XG5cbiAgICAgIC8vIOiuvue9rlZPSeiMg+WbtFxuICAgICAgKHRoaXMudmlld3BvcnQgYXMgSVN0YWNrVmlld3BvcnQpLnNldFByb3BlcnRpZXMoeyB2b2lSYW5nZTogY3RWb2lSYW5nZSB9KTtcblxuICAgICAgLy8g5riy5p+T6KeG5Y+jXG4gICAgICB0aGlzLnJlbmRlcmluZ0VuZ2luZS5yZW5kZXJWaWV3cG9ydCh0aGlzLnZpZXdwb3J0LmlkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHJlbmRlciBzdGFjayB2aWV3cG9ydDonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgcmVuZGVyU2VnbWVudChpbWFnZTogSW1hZ2VJbmZvLCBzZWdtZW50OiBJbWFnZUluZm8pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXNlZ21lbnQgfHwgIWltYWdlIHx8ICF0aGlzLnZpZXdwb3J0IHx8ICF0aGlzLnZpZXdwb3J0SW5wdXQ/LnZpZXdwb3J0SWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8g6I635Y+WSW1hZ2VJZHNcbiAgICAgIGNvbnN0IHNlZ21lbnRhdGlvbklkID0gaW1hZ2VJbmZvVG9VbmlxdWVJZChzZWdtZW50KTtcbiAgICAgIHNlZ21lbnRhdGlvbi5hZGRTZWdtZW50YXRpb25SZXByZXNlbnRhdGlvbnModGhpcy52aWV3cG9ydElucHV0LnZpZXdwb3J0SWQsIFtcbiAgICAgICAge1xuICAgICAgICAgIHNlZ21lbnRhdGlvbklkOiBzZWdtZW50YXRpb25JZCxcbiAgICAgICAgICB0eXBlOiBjc1Rvb2xFbnVtLlNlZ21lbnRhdGlvblJlcHJlc2VudGF0aW9ucy5MYWJlbG1hcCxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcmVuZGVyIHNlZ21lbnQgaW4gc3RhY2sgdmlld3BvcnQ6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHRvb2xHcm91cElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMudmlld3BvcnRJbnB1dD8udmlld3BvcnRJZH1fdG9vbGdyb3VwYDtcbiAgfVxufVxuIl19