Public Attributes | List of all members
qglviewer::Vec Class Reference

The Vec class represents 3D positions and 3D vectors. More...

#include <QGLViewer/vec.h>

Public Attributes

union {
   struct {
      double   x
 
      double   y
 
      double   z
 
   } 
 
   double   v_ [3]
 
}; 
 

Setting the value

 Vec ()
 
 Vec (double X, double Y, double Z)
 
template<class C >
 Vec (const C &c)
 
Vecoperator= (const Vec &v)
 
void setValue (double X, double Y, double Z)
 

Accessing the value

double operator[] (int i) const
 
double & operator[] (int i)
 
const double * address () const
 
 operator const double * () const
 
 operator double * ()
 
 operator const float * () const
 

Algebraic computations

Vecoperator+= (const Vec &a)
 
Vecoperator-= (const Vec &a)
 
Vecoperator*= (double k)
 
Vecoperator/= (double k)
 
Vec orthogonalVec () const
 
Vec operator+ (const Vec &a, const Vec &b)
 
Vec operator- (const Vec &a, const Vec &b)
 
Vec operator- (const Vec &a)
 
Vec operator* (const Vec &a, double k)
 
Vec operator* (double k, const Vec &a)
 
Vec operator/ (const Vec &a, double k)
 
bool operator!= (const Vec &a, const Vec &b)
 
bool operator== (const Vec &a, const Vec &b)
 
double operator* (const Vec &a, const Vec &b)
 
Vec operator^ (const Vec &a, const Vec &b)
 
Vec cross (const Vec &a, const Vec &b)
 

Norm of the vector

double sqNorm () const
 
double squaredNorm () const
 
double norm () const
 
double normalize ()
 
Vec unit () const
 

Projection

void projectOnAxis (const Vec &direction)
 
void projectOnPlane (const Vec &normal)
 

XML representation

 Vec (const QDomElement &element)
 
QDomElement domElement (const QString &name, QDomDocument &document) const
 
void initFromDOMElement (const QDomElement &element)
 

Detailed Description

The Vec class represents 3D positions and 3D vectors.

Vec is used as a parameter and return type by many methods of the library. It provides classical algebraic computational methods and is compatible with OpenGL:

// Draws a point located at 3.0 OpenGL units in front of the camera
Vec pos = camera()->position() + 3.0 * camera()->viewDirection();
glBegin(GL_POINTS);
glVertex3fv(pos);
glEnd();

This makes of Vec a good candidate for representing positions and vectors in your programs. Since it is part of the qglviewer namespace, specify qglviewer::Vec or use the qglviewer namespace:

using namespace qglviewer;

Interface with other vector classes

Vec implements a universal explicit converter, based on the [] operator. Everywhere a const Vec& argument is expected, you can use your own vector type instead, as long as it implements this operator (see the Vec(const C& c) documentation).

See also the Quaternion and the Frame documentations.

Definition at line 69 of file vec.h.

Constructor & Destructor Documentation

qglviewer::Vec::Vec ( )
inline

Default constructor. Value is set to (0,0,0).

Definition at line 93 of file vec.h.

qglviewer::Vec::Vec ( double  X,
double  Y,
double  Z 
)
inline

Standard constructor with the x, y and z values.

Definition at line 96 of file vec.h.

template<class C >
qglviewer::Vec::Vec ( const C &  c)
inlineexplicit

Universal explicit converter from any class to Vec. You can use your own vector class everywhere a const Vec& parameter is required, as long as it implements the operator[ ]:

class MyVec
{
// ...
double operator[](int i) const { returns x, y or z when i=0, 1 or 2; }
}
MyVec v(...);
camera()->setPosition(v);

Note that standard vector types (STL, double[3], ...) implement this operator and can hence be used in place of Vec. See also operator const double*() .

Definition at line 115 of file vec.h.

Vec::Vec ( const QDomElement &  element)
explicit

Constructs a Vec from a QDomElement representing an XML code of the form

< anyTagName x=".." y=".." z=".." />

If one of these attributes is missing or is not a number, a warning is displayed and the associated value is set to 0.0.

See also domElement() and initFromDOMElement().

