prototypeVec3d.hh 5.76 KB
Newer Older
1
/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
2 3
*                                                                            *
*                              OpenFlipper                                   *
Jan Möbius's avatar
Jan Möbius committed
4
*      Copyright (C) 2001-2014 by Computer Graphics Group, RWTH Aachen       *
Jan Möbius's avatar
Jan Möbius committed
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
*                           www.openflipper.org                              *
*                                                                            *
*--------------------------------------------------------------------------- *
*  This file is part of OpenFlipper.                                         *
*                                                                            *
*  OpenFlipper is free software: you can redistribute it and/or modify       *
*  it under the terms of the GNU Lesser General Public License as            *
*  published by the Free Software Foundation, either version 3 of            *
*  the License, or (at your option) any later version with the               *
*  following exceptions:                                                     *
*                                                                            *
*  If other files instantiate templates or use macros                        *
*  or inline functions from this file, or you compile this file and          *
*  link it with other files to produce an executable, this file does         *
*  not by itself cause the resulting executable to be covered by the         *
*  GNU Lesser General Public License. This exception does not however        *
*  invalidate any other reasons why the executable file might be             *
*  covered by the GNU Lesser General Public License.                         *
*                                                                            *
*  OpenFlipper 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 Lesser General Public License for more details.                       *
*                                                                            *
*  You should have received a copy of the GNU LesserGeneral Public           *
*  License along with OpenFlipper. If not,                                   *
*  see <http://www.gnu.org/licenses/>.                                       *
*                                                                            *
33 34 35
\*===========================================================================*/

/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
36 37 38 39 40
*                                                                            *
*   $Revision$                                                       *
*   $LastChangedBy$                                                *
*   $Date$                     *
*                                                                            *
41
\*===========================================================================*/
Jan Möbius's avatar
 
Jan Möbius committed
42 43 44 45 46 47 48 49 50 51




//
// C++ Interface: prototypeVec3d
//
// Description: 
//
//
52
// Author: Jan Möbius <moebius@cs.rwth-aachen.de>, (C) 2007
Jan Möbius's avatar
 
Jan Möbius committed
53 54
//

55 56
/** \page scripting_vector_type Vector data type for scripting
 *
Jan Möbius's avatar
Jan Möbius committed
57 58
 *   The vector data type is corresponding to the Vec3d type in C++. The implementation of the
 *   scripting type is done in prototypeVec3d.
59 60 61 62 63 64
 *
 *   You can use the following functions:
 *   \code
 *      var vec = Vector(1,2,3)
 *      var vec2 = Vector(10,20,30)
 *
Jan Möbius's avatar
Jan Möbius committed
65 66 67 68 69 70 71 72 73 74 75 76 77 78
 *      vec.multiply(0.5)           // Multiply vec with 0.5
 *      vec.add(vec2)               // Add vec2 to vec
 *      vec.sub(vec2)               // Subtract vec2 from vec
 *
 *      var norm    = vec.norm()    // Calculate the length of the vector
 *      var sqrnorm = vec.sqrnorm() // Calculate the squared length of the vector
 *
 *      var sprod = vec.sprod(vec)  //Compute scalar product with the vector and itself
 *
 *      vec.normalize()             // Normalize vector
 *
 *      vec.zero()                  // Set all components of the vector to zero
 *
 *      print(vec)                  // Output vector to the console
79 80 81 82 83
 *
 *   \endcode
 *
 */

Jan Möbius's avatar
 
Jan Möbius committed
84 85 86 87 88 89 90
#ifndef PROTOTYPEVEC3D_HH 
#define PROTOTYPEVEC3D_HH 


#include <QtCore/QObject>
#include <QtScript/QtScript>
 
91 92 93 94 95 96 97
/** \class prototypeVec3d
 *
 * This class wraps the Vec3d to the scripting language
 *
 * \ref scripting_vector_type
 *
 */
Jan Möbius's avatar
 
Jan Möbius committed
98 99 100 101 102 103 104
class prototypeVec3d : public QObject , public QScriptable
{
     Q_OBJECT
 
 public:
     prototypeVec3d(QObject *parent = 0);

105
 public slots:
106 107 108 109
     /** \brief Multiplies the given vector with the scalar
      *
      * @param _scalar Scalar value that gets multiplied
      */
110 111
     void multiply(QScriptValue _scalar);

112 113 114 115
     /** \brief Adds another vector to this vector
      *
      * @param _vector Vector that should be added
      */
116 117
     void add(QScriptValue _vector);

118 119 120 121
     /** \brief Subtracts another vector from this vector
      *
      * @param _vector Vector that should be subtracted
      */
122 123
     void sub(QScriptValue _vector);

Jan Möbius's avatar
Jan Möbius committed
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
     /** \brief Resets all components of the vector to zero
      *
      */
     void zero();


     /** \brief Calculate scalar product
      *
      * @param _vector Second vector for scalar product (Can be the vector itself)
      * @return Scalar product value
      */
     QScriptValue sprod(QScriptValue _vector);

     /** \brief Calculate the Euclidean norm of the vector
      *
      * @return Norm of the vector
      */
     QScriptValue norm();

     /** \brief Calculate the squared Euclidean norm of the vector
      *
      * @return Squared norm of the vector
      */
     QScriptValue sqrnorm();


     /** \brief Normalize the vector
      */
     void normalize();

Jan Möbius's avatar
 
Jan Möbius committed
154 155 156 157 158 159 160
 public Q_SLOTS:
     QString toString() const;

};
 
      
#endif // PROTOTYPEVEC3D_HH
161