UNPKG

openfl

Version:

A fast, productive library for 2D cross-platform development.

341 lines (286 loc) 11.9 kB
import Point from "./Point"; import Vector3D from "./Vector3D"; declare namespace openfl.geom { /** * The Matrix class represents a transformation matrix that determines how to * map points from one coordinate space to another. You can perform various * graphical transformations on a display object by setting the properties of * a Matrix object, applying that Matrix object to the `matrix` * property of a Transform object, and then applying that Transform object as * the `transform` property of the display object. These * transformation functions include translation(_x_ and _y_ * repositioning), rotation, scaling, and skewing. * * Together these types of transformations are known as _affine * transformations_. Affine transformations preserve the straightness of * lines while transforming, so that parallel lines stay parallel. * * To apply a transformation matrix to a display object, you create a * Transform object, set its `matrix` property to the * transformation matrix, and then set the `transform` property of * the display object to the Transform object. Matrix objects are also used as * parameters of some methods, such as the following: * * * * The `draw()` method of a BitmapData object * * The `beginBitmapFill()` method, * `beginGradientFill()` method, or * `lineGradientStyle()` method of a Graphics object * * * A transformation matrix object is a 3 x 3 matrix with the following * contents: * * In traditional transformation matrixes, the `u`, * `v`, and `w` properties provide extra capabilities. * The Matrix class can only operate in two-dimensional space, so it always * assumes that the property values `u` and `v` are 0.0, * and that the property value `w` is 1.0. The effective values of * the matrix are as follows: * * You can get and set the values of all six of the other properties in a * Matrix object: `a`, `b`, `c`, * `d`, `tx`, and `ty`. * * The Matrix class supports the four major types of transformations: * translation, scaling, rotation, and skewing. You can set three of these * transformations by using specialized methods, as described in the following * table: * * Each transformation alters the current matrix properties so * that you can effectively combine multiple transformations. To do this, you * call more than one transformation before applying the matrix to * its display object target(by using the `transform` property of * that display object). * * Use the `new Matrix()` constructor to create a Matrix object * before you can call the methods of the Matrix object. */ export class Matrix { /** * The value that affects the positioning of pixels along the _x_ axis * when scaling or rotating an image. */ public a:number; /** * The value that affects the positioning of pixels along the _y_ axis * when rotating or skewing an image. */ public b:number; /** * The value that affects the positioning of pixels along the _x_ axis * when rotating or skewing an image. */ public c:number; /** * The value that affects the positioning of pixels along the _y_ axis * when scaling or rotating an image. */ public d:number; /** * The distance by which to translate each point along the _x_ axis. */ public tx:number; /** * The distance by which to translate each point along the _y_ axis. */ public ty:number; /** * Creates a new Matrix object with the specified parameters. In matrix * notation, the properties are organized like this: * * If you do not provide any parameters to the `new Matrix()` * constructor, it creates an _identity matrix_ with the following * values: * * In matrix notation, the identity matrix looks like this: * * @param a The value that affects the positioning of pixels along the * _x_ axis when scaling or rotating an image. * @param b The value that affects the positioning of pixels along the * _y_ axis when rotating or skewing an image. * @param c The value that affects the positioning of pixels along the * _x_ axis when rotating or skewing an image. * @param d The value that affects the positioning of pixels along the * _y_ axis when scaling or rotating an image.. * @param tx The distance by which to translate each point along the _x_ * axis. * @param ty The distance by which to translate each point along the _y_ * axis. */ public constructor (a?:number, b?:number, c?:number, d?:number, tx?:number, ty?:number); /** * Returns a new Matrix object that is a clone of this matrix, with an exact * copy of the contained object. * * @return A Matrix object. */ //public inline clone ():Matrix; public clone ():Matrix; /** * Concatenates a matrix with the current matrix, effectively combining the * geometric effects of the two. In mathematical terms, concatenating two * matrixes is the same as combining them using matrix multiplication. * * For example, if matrix `m1` scales an object by a factor of * four, and matrix `m2` rotates an object by 1.5707963267949 * radians(`Math.PI/2`), then `m1.concat(m2)` * transforms `m1` into a matrix that scales an object by a factor * of four and rotates the object by `Math.PI/2` radians. * * This method replaces the source matrix with the concatenated matrix. If * you want to concatenate two matrixes without altering either of the two * source matrixes, first copy the source matrix by using the * `clone()` method, as shown in the Class Examples section. * * @param m The matrix to be concatenated to the source matrix. */ public concat (m:Matrix):void; public copyColumnFrom (column:number, vector3D:Vector3D):void; public copyColumnTo (column:number, vector3D:Vector3D):void; public copyFrom (sourceMatrix:Matrix):void; public copyRowFrom (row:number, vector3D:Vector3D):void; public copyRowTo (row:number, vector3D:Vector3D):void; /** * Includes parameters for scaling, rotation, and translation. When applied * to a matrix it sets the matrix's values based on those parameters. * * Using the `createBox()` method lets you obtain the same * matrix as you would if you applied the `identity()`, * `rotate()`, `scale()`, and `translate()` * methods in succession. For example, `mat1.createBox(2,2,Math.PI/4, * 100, 100)` has the same effect as the following: * * @param scaleX The factor by which to scale horizontally. * @param scaleY The factor by which scale vertically. * @param rotation The amount to rotate, in radians. * @param tx The number of pixels to translate(move) to the right * along the _x_ axis. * @param ty The number of pixels to translate(move) down along the * _y_ axis. */ public createBox (scaleX:number, scaleY:number, rotation?:number, tx?:number, ty?:number):void; /** * Creates the specific style of matrix expected by the * `beginGradientFill()` and `lineGradientStyle()` * methods of the Graphics class. Width and height are scaled to a * `scaleX`/`scaleY` pair and the * `tx`/`ty` values are offset by half the width and * height. * * For example, consider a gradient with the following * characteristics: * * * * `GradientType.LINEAR` * * Two colors, green and blue, with the ratios array set to `[0, * 255]` * * `SpreadMethod.PAD` * * `InterpolationMethod.LINEAR_RGB` * * * The following illustrations show gradients in which the matrix was * defined using the `createGradientBox()` method with different * parameter settings: * * @param width The width of the gradient box. * @param height The height of the gradient box. * @param rotation The amount to rotate, in radians. * @param tx The distance, in pixels, to translate to the right along * the _x_ axis. This value is offset by half of the * `width` parameter. * @param ty The distance, in pixels, to translate down along the * _y_ axis. This value is offset by half of the * `height` parameter. */ public createGradientBox (width:number, height:number, rotation?:number, tx?:number, ty?:number):void; /** * Given a point in the pretransform coordinate space, returns the * coordinates of that point after the transformation occurs. Unlike the * standard transformation applied using the `transformPoint()` * method, the `deltaTransformPoint()` method's transformation * does not consider the translation parameters `tx` and * `ty`. * * @param point The point for which you want to get the result of the matrix * transformation. * @return The point resulting from applying the matrix transformation. */ public deltaTransformPoint (point:Point):Point; /** * Sets each matrix property to a value that causes a null transformation. An * object transformed by applying an identity matrix will be identical to the * original. * * After calling the `identity()` method, the resulting matrix * has the following properties: `a`=1, `b`=0, * `c`=0, `d`=1, `tx`=0, * `ty`=0. * * In matrix notation, the identity matrix looks like this: * */ public identity ():void; /** * Performs the opposite transformation of the original matrix. You can apply * an inverted matrix to an object to undo the transformation performed when * applying the original matrix. * */ public invert ():Matrix; /** * Applies a rotation transformation to the Matrix object. * * The `rotate()` method alters the `a`, * `b`, `c`, and `d` properties of the * Matrix object. In matrix notation, this is the same as concatenating the * current matrix with the following: * * @param angle The rotation angle in radians. */ public rotate (theta:number):void; /** * Applies a scaling transformation to the matrix. The _x_ axis is * multiplied by `sx`, and the _y_ axis it is multiplied by * `sy`. * * The `scale()` method alters the `a` and * `d` properties of the Matrix object. In matrix notation, this * is the same as concatenating the current matrix with the following * matrix: * * @param sx A multiplier used to scale the object along the _x_ axis. * @param sy A multiplier used to scale the object along the _y_ axis. */ public scale (sx:number, sy:number):void; public setTo (a:number, b:number, c:number, d:number, tx:number, ty:number):void; /** * Returns a text value listing the properties of the Matrix object. * * @return A string containing the values of the properties of the Matrix * object: `a`, `b`, `c`, * `d`, `tx`, and `ty`. */ //public inline toString ():string; public toString ():string; /** * Returns the result of applying the geometric transformation represented by * the Matrix object to the specified point. * * @param point The point for which you want to get the result of the Matrix * transformation. * @return The point resulting from applying the Matrix transformation. */ public transformPoint (pos:Point):Point; /** * Translates the matrix along the _x_ and _y_ axes, as specified * by the `dx` and `dy` parameters. * * @param dx The amount of movement along the _x_ axis to the right, in * pixels. * @param dy The amount of movement down along the _y_ axis, in pixels. */ public translate (dx:number, dy:number):void; } } export default openfl.geom.Matrix;