#include <nurbsS_sp.h>
Inheritance diagram for PLib::NurbsSurfaceSP< T, N >:
Public Member Functions | |
NurbsSurfaceSP (const NurbsSurface< T, N > &nS) | |
NurbsSurfaceSP (const NurbsSurfaceSP< T, N > &nS) | |
NurbsSurfaceSP (int DegU, int DegV, const Vector< T > &Uk, const Vector< T > &Vk, const Matrix< HPoint_nD< T, N > > &Cp) | |
NurbsSurfaceSP (int DegU, int DegV, Vector< T > &Uk, Vector< T > &Vk, Matrix< Point_nD< T, N > > &Cp, Matrix< T > &W) | |
virtual NurbsSurface< T, N > & | operator= (const NurbsSurface< T, N > &a) |
virtual NurbsSurfaceSP< T, N > & | operator= (const NurbsSurfaceSP< T, N > &a) |
virtual void | resizeKeep (int Pu, int Pv, int DegU, int DegV) |
virtual void | refineKnots (const Vector< T > &nU, const Vector< T > &nV) |
virtual void | refineKnotU (const Vector< T > &X) |
virtual void | refineKnotV (const Vector< T > &X) |
virtual void | mergeKnots (const Vector< T > &nU, const Vector< T > &nV) |
virtual void | mergeKnotU (const Vector< T > &X) |
virtual void | mergeKnotV (const Vector< T > &X) |
virtual int | read (ifstream &fin) |
virtual void | degreeElevateU (int tU) |
virtual void | degreeElevateV (int tV) |
NurbsSurfaceSP< T, N > | generateParallel (T d) const |
void | modSurfCPby (int i, int j, const HPoint_nD< T, N > &a) |
void | modSurfCP (int i, int j, const HPoint_nD< T, N > &a) |
void | modOnlySurfCPby (int i, int j, const HPoint_nD< T, N > &a) |
void | modOnlySurfCP (int i, int j, const HPoint_nD< T, N > &a) |
T | maxAtUV (int i, int j) const |
T | maxAtU (int i) const |
T | maxAtV (int i) const |
HPoint_nD< T, N > | surfP (int i, int j) const |
void | updateMaxUV () |
void | updateMaxU () |
void | updateMaxV () |
int | okMax () |
Protected Attributes | |
Vector< T > | maxU |
Vector< T > | maxV |
Vector< T > | maxAtU_ |
Vector< T > | maxAtV_ |
A Nurbs surface with surface point manipulators. This allows someone to modify the point on a surface for which a control point has maximal influence over it. This might provide a more intuitive method to modify a surface.
NurbsSurface< T, N > & PLib::NurbsSurfaceSP< T, N >::operator= | ( | const NurbsSurface< T, N > & | nS | ) | [inline, virtual] |
NurbsSurface<T,N> assignment.
nS | the NURBS surface to copy |
Reimplemented from PLib::NurbsSurface< T, N >.
void PLib::NurbsSurfaceSP< T, N >::resizeKeep | ( | int | Pu, | |
int | Pv, | |||
int | DegU, | |||
int | DegV | |||
) | [inline, virtual] |
Resize the surface while keeping the old values.
Pu | the number of control points in the U direction | |
Pv | the number of control points in the V direction | |
DegU | the degree of the surface in the U direction | |
DegV | the degree of the surface in the V direction |
Reimplemented from PLib::NurbsSurface< T, N >.
void PLib::NurbsSurfaceSP< T, N >::refineKnots | ( | const Vector< T > & | nU, | |
const Vector< T > & | nV | |||
) | [inline, virtual] |
Refine both knot vectors.
nU | the U knot vector to refine from | |
nV | the V knot vector to refine from |
Reimplemented from PLib::NurbsSurface< T, N >.
void PLib::NurbsSurfaceSP< T, N >::refineKnotU | ( | const Vector< T > & | X | ) | [inline, virtual] |
Refines the U knot vector.
X | the knot vector to refine from |
Reimplemented from PLib::NurbsSurface< T, N >.
void PLib::NurbsSurfaceSP< T, N >::refineKnotV | ( | const Vector< T > & | X | ) | [inline, virtual] |
Refines the V knot vector.
X | the knot vector to refine from |
Reimplemented from PLib::NurbsSurface< T, N >.
void PLib::NurbsSurfaceSP< T, N >::mergeKnots | ( | const Vector< T > & | nU, | |
const Vector< T > & | nV | |||
) | [inline, virtual] |
merges a U and V knot vector with the surface knot vectors
nU | the U knot vector to merge with | |
nV | the V knot vector to merge with |
Reimplemented from PLib::NurbsSurface< T, N >.
void PLib::NurbsSurfaceSP< T, N >::mergeKnotU | ( | const Vector< T > & | X | ) | [inline, virtual] |
merges the U knot vector with another one
X | a knot vector |
Reimplemented from PLib::NurbsSurface< T, N >.
void PLib::NurbsSurfaceSP< T, N >::mergeKnotV | ( | const Vector< T > & | X | ) | [inline, virtual] |
merges the V knot vector with another one
X | a knot vector |
Reimplemented from PLib::NurbsSurface< T, N >.
int PLib::NurbsSurfaceSP< T, N >::read | ( | ifstream & | fin | ) | [inline, virtual] |
Read a surface from an input stream.
fin | the input file stream |
Reimplemented from PLib::NurbsSurface< T, N >.
Reimplemented in PLib::NurbsSurfaceGL.
void PLib::NurbsSurfaceSP< T, N >::degreeElevateU | ( | int | tU | ) | [inline, virtual] |
Degree elevate the surface in the U direction.
t | elevate the degree in the u direction by this amount. |
Reimplemented from PLib::NurbsSurface< T, N >.
void PLib::NurbsSurfaceSP< T, N >::degreeElevateV | ( | int | tV | ) | [inline, virtual] |
Degree elevate the surface in the V direction.
t | elevate the degree in the v direction by this amount. |
Reimplemented from PLib::NurbsSurface< T, N >.
NurbsSurfaceSP< T, N > PLib::NurbsSurfaceSP< T, N >::generateParallel | ( | T | d | ) | const |
Generate a parallel surface.
Generates an offset surface from this surface. An offset surface is a surface wich has its surface parallel to an other one. There is a distance of d between the two parallel surfaces.
The algorithm used is very naive. It generates a surface such that a point s_2(u,v) = s(u,v) + d n(u,v) where s_2(u,v,) is the point on the parallel surface at (u,v) , s(u,v) is the point on the original surface at (u,v), d is the offset between the two and n(u,v) is the normal on the surface at the point (u,v).
d | the distance between the surface and its offset the parallel surface. |
void PLib::NurbsSurfaceSP< T, N >::modSurfCPby | ( | int | i, | |
int | j, | |||
const HPoint_nD< T, N > & | a | |||
) | [inline] |
a | Moves a surface point by a value |
void PLib::NurbsSurfaceSP< T, N >::modSurfCP | ( | int | i, | |
int | j, | |||
const HPoint_nD< T, N > & | a | |||
) | [inline] |
a | Moves a surface point to a value |
void PLib::NurbsSurfaceSP< T, N >::modOnlySurfCPby | ( | int | i, | |
int | j, | |||
const HPoint_nD< T, N > & | a | |||
) |
Move the surface point only.
Moves only the specified surface point. The other surface points normally affected by moving this point are {not} moved.
The point a is in the 4D homogenous space, but only the x,y,z value are used. The weight is not moved by this function.
i | the row of the surface point to move | |
j | the column of the surface point to move | |
a | move that surface point by that amount. |
void PLib::NurbsSurfaceSP< T, N >::modOnlySurfCP | ( | int | i, | |
int | j, | |||
const HPoint_nD< T, N > & | a | |||
) | [inline] |
a | Changes only the the surface point near a control point, the other surface point will not be moved. |
T PLib::NurbsSurfaceSP< T, N >::maxAtUV | ( | int | i, | |
int | j | |||
) | const [inline] |
< The maximal basis function for the control point i,j
T PLib::NurbsSurfaceSP< T, N >::maxAtU | ( | int | i | ) | const [inline] |
< Where is the maximal basis function in U for the control points in row i
T PLib::NurbsSurfaceSP< T, N >::maxAtV | ( | int | i | ) | const [inline] |
< Where is the maximal basis function in U for the control points in colum i
HPoint_nD<T,N> PLib::NurbsSurfaceSP< T, N >::surfP | ( | int | i, | |
int | j | |||
) | const [inline] |
< the surface point for the control point at i,j
void PLib::NurbsSurfaceSP< T, N >::updateMaxU | ( | ) |
Updates the basis value for the U direction.
Updates the basis value at which a control point has maximal influence. It also finds where the control point has maximal influence.
void PLib::NurbsSurfaceSP< T, N >::updateMaxV | ( | ) |
Updates the basis value for the V direction.
Updates the basis value at which a control point has maximal influence. It also finds where the control point has maximal influence.
Vector<T> PLib::NurbsSurfaceSP< T, N >::maxU [protected] |
The vector of maximal basis function value in U.
Vector<T> PLib::NurbsSurfaceSP< T, N >::maxV [protected] |
The vector of maximal basis function value in V.
Vector<T> PLib::NurbsSurfaceSP< T, N >::maxAtU_ [protected] |
The vector identifiying where is the maximal basis function in U.
Vector<T> PLib::NurbsSurfaceSP< T, N >::maxAtV_ [protected] |
The vector identifiying where is the maximal basis function in V.