/**
 * @description
 * @author jiannan.jiao
 */
import type { Types as coreTypes } from '@cornerstonejs/core';
import type { PointLower } from '@doodle3d/clipper-js';
import type { ContourData, Segmentation, DisplayComponentID, MedicalComponentID } from '../types';
import type { VolumeId } from '.';
export declare function getSegmentationIdsFromContourDataMap(): IterableIterator<string>;
/**
 * @description 异步获取勾画轮廓数据-在切换segmentation时，可能需要最小化的体积存在前一步勾画
 *              此时需要通过异步等待轮廓数据生成后才能进行体积最小化的处理
 * @author jiannan.jiao
 * @date 13/03/2024
 * @export
 * @param {VolumeId} segmentationId
 * @returns {*}
 */
export declare function getContourData(segmentationId: VolumeId): Promise<ContourData | undefined>;
export declare function setContourData(segmentationId: VolumeId, data: ContourData): void;
export declare function deleteContourData(segmentationId: VolumeId): boolean;
export declare function clearContourData(): void;
/**
 * @description 计算segmentation体积的BoundsIJK并存入contourBounds
 * @author jiannan.jiao
 * @date 08/11/2023
 * @param {VolumeId} segmentationId
 * @param {number} segmentIndex
 */
declare function caleContourData(segmentationId: VolumeId, segmentIndex: number): void;
/**
 * @description 对caleContourData的执行进行节流，防止手动勾画工具中的频繁点击
 * @author jiannan.jiao
 * @date 13/03/2024
 */
export declare const caleContourDataDebounced: import("lodash").DebouncedFunc<typeof caleContourData>;
/**
 * @description
 * @author jiannan.jiao
 * @date 08/11/2023
 * @export
 * @param {DisplayComponentID } toolGroupId
 * @param {string} segmentationId
 * @returns {*}
 */
export declare function getRepresentationUID(toolGroupId: DisplayComponentID, segmentationId: string): string | undefined;
/**
 * @description
 * @author jiannan.jiao
 * @date 08/11/2023
 * @export
 * @param {DisplayComponentID } toolGroupId
 * @returns {*}
 */
export declare function getRepresentationUIDMap(toolGroupId: DisplayComponentID): Map<string, string>;
/**
 * @description
 * @author jiannan.jiao
 * @date 08/11/2023
 * @param {DisplayComponentID } toolGroupId
 * @returns {*}
 */
export declare function createRepresentationUIDMap(toolGroupId: DisplayComponentID): Map<string, string>;
/**
 * ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
 * ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
 * ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
 */
/**
 * @description 设置toolGroup中的分割体积颜色
 * @author jiannan.jiao
 * @date 08/11/2023
 * @export
 * @param {(MedicalComponentID | DisplayComponentID )} componentId
 * @param {string} segmentationId
 * @param {number} segmentIndex
 * @param {coreTypes.Color} color
 * @returns {*}
 */
export declare function setRepresentationColor(componentId: MedicalComponentID | DisplayComponentID, segmentationId: string, segmentIndex: number, color: coreTypes.Color): void;
/**
 * @description
 * @author jiannan.jiao
 * @date 09/11/2023
 * @export
 * @param {DisplayComponentID } toolGroupId
 * @param {string} segmentationId
 * @param {number} segmentIndex
 * @returns {*}
 */
export declare function getRepresentationColor(toolGroupId: DisplayComponentID, segmentationId: string, segmentIndex: number): coreTypes.Color | undefined;
/**
 * ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
 * ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
 * ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
 */
/**
 * @description 依赖序列体积创建分割体积，分割体积将比依赖序列在XYZ方向上大一圈
 * @author jiannan.jiao
 * @date 06/11/2023
 * @export
 * @param {(Pick<Segmentation, 'seriesId' | 'volumeId'>)} segment
 * @returns {*}
 */
export declare function createSegmentation(segment: Pick<Segmentation, 'seriesId' | 'volumeId'>): {
    segmentationId: string;
    volumeLoaderAsync: Promise<void>;
};
/**
 * @description 删除cache、segmentation中的体积
 * @author dong.wu
 * @date 22/09/2023
 * @export
 * @param {(MedicalComponentID | DisplayComponentID )} componentId
 * @param {string[]} segmentationIds
 */
export declare function deleteSegmentation(componentId: MedicalComponentID | DisplayComponentID, segmentationIds: string[], _deleteContourData?: boolean): void;
/**
 * @description 根据传入的勾画轮廓数据创建segmentation, 创建体积的方向当前仅考虑轴状位的情况
 * @date 17/11/2023
 * @export
 * @param {(Pick<Segmentation, 'segmentIndex' | 'seriesId' | 'volumeId'>)} segment
 * @param {({ contours: { [zPosition: string]: PointLower[][] } } & Pick<
 *     ContourData,
 *     'bounds' | 'volumeValue'
 *   >)} contoursData
 * @param {boolean} [minimize=true]
 * @returns {*}
 */
export declare function createSegmentationByContoursData(segment: Pick<Segmentation, 'segmentIndex' | 'seriesId' | 'volumeId'>, contoursData: {
    contours: {
        [zPosition: string]: PointLower[][];
    };
    volumeValue?: number;
} & Pick<ContourData, 'bounds'>, minimize?: boolean): {
    segmentationId: string;
    volumeLoaderAsync: Promise<void>;
    volumeFillAsync: Promise<{
        segmentationId: string;
        volumeValue: number;
    }>;
};
/**
 * @description 根据传入的勾画轮廓数据更新segmentation, 勾画轮廓数据应当为轴状位上的勾画，
 *              且不能超过已存在体积的bounds, 超出bounds的情况下需要createSegmentationByContoursData重新创建体积
 * @author jiannan.jiao
 * @date 27/11/2023
 * @export
 * @param {({ segmentationId: string } & Pick<Segmentation, 'segmentIndex'>)} segment
 * @param {({ contours: { [zPosition: string]: PointLower[][] } } & Pick<ContourData, 'bounds'>)} contoursData
 * @returns {*}
 */
