/**
 * Defines the 3D direction vector. Direction must not be a zero vector.
 */
export interface IDirection {
    /**
     * X direction.
     */
    x: number;
    /**
     * Y direction.
     */
    y: number;
    /**
     * Z direction.
     */
    z: number;
}
/**
 * Defines the 3D point.
 */
export interface IPoint {
    /**
     * X coordinate.
     */
    x: number;
    /**
     * Y coordinate.
     */
    y: number;
    /**
     * Z coordinate.
     */
    z: number;
}
/**
 * Defines the embedded picture in the viewpoint.
 */
export interface IBitmap {
    /**
     * GUID for identifying bitmap uniquely.
     */
    guid: string;
    /**
     * Location of the center of the bitmap in world coordinates.
     */
    location: IPoint;
    /**
     * Normal vector of the bitmap.
     */
    normal: IDirection;
    /**
     * Up vector of the bitmap.
     */
    up: IDirection;
    /**
     * Height of the bitmap in the model, in meters.
     */
    height: number;
}
/**
 * Describes a viewpoint using an orthogonal camera.
 */
export interface IOrthogonalCamera {
    /**
     * Camera location.
     */
    view_point: IPoint;
    /**
     * Camera direction.
     */
    direction: IDirection;
    /**
     * Camera up vector.
     */
    up_vector: IDirection;
    /**
     * View field width to calculate aspect ratio.
     */
    field_width: number;
    /**
     * View field height to calculate aspect ratio.
     */
    field_height: number;
    /**
     * The entire vertical scaling from view to world.
     */
    view_to_world_scale: number;
}
/**
 * Describes a viewpoint using an perspective camera.
 */
export interface IPerspectiveCamera {
    /**
     * Camera location.
     */
    view_point: IPoint;
    /**
     * Camera direction.
     */
    direction: IDirection;
    /**
     * Camera up vector.
     */
    up_vector: IDirection;
    /**
     * The entire vertical field of view angle of the camera, expressed in degrees. Valid range 0 to 180
     * exclusive.
     */
    field_of_view: number;
}
/**
 * Defines the subsection of a model (clipping plane).
 */
export interface IClippingPlane {
    /**
     * Origin of the clipping plane.
     */
    location: IPoint;
    /**
     * Direction of the clipping plane. The Direction vector points in the _invisible_ direction meaning
     * the half-space that is clipped.
     */
    direction: IDirection;
}
/**
 * Defines the markup line object of the viewpoint.
 */
export interface ILine {
    /**
     * Array of line points.
     */
    points: IPoint[];
    /**
     * Line type. Can be `solid`, `dot` or `dash`.
     *
     * @default "solid"
     */
    type?: string;
    /**
     * Line width.
     */
    width?: number;
    /**
     * Line color in hexadecimal color syntax `#RGB` using its primary color components (red, green, blue)
     * written as hexadecimal numbers.
     */
    color?: string;
    /**
     * Internal markup object identifier.
     */
    id?: string;
}
/**
 * Defines the markup text object of the viewpoint.
 */
export interface IText {
    /**
     * Coordinates of the top-left point (position) of the text.
     */
    position: IPoint;
    /**
     * Text string.
     */
    text: string;
    /**
     * Text rotation angle of the object, in degress.
     */
    angle?: number;
    /**
     * Font size of the text.
     */
    font_size?: number;
    /**
     * Deprecated since `25.3`. Use {@link font_size} instead.
     *
     * @deprecated
     */
    text_size?: number;
    /**
     * Text color in hexadecimal color syntax `#RGB` using its primary color components (red, green, blue)
     * written as hexadecimal numbers.
     */
    color?: string;
    /**
     * Internal markup object identifier.
     */
    id?: string;
}
/**
 * Defines the markup arrow object of the viewpoint.
 */
export interface IArrow {
    /**
     * Coordinates of the start point of arrow.
     */
    start: IPoint;
    /**
     * Coordinates of the end point of arrow.
     */
    end: IPoint;
    /**
     * Line color in hexadecimal color syntax `#RGB` using its primary color components (red, green, blue)
     * written as hexadecimal numbers.
     */
    color?: string;
    /**
     * Internal markup object identifier.
     */
    id?: string;
}
/**
 * Defines the markup cloud object of the viewpoint.
 */
export interface ICloud {
    /**
     * Coordinates of the top-left point (position) of the cloud.
     */
    position: IPoint;
    /**
     * Coordinates of the bottom-right point of the rectangle.
     */
    position2: IPoint;
    /**
     * Screen width of the cloud. Ignored if {@link position2} is defined.
     */
    width?: number;
    /**
     * Screen height of the cloud. Ignored if {@link position2} is defined.
     */
    height?: number;
    /**
     * Line width of the cloud.
     */
    line_width?: number;
    /**
     * Line color in hexadecimal color syntax `#RGB` using its primary color components (red, green, blue)
     * written as hexadecimal numbers.
     */
    color?: string;
    /**
     * Internal markup object identifier.
     */
    id?: string;
}
/**
 * Defines the markup ellipse object of the viewpoint.
 */
