
/*********************************************************************
 ** Copyright (c) 1992-2022 MAK Technologies, Inc.
 ** All rights reserved.
 *********************************************************************/



#ifndef __diguyViewCameraSettings_H
#define __diguyViewCameraSettings_H

#ifdef SWIG
%module diguyViewCameraSettings
#else
#define CPLUSPLUS_ONLY
#endif

#ifdef CPLUSPLUS_ONLY
class bdiCamera;
class diguyViewCameraSettings;

#include <diguy_constants.h>

#endif


#include <declspec_diguy.h>

/*********************************************************************/
/**
 *t  diguyViewCameraSettings
 **
 **    The diguyViewCameraSettings class holds camera settings
 **    data that can be loaded into a diguyViewCamera using
 **    the diguyViewCamera::load_settings() call.
 **
 **    The settings of a diguyViewCameraSettings object cannot
 **    be directly applied to a graphics environment viewpoint;
 **    the settings must be loaded into a diguyViewCamera to
 **    be applied.
 **
 **    The diguyViewCameraSettings API closely mirrors the
 **    diguyViewCamera API, with the exception of load,
 **    apply, and callback functions.
 **
 */
class BDI_DECLSPEC_diguy diguyViewCameraSettings
{

public:

/*****************************************************************************/
/**
 *2  General Functions
 **
 */

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_name().
    */
   const char* get_name();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_type_name().
    */
   const char* get_type_name();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_near_plane().
    */
   void set_near_plane(float near_plane);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_near_plane().
    */
   float get_near_plane();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_far_plane().
    */
   void set_far_plane(float far_plane);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_far_plane().
    */
   float get_far_plane();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_fov().
    */
   void set_fov(float fov);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_fov().
    */
   float get_fov();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_min_fov().
    */
   void set_min_fov(float fov);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_max_fov().
    */
   void set_max_fov(float fov);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_min_fov().
    */
   float get_min_fov();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_max_fov().
    */
   float get_max_fov();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_aspect().
    */
   void set_aspect(float aspect);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_aspect().
    */
   float get_aspect();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_position().
    */
   void set_position(float x, float y, float z);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_position_x().
    */
   float get_position_x();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_position_y().
    */
   float get_position_y();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_position_z().
    */
   float get_position_z();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_orientation().
    */
   void set_orientation(float yaw, float roll, float pitch);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_orientation_roll().
    */
   void set_orientation_roll(float r);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_orientation_yaw().
    */
   float get_orientation_yaw();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_orientation_roll().
    */
   float get_orientation_roll();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_orientation_pitch().
    */
   float get_orientation_pitch();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_pitch_lower_limit().
    */
   void set_pitch_lower_limit(float limit);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_pitch_upper_limit().
    */
   void set_pitch_upper_limit(float limit);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_pitch_lower_limit().
    */
   float get_pitch_lower_limit();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_pitch_upper_limit().
    */
   float get_pitch_upper_limit();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_pitch_has_limits().
    */
   int get_pitch_has_limits();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_distance().
    */
   void set_distance(float distance);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_distance().
    */
   float get_distance();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_fix().
    */
   void set_fix(float x, float y, float z);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_fix_x().
    */
   float get_fix_x();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_fix_y().
    */
   float get_fix_y();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_fix_z().
    */
   float get_fix_z();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_move_mode().
    */
   int set_move_mode(diguyViewCameraMoveMode move_mode);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_move_mode().
    */
   diguyViewCameraMoveMode get_move_mode();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_projection_mode().
    */
   int set_projection_mode(diguyViewCameraProjectionMode projection_mode);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_projection_mode().
    */
   diguyViewCameraProjectionMode get_projection_mode();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_speed().
    */
   int set_speed(float speed);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_speed().
    */
   float get_speed();


/*****************************************************************************/
/**
 *2  Look At and Look From Functions
 **
 */

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_track_name().
    */
   void set_track_name(const char* track_name);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_track_name().
    */
   const char* get_track_name();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_track_link_name().
    */
   void set_track_link_name(const char* track_link_name);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_track_link_name().
    */
   const char* get_track_link_name();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_track_offset().
    */
   void set_track_offset(float x, float y, float z);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_track_offset_x().
    */
   float get_track_offset_x();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_track_offset_y().
    */
   float get_track_offset_y();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_track_offset_z().
    */
   float get_track_offset_z();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_track_offset_is_in_world_coordinates().
    */
   void set_track_offset_is_in_world_coordinates(int value);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_track_offset_is_in_world_coordinates().
    */
   int get_track_offset_is_in_world_coordinates();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_dolly_name().
    */
   void set_dolly_name(const char* dolly_name);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_dolly_name().
    */
   const char* get_dolly_name();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_dolly_link_name().
    */
   void set_dolly_link_name(const char* dolly_link_name);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_dolly_link_name().
    */
   const char* get_dolly_link_name();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_dolly_offset().
    */
   void set_dolly_offset(float x, float y, float z);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_dolly_offset_x().
    */
   float get_dolly_offset_x();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_dolly_offset_y().
    */
   float get_dolly_offset_y();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_dolly_offset_z().
    */
   float get_dolly_offset_z();

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::set_dolly_offset_is_in_world_coordinates().
    */
   void set_dolly_offset_is_in_world_coordinates(int value);

