// GlobalMapperInterface_3D.h - interface for Global Mapper DLL 3D-related exports
//
// Developed by: Mike Childs
//      Started: 2/26/06

#ifndef _GLOBALMAPPERINTERFACE_3D_H_
#define _GLOBALMAPPERINTERFACE_3D_H_

/*--------------------------------------------------------------------
                            GENERAL INCLUDES
--------------------------------------------------------------------*/

#include "GlobalMapperInterface.h"

// Make sure the whole thing is packed to 8 byte structure alignment
// like the SDK expects
#pragma pack( push, 8 )

/*--------------------------------------------------------------------
                            LITERAL CONSTANTS
--------------------------------------------------------------------*/

/*--------------------------------------------------------------------
                                 TYPES
--------------------------------------------------------------------*/

#ifdef __cplusplus
extern "C" {
#endif

// Callback for when a new view is requested from the 3D view window
typedef void (_stdcall *GM_3DChangeViewCallbackFunc)
    ( 
    const GM_Rectangle_t*   aNewViewBounds,
    void*                   aUserData           // user data passed into GM_3DSetChangeViewCallback function
    );

/*--------------------------------------------------------------------
                        3D RENDERING FUNCTIONS
--------------------------------------------------------------------*/

// Closes the 3D view window if it is open
GM_DLL_EXPORTED GM_Error_t32 __stdcall GM_3DCloseViewWindow
    (
    void
    );

// Returns true if the 3D view window is open
GM_DLL_EXPORTED BOOL __stdcall GM_3DIsWindowOpen
    (
    void
    );

// Sets the function to call to when a button is pressed in the 3D view window
// to request a new view.
GM_DLL_EXPORTED void __stdcall GM_3DSetChangeViewCallback
    (
    GM_3DChangeViewCallbackFunc aCallbackFunc,
    void*                       aUserData
    );

// Sets what to display in the currently open 3D view window (opens view if needed)
GM_DLL_EXPORTED GM_Error_t32 __stdcall GM_3DSetView
    (
    GM_LayerHandle_t32*     aLayerList,     // IN: List of layers to drape on top of terrain or NULL for all
    uint32                  aLayerCount,    // IN: Number of layers in list (0 for all)
    GM_DrawFlags_t32        aDrawFlags,     // IN: Flags controlling how the draw is performed
    const GM_Rectangle_t*   aWorldBounds,   // IN: World bounds to convert from or NULL for last drawn
    const GM_PixelRect_t*   aPixelRect,     // IN: Pixel bounds to convert from or NULL for last drawn 
    uint32                  aReserved       // IN: Reserved (set to 0)
    );

// Restore structure alignment to its old value
#pragma pack( pop )

#ifdef __cplusplus
}
#endif

#endif // end of file GlobalMapperInterface_3D.h