About
A vector is a structure composed of three floating-point values. Such a vector is typically used to represent a position in 3D space, a direction, normals, a rotation or a color value.
The vector classes available:
See also Primitive Data Types Manual (Classic).
- Warning
- A description of MAXON API ALIASES vector classes can also be found here: Vectors. The MAXON API ALIASES also includes dedicated classes for colors like maxon::Color.
const Vector*
const splinePoints = spline->GetPointR();
const Int32 splinePointCount = spline->GetPointCount();
const Matrix splineMg = spline->GetMg();
for (
Int i = 0; i < splinePointCount; ++i)
{
if (nullObj && splinePoints)
{
const Vector worldSpacePoint = splineMg * splinePoints[i];
mg.
off = worldSpacePoint;
}
else
{
}
}
Access
Vector objects can be created on demand or can be obtained from other entities.
Access Vector objects stored in a BaseContainer:
See also BaseContainer Manual.
Access Vector objects stored in a GeData object (GeData type is DA_VECTOR):
See also GeData Manual.
Vectors are also the building blocks of Matrix objects. Especially the off
component of a Matrix is often accessed:
See also Matrix Manual (Classic).
Vectors are used to represent the position of points of a PointObject like a SplineObject or PolygonObject:
In a GeDialog the float values of three gadgets can be read as a Vector:
Components
A Vector is made up of three components, which can be accessed directly:
Alternatively the subscript operator can be used:
Vector Maths
Vector Properties
Several functions are available to calculate properties of a Vector object:
const Matrix mgA = objectA->GetMg();
const Matrix mgB = objectB->GetMg();
const Matrix mgC = objectC->GetMg();
if (sqrDistanceAB > sqrDistanceAC)
ApplicationOutput(
"Object @ is closer to object @ than object @"_s, objAName, objCName, objBName);
else
ApplicationOutput(
"Object @ is closer to object @ than object @"_s, objAName, objBName, objCName);
Vector Operators
Basic mathematical operations to handle vectors and vectors with scalars are implemented as operators:
Vector Normalization
const Vector vec { 10, 20, 30 };
Vector Operations
Basic vector based mathematical operations are available as global functions:
- Note
- To calculate the normal of a polygon use CalcFaceNormal().
const Vector b { 100, 100, 0 };
const Float angle = GetAngle(a, b);
Zero
These functions an be used to check if the components of a vector are zero:
Compare
Two vectors can be compared using a dedicated function or the usual operators:
- Vector::IsEqual(): Compares the given vectors component-wise using the given epsilon.
- Vector::operator==(): Returns true if the given vectors are equal or if the components equal the given scalar.
- Vector::operator!=(): Returns true if the given vectors are not equal or if the components are not equal to the given scalar.
- Note
- For safe comparison of floating point values see Compare.
Disc I/O
Vector objects can be stored in a BaseFile or a HyperFile using:
See also BaseFile Manual on Vector and HyperFile Manual on Vector.
Utility Functions
Further utility functions are available:
- ReflectRay(): Returns the ray vector after a reflection on a surface normal.
- String::VectorToString(): Converts the given vector to a string.
- GetOptimalAngle(): Returns the optimal angle so that the "distance" of the given new rotation to the old rotation is at minimum.
- VectorToHPB(): Calculates Euler angles from a direction vector.
Color Functions
The Vector class is also used to represent colors in different color spaces:
- RGBToHSV(): Converts a RGB color value into the HSV color space.
- HSVToRGB(): Converts a HSV color value into the RGB color space.
- RGBToHSL(): Converts a RGB color value into the HSL color space.
- HSLtoRGB(): Converts a HSL color value into the RGB color space.
See also Color Functions Manual.
Further Reading