ng-cornerstone
Version:
[](https://github.com/prettier/prettier) [](http://commitizen.git
63 lines • 10.1 kB
JavaScript
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
import { CONSTANTS, Enums, setVolumesForViewports, utilities } from '@cornerstonejs/core';
import { Enums as csToolEnum, segmentation } from '@cornerstonejs/tools';
import { imageInfoToUniqueId } from '../core';
import { BaseViewportComponent } from './base-viewport.component';
import * as i0 from "@angular/core";
import * as i1 from "../core";
export class Volume3DViewportComponent extends BaseViewportComponent {
constructor(csService, zone) {
super(csService, zone);
this.csService = csService;
}
ngOnInit() {
if (this.viewportInput) {
this.viewportInput.type = Enums.ViewportType.VOLUME_3D;
}
super.ngOnInit();
}
async renderImage(image) {
if (!image || !this.viewport || !this.viewportInput?.viewportId)
return;
try {
await setVolumesForViewports(this.renderingEngine, [{ volumeId: image.volumeId }], [this.viewport.id]);
const actor = this.viewport.getDefaultActor().actor;
utilities.applyPreset(actor, CONSTANTS.VIEWPORT_PRESETS.find((preset) => preset.name === 'CT-Chest-Contrast-Enhanced'));
}
catch (error) {
console.error('Failed to render volume in volume3d viewport:', error);
}
}
async renderSegment(image, segment) {
if (!segment || !image || !this.viewport || !this.viewportInput?.viewportId) {
return;
}
const segmentationId = imageInfoToUniqueId(segment);
if (!segmentationId) {
console.error('Invalid segmentation or reference volume data');
return;
}
try {
if (this.viewportInput.viewportId) {
segmentation.addSegmentationRepresentations(this.viewportInput.viewportId, [
{
segmentationId,
type: csToolEnum.SegmentationRepresentations.Surface,
},
]);
}
}
catch (error) {
console.error('Failed to render segment in orthographic viewport:', error);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: Volume3DViewportComponent, deps: [{ token: i1.CornerstoneService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: Volume3DViewportComponent, selector: "nc-volume3d-viewport", inputs: { volumeId: "volumeId" }, 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: Volume3DViewportComponent, decorators: [{
type: Component,
args: [{ selector: 'nc-volume3d-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: i0.NgZone }], propDecorators: { volumeId: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9sdW1lM2Qtdmlld3BvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29ybmVyc3RvbmUvc3JjL2xpYi92aWV3cG9ydC92b2x1bWUzZC12aWV3cG9ydC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXlCLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFTLHNCQUFzQixFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxLQUFLLElBQUksVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pFLE9BQU8sRUFBaUMsbUJBQW1CLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQVNsRSxNQUFNLE9BQU8seUJBQTBCLFNBQVEscUJBQXFCO0lBR2xFLFlBQStCLFNBQTZCLEVBQUUsSUFBWTtRQUN4RSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRE0sY0FBUyxHQUFULFNBQVMsQ0FBb0I7SUFFNUQsQ0FBQztJQUVRLFFBQVE7UUFDZixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFUSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQWdCO1FBQ3pDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVO1lBQUUsT0FBTztRQUV4RSxJQUFJLENBQUM7WUFDSCxNQUFNLHNCQUFzQixDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4RyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDLEtBQTBCLENBQUM7WUFDekUsU0FBUyxDQUFDLFdBQVcsQ0FDbkIsS0FBSyxFQUNMLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssNEJBQTRCLENBQUUsQ0FDM0YsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVRLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBZ0IsRUFBRSxPQUFrQjtRQUMvRCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDNUUsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVwRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1lBQy9ELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNsQyxZQUFZLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUU7b0JBQ3pFO3dCQUNFLGNBQWM7d0JBQ2QsSUFBSSxFQUFFLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPO3FCQUNyRDtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLG9EQUFvRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdFLENBQUM7SUFDSCxDQUFDOytHQXBEVSx5QkFBeUI7bUdBQXpCLHlCQUF5QixxSEFKMUIsK0RBQStEOzs0RkFJOUQseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLHNCQUFzQixZQUN0QiwrREFBK0QsbUJBRXhELHVCQUF1QixDQUFDLE1BQU07NEdBR3RDLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDT05TVEFOVFMsIEVudW1zLCBUeXBlcywgc2V0Vm9sdW1lc0ZvclZpZXdwb3J0cywgdXRpbGl0aWVzIH0gZnJvbSAnQGNvcm5lcnN0b25lanMvY29yZSc7XG5pbXBvcnQgeyBFbnVtcyBhcyBjc1Rvb2xFbnVtLCBzZWdtZW50YXRpb24gfSBmcm9tICdAY29ybmVyc3RvbmVqcy90b29scyc7XG5pbXBvcnQgeyBDb3JuZXJzdG9uZVNlcnZpY2UsIEltYWdlSW5mbywgaW1hZ2VJbmZvVG9VbmlxdWVJZCB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgQmFzZVZpZXdwb3J0Q29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLXZpZXdwb3J0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmMtdm9sdW1lM2Qtdmlld3BvcnQnLFxuICB0ZW1wbGF0ZTogYDxkaXYgI2ltYWdlQm94IGNsYXNzPVwiZGljb20tdmlld2VyLXZpZXdwb3J0LWNvbnRhaW5lclwiPjwvZGl2PmAsXG4gIHN0eWxlVXJsczogWycuL3ZpZXdwb3J0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBWb2x1bWUzRFZpZXdwb3J0Q29tcG9uZW50IGV4dGVuZHMgQmFzZVZpZXdwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgdm9sdW1lSWQ/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIG92ZXJyaWRlIGNzU2VydmljZTogQ29ybmVyc3RvbmVTZXJ2aWNlLCB6b25lOiBOZ1pvbmUpIHtcbiAgICBzdXBlcihjc1NlcnZpY2UsIHpvbmUpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlld3BvcnRJbnB1dCkge1xuICAgICAgdGhpcy52aWV3cG9ydElucHV0LnR5cGUgPSBFbnVtcy5WaWV3cG9ydFR5cGUuVk9MVU1FXzNEO1xuICAgIH1cbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgcmVuZGVySW1hZ2UoaW1hZ2U6IEltYWdlSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghaW1hZ2UgfHwgIXRoaXMudmlld3BvcnQgfHwgIXRoaXMudmlld3BvcnRJbnB1dD8udmlld3BvcnRJZCkgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNldFZvbHVtZXNGb3JWaWV3cG9ydHModGhpcy5yZW5kZXJpbmdFbmdpbmUsIFt7IHZvbHVtZUlkOiBpbWFnZS52b2x1bWVJZCEgfV0sIFt0aGlzLnZpZXdwb3J0LmlkXSk7XG4gICAgICBjb25zdCBhY3RvciA9IHRoaXMudmlld3BvcnQuZ2V0RGVmYXVsdEFjdG9yKCkuYWN0b3IgYXMgVHlwZXMuVm9sdW1lQWN0b3I7XG4gICAgICB1dGlsaXRpZXMuYXBwbHlQcmVzZXQoXG4gICAgICAgIGFjdG9yLFxuICAgICAgICBDT05TVEFOVFMuVklFV1BPUlRfUFJFU0VUUy5maW5kKChwcmVzZXQpID0+IHByZXNldC5uYW1lID09PSAnQ1QtQ2hlc3QtQ29udHJhc3QtRW5oYW5jZWQnKSEsXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcmVuZGVyIHZvbHVtZSBpbiB2b2x1bWUzZCB2aWV3cG9ydDonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgcmVuZGVyU2VnbWVudChpbWFnZTogSW1hZ2VJbmZvLCBzZWdtZW50OiBJbWFnZUluZm8pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXNlZ21lbnQgfHwgIWltYWdlIHx8ICF0aGlzLnZpZXdwb3J0IHx8ICF0aGlzLnZpZXdwb3J0SW5wdXQ/LnZpZXdwb3J0SWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VnbWVudGF0aW9uSWQgPSBpbWFnZUluZm9Ub1VuaXF1ZUlkKHNlZ21lbnQpO1xuXG4gICAgaWYgKCFzZWdtZW50YXRpb25JZCkge1xuICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBzZWdtZW50YXRpb24gb3IgcmVmZXJlbmNlIHZvbHVtZSBkYXRhJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnZpZXdwb3J0SW5wdXQudmlld3BvcnRJZCkge1xuICAgICAgICBzZWdtZW50YXRpb24uYWRkU2VnbWVudGF0aW9uUmVwcmVzZW50YXRpb25zKHRoaXMudmlld3BvcnRJbnB1dC52aWV3cG9ydElkLCBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VnbWVudGF0aW9uSWQsXG4gICAgICAgICAgICB0eXBlOiBjc1Rvb2xFbnVtLlNlZ21lbnRhdGlvblJlcHJlc2VudGF0aW9ucy5TdXJmYWNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcmVuZGVyIHNlZ21lbnQgaW4gb3J0aG9ncmFwaGljIHZpZXdwb3J0OicsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==