/**************************************************************
 * 
 * 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_graphic_XPrimitive2D_idl__
#define __com_sun_star_graphic_XPrimitive2D_idl__

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif
#ifndef __com_sun_star_beans_PropertyValue_idl__
#include <com/sun/star/beans/PropertyValue.idl>
#endif
#ifndef __com_sun_star_geometry_RealRectangle2D_idl__
#include <com/sun/star/geometry/RealRectangle2D.idl> 
#endif 

module com {  module sun {  module star {  module graphic {

/** XPrimitive2D interface

    This is the basic interface for 2D graphic primitives. They need to be able
	- to provide a decomposition consisting of simpler graphic primitives
	- to provide a 2D bound rectangle as a 2D range
 */
interface XPrimitive2D : ::com::sun::star::uno::XInterface
{
    /** Retrieve decomposed list of simpler primitives

        @param aViewParameters
        2D View-specific parameter set. The defined but not mandatory
		parameters include:
		
		::com::sun::star::geometry::AffineMatrix2D Transformation

		A transformation matrix which maps between world coordinates (which
		is equal to object's local coordinates) to view coordinates. If not
		defined, an empty transformation is implied.

		::com::sun::star::geometry::RealRectangle2D Viewport

		Defines the visible part of the view in world coordinates. May be used
		to optimize decompositions, e.g. for 3d scenes only the visible part
		needs to be created. If not given, an empty Viewport is implied which
		means all is visible.

		double Time

		Defines the point in time for which the geometry is defined. This may
		lead to varied results for animated objects. This value is defined in the
		range [0.0 .. n[, negative values are not allowed. If not given, a value of
		0.0 is implied.
     */
    sequence< XPrimitive2D > getDecomposition( [in] sequence< ::com::sun::star::beans::PropertyValue > aViewParameters );

    /** Retrieve bound rect of primitive

        This method calculates the actual bound rect of the area in
        <em>world coordinates<em>. Note that for view-dependent primitives, 
		the necessary pixel adjustments are taken into account. For that reason
		the ViewParameters need to be given.

		@param aViewParameters
        2D View-specific parameter set, same as in getDecomposition.
     */
    ::com::sun::star::geometry::RealRectangle2D getRange( [in] sequence< ::com::sun::star::beans::PropertyValue > aViewParameters );
};

}; }; }; };

#endif
