#ifndef PROPLOTDRIVER_H
#define PROPLOTDRIVER_H



#include	<ProToolkit.h>
#include	<ProObjects.h>
#include        <ProColor.h>

PRO_BEGIN_C_DECLS 

extern ProError ProPlotdriverInterfaceCreate (ProName interf_name);
/*
    Purpose: Finds an interface with <i>name</i>, or creates a new interface if 
             it does not exist yet.

    Input Arguments:
        interf_name - The name of the new interface. Cannot be NULL. The name 
                      must begin with a letter.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - interface successfully created.
        PRO_TK_BAD_INPUTS - name is NULL.
        PRO_TK_NOT_VALID - name is not valid (does not start with a letter)
        PRO_TK_OUT_OF_MEMORY - no more available slots to create a new 
                               interface.

*/

extern ProError ProPlotdriverInterfaceobjectsSet (ProName interf_name, 
                                                  ProName *object_types);
/*
    Purpose: Sets object types with which the interface can work. The interface 
             <i>interf_name</i> can work only with objects of specified types.

    Input Arguments:
        interf_name - The name of the interface. Cannot be NULL.
        object_types - ProArray of names representing object types (examples: 
                       "PRT", "ASM", "DRW"). Cannot be NULL.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - object types successfully set.
        PRO_TK_BAD_INPUTS - input arguments are not correct.
        PRO_TK_E_NOT_FOUND - interface with this name not found.

*/


typedef ProError (*ProPlotdriverLinePlot) (ProAppData data,
                                           Pro3dPnt point1, Pro3dPnt point2, int color);
/*
    Purpose: This is the generic function for plotting a line.

    Input Arguments:
        data - The application data.
        point1 - Start of the line.
        point2 - End of the line.
        color - Color index. The possible values are as follows: <ul> 
                <li>PRO_LETTER_COLOR <li>PRO_HIGHLITE_COLOR 
                <li>PRO_DRAWING_COLOR <li>PRO_BACKGROUND_COLOR 
                <li>PRO_HALF_TONE_COLOR <li>PRO_EDGE_HIGHLITE_COLOR 
                <li>PRO_DIMMED_COLOR <li>PRO_ERROR_COLOR <li>PRO_WARNING_COLOR 
                </ul>

    Output Arguments:
        none

    Return Values:
        Ignored.

*/

extern ProError ProPlotdriverLinefunctionSet (ProName interf_name,
                                              ProPlotdriverLinePlot function);
/*
    Purpose: Sets line plotting function.

    Input Arguments:
        interf_name - The name of the interface. Cannot be NULL.
        function - Line plotting function. Cannot be NULL.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - function successfully set.
        PRO_TK_BAD_INPUTS - input arguments are not correct.
        PRO_TK_E_NOT_FOUND - interface with this name not found.
        PRO_TK_GENERAL_ERROR - internal error.

*/


typedef ProError (*ProPlotdriverPolylinePlot) (ProAppData data,
                                               int n_points, Pro3dPnt *points, 
                                               int color, 
                                               ProLinestyle line_style, double line_width);
/*
    Purpose: This is the generic function for plotting a polyline.

    Input Arguments:
        data - The application data.
        n_points - number of points,
        points - Array of points.
        color - Color index. The possible values are as follows: <ul> 
                <li>PRO_LETTER_COLOR <li>PRO_HIGHLITE_COLOR 
                <li>PRO_DRAWING_COLOR <li>PRO_BACKGROUND_COLOR 
                <li>PRO_HALF_TONE_COLOR <li>PRO_EDGE_HIGHLITE_COLOR 
                <li>PRO_DIMMED_COLOR <li>PRO_ERROR_COLOR <li>PRO_WARNING_COLOR 
                </ul>
        line_style - Line style.
        line_width - Line width.

    Output Arguments:
        none

    Return Values:
        Ignored.

*/

extern ProError ProPlotdriverPolylinefunctionSet (ProName interf_name,
                                                  ProPlotdriverPolylinePlot function);
