/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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 __com_sun_star_geometry_AffineMatrix2D_idl__
#define __com_sun_star_geometry_AffineMatrix2D_idl__

module com {  module sun {  module star {  module geometry {

/** This structure defines a 2 by 3 affine matrix.<p>

    The matrix defined by this structure constitutes an affine mapping
    of a point in 2D to another point in 2D. The last line of a
    complete 3 by 3 matrix is omitted, since it is implicitely assumed
    to be [0,0,1].<p>

    An affine mapping, as performed by this matrix, can be written out
    as follows, where <code>xs</code> and <code>ys</code> are the source, and
    <code>xd</code> and <code>yd</code> the corresponding result coordinates:

    <code>
        xd = m00*xs + m01*ys + m02;
        yd = m10*xs + m11*ys + m12;
    </code><p>

    Thus, in common matrix language, with M being the
    <type>AffineMatrix2D</type> and vs=[xs,ys]^T, vd=[xd,yd]^T two 2D
    vectors, the affine transformation is written as
    vd=M*vs. Concatenation of transformations amounts to
    multiplication of matrices, i.e. a translation, given by T,
    followed by a rotation, given by R, is expressed as vd=R*(T*vs) in
    the above notation. Since matrix multiplication is associative,
    this can be shortened to vd=(R*T)*vs=M'*vs. Therefore, a set of
    consecutive transformations can be accumulated into a single
    AffineMatrix2D, by multiplying the current transformation with the
    additional transformation from the left.<p>

    Due to this transformational approach, all geometry data types are
    points in abstract integer or real coordinate spaces, without any
    physical dimensions attached to them. This physical measurement
    units are typically only added when using these data types to
    render something onto a physical output device, like a screen or a
    printer, Then, the total transformation matrix and the device
    resolution determine the actual measurement unit.<p>

    @since OpenOffice 2.0
 */
published struct AffineMatrix2D
{
    /// The top, left matrix entry.
    double m00;

    /// The top, middle matrix entry.
    double m01;

    /// The top, right matrix entry.
    double m02;

    /// The bottom, left matrix entry.
    double m10;

    /// The bottom, middle matrix entry.
    double m11;

    /// The bottom, right matrix entry.
    double m12;
};

}; }; }; };

#endif
