Main Page   Class Hierarchy   Compound List   Compound Members  

qglviewer::Vec Class Reference

3D point and vector basic class. See also the Quaternion documentation. More...

List of all members.

Public Methods

 Vec ()
 Default constructor. Default value is (0,0,0).

 Vec (const float X, const float Y, const float Z)
 Standard constructor with the x,y and z values.

template<class C>  Vec (const C &c)
 Universal explicit convertor 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.
qglviewer::Vec pos(myVec); camera.setPosition(pos); 
.


Vec & operator= (const Vec &v)
 Operator =.

QDomElement domElement (const QString &name, QDomDocument &doc) const
 Universal equal operator which allows the use of any type in place of Vec, as long as the [] operator is implemented (v[0]=v.x, v[1]=v.y, v[2]=v.z). More...

void initFromDOMElement (const QDomElement &de)
float operator[] (int i) const
 Bracket operator, with a constant return value.

float & operator[] (int i)
 Bracket operator, returns an l-value.

const float * address () const
 The memory address of the vector. Usefull as an argument for glVectex3fv, glNormal3fv...

 operator const float * () const
 The memory address of the vector. Usefull to directly use the address.

void setValue (const float X, const float Y, const float Z)
 Set the current value without using operator equal with a temporary Vec(x, y, z).

void setValue (const float v)
 Set the current value without using operator equal with a temporary Vec(v).

Vec & operator+= (const Vec &a)
 Adds a to the vector.

Vec & operator-= (const Vec &a)
 Substracts a to the vector.

Vec & operator *= (float k)
 Multiply the vector by a scalar.

Vec & operator/= (float k)
 Divides the vector by a scalar. With the "debug" qt CONFIG flag, tests for null value.

float sqNorm () const
 Returns the squared norm of the Vec.

float norm () const
 Returns the norm of the vector.

Vec & normalize ()
 Normalizes the Vec and returns the norm value.

void projectOnAxis (const Vec &dir)
 Projects on the axis whose direction is dir (and that passes through the origin).
Attention:
The axis direction vector must be normalized. This is checked in the debug library release.


void projectOnPlane (const Vec &n)
 Projects on the plane whose normal is n and that passes through the origin.
Attention:
The plane normal vector must be normalized. This is checked in the debug library release.



Public Attributes

float x
 The internal data representation is public. One can use v.x, v.y, v.z.

float y
 The internal data representation is public. One can use v.x, v.y, v.z.

float z
 The internal data representation is public. One can use v.x, v.y, v.z.


Friends

Vec operator+ (const Vec &a, const Vec &b)
 Returns the sum of the two vectors.

Vec operator- (const Vec &a, const Vec &b)
 Returns the difference of the two vectors.

Vec operator- (const Vec &a)
 Unary minus operator.

Vec operator * (const Vec &a, const float k)
 Returns the product of the vector with a scalar.

Vec operator * (float k, const Vec &a)
 Returns the product of the vector with a scalar.

Vec operator/ (const Vec &a, const float k)
 Returns the division of the vector with a scalar. With the "debug" qt CONFIG flag, tests for null value.

bool operator!= (const Vec &a, const Vec &b)
 Comparison based on the squared norm of the difference vector, see operator==.

bool operator== (const Vec &a, const Vec &b)
 Comparison based on the squared norm of the difference vector, epsilon=1E-10.

float operator * (const Vec &a, const Vec &b)
 Dot product.

Vec cross (const Vec &a, const Vec &b)
 Cross product of the two vectors. Mind the order !

Vec operator^ (const Vec &a, const Vec &b)
 Cross product of the two vectors. See also cross.


Detailed Description

3D point and vector basic class. See also the Quaternion documentation.

Vec is a QGLViewer internal class. It is encapsulated in the qglviewer namespace. You can use it in your programs by specifying qglviewer::Vec, or by using the qglviewer namespace (using namespace qglviewer).

Vec implements a universal explicit converter, based on the [] operator. Everywhere a const Vec& argument is expected, you can use your own 3D point type instead, as long as it implements the [] operator :

    float operator[] (const int i) const { return x, y or z for i=0, 1 or 2 };
Indexes 0, 1 and 2 of the [] operator should respectively return the x,y and z coordinate.

The following code is hence valid :

    // class myVector implements the [] operator
    myVector mv;
    fr.setPosition( qglviewer::Vec(mv) );
    // or if you use namespace qglviewer
    fr.setPosition( Vec(mv) );

When Vec is used as a return value, a classical float version of the function is always available.

You can also convert a Vec result to your own class, using code such as :

    qglviewer::Vec sc = sceneCenter();
    myVector.x() = sc.x;    // or sc[0]
    myVector.y() = sc.y;    // or sc[1]
    myVector.z() = sc.z;    // or sc[2]


Member Function Documentation

QDomElement domElement const QString &    name,
QDomDocument &    doc
const
 

Universal equal operator which allows the use of any type in place of Vec, as long as the [] operator is implemented (v[0]=v.x, v[1]=v.y, v[2]=v.z).

Creates an XML QDomElement that represents the Vec. name is the name of the QDomElement tag. You need to provide the QDomDocument doc that will hold the resulting element. Typical usage would be:

 QDomDocument doc("myDocument");
 // ...
 AnyNode.addElement(sunPos.domElement("sunPosition", doc));
 // ...
Use initFromDOMElement() to restore the Vec state from the resulting domElement.

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

void initFromDOMElement const QDomElement &    de
 

Restore the Vec state from a QDomElement created by domElement(). The QDomElement must contain the x, y and z attributes, otherwise these fields are set to 0.0.


Generated on Thu Jan 16 12:53:48 2003 for libQGLViewer by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002