export declare function updateSegmentationByContoursData(segment: {
    segmentationId: string;
} & Pick<Segmentation, 'segmentIndex'>, contoursData: {
    contours: {
        [zPosition: string]: PointLower[][];
    };
} & Pick<ContourData, 'bounds'>): number | undefined;
/**
 * @description 重置segmentation, 并清空记录的勾画数据
 * @author jiannan.jiao
 * @date 27/11/2023
 * @export
 * @param {string} segmentationId
 */
export declare function resetSegmentation(segmentationId: string): Promise<void>;
/**
 * @description 清除轴状位方向上指定层上的勾画轮廓, 需要传入segmentIndex计算contoursData
 * @author jiannan.jiao
 * @date 27/11/2023
 * @export
 * @param {({ segmentationId: string } & Pick<Segmentation, 'segmentIndex'>)} segment
 * @param {number} worldZ
 */
export declare function removeContoursOnSlice(segment: {
    segmentationId: string;
} & Pick<Segmentation, 'segmentIndex'>, worldZ: number): Promise<void>;
/**
 * ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
 * ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
 * ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
 */
/**
 * @description 向toolGroup中异步添加分割体积representation，如果返回Map对象表示添加成功
 * @author jiannan.jiao
 * @date 08/11/2023
 * @export
 * @param {(MedicalComponentID | DisplayComponentID )} componentId
 * @param {string[]} segmentationIds
 * @param {boolean} [active] 可选值，设置新添加的representation的active状态
 * @returns {*}
 */
export declare function addRepresentationsAsync(componentId: MedicalComponentID | DisplayComponentID, segmentations: {
    segmentationId: string;
    segmentIndex: number;
}[], active?: boolean): Promise<Map<`${string}|primary` | `${string}|secondary`, Map<string, string>> | undefined>;
/**
 * @description 删除工具组中的segmentationRepresentations
 * @author dong.wu
 * @date 22/09/2023
 * @export
 * @param {(MedicalComponentID | DisplayComponentID )} componentId
 * @param {string[]} segmentationIds
 */
export declare function deleteRepresentations(componentId: MedicalComponentID | DisplayComponentID, segmentationIds: string[]): void;
/**
 * @description
 * @author jiannan.jiao
 * @date 15/11/2023
 * @export
 * @param {(MedicalComponentID | DisplayComponentID )} componentId
 * @param {string} segmentationId
 * @returns {*}
 */
export declare function setActiveSegmentationId(componentId: MedicalComponentID | DisplayComponentID, data: {
    segmentationId: string;
    segmentIndex: number;
}): Map<string, {
    segmentationId: string;
    segmentIndex: number;
}>;
/**
 * @description 获取当前处于Active状态的SegmentationId
 * @author jiannan.jiao
 * @date 09/11/2023
 * @export
 * @param {(MedicalComponentID | DisplayComponentID )} componentId
 * @returns {*}
 */
export declare function getActiveSegmentationId(componentId: MedicalComponentID | DisplayComponentID): {
    segmentationId: string;
    segmentIndex: number;
} | undefined;
/**
 * @description 设置当前选中的勾画体积，不传入segment时不选中任何勾画体积
 * @author jiannan.jiao
 * @date 08/11/2023
 * @export
 * @param {(MedicalComponentID | DisplayComponentID )} componentId
 * @param {Segmentation} [segment]
 * @param {boolean} [needMaximize=true]
 */
export declare function setActiveSegmentation(componentId: MedicalComponentID | DisplayComponentID, segment?: Segmentation, options?: {
    activeMaximize: boolean;
    inactiveMinimize: boolean;
}): Promise<Segmentation | undefined>;
/**
 * @description 设置工具组中所有segmentations的active状态为false
 * @author jiannan.jiao
 * @date 15/11/2023
 * @export
 * @param {(MedicalComponentID | DisplayComponentID )} componentId
 */
export declare function allSegmentationsInactive(componentId: MedicalComponentID | DisplayComponentID): void;
/**
 * @description 设置Segmentations的显隐状态
 * @author jiannan.jiao
 * @date 09/11/2023
 * @export
 * @param {(MedicalComponentID | DisplayComponentID )} componentId
 * @param {Segmentation} segments
 * @param {boolean} [visibility=true]
 */
export declare function setSegmentationsVisibility(componentId: MedicalComponentID | DisplayComponentID, segments: Array<{
    segmentationId: string;
} & Pick<Segmentation, 'segmentIndex'>>, visibility?: boolean): void;
/**
 * @description
 * @author jiannan.jiao
 * @date 30/04/2024
 * @export
 * @param {(MedicalComponentID | DisplayComponentID)} componentId
 * @param {string} segmentationId
 * @returns {*}
 */
export declare function getSegmentationVisibility(componentId: MedicalComponentID | DisplayComponentID, segmentationId: string): boolean | undefined;
/**
 * ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
 * ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
 * ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
 */
/**
 * @description 设置segmentation的全局默认样式
 * @author dong.wu
 * @date 24/11/2023
 * @export
 * @param {Object} [LabelMap]
 */
export declare function setSegmentationGlobalConfig(LabelMap?: Object): void;
export {};
