import { Material, ITextureMapping } from "./Material";
import { AttachPointType } from "./AttachPoint";
/**
 * A basic vector.
 */
export interface Vector3 {
    X: number;
    Y: number;
    Z: number;
}
export declare const createVector3: () => Vector3;
/**
 * Transform properties.
 */
export interface Transform {
    /** Position offset to parent. */
    Position?: Vector3;
    /** Rotation offset to parent, in degrees. Only one axis not zero. */
    Rotation?: Vector3 | (Vector3 & {
        W: number;
    });
    /** Scaling. */
    Scale?: Vector3;
}
export declare const createTransform: () => Required<Transform>;
/**
 * Parameter type for Evaluators and Interactors
 */
export interface IParameters {
    [key: string]: any;
}
/**
 * An IGXC Script entry
 */
export interface IGXC_Script {
    Name: string;
    Mode: "Interactor" | "Context";
    Version: string;
    RunTime: boolean;
}
export declare type Selectable = "None" | "Parent" | "Self";
/**
 * An IGXC Object. Describing a node in the "scenegraph" of this article
 */
export interface IGXC_Object {
    /** Relative path. */
    Path: string;
    /** Selectability: None, Parent or Self. */
    Selectable: Selectable;
    /** Optional order number. */
    OrderNumber?: string;
    /** Optional geometry reference. */
    Geometry?: string;
    /** Optional geometry parameters for specific geometries like IGX.Solid. */
    GeometryParameters?: {
        [id: string]: any;
    };
    /** Optional relative/absolute link to a JSON referencing an IGXC scene. */
    Product?: string;
    /** Optional layer reference. */
    Layer?: string;
    /** Optional material category. */
    MaterialCategory?: string;
    /** Optional material reference. If not set, the material is specified by MaterialCategory. */
    Material?: string;
    /** Optional relative transform. */
    Transform?: Transform;
    /** Optional texture transform for ambient occlusion mapping, based on the UV2 set. */
    AOTransform?: number[];
    /** Optional texture transform for light mapping, based on the UV2 set. */
    LightTransform?: number[];
    /** Optional, fully qualified interactor type. */
    Interactor?: string;
    /** Optional interactor parameters. */
    InteractorParameters?: IParameters;
    /** Optional, fully qualified evaluator type. */
    Evaluator?: string;
    /** Optional evaluator parameters. */
    EvaluatorParameters?: IParameters;
    /** Optional further data as dictionary, serializable, but not further specified */
    CustomProperties?: any;
    /** Optional attachpoint data */
    Points?: AttachPoint[];
    /** Optional categories like those added by multiarticles, shall be added to userdata */
    Categories?: string | string[];
    /** Optional value to apply deformation while loading */
    Deformation?: number;
    /** Optional description of changes to uv1 set after loading, usefull with scaling */
    Mapping?: ITextureMapping;
}
export declare const OBJECT_ROOT_PATH = ".";
export declare const createObject: (path: string) => IGXC_Object;
/**
 * An IGXC Attachment Point
 */
export interface AttachPoint {
    Key: string;
    Foreign: string;
    Type: AttachPointType;
    Enabled: boolean;
    Point: {
        X: number;
        Y: number;
        Z: number;
    };
    /** rotation angles (euler rotation with order XYZ, given in degrees) */
    Rotation: {
        X: number;
        Y: number;
        Z: number;
    };
    Representation: string;
    ComponentId?: string;
}
export interface IAmbientOcclusionMapEntry {
    Url: string;
    Transform: number[];
}
export declare type SceneUpdateKind = "Material" | "AOTransform";
/**
 * An IGXC Scene.
 */
export interface Scene {
    Updates?: SceneUpdateKind[];
    /** The creator of the scene. */
    Creator?: string;
    /** The format of the IGXC file. */
    Format: string;
    /** The geometry format. */
    Geometry: string;
    /** The commercial instance id, the scene should be assigned to. */
    CommercialId?: string;
    /** The urls of IG.GFX run-time packages to be required. */
    Packages: string[] | {
        [scope: string]: string;
    };
    /** The object tree, represented by a linear list. */
    Objects: IGXC_Object[];
    /** The geometry-bound ambient occlusion maps, node paths mapped to urls. */
    ObjectAmbientOcclusionMaps?: {
        [id: string]: string;
    };
    /** The Hashes for some or all urls referenced in this igxc */
    Hashes?: {
        [url: string]: string;
    };
    /** The geometry resources, mapped to urls. */
    Geometries: {
        [id: string]: string;
    };
    /** The geometry-bound normal maps, mapped to urls. */
    GeometryNormalMaps: {
        [id: string]: string;
    };
    /** The geometry-bound free form deformation, mapped to urls. */
    GeometryDeformations: {
        [id: string]: string;
    };
    /** The geometry resources, mapped to urls for previews. */
    GeometryPreviews: {
        [id: string]: string;
    };
    /** The material categories used in the scene, and their values. */
    Categories: {
        [id: string]: string;
    };
    /** Material assignments to be applied after the scene has been loaded. */
    MaterialAssignments: {
        [category: string]: string;
    };
    /** The material definitions. */
    Materials: {
        [id: string]: Material;
    };
    /** Optional relative or absolute base path, to be used for relative package, geometry and texture urls.
     * If BasePath is relative, the string will be added to the path of the igxc file itself.
     * If BasePath is absolute, it will be used instead of the path of the igxc file itself.
     */
    BasePath?: string;
    /** Additional scripts to be loaded */
    Scripts: IGXC_Script[];
}
export declare const createScene: () => Scene;
export declare const determineSceneUpdates: (scene: Scene) => SceneUpdateKind[] | undefined;