   /*l
    *b  Description:
    **
    **    The diguyViewCameraSettings equivalent of
    **    diguyViewCamera::get_dolly_offset_is_in_world_coordinates().
    */
   int get_dolly_offset_is_in_world_coordinates();


/****************************************************************************/
/****************************************************************************/
/****************************************************************************/
/**
 *2  Experimental Functions
 **
 **  The following functions are experimental and may change or
 **   disappear with no warning.
 */
/****************************************************************************/
/****************************************************************************/
/****************************************************************************/

   /*l
    **    The diguyViewCameraSettings equivalent of
    **    the diguyViewCamera function with the same name.
    */
   void set_speed_fov_degrees_per_wheel_click(float fov_change);

   /*l
    **    The diguyViewCameraSettings equivalent of
    **    the diguyViewCamera function with the same name.
    */
   float get_speed_fov_degrees_per_wheel_click();

   /*l
    **    The diguyViewCameraSettings equivalent of
    **    the diguyViewCamera function with the same name.
    */
   void set_speed_meters_per_second(float speed);

   /*l
    **    The diguyViewCameraSettings equivalent of
    **    the diguyViewCamera function with the same name.
    */
   float get_speed_meters_per_second();

   /*l
    **    The diguyViewCameraSettings equivalent of
    **    the diguyViewCamera function with the same name.
    */
   void set_require_smooth_servo(diguyViewCameraServoTarget target, int require);

   /*l
    **    The diguyViewCameraSettings equivalent of
    **    the diguyViewCamera function with the same name.
    */
   int get_require_smooth_servo(diguyViewCameraServoTarget target);

   /*l
    **    The diguyViewCameraSettings equivalent of
    **    the diguyViewCamera function with the same name.
    */
   void set_track_camera_avoids_obstacles(int avoid);

   /*l
    **    The diguyViewCameraSettings equivalent of
    **    the diguyViewCamera function with the same name.
    */
   int get_track_camera_avoids_obstacles();

   /*l
    **    The diguyViewCameraSettings equivalent of
    **    the diguyViewCamera function with the same name.
    */
   void set_ignore_mouse_drags(int ignore);

   /*l
    **    The diguyViewCameraSettings equivalent of
    **    the diguyViewCamera function with the same name.
    */
   int get_ignore_mouse_drags();


/**
 *x  The functions and variables past this point are for internal use only.
 **   No external access to them is expected or necessary.
 */
#ifdef CPLUSPLUS_ONLY

   bdiCamera* get_scripted_object() {return m_camera;}

private:

   /*l
    **  A private constructor.
    */
   diguyViewCameraSettings(bdiCamera* camera);

   /*l
    **  A pointer to internal data.
    */
   bdiCamera* m_camera;

   friend class bdiCamera;

#endif

};

#endif /* __diguyViewCameraSettings_H */