/*
    Purpose: Sets polyline plotting function.

    Input Arguments:
        interf_name - The name of the interface. Cannot be NULL.
        function - Polyline plotting function. Cannot be NULL.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - function successfully set.
        PRO_TK_BAD_INPUTS - input arguments are not correct.
        PRO_TK_E_NOT_FOUND - interface with this name not found.
        PRO_TK_GENERAL_ERROR - internal error.

*/


typedef ProError (*ProPlotdriverPolygonPlot) (ProAppData data,
                                              int n_points, Pro3dPnt *points, 
                                              int color, 
                                              ProLinestyle line_style, double line_width);
/*
    Purpose: This is the generic function for filling a polygon.

    Input Arguments:
        data - The application data.
        n_points - number of points,
        points - Array of points.
        color - Color index. The possible values are as follows: <ul> 
                <li>PRO_LETTER_COLOR <li>PRO_HIGHLITE_COLOR 
                <li>PRO_DRAWING_COLOR <li>PRO_BACKGROUND_COLOR 
                <li>PRO_HALF_TONE_COLOR <li>PRO_EDGE_HIGHLITE_COLOR 
                <li>PRO_DIMMED_COLOR <li>PRO_ERROR_COLOR <li>PRO_WARNING_COLOR 
                </ul>
        line_style - Line style.
        line_width - Line width.

    Output Arguments:
        none

    Return Values:
        Ignored.

*/

extern ProError ProPlotdriverPolygonfunctionSet (ProName interf_name,
                                                 ProPlotdriverPolygonPlot function);
/*
    Purpose: Sets polygon plotting function.

    Input Arguments:
        interf_name - The name of the interface. Cannot be NULL.
        function - Polygon plotting function. Cannot be NULL.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - function successfully set.
        PRO_TK_BAD_INPUTS - input arguments are not correct.
        PRO_TK_E_NOT_FOUND - interface with this name not found.
        PRO_TK_GENERAL_ERROR - internal error.

*/


typedef ProError (*ProPlotdriverCirclePlot) (ProAppData data,
                                             Pro3dPnt point, double radius, int color);
/*
    Purpose: This is the generic function for plotting a circle.

    Input Arguments:
        data - The application data.
        point - Center of the circle.
        radius - Radius.
        color - Color index. The possible values are as follows: <ul> 
                <li>PRO_LETTER_COLOR <li>PRO_HIGHLITE_COLOR 
                <li>PRO_DRAWING_COLOR <li>PRO_BACKGROUND_COLOR 
                <li>PRO_HALF_TONE_COLOR <li>PRO_EDGE_HIGHLITE_COLOR 
                <li>PRO_DIMMED_COLOR <li>PRO_ERROR_COLOR <li>PRO_WARNING_COLOR 
                </ul>

    Output Arguments:
        none

    Return Values:
        Ignored.

*/

extern ProError ProPlotdriverCirclefunctionSet (ProName interf_name,
                                                ProPlotdriverCirclePlot function);
/*
    Purpose: Sets line plotting function.

    Input Arguments:
        interf_name - The name of the interface. Cannot be NULL.
        function - Circle plotting function. Cannot be NULL.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - function successfully set.
        PRO_TK_BAD_INPUTS - input arguments are not correct.
        PRO_TK_E_NOT_FOUND - interface with this name not found.
        PRO_TK_GENERAL_ERROR - internal error.

*/


typedef ProError (*ProPlotdriverArcPlot) (ProAppData data,
                                          Pro3dPnt center, double radius,
                                          Pro3dPnt end1, Pro3dPnt end2,
                                          double t1, double t2,
                                          int color);
