import { Scene } from "../scene/Scene";
import { MetaModel } from '../../metadata/MetaModel';
/**
 * Saves and restores a snapshot of the visual state of the {@link Entity}'s of a model within a {@link Scene}.
 */
export declare class ModelMemento {
  /**
   * Saves a snapshot of the visual state of the {@link Entity}'s that represent objects within a model.
   *
   * @param {Scene} scene The scene.
   * @param {MetaModel} metaModel Represents the model. Corresponds with an {@link Entity} that represents the model in the scene.
   * @param {Object} [mask] Masks what state gets saved. Saves all state when not supplied.
   * @param {boolean} [mask.visible] Saves {@link Entity#visible} values when ````true````.
   * @param {boolean} [mask.edges] Saves {@link Entity#edges} values when ````true````.
   * @param {boolean} [mask.xrayed] Saves {@link Entity#xrayed} values when ````true````.
   * @param {boolean} [mask.highlighted] Saves {@link Entity#highlighted} values when ````true````.
   * @param {boolean} [mask.selected] Saves {@link Entity#selected} values when ````true````.
   * @param {boolean} [mask.clippable] Saves {@link Entity#clippable} values when ````true````.
   * @param {boolean} [mask.pickable] Saves {@link Entity#pickable} values when ````true````.
   * @param {boolean} [mask.colorize] Saves {@link Entity#colorize} values when ````true````.
   * @param {boolean} [mask.opacity] Saves {@link Entity#opacity} values when ````true````.
   */
  saveObjects(scene: Scene, metaModel: MetaModel, mask?: {
      visible?: boolean;
      edges?: boolean;
      xrayed?: boolean;
      highlighted?: boolean;
      selected?: boolean;
      clippable?: boolean;
      pickable?: boolean;
      colorize?: boolean;
      opacity?: boolean;
  }): void;

  /**
   * Restores a {@link Scene}'s {@link Entity}'s to their state previously captured with {@link ModelMemento#saveObjects}.
   *
   * Assumes that the model has not been destroyed or modified since saving.
   *
   * @param {Scene} scene The scene that was given to {@link ModelMemento#saveObjects}.
   * @param {MetaModel} metaModel The metamodel that was given to {@link ModelMemento#saveObjects}.
   */
  restoreObjects(scene: Scene, metaModel: MetaModel): void;
}
