'use static'
/*
* Copyright (c) 2025 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License"),
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @file
* @kit ArkUI
*/
/**
* Used to do matrix operations
*
* @namespace matrix4
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
declare namespace matrix4 {
/**
* Set translation parameters
*
* @interface TranslateOption
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
export interface TranslateOption {
/**
* Indicates the translation distance of the x-axis, in px.
*
* @type { ?double }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
x?: double;
/**
* Indicates the translation distance of the y-axis, in px.
*
* @type { ?double }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
y?: double;
/**
* Indicates the translation distance of the z-axis, in px.
*
* @type { ?double }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
z?: double;
}
/**
* Set scaling parameters
*
* @interface ScaleOption
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
export interface ScaleOption {
/**
* Zoom factor of the x-axis.
*
* @type { ?double }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
x?: double;
/**
* Zoom factor of the y-axis.
*
* @type { ?double }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
y?: double;
/**
* Zoom factor of the z-axis.
*
* @type { ?double }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
z?: double;
/**
* Transform the x-axis coordinate of the center point.
*
* @type { ?double }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
centerX?: double;
/**
* Transform the y-axis coordinate of the center point.
*
* @type { ?double }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
centerY?: double;
}
/**
* Set Rotation Parameters.
*
* @interface RotateOption
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
export interface RotateOption {
/**
* Axis of rotation vector x coordinate.
*
* @type { ?double }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
x?: double;
/**
* Axis of rotation vector y coordinate.
*
* @type { ?double }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
y?: double;
/**
* Axis of rotation vector z coordinate.
*
* @type { ?double }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
z?: double;
/**
* Transform the x-axis coordinate of the center point.
*
* @type { ?double }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
centerX?: double;
/**
* Transform the y-axis coordinate of the center point.
*
* @type { ?double }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
centerY?: double;
/**
* Rotation angle.
*
* @type { ?double }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
angle?: double;
}
/**
* Set poly to poly point.
*
* @interface Point
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
export interface Point {
/**
* Point x.
*
* @type { double }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
x: double;
/**
* Point y.
*
* @type { double }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
y: double;
}
/**
* Set poly to poly point options.
*
* @interface PolyToPolyOptions
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
export interface PolyToPolyOptions {
/**
* Array of point coordinates for the source polygon.
*
* @type { Array<Point> }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
src: Array<Point>;
/**
* Start point index of the source polygon, which defaults to 0.
* @type { ?int }
* @default 0
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
srcIndex?: int;
/**
* Array of point coordinates for the target polygon.
*
* @type { Array<Point> }
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
dst: Array<Point>;
/**
* Start index of the target polygon, which defaults to 0.
*
* @type { ?int }
* @default src.Length/2
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
dstIndex?: int;
/**
* The number of points to be used.
* If it is 0, it returns the identity matrix.
* If it is 1, it returns a translation matrix that changed before two points.
* If it is 2-4, it returns a transformation matrix.
* @type { ?int }
* @default 0
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
pointCount?: int;
}
/**
* Matrix4Transit.
*
* @interface Matrix4Transit
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
export interface Matrix4Transit {
/**
* Copy function of Matrix, which can copy a copy of the current matrix object.
*
* @returns { Matrix4Transit } Return to Matrix4Transit
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
copy(): Matrix4Transit;
/**
* The inverse function of Matrix returns an inverse matrix of the current matrix object
* That is, the effect is exactly the opposite.
*
* @returns { Matrix4Transit } Return to Matrix4Transit
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
invert(): Matrix4Transit;
/**
* Matrix superposition function
* Which can superpose the effects of two matrices to generate a new matrix object.
*
* @param { Matrix4Transit } options
* @returns { Matrix4Transit } Return to Matrix4Transit
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
combine(options: Matrix4Transit): Matrix4Transit;
/**
* Matrix translation function
* Which can add the x-axis, Y-axis, or Z-axis translation effect to the current matrix.
*
* @param { TranslateOption } options
* @returns { Matrix4Transit } Return to Matrix4Transit
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
translate(options: TranslateOption): Matrix4Transit;
/**
* Scaling function of the Matrix
* Which can add the x-axis, Y-axis, or Z-axis scaling effect to the current matrix.
*
* @param { ScaleOption } options
* @returns { Matrix4Transit } Return to Matrix4Transit
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
scale(options: ScaleOption): Matrix4Transit;
/**
* Skew function of the Matrix, which can add the x-axis, y-axis skew effect to the current matrix.
* Skew function takes a generic point with coordinates (x0, y0, z0) to the point (x0 + x*y0, y0 + y*x0, z0),
* where x, y are fixed parameters, called the shear factors.
*
* @param { double } x - the shear factor of x-axis.
* @param { double } y - the shear factor of y-axis.
* @returns { Matrix4Transit } Return to Matrix4Transit
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
skew(x: double, y: double): Matrix4Transit;
/**
* Rotation function of the Matrix.
* You can add the x-axis, Y-axis, or Z-axis rotation effect to the current matrix.
*
* @param { RotateOption } options
* @returns { Matrix4Transit } Return to Matrix4Transit
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
rotate(options: RotateOption): Matrix4Transit;
/**
* Matrix coordinate point conversion function
* Which can apply the current transformation effect to a coordinate point.
*
* @param { [double, double] } options
* @returns { [double, double] } Return to Matrix4Transit
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
transformPoint(options: [
double,
double
]): [
double,
double
];
/**
* Sets matrix to map src to dst.
*
* @param { PolyToPolyOptions } options - polyToPoly options
* @returns { Matrix4Transit } Return to Matrix4Transit
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
setPolyToPoly(options: PolyToPolyOptions): Matrix4Transit;
}
/**
* Constructor of Matrix, which can create a fourth-order matrix based on the input parameters.
* The matrix is column-first.
*
* @param { [number,number,number,number,number,number,number,number,number,number,number,number,number,number,number,number] } options
* options indicates a fourth-order matrix
* The default value:
* [1, 0, 0, 0,
* 0, 1, 0, 0,
* 0, 0, 1, 0,
* 0, 0, 0, 1]
* Fourth-order matrix notes:
* m00 { double } -The x-axis scale value, the identity matrix defaults to 1.
* m01 { double } -The second value, the rotation and skew of the xyz axis affects this value.
* m02 { double } -The third value, the rotation of the xyz axis affects this value.
* m03 { double } -The fourth value, the perspective projection affects this value.
* m10 { double } -The fifth value, the rotation and skew of the xyz axis affects this value.
* m11 { double } -The y-axis scales the value, and the identity matrix defaults to 1.
* m12 { double } -The 7th value, the rotation of the xyz axis affects this value.
* m13 { double } -The 8th value, the perspective projection affects this value.
* m20 { double } -The 9th value, the rotation of the xyz axis affects this value.
* m21 { double } -The 10th value, xyz axis rotation affects this value.
* m22 { double } -The z-axis scale value, the identity matrix defaults to 1.
* m23 { double } -The 12th value, the perspective projection affects this value.
* m30 { double } -The x-axis translation value in px, the identity matrix defaults to 0.
* m31 { double } -Y-axis translation value, in px, the identity matrix defaults to 0.
* m32 { double } -The z-axis translation value in px, the identity matrix defaults to 0.
* m33 { double } -It takes effect in homogeneous coordinates to produce a perspective projection effect.
* @returns { Matrix4Transit } Return to Matrix4Transit
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
function init(options: [
double,
double,
double,
double,
double,
double,
double,
double,
double,
double,
double,
double,
double,
double,
double,
double
]): Matrix4Transit;
/**
* Matrix initialization function, which can return an identity matrix object.
*
* @returns { Matrix4Transit } Return to Matrix4Transit
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @stagemodelonly
* @since 23 static
*/
function identity(): Matrix4Transit;
}
export default matrix4;