7
mirror of https://gitlab.com/kicad/code/kicad.git synced 2024-11-22 09:45:01 +00:00
kicad/thirdparty/3dxware_sdk/inc/SpaceMouse/IView.hpp
markus-bonk c99a4f4d85 Include the required third party code for the SpaceMouse implementation
The commit only adds the headers and code required by the SpaceMouse
implementation to compile and link. This extract from the 3Dconnexion
SDK is added to the third party directory to allow developers to build without
needing to acquire a cmake enabled version.
2022-01-28 12:21:42 +00:00

149 lines
5.5 KiB
C++

#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