/******************************************************************************
 **	Filename:    xform2d.h
 **	Purpose:     Definitions for using 2D point transformation library
 **	Author:      Dan Johnson
 **	History:     Fri Sep 22 09:57:08 1989, DSJ, Created.
 **
 **	(c) Copyright Hewlett-Packard Company, 1988.
 ** 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.
 ******************************************************************************/
#ifndef   XFORM2D_H
#define   XFORM2D_H

/**----------------------------------------------------------------------------
          Include Files and Type Defines
----------------------------------------------------------------------------**/
#include "fpoint.h"

typedef struct
{
  FLOAT32 a, b, c, d, tx, ty;
}


MATRIX_2D, *MATRIX_2D_PTR;

/**----------------------------------------------------------------------------
          Public Function Prototypes
----------------------------------------------------------------------------**/

void InitMatrix(MATRIX_2D *M);
void CopyMatrix(MATRIX_2D *A, MATRIX_2D *B);

/* matrix scaling, translation, rotation, mirroring, etc.*/
void TranslateMatrix(MATRIX_2D *M, FLOAT32 X, FLOAT32 Y);
void ScaleMatrix(MATRIX_2D *M, FLOAT32 X, FLOAT32 Y);

void MirrorMatrixInX(MATRIX_2D *M);
void MirrorMatrixInY(MATRIX_2D *M);
void MirrorMatrixInXY(MATRIX_2D *M);

/* using a matrix to map points*/
FLOAT32 MapX(MATRIX_2D *M, FLOAT32 X, FLOAT32 Y);

FLOAT32 MapY(MATRIX_2D *M, FLOAT32 X, FLOAT32 Y);

void MapPoint(MATRIX_2D *M, const FPOINT &A, FPOINT* B);

FLOAT32 MapDx(MATRIX_2D *M, FLOAT32 DX, FLOAT32 DY);
FLOAT32 MapDy(MATRIX_2D M, FLOAT32 DX, FLOAT32 DY);

void RotateMatrix(MATRIX_2D_PTR Matrix, FLOAT32 Angle); 
#endif
