//////////////////////////////////////
// START of File: CE1_PCOR.HPP
//////////////////////////////////////
                                    
#ifndef CE1_PCOR_HPP
#define CE1_PCOR_HPP

//===================================================================
//
// COPYRIGHT NOTICE:  This code is protected by Copyright!
//
// Copyright (c) 1994 through 1997 by DPC Technology Corporation.
// All rights reserved by DPC Technology Corporation. 
//
// See files "cf_copyr.txt" and "cf_licen.txt" for details of 
// copyright and license specifications, and contact information.
//
//===================================================================

// Master Header File Listing:
// Usage:   #include    <cf_api/ce1_pcor.hpp>
            // "Polar Coord" Chart Engine object 
            // (derived from base "Chart-Engine").

// Specify the extent of the base-class/framework usage:
class       bf_Display;
class       cf_3DPoint;
class       cf_ChartModel;
class       cf_ChartEngine;
#include    <cf_api/c1_engin.hpp>
            // which pulls in the classes above...
    
//----------------------------------------------------------
// Class cf_eng_Polar models a Polar Coordinate Chart which
// will be used to derived Pie Charts, Radar Charts, etc.
//----------------------------------------------------------
class CF_EXPORT   cf_eng_Polar : public cf_ChartEngine
{

public:

    cf_eng_Polar(   cf_ChartType    enumChartType,
                    cf_DispMode     enumDispMode );

    virtual         ~cf_eng_Polar();

    virtual void    applyGeomXform();

    virtual void    applyProjXform();

    virtual void    config3DBoxETC();

    virtual BOOL    disp2D3DMode( cf_DispMode enumNewDispMode );
                    // 2D Mode defined invariantly to X = 90, Y = 0, Z = 0,
                    // which makes the viewer look DOWN at the BOTTOM Face.
                    // Note that the base-class get-method (i.e.
                    // cf_ChartEngine::disp2D3DMode() ) is unchanged.

    virtual void    draw2D( bf_Display *p_bf_dspFromChartView );

    virtual void    draw3D( bf_Display *p_bf_dspFromChartView );

   
protected:
    
    virtual void    applyVirtScalings();
    virtual void    applyVirtTranslations();
    virtual void    calcVirtScaleFactors(); 
    virtual void    calcVirtTransFactors(); 
                    // Polar-type charts essential no-op these methods.

    virtual void    measureVirtOrigin();
                    // Defined invariantly as the CENTER of 
                    // the BOTTOM FACE of the 3D Chart Box.

    //---------------------------------------------------------
    // Polar Coord Charts will need to display/reference 
    // a reference/projection Ellipse/Circle, which is 
    // typically defined by a projected rectangular area, 
    // on the FLOOR (XZ Plane) (or possibly the WALLs 
    // (XY or YZ Planes) ) of the cf_ChartEngine's 3D Box.  
    //
    // To determine these rectangular areas, we will project 
    // the virtual boundaries of these circles onto the 
    // current display.
    //---------------------------------------------------------
    cf_3DPoint  cf_3dpXZPlaneEllipseVirtXMax,
                cf_3dpXZPlaneEllipseVirtXMin,
                cf_3dpXZPlaneEllipseVirtZMax,
                cf_3dpXZPlaneEllipseVirtZMin;
                // These points will mark the "polar coord circle"'s
                // virtual geometry ellipse boundaries (subject
                // to rotation effects, etc)...
            
    cf_3DPoint  cf_3dpXZPlaneEllipseProjXMax,
                cf_3dpXZPlaneEllipseProjXMin,
                cf_3dpXZPlaneEllipseProjZMax,
                cf_3dpXZPlaneEllipseProjZMin;
                // These points will mark the "polar coord circle"'s
                // projected ellipse boundaries, after correction
                // for rotation effects, etc
            
    cf_3DPoint  cf_3dpXZPlaneEllipseCenter;
                // We'll also keep track of our polar coord origin.
    
};  // End of cf_eng_Polar declaration.

#endif

//////////////////////////////////////
// START of File: CE1_PCOR.HPP
//////////////////////////////////////


            
