kicad/thirdparty/3dxware_sdk/inc/SpaceMouse/IView.hpp

149 lines
5.5 KiB
C++
Raw Normal View History

#ifndef IView_HPP_INCLUDED
#define IView_HPP_INCLUDED
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (c) 2018-2021 3Dconnexion.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file IView.hpp
* @brief View callback interface.
*/
#include <navlib/navlib_types.h>
namespace TDx {
namespace SpaceMouse {
namespace Navigation3D {
/// <summary>
/// View callback interface.
/// </summary>
class IView {
public:
/// <summary>
/// Gets the camera matrix of the view.
/// </summary>
/// <param name="matrix">The camera/view <see cref="navlib::matrix_t"/>.</param>
/// <returns>0 = no error, otherwise &lt;0.</returns>
virtual long GetCameraMatrix(navlib::matrix_t &matrix) const = 0;
/// <summary>
/// Gets the camera's target point.
/// </summary>
/// <param name="target">The position of the camera target in world coordinates.</param>
/// <returns>0 = no error, otherwise &lt;0.</returns>
/// <remarks>Free cameras do not have a target.</remarks>
virtual long GetCameraTarget(navlib::point_t &target) const = 0;
/// <summary>
/// Gets the position of the pointer on the near clipping plane.
/// </summary>
/// <param name="position">The <see cref="navlib::point_t"/> in world coordinates of the
/// pointer.</param> <returns>0 = no error, otherwise &lt;0.</returns>
virtual long GetPointerPosition(navlib::point_t &position) const = 0;
/// <summary>
/// Gets the view's construction plane.
/// </summary>
/// <param name="plane">The plane equation of the construction plane.</param>
/// <returns>0 = no error, otherwise &lt;0.</returns>
virtual long GetViewConstructionPlane(navlib::plane_t &plane) const = 0;
/// <summary>
/// Gets the extents of the view.
/// </summary>
/// <param name="extents">A <see cref="navlib::box_t"/> representing the extents of the
/// view.</param>
/// <returns>0 = no error, otherwise &lt;0.</returns>
virtual long GetViewExtents(navlib::box_t &extents) const = 0;
/// <summary>
/// Gets the camera's/view's field of view.
/// </summary>
/// <param name="fov">The field of view in radians.</param>
/// <returns>0 = no error, otherwise &lt;0.</returns>
virtual long GetViewFOV(double &fov) const = 0;
/// <summary>
/// Gets the camera/view frustum.
/// </summary>
/// <param name="frustum">The camera/view <see cref="navlib::frustum_t"/>.</param>
/// <returns>0 = no error, otherwise &lt;0.</returns>
virtual long GetViewFrustum(navlib::frustum_t &frustum) const = 0;
/// <summary>
/// Get's the view's projection type
/// </summary>
/// <param name="perspective">true for a perspective view, false for an orthographic view.</param>
/// <returns>0 = no error, otherwise &lt;0.</returns>
virtual long GetIsViewPerspective(navlib::bool_t &perspective) const = 0;
/// <summary>
/// Gets a value indicating whether the view can be rotated.
/// </summary>
/// <param name="isRotatable">true if the view can be rotated, false otherwise.</param>
/// <returns>0 = no error, otherwise &lt;0.</returns>
virtual long GetIsViewRotatable(navlib::bool_t &isRotatable) const = 0;
/// <summary>
/// Sets the camera affine matrix.
/// </summary>
/// <param name="matrix">The camera/view <see cref="navlib::matrix_t"/>.</param>
/// <returns>0 = no error, otherwise &lt;0.</returns>
virtual long SetCameraMatrix(const navlib::matrix_t& matrix) = 0;
/// <summary>
/// Sets the camera's target position.
/// </summary>
/// <param name="target">The position of the camera target in world coordinates.</param>
/// <returns>0 = no error, otherwise &lt;0.</returns>
/// <remarks>Free cameras do not have a target.</remarks>
virtual long SetCameraTarget(const navlib::point_t &target) = 0;
/// <summary>
/// Sets the position of the pointer on the near clipping plane.
/// </summary>
/// <param name="position">The <see cref="navlib::point_t"/> in world coordinates of the
/// pointer.</param>
/// <returns>0 = no error, otherwise &lt;0.</returns>
virtual long SetPointerPosition(const navlib::point_t& position) = 0;
/// <summary>
/// Sets the extents of the view.
/// </summary>
/// <param name="extents">A <see cref="navlib::box_t"/> representing the extents of the
/// view.</param>
/// <returns>0 = no error, otherwise &lt;0.</returns>
virtual long SetViewExtents(const navlib::box_t& extents) = 0;
/// <summary>
/// Sets the camera's/view's field of view.
/// </summary>
/// <param name="fov">The field of view in radians.</param>
/// <returns>0 = no error, otherwise &lt;0.</returns>
virtual long SetViewFOV(double fov) = 0;
/// <summary>
/// Sets the camera/view frustum.
/// </summary>
/// <param name="frustum">The camera/view <see cref="navlib::frustum_t"/>.</param>
/// <returns>0 = no error, otherwise &lt;0.</returns>
virtual long SetViewFrustum(const navlib::frustum_t& frustum) = 0;
};
} // namespace Navigation3D
} // namespace SpaceMouse
} // namespace TDx
#endif // IView_HPP_INCLUDED