import { ISaveSetPlanner } from '../../../interface/Planner/ISaveSetPlanner';
import { Vector3 } from '../../../model/Planner/wcVectors';
import PlannerElementData from '../../../model/Planner/PlannerElementData';
import BoundingBox from '../../../model/Planner/BoundingBox';
import { ParamPlanPlannerElementInfo, ParamsAddPlannerElement, PlannerDeletionType, ReturnParamDeletePlannerElem } from '../../../interface/FunctionTypes';
import { ReturnParamUpdatePlanner } from '../../../interface/ReturnTypes';
import { AlternativeRendering } from '../../../interface/Rendering/AlternativeRendering';
import { DockingType } from '../../../interface/Planner/DockingPointDataType';
import DockingPoint from '../../../model/Planner/DockingPoint';
import DivaCatalogData from '../../../model/Catalog/CatalogData';
import { GeneralPlanningState, PlannerInteractionInformation } from '../../../model/Planner/PlannerInteractionData';
import DivaSet from '../../Set/DivaSet';
export default class DivaBoxPlanner {
    private static readonly plannerType;
    private set;
    private plannerID;
    private constructionRulesHandler;
    private boxPlannerGrid;
    private nextElementId;
    constructor(set: DivaSet, plannerId: number);
    initPlanner(setPlanData: string): Promise<any>;
    saveSetPlanner(): ISaveSetPlanner | null;
    /**
     * Add a planner Element (CoPY?)
     * @param basketID
     * @param params
     */
    addPlannerElement(basketID: string, params: ParamsAddPlannerElement): Promise<void>;
    extendPlanner(setPlanData: string, globalBoundingBox: BoundingBox): Promise<void>;
    movePlannerElement(elementId: number, absoluteIndex: {
        x: number;
        y: number;
    }): Promise<void>;
    /**
     * Handles copyying the planner Element. it can happen that also other planner elements are influenced
     * @param articleCopyRelation Holds the relation - which element with elementID is copyed and has a new Article. ElementToCopyID -> BasketID of new Article
     * @param params
     */
    copyPlannerElement(articleCopyRelation: {
        key: number;
        value: string;
    }[], copyInfo?: ParamPlanPlannerElementInfo): Promise<void>;
    initIDM3DMeta(IDM3DCatCodex: string | undefined): void;
    /**
     * This function returns all Planner Elements that are influenced when deletingan element ID.
     * This is important when it is forced that the whole planing has to have the same height all the time.
     * @param elementId
     */
    getPlannerElementsInfluencedByDeletion(elementId: number, deletionType?: PlannerDeletionType): number[];
    /**
     * This function returns all elements that are influenced by copying them.
     * In the box Planner all elements under the Element to copy are copied as well
     * If the boxPlanner has a backside element, it returns also the elements on the opposide. Depending if current element is on the front or back.
     * @param elementId
     * @param params
     * @returns the list of plannerElements that have to be copied .
     */
    getPlannerElementsInfluencedByCopy(elementId: number, copyInfo?: ParamPlanPlannerElementInfo): number[];
    /**
     * Delete Box Planner element
     * If the box planner has an active backside, then it also deletes the opposite element
     * If forceWholePlanningSame Height is set to true, then all elements in the same row are deleted.
     * @param elementId     ElementID of the element that should be deleted.
     * @returns elementId of the next to select element
     */
    deletePlannerElement(elementId: number, autoCorrectAVL_AVR?: boolean, deletionType?: PlannerDeletionType): Promise<ReturnParamDeletePlannerElem>;
    /**
     * Get all Planner Elements used for View
     */
    getAllViewPlannerElements(): PlannerElementData[];
    getNeighborElements(elementId: number, dockingType: DockingType): number[];
    getFreeDockingPointsByElementId(elementId: number, dockingType: DockingType): {
        dockingPoints: DockingPoint[];
        filter: string[];
    };
    getDockedDockingPointsByElementId(elementId: number, dockingType: DockingType[]): DockingPoint[];
    getDockedGroups(): number[][];
    /**
     * Get Bounding Box of 2D Planning
     */
    getBoundingBox(): BoundingBox;
    /**
     * This function is called every time the transformation of a planner Element is changed in the view. For example when the user moves the 2D Shape around.
     * When it is the first action, all AVL and AVR docking Points are removed. When it is the last action "END" then the planner is updated an dockable docking points are searched.
     *
     * @param elementId
     * @param deltaMove
     * @param deltaAngleDeg
     * @param transState
     * @param autoDockingDistance    //Gibt an in welchem Radius automatisch gedockt werden muss
     */
    updatePlannerTrans(elementId: number, deltaMove: Vector3, deltaAngleDeg: number, rotCorrection: number, transState: 'START' | 'UPDATE' | 'END', autoDockingDistance: number): boolean;
    updateAllGridElementDimensions(): void;
    /**
     * This function updates the Planner. It is called after a configuration changed.
     * @returns it returns all elementIds that should be deleted
     */
    updatePlanner(changedOPT?: {
        [optCodex: string]: string;
    }, targetElements?: number[]): Promise<ReturnParamUpdatePlanner>;
    getSetData(only3DCompatible: boolean, useSetPlanner: boolean, doShow3DDimensionLines: boolean, alternateRenderInfo?: AlternativeRendering): {
        constructionSet: any;
    };
    getPlannerId(): number;
    /**
     * This function returns the position information for each element. The infomration is returned as an object with elementId: posNr.
     */
    getElementPosInfo(): any;
    destroyPlanner(): void;
    getCatalogData(): DivaCatalogData;
    getPlannerBoundingBox(): {
        width: number;
        height: number;
        depth: number;
    };
    updatePlannerBoundingBox(): void;
    /**
     * The planning is completed if at least one element is planned
     */
    getPlanningIsComplete(): boolean;
    updateSetPosNr(startSetPosNr: number): number;
    clonePlanner(set: DivaSet, plannerId: number, setData: any): DivaBoxPlanner;
    getPlannerInteractionInformation(): PlannerInteractionInformation;
    getGeneralPlanningState(selectedElementId?: number): GeneralPlanningState;
}
//# sourceMappingURL=DivaBoxPlanner.d.ts.map