import type { NobjcObject } from "objc-js";
import type { _NSCopying } from "../Foundation/NSCopying.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _MDLTransformComponent } from "./MDLTransformComponent.js";
import type { simd_float4x4 } from "../structs/simd_float4x4.js";
export declare class _MDLTransform extends _NSObject {
    static alloc(): _MDLTransform;
    static new(): _MDLTransform;
    /**
     * @method init @discussion Initialize an MDLTransform's matrices with identity
     * @deprecated init
     */
    init(): _MDLTransform;
    /** @deprecated init */
    initWithIdentity(): _MDLTransform;
    initWithTransformComponent$(component: _MDLTransformComponent): _MDLTransform;
    initWithTransformComponent$resetsTransform$(component: _MDLTransformComponent, resetsTransform: boolean): _MDLTransform;
    /**
     * Initialization with a matrix assumes the matrix is an invertible, homogeneous affine transform matrix. Retrieving transform components after initialization with a non-affine matrix will yield those of the identity transform.
     */
    initWithMatrix$(matrix: simd_float4x4): _MDLTransform;
    initWithMatrix$resetsTransform$(matrix: simd_float4x4, resetsTransform: boolean): _MDLTransform;
    /** Set all transform components to identity */
    setIdentity(): void;
    translationAtTime$(time: number): NobjcObject;
    rotationAtTime$(time: number): NobjcObject;
    shearAtTime$(time: number): NobjcObject;
    scaleAtTime$(time: number): NobjcObject;
    setMatrix$forTime$(matrix: simd_float4x4, time: number): void;
    setTranslation$forTime$(translation: NobjcObject, time: number): void;
    setRotation$forTime$(rotation: NobjcObject, time: number): void;
    setShear$forTime$(shear: NobjcObject, time: number): void;
    setScale$forTime$(scale: NobjcObject, time: number): void;
    /** Construct a right handed rotation matrix at the specified time */
    rotationMatrixAtTime$(time: number): simd_float4x4;
    /**
     * If these properties are read and animation data exists the earliest value is returned. Otherwise, if there is no animation data, the value of the property is the same at all times and that value is returned. If written, timing information for said property is removed. To retain or add timing information, use the set:forTime selectors instead.
     */
    translation(): NobjcObject;
    setTranslation$(value: NobjcObject): void;
    /** Euler XYZ radians */
    rotation(): NobjcObject;
    setRotation$(value: NobjcObject): void;
    shear(): NobjcObject;
    setShear$(value: NobjcObject): void;
    scale(): NobjcObject;
    setScale$(value: NobjcObject): void;
}
export interface _MDLTransform extends _NSCopying, _MDLTransformComponent {
}
