/**************************************************************
 * 
 * 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_XMapping2D_idl__
#define __com_sun_star_geometry_XMapping2D_idl__

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif
#ifndef __com_sun_star_geometry_RealPoint2D_idl__
#include <com/sun/star/geometry/RealPoint2D.idl>
#endif

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

/** Interface defining an arbitrary bijective mapping from R^2 to R^2.<p>

    This interface provides methods to define an arbitrary bijective
    mapping from R^2 to R^2, i.e. from the two-dimensional space of
    real numbers onto itself, as is representable by the
    <type>double</type> floating point type. The mapping must be
    bijective, i.e. map a pair of real numbers to exactly one other
    pair of real numbers an vice versa, to facilitate a working
    inverse. Bijectiveness also implies completeness, i.e. for every
    pair of real numbers there must be another pair that is mapped
    upon them.<p>

    @since OOo 2.0
 */
published interface XMapping2D : ::com::sun::star::uno::XInterface
{
    /** Forward 2D mapping function
     */
    RealPoint2D     map( [in] RealPoint2D aPoint );

    //-------------------------------------------------------------------------

    /** Inverse 2D mapping function.<p>

        The following invariant must hold:
        <code>map(mapInverse(p))=p</code>. This effectively rules out
        non-bijective mappings.<p>
     */
    RealPoint2D     mapInverse( [in] RealPoint2D aPoint );
};

}; }; }; };

#endif
