// -*- C++ -*-
#ifndef RITMATRIX2FACTORY_H
#define RITMATRIX2FACTORY_H
/* Copyright 1998 
 * Thu Jul 29 16:19:48 1999  Brian Smits  (bes@phoenix.cs.utah.edu)
 * 
 * RiTMatrix2Factory.H
 * 
 *	
 * 
 * $Id: RiTMatrix2Factory.H,v 1.1 1999/10/01 18:39:03 bes Exp $ 
 * 
 */
#ifndef RICOMMON_H
#include <RiCommon.H>
#endif

#ifndef RIAFFINETMATRIX2_H
#include <RiAffineTMatrix2.H>
#endif


/***************************************************************
CLASS
    RiTMatrix2Factory
    This stract class that represents a homegeneous transform
    matrix and its inverse.

DESCRIPTION
    Used to generate RiAffineTMatrix2 via calls to build
    matrices via Create* calls.

PATTERN
    This is a factory for generating RiAffineTMatrix2 and
    other TMatrix2 (when implemented)

****************************************************************/

class RiTMatrix2Factory {
public:
				//// Create an Identity Matrix.
    static RiAffineTMatrix2 CreateIdentity();
                                   //// Create inverse of matrix m
    static RiAffineTMatrix2 CreateInverse( const RiAffineTMatrix2 &m);
                                   //// Resulting matrix will translate
    static RiAffineTMatrix2 CreateTranslate( const RiVector2 &v);
                                   //// Resulting matrix will scale
    static RiAffineTMatrix2 CreateScale( const RiVector2 &v);
				//// Resulting matrix Rotates (clockwise) around the origin
    static RiAffineTMatrix2 CreateRotation(RiReal amountRad);
				//// Create a matrix based on 3 column vectors
    static RiAffineTMatrix2 CreateDirect(const RiVector2 &c0, const RiVector2 &c1,
					 const RiVector2 &c2); 
};


#endif /* RITMATRIX2FACTORY_H */