Definition at line 78 of file vec.cpp.

Member Function Documentation

const double* qglviewer::Vec::address ( ) const
inline

This method is deprecated since version 2.0. Use operator const double* instead.

Definition at line 164 of file vec.h.

QDomElement Vec::domElement ( const QString &  name,
QDomDocument &  document 
) const

Returns an XML QDomElement that represents the Vec.

name is the name of the QDomElement tag. doc is the QDomDocument factory used to create QDomElement.

When output to a file, the resulting QDomElement will look like:

<name x=".." y=".." z=".." />

Use initFromDOMElement() to restore the Vec state from the resulting QDomElement. See also the Vec(const QDomElement&) constructor.

Here is complete example that creates a QDomDocument and saves it into a file:

Vec sunPos;
QDomDocument document("myDocument");
QDomElement sunElement = document.createElement("Sun");
document.appendChild(sunElement);
sunElement.setAttribute("brightness", sunBrightness());
sunElement.appendChild(sunPos.domElement("sunPosition", document));
// Other additions to the document hierarchy...
// Save doc document
QFile f("myFile.xml");
if (f.open(IO_WriteOnly))
{
QTextStream out(&f);
document.save(out, 2);
f.close();
}

See also Quaternion::domElement(), Frame::domElement(), Camera::domElement()...

Definition at line 128 of file vec.cpp.

void Vec::initFromDOMElement ( const QDomElement &  element)

Restores the Vec state from a QDomElement created by domElement().

The QDomElement should contain x, y and z attributes. If one of these attributes is missing or is not a number, a warning is displayed and the associated value is set to 0.0.

To restore the Vec state from an xml file, use:

// Load DOM from file
QDomDocument doc;
QFile f("myFile.xml");
if (f.open(IO_ReadOnly))
{
doc.setContent(&f);
f.close();
}
// Parse the DOM tree and initialize
QDomElement main=doc.documentElement();
myVec.initFromDOMElement(main);

See also the Vec(const QDomElement&) constructor.

Definition at line 158 of file vec.cpp.

double qglviewer::Vec::norm ( ) const
inline

Returns the norm of the vector.

Definition at line 339 of file vec.h.

double qglviewer::Vec::normalize ( )
inline

Normalizes the Vec and returns its original norm.

Normalizing a null vector will result in NaN values.

Definition at line 344 of file vec.h.

qglviewer::Vec::operator const double * ( ) const
inline

Conversion operator returning the memory address of the vector.

Very convenient to pass a Vec pointer as a parameter to OpenGL functions:

Vec pos, normal;
glNormal3dv(normal);
glVertex3dv(pos);

Definition at line 175 of file vec.h.

qglviewer::Vec::operator const float * ( ) const
inline

Conversion operator returning the memory address of the vector.

Very convenient to pass a Vec pointer as a parameter to OpenGL functions:

Vec pos, normal;
glNormal3fv(normal);
glVertex3fv(pos);
Note
The returned float array is a static shared by all Vec instances.

Definition at line 203 of file vec.h.

qglviewer::Vec::operator double * ( )
inline

Non const conversion operator returning the memory address of the vector.

Useful to pass a Vec to a method that requires and fills a double*, as provided by certain libraries.

Definition at line 186 of file vec.h.

Vec& qglviewer::Vec::operator*= ( double  k)
inline

Multiply the vector by a scalar k.

Definition at line 285 of file vec.h.

Vec& qglviewer::Vec::operator+= ( const Vec a)
inline

Adds a to the vector.

Definition at line 271 of file vec.h.

Vec& qglviewer::Vec::operator-= ( const Vec a)
inline

Subtracts a to the vector.

Definition at line 278 of file vec.h.

Vec& qglviewer::Vec::operator/= ( double  k)
inline

Divides the vector by a scalar k.

An absolute k value lower than 1E-10 will print a warning if the library was compiled with the "debug" Qt CONFIG flag. Otherwise, no test is performed for efficiency reasons.

Definition at line 295 of file vec.h.

Vec& qglviewer::Vec::operator= ( const Vec v)
inline

Equal operator.