/*
    Purpose: This is the generic function for plotting a circle.

    Input Arguments:
        data - The application data.
        center - Center of the circle.
        radius - Radius.
        end1 - The starting point, defined as (X, Y, Z). The function ignores 
               the Z value.
        end2 - The ending point, defined as (X, Y, Z). The function ignores the 
               Z value.
        t1 - The start angle, in radians.
        t2 - The end angle, in radians.
        color - Color index. The possible values are as follows: <ul> 
                <li>PRO_LETTER_COLOR <li>PRO_HIGHLITE_COLOR 
                <li>PRO_DRAWING_COLOR <li>PRO_BACKGROUND_COLOR 
                <li>PRO_HALF_TONE_COLOR <li>PRO_EDGE_HIGHLITE_COLOR 
                <li>PRO_DIMMED_COLOR <li>PRO_ERROR_COLOR <li>PRO_WARNING_COLOR 
                </ul>

    Output Arguments:
        none

    Return Values:
        Ignored.

*/

extern ProError ProPlotdriverArcfunctionSet (ProName interf_name,
                                             ProPlotdriverArcPlot function);
/*
    Purpose: Sets line plotting function.

    Input Arguments:
        interf_name - The name of the interface. Cannot be NULL.
        function - Arc plotting function. Cannot be NULL.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - function successfully set.
        PRO_TK_BAD_INPUTS - input arguments are not correct.
        PRO_TK_E_NOT_FOUND - interface with this name not found.
        PRO_TK_GENERAL_ERROR - internal error.

*/


typedef ProError (*ProPlotdriverTextPlot) (ProAppData data,
                                           Pro3dPnt point, ProLine text, double size, double angle,
                                           double slant_angle, double  width_factor, 
                                           int font_id, int color);
/*
    Purpose: This is the generic function for plotting a text line.

    Input Arguments:
        data - The application data. Can be NULL.
        point - The starting point of the text, defined as (X, Y, Z). The 
                function should ignore the Z value.
        text - The text line.
        size - The character size. If this is less than or equal to 0, the 
               function may use the default character size.
        angle - The angle of the text, in degrees.
        slant_angle - The angle of the characters, in degrees.
        width_factor - The character width scale factor (character width 
                       divided by character height)
        font_id - The font identifier.
        color - Color index. The possible values are as follows: <ul> 
                <li>PRO_LETTER_COLOR <li>PRO_HIGHLITE_COLOR 
                <li>PRO_DRAWING_COLOR <li>PRO_BACKGROUND_COLOR 
                <li>PRO_HALF_TONE_COLOR <li>PRO_EDGE_HIGHLITE_COLOR 
                <li>PRO_DIMMED_COLOR <li>PRO_ERROR_COLOR <li>PRO_WARNING_COLOR 
                </ul>

    Output Arguments:
        none

    Return Values:
        Ignored.

*/

extern ProError ProPlotdriverTextfunctionSet (ProName interf_name,
                                              ProPlotdriverTextPlot function);
/*
    Purpose: Sets line plotting function.

    Input Arguments:
        interf_name - The name of the interface. Cannot be NULL.
        function - Text plotting function. Cannot be NULL.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - function successfully set.
        PRO_TK_BAD_INPUTS - input arguments are not correct.
        PRO_TK_E_NOT_FOUND - interface with this name not found.
        PRO_TK_GENERAL_ERROR - internal error.

*/


extern ProError ProPlotdriverExecute (ProName interf_name,
                                      ProAppData data);
/*
    Purpose: Executes the driver on the current object using plotting 
             functions.

    Input Arguments:
        interf_name - The name of the interface. Cannot be NULL.
        data - The application data. Can be NULL. This data is passed into 
               plotting functions of this interface.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Function successfully executed.
        PRO_TK_BAD_INPUTS - Name is NULL.
        PRO_TK_E_NOT_FOUND - Interface with this name not found.
        PRO_TK_BAD_CONTEXT - No current object found.
        PRO_TK_NOT_IMPLEMENTED - This interface does not work for this type of 
                                 object.
        PRO_TK_INVALID_TYPE - The current object has a type not supported by 
                              ProPlotdriver interfaces.
        PRO_TK_GENERAL_ERROR - Internal error.

*/

PRO_END_C_DECLS

#endif /* PROPLOTDRIVER_H */