export interface IEllipse {
    /**
     * Coordinates of the center point (position) of the ellipse.
     */
    position: IPoint;
    /**
     * Coordinates of point of A radius of the ellipse.
     */
    position2: IPoint;
    /**
     * Coordinates of point of B radius of the ellipse.
     */
    position3: IPoint;
    /**
     * Screen radius of the ellipse along the X and Y axes. Ignored if {@link position2} and
     * {@link position3} is defined.
     */
    radius: {
        x: number;
        y: number;
    };
    /**
     * Line width of the ellipse.
     */
    line_width?: number;
    /**
     * Line color in hexadecimal color syntax `#RGB` using its primary color components (red, green, blue)
     * written as hexadecimal numbers.
     */
    color?: string;
    /**
     * Internal markup object identifier.
     */
    id?: string;
}
/**
 * Defines the markup image object of the viewpoint.
 */
export interface IImage {
    /**
     * Coordinates of the top-left point (position) of the image.
     */
    position: IPoint;
    /**
     * Coordinates of the bottom-right point (position) of the image.
     */
    position2: IPoint;
    /**
     * Image source as base64-encoded
     * {@link https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URIs | Data URL}.
     */
    src: string;
    /**
     * Deprecated since `26.5`. Use {@link position2} instead. Width of the image.
     *
     * @deprecated
     */
    width?: number;
    /**
     * Deprecated since `26.5`. Use {@link position2} instead. Height of the image.
     *
     * @deprecated
     */
    height?: number;
    /**
     * Internal markup object identifier.
     */
    id?: string;
}
/**
 * Rectangle markup object of the Viewpoint
 */
export interface IRectangle {
    /**
     * Coordinates of the top-left point of the rectangle.
     */
    position: IPoint;
    /**
     * Coordinates of the bottom-right point of the rectangle.
     */
    position2: IPoint;
    /**
     * Deprecated since `26.5`. Use {@link position2} instead. Width of the rectangle.
     *
     * @deprecated
     */
    width?: number;
    /**
     * Deprecated since `26.5`. Use {@link position2} instead. Height of the rectangle.
     *
     * @deprecated
     */
    height?: number;
    /**
     * Line width of the rectangle.
     */
    line_width?: number;
    /**
     * Line color in hexadecimal color syntax `#RGB` using its primary color components (red, green, blue)
     * written as hexadecimal numbers.
     */
    color?: string;
    /**
     * Internal markup object identifier.
     */
    id?: string;
}
/**
 * Defines the viewpoint colored components.
 */
export interface IColoring {
    /**
     * Component original handle in the model.
     */
    handle: string;
    /**
     * Color in hexadecimal color syntax `#ARGB` using its primary color components (alpha, red, green,
     * blue) written as hexadecimal numbers.
     */
    color: string;
}
/**
 * Defines the entity in the model.
 */
export interface IEntity {
    /**
     * Component original handle in the model.
     */
    handle: string;
}
/**
 * Defines the viewpoint shapshot.
 */
export interface ISnapshot {
    /**
     * Snapshot image data as base64-encoded
     * {@link https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URIs | Data URL}.
     */
    data: string;
}
/**
 * Defines the model viewpoint with markup.
 *
 * This viewpoint is {@link https://github.com/buildingSMART/BCF-API | BCF-compatible}.
 *
 * Optional/mandatory fields clarification:
 *
 * - A viewpoint must contain a _camera definition_.
 * - _Camera definition_ is exactly one of `perspective_camera` or `orthogonal_camera`.
 */
export interface IViewpoint {
    /**
     * Embedded pictures in the viewpoint. A list of bitmaps can be used to add more information, for
     * example, text in the visualization.
     */
    bitmaps?: IBitmap[];
    /**
     * GUID for identifying viewpoint uniquely.
     */
    guid?: string;
    /**
     * Identifier of the file for which the viewpoint was created.
     */
    file_id?: string;
    /**
     * Identifier of the assembly for which the viewpoint was created.
     */
    assembly_id?: string;
    /**
     * Orthogonal view of the camera.
     */
    orthogonal_camera?: IOrthogonalCamera;
    /**
     * Perspective view of the camera.
     */
    perspective_camera?: IPerspectiveCamera;
    /**
     * Viewpoint description.
     */
    description?: string;
    /**
     * Viewpoint index (sort order).
     */
    index?: number;
    /**
     * List of markup Line objects.
     */
    lines?: ILine[];
    /**
     * List of markup Texts objects.
     */
    texts?: IText[];
    /**
     * Clipping planes for the model view.
     */
    clipping_planes?: IClippingPlane[];
    /**
     * Selected components.
     */
    selection?: IEntity[];
    /**
     * Visibility of components.
     */
    visibility?: IEntity[];
    /**
     * Colored components.
     */
    coloring?: IColoring[];
    /**
     * List of markup Arrow objects.
     */
    arrows?: IArrow[];
    /**
     * List of markup Cloud objects.
     */
    clouds?: ICloud[];
    /**
     * List of markup Ellipse objects.
     */
    ellipses?: IEllipse[];
    /**
     * List of markup Image objects.
     */
    images?: IImage[];
    /**
     * List of markup Rectangle objects.
     */
    rectangles?: IRectangle[];
    /**
     * Viewpoint custom fields object, to store custom data.
     */
    custom_fields?: any;
    /**
     * Snapshot image of the viewpoint. The longest dimension of should not exceed 1500 px, length or
     * width.
     */
    snapshot?: ISnapshot;
}