Definition at line 122 of file vec.h.

double qglviewer::Vec::operator[] ( int  i) const
inline

Bracket operator, with a constant return value. i must range in [0..2].

Definition at line 145 of file vec.h.

double& qglviewer::Vec::operator[] ( int  i)
inline

Bracket operator returning an l-value. i must range in [0..2].

Definition at line 154 of file vec.h.

Vec Vec::orthogonalVec ( ) const

Returns a Vec orthogonal to the Vec. Its norm() depends on the Vec, but is zero only for a null Vec. Note that the function that associates an orthogonalVec() to a Vec is not continous.

Definition at line 59 of file vec.cpp.

void Vec::projectOnAxis ( const Vec direction)

Projects the Vec on the axis of direction direction that passes through the origin.

direction does not need to be normalized (but must be non null).

Definition at line 34 of file vec.cpp.

void Vec::projectOnPlane ( const Vec normal)

Projects the Vec on the plane whose normal is normal that passes through the origin.

normal does not need to be normalized (but must be non null).

Definition at line 47 of file vec.cpp.

void qglviewer::Vec::setValue ( double  X,
double  Y,
double  Z 
)
inline

Set the current value. May be faster than using operator=() with a temporary Vec(x,y,z).

Definition at line 129 of file vec.h.

double qglviewer::Vec::sqNorm ( ) const
inline

This method is deprecated since version 2.0. Use squaredNorm() instead.

Definition at line 332 of file vec.h.

double qglviewer::Vec::squaredNorm ( ) const
inline

Returns the squared norm of the Vec.

Definition at line 336 of file vec.h.

Vec qglviewer::Vec::unit ( ) const
inline

Returns a unitary (normalized) representation of the vector. The original Vec is not modified.

Definition at line 356 of file vec.h.

Friends And Related Function Documentation

Vec cross ( const Vec a,
const Vec b 
)
friend

Cross product of the two Vec. Mind the order !

Definition at line 318 of file vec.h.

bool operator!= ( const Vec a,
const Vec b 
)
friend

Returns true only when the two vector are not equal (see operator==()).

Definition at line 258 of file vec.h.

Vec operator* ( const Vec a,
double  k 
)
friend

Returns the product of the vector with a scalar.

Definition at line 233 of file vec.h.

Vec operator* ( double  k,
const Vec a 
)
friend

Returns the product of a scalar with the vector.

Definition at line 239 of file vec.h.

double operator* ( const Vec a,
const Vec b 
)
friend

Dot product of the two Vec.

Definition at line 306 of file vec.h.

Vec operator+ ( const Vec a,
const Vec b 
)
friend

Returns the sum of the two vectors.

Definition at line 215 of file vec.h.

Vec operator- ( const Vec a,
const Vec b 
)
friend

Returns the difference of the two vectors.

Definition at line 221 of file vec.h.

Vec operator- ( const Vec a)
friend

Unary minus operator.

Definition at line 227 of file vec.h.

Vec operator/ ( const Vec a,
double  k 
)
friend

Returns the division of the vector with a scalar.

Too small k values are not tested (unless the library was compiled with the "debug" Qt CONFIG flag) and may result in NaN values.

Definition at line 248 of file vec.h.

bool operator== ( const Vec a,
const Vec b 
)
friend

Returns true when the squaredNorm() of the difference vector is lower than 1E-10.

Definition at line 264 of file vec.h.

Vec operator^ ( const Vec a,
const Vec b 
)
friend

Cross product of the two vectors. Same as cross().

Definition at line 312 of file vec.h.

Member Data Documentation

union { ... }

The internal data representation is public. One can use v.x, v.y, v.z. See also operator[]().

double qglviewer::Vec::v_[3]

Definition at line 86 of file vec.h.

double qglviewer::Vec::x

Definition at line 85 of file vec.h.

double qglviewer::Vec::y

Definition at line 85 of file vec.h.

double qglviewer::Vec::z

Definition at line 85 of file vec.h.


The documentation for this class was generated from the following files:


octovis
Author(s): Kai M. Wurm , Armin Hornung
autogenerated on Mon Jun 10 2019 14:00:25