void SetMatrix(double m11, double m12, double m21, double m22, double offsetX, double offsetY, MatrixTypesMock type) { this._m11 = m11; this._m12 = m12; this._m21 = m21; this._m22 = m22; this._offsetX = offsetX; this._offsetY = offsetY; this._type = type; }
public MatrixMock(double m11, double m12, double m21, double m22, double offsetX, double offsetY) { this._m11 = m11; this._m12 = m12; this._m21 = m21; this._m22 = m22; this._offsetX = offsetX; this._offsetY = offsetY; this._type = MatrixTypesMock.TRANSFORM_IS_UNKNOWN; this._padding = 0; this.DeriveMatrixType(); }
public void Translate(double offsetX, double offsetY) { if (this._type == MatrixTypesMock.TRANSFORM_IS_IDENTITY) { this.SetMatrix(1.0, 0.0, 0.0, 1.0, offsetX, offsetY, MatrixTypesMock.TRANSFORM_IS_TRANSLATION); } else if (this._type == MatrixTypesMock.TRANSFORM_IS_UNKNOWN) { this._offsetX += offsetX; this._offsetY += offsetY; } else { this._offsetX += offsetX; this._offsetY += offsetY; this._type |= MatrixTypesMock.TRANSFORM_IS_TRANSLATION; } }
void DeriveMatrixType() { this._type = MatrixTypesMock.TRANSFORM_IS_IDENTITY; if ((this._m21 != 0.0) || (this._m12 != 0.0)) { this._type = MatrixTypesMock.TRANSFORM_IS_UNKNOWN; } else { if ((this._m11 != 1.0) || (this._m22 != 1.0)) { this._type = MatrixTypesMock.TRANSFORM_IS_SCALING; } if ((this._offsetX != 0.0) || (this._offsetY != 0.0)) { this._type |= MatrixTypesMock.TRANSFORM_IS_TRANSLATION; } if ((this._type & (MatrixTypesMock.TRANSFORM_IS_SCALING | MatrixTypesMock.TRANSFORM_IS_TRANSLATION)) == MatrixTypesMock.TRANSFORM_IS_IDENTITY) { this._type = MatrixTypesMock.TRANSFORM_IS_IDENTITY; } } }
internal static void MultiplyMatrix(ref MatrixMock matrix1, ref MatrixMock matrix2) { MatrixTypesMock mock = matrix1._type; MatrixTypesMock mock2 = matrix2._type; if (mock2 != MatrixTypesMock.TRANSFORM_IS_IDENTITY) { if (mock == MatrixTypesMock.TRANSFORM_IS_IDENTITY) { matrix1 = matrix2; } else if (mock2 == MatrixTypesMock.TRANSFORM_IS_TRANSLATION) { matrix1._offsetX += matrix2._offsetX; matrix1._offsetY += matrix2._offsetY; if (mock != MatrixTypesMock.TRANSFORM_IS_UNKNOWN) { matrix1._type |= MatrixTypesMock.TRANSFORM_IS_TRANSLATION; } } else if (mock == MatrixTypesMock.TRANSFORM_IS_TRANSLATION) { double num = matrix1._offsetX; double num2 = matrix1._offsetY; matrix1 = matrix2; matrix1._offsetX = ((num * matrix2._m11) + (num2 * matrix2._m21)) + matrix2._offsetX; matrix1._offsetY = ((num * matrix2._m12) + (num2 * matrix2._m22)) + matrix2._offsetY; if (mock2 == MatrixTypesMock.TRANSFORM_IS_UNKNOWN) { matrix1._type = MatrixTypesMock.TRANSFORM_IS_UNKNOWN; } else { matrix1._type = MatrixTypesMock.TRANSFORM_IS_SCALING | MatrixTypesMock.TRANSFORM_IS_TRANSLATION; } } else { switch (((int)(((MatrixTypesMock)(((int)mock) << 4)) | mock2))) { case 0x22: matrix1._m11 *= matrix2._m11; matrix1._m22 *= matrix2._m22; return; case 0x23: matrix1._m11 *= matrix2._m11; matrix1._m22 *= matrix2._m22; matrix1._offsetX = matrix2._offsetX; matrix1._offsetY = matrix2._offsetY; matrix1._type = MatrixTypesMock.TRANSFORM_IS_SCALING | MatrixTypesMock.TRANSFORM_IS_TRANSLATION; return; case 0x24: case 0x34: case 0x42: case 0x43: case 0x44: matrix1 = new MatrixMock((matrix1._m11 * matrix2._m11) + (matrix1._m12 * matrix2._m21), (matrix1._m11 * matrix2._m12) + (matrix1._m12 * matrix2._m22), (matrix1._m21 * matrix2._m11) + (matrix1._m22 * matrix2._m21), (matrix1._m21 * matrix2._m12) + (matrix1._m22 * matrix2._m22), ((matrix1._offsetX * matrix2._m11) + (matrix1._offsetY * matrix2._m21)) + matrix2._offsetX, ((matrix1._offsetX * matrix2._m12) + (matrix1._offsetY * matrix2._m22)) + matrix2._offsetY); return; case 50: matrix1._m11 *= matrix2._m11; matrix1._m22 *= matrix2._m22; matrix1._offsetX *= matrix2._m11; matrix1._offsetY *= matrix2._m22; return; case 0x33: matrix1._m11 *= matrix2._m11; matrix1._m22 *= matrix2._m22; matrix1._offsetX = (matrix2._m11 * matrix1._offsetX) + matrix2._offsetX; matrix1._offsetY = (matrix2._m22 * matrix1._offsetY) + matrix2._offsetY; break; default: return; } } } }
public void SetIdentity() { this._type = MatrixTypesMock.TRANSFORM_IS_IDENTITY; }