/**************************************************************
 * 
 * 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_EllipticalArc_idl__
#define __com_sun_star_geometry_EllipticalArc_idl__

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

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

/** This structure specifies an arbitrary elliptical arc.<p>

    This structure contains all parameters necessary to specify
    arbitrary elliptical arcs. The parameters are modelled closely
    after the <a href="www.w3c.org">SVG</a> specification.<p>

    As with the parameters below, there are mostly four different
    ellipses arcs (two different ellipses, on which four different
    arcs connect start and end point) which satisfy the given set of
    constrains. Thus, there are two flags indicating which one of those
    ellipses should be taken.<p>

    @since OOo 2.0
 */
struct EllipticalArc
{
    /// Start point of the arc.
	RealPoint2D StartPosition;

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

    /// End point of the arc.
	RealPoint2D EndPosition;

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

    /// Main radius in x direction of the ellipse this arc is part of.
	double 	RadiusX;

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

    /// Main radius in y direction of the ellipse this arc is part of.
	double 	RadiusY;

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

    /** Rotation angle of the x axis of the ellipse relative to the x
        axis of the reference coordinate system.
     */
	double 	XAxisRotation;

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

    /** If <TRUE/>, and there's a choice, take the longer one of two arcs
        connecting start and end point.
     */
	boolean	IsLargeArc;

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

    /** If <TRUE/>, and there's a choice, take the arc that goes
        clock-wise from start to end point.
     */
	boolean IsClockwiseSweep;
};

}; }; }; };

#endif
