mbsim 4.0.0 MBSim Kernel

Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Related Functions | List of all members
MBSim::NurbsSurface Class Reference

A class to represent a NURBS surface. More...

## Public Types

enum | Method { equallySpaced = 0, chordLength }

## Public Member Functions

| NurbsSurface ()
| default constructor
| NurbsSurface (const NurbsSurface &nS)
| copy constructor
| NurbsSurface (int DegU, int DegV, const fmatvec::VecV &Uk, const fmatvec::VecV &Vk, fmatvec::GeneralMatrix< fmatvec::Vec4 > &Q)
| constructor
virtual | ~NurbsSurface ()=default
| Empty desctructor.
const fmatvec::VecV & | knotU () const
| A reference to the U knot vector.
const fmatvec::VecV & | knotV () const
| A reference to the V knot vector.
double | knotU (int i) const
| Returns the i-th knot from U.
double | knotV (int i) const
| Returns the i-th knot from V.
const fmatvec::GeneralMatrix< fmatvec::Vec4 > & | ctrlPnts () const
| A reference to the control points.
const fmatvec::Vec4 | ctrlPnts (int i, int j) const
| A reference to the control point at (i,j)
int | degreeU () const
| A reference to the degree in U of the surface.
int | degreeV () const
| A reference to the degree in V of the surface.
void | setKnotU (const fmatvec::VecV &U_)
void | setKnotV (const fmatvec::VecV &V_)
void | setCtrlPnts (const fmatvec::GeneralMatrix< fmatvec::Vec4 > &P_)
void | setDegreeU (int degU_)
void | setDegreeV (int degV_)
virtual NurbsSurface & | operator= (const NurbsSurface &)
| NurbsSurface assignment. More...
void | resize (int Pu, int Pv, int DegU, int DegV)
| Resize the surface. More...
fmatvec::HPoint< 3 > | operator() (double u, double v) const
| Returns the point on the surface at u,v. More...
fmatvec::Point< 3 > | pointAt (double u, double v) const
| rojects the point in the normal space More...
void | deriveAt (double u, double v, int d, fmatvec::GeneralMatrix< fmatvec::Vec3 > &skl) const
| Find the non-zero basis functions in the U and V direction. More...
void | deriveAtH (double u, double v, int d, fmatvec::GeneralMatrix< fmatvec::Vec4 > &skl) const
| computes the point and the derivatives of degree d and below at (u,v) More...
fmatvec::Vec3 | normal (double u, double v) const
| Computes the normal of the surface at (u,v) More...
void | globalInterp (const fmatvec::GeneralMatrix< fmatvec::Vec3 > &Q, int DegU, int DegV)
| Generates a surface using global interpolation. More...
void | globalInterp (const fmatvec::GeneralMatrix< fmatvec::Vec3 > &Q, const fmatvec::VecV &uk, const fmatvec::VecV &vk, int DegU, int DegV)
void | globalInterpClosedU (const fmatvec::GeneralMatrix< fmatvec::Vec3 > &Q, int DegU, int DegV)
| Generates a closed surface using global interpolation. More...
void | globalInterpClosedU (const fmatvec::GeneralMatrix< fmatvec::Vec3 > &Q, const fmatvec::VecV &uk, const fmatvec::VecV &vk, int DegU, int DegV)
void | globalInterpH (const fmatvec::GeneralMatrix< fmatvec::Vec4 > &Q, int DegU, int DegV, Method method=chordLength)
void | globalInterpClosedUH (const fmatvec::GeneralMatrix< fmatvec::Vec4 > &Q, int DegU, int DegV, Method method=chordLength)

## Protected Member Functions

void | findSpan (double u, double v, int spanU, int spanV) const
| Finds the multiplicity of a knot in the U knot. More...
int | findSpanU (double u) const
| finds the span in the U direction More...
int | findSpanV (double v) const
| finds the span in the V direction More...
int | findMultU (int r) const
int | findMultV (int r) const

## Protected Attributes

fmatvec::VecV | U
| the U knot vector
fmatvec::VecV | V
| the V knot vector
fmatvec::GeneralMatrix< fmatvec::Vec4 > | P
| The matrix of control points.
int | degU {0}
| the degree of the surface in U
int | degV {0}
| the degree of the surface in V
fmatvec::Mat | InverseU
| The matrix for the computation of the control points in U-direction.
fmatvec::Mat | InverseV
| The matrix for the computation of the control points in V-direction.

## Related Functions

(Note that these are not member functions.)
int | surfMeshParams (const GeneralMatrix< fmatvec::Vec3 > &Q, VecV &uk, VecV &vl)
| Computes the parameters for global surface interpolation. More...

## Detailed Description

A class to represent a NURBS surface.

The NURBS surface is composed of points in homogenous space. It can have any degree in both the u and the v direction.

## Member Function Documentation

## ◆ deriveAt()

void MBSim::NurbsSurface::deriveAt | ( | double | u,
|  | double | v,
|  | int | d,
|  | fmatvec::GeneralMatrix< fmatvec::Vec3 > & | skl
| ) |  | const

Find the non-zero basis functions in the U and V direction.

Parameters

  u | the u parametric value
  v | the v parametric value
  spanU | the span of u
  spanV | the span of v
  Nu | the vector containing the U non-zero basis functions
  Nv | the vector containing the V non-zero basis functions

Author
  Philippe Lavoie

Date
  24 January, 1997

Finds the non-zero basis function in the U direction

Parameters

  u | the u parametric value
  span | the span of u
  N | the vector containing the basis functions

Author
  Philippe Lavoie

Date
  24 January, 1997

Finds the non-zero basis function in the V direction

Parameters

  v | the v parametric value
  span | the span of v
  N | the vector containing the basis functions

Author
  Philippe Lavoie

Date
  24 January, 1997

Computes the point and the derivatives of degree d and below at (u,v)

Computes the matrix of derivatives at u,v . The value of skl(k,l) represents the derivative of the surface S(u,v) with respect to u, k times and to v, l times.

Parameters

  u | the u parametric value
  v | the v parametric value
  d | the derivative is computed up to and including to this value
  skl | the matrix containing the derivatives

Author
  Philippe Lavoie

Date
  24 January, 1997

## ◆ deriveAtH()

void MBSim::NurbsSurface::deriveAtH | ( | double | u,
|  | double | v,
|  | int | d,
|  | fmatvec::GeneralMatrix< fmatvec::Vec4 > & | skl
| ) |  | const

computes the point and the derivatives of degree d and below at (u,v)

Computes the matrix of derivatives at u,v . The value of skl(k,l) represents the derivative of the surface S(u,v) with respect to u k times and to $v$ $l$ times.

Parameters

  u | the u parametric value
  v | the v parametric value
  d | the derivative is computed up to and including to this value
  skl | the matrix containing the derivatives

Author
  Philippe Lavoie

Date
  24 January, 1997

## ◆ findSpan()

void MBSim::NurbsSurface::findSpan | ( | double | u,
|  | double | v,
|  | int | spanU,
|  | int | spanV
| ) |  | const

protected

Finds the multiplicity of a knot in the U knot.

Parameters

  r | the knot to observe

Returns
  the multiplicity of the knot

Warning
  r must be a valid U knot index

Author
  Philippe Lavoie

Date
  24 January, 1997

finds the multiplicity of a knot in the V knot

Parameters

  r | the knot to observe

Returns
  the multiplicity of the V knot

Warning
  r must be a valid knot index

Author
  Philippe Lavoie

Date
  24 January, 1997

finds the span in the U and V direction

Finds the span in the U and V direction. The spanU is the index k for which the parameter u is valid in the [u_k,u_{k+1}] range. The spanV is the index k for which the parameter v is valid in the [v_k,v_{k+1}] range.

Parameters

  u | find the U span for this parametric value
  v | find the V span for this parametric value
  spanU | the U span
  spanV | the V span

Author
  Philippe Lavoie

Date
  24 January, 1997

## ◆ findSpanU()

int MBSim::NurbsSurface::findSpanU | ( | double | u | ) | const

protected

finds the span in the U direction

Finds the span in the U direction. The span is the index k for which the parameter u is valid in the [u_k,u_{k+1}] range.

Parameters

  u | --> find the span for this parametric value

Returns
  the span for u

Author
  Philippe Lavoie

Date
  24 January, 1997

\modified 20 January, 1999 (Alejandro Frangi)

## ◆ findSpanV()

int MBSim::NurbsSurface::findSpanV | ( | double | v | ) | const

protected

finds the span in the V direction

Finds the span in the V direction. The span is the index k for which the parameter v is valid in the [v_k,v_{k+1}] range.

Parameters

  v | find the span for this parametric value

Returns
  the span for v

Author
  Philippe Lavoie

Date
  24 January, 1997 \modified 20 January, 1999 (Alejandro Frangi)

## ◆ globalInterp()

void MBSim::NurbsSurface::globalInterp | ( | const fmatvec::GeneralMatrix< fmatvec::Vec3 > & | Q,
|  | int | DegU,
|  | int | DegV
| ) |  |

Generates a surface using global interpolation.

Parameters

  Q | a matrix of 3D points
  DegU | the degree of interpolation in the U direction
  DegV | the degree of interpolation in the V direction

Author
  Philippe Lavoie

Date
  24 January, 1997

## ◆ globalInterpClosedU()

void MBSim::NurbsSurface::globalInterpClosedU | ( | const fmatvec::GeneralMatrix< fmatvec::Vec3 > & | Q,
|  | int | DegU,
|  | int | DegV
| ) |  |

Generates a closed surface using global interpolation.

Generates a NURBS surface using global interpolation. In the u direction the curve will be closed and with C(pU-1) continuity. Each column in Q indicates the points for a closed curve in the u direction. First and last point have to be equal.

Parameters

  Q | a matrix of 3D points (without repeated points)
  pU | the degree of interpolation in the U direction
  pV | the degree of interpolation in the V direction

Author
  Alejandro Frangi

Date
  30 June, 1998

## ◆ normal()

Vec3 MBSim::NurbsSurface::normal | ( | double | u,
|  | double | v
| ) |  | const

Computes the normal of the surface at (u,v)

Parameters

  u | the u parametric value
  v | the v parametric value

Returns
  the normal at (u,v) .

Author
  Philippe Lavoie

Date
  24 January, 1997

## ◆ operator()()

fmatvec::HPoint< 3 > MBSim::NurbsSurface::operator() | ( | double | u,
|  | double | v
| ) |  | const

Returns the point on the surface at u,v.

Returns the point on the surface at u,v

Parameters

  u | the u parametric value
  v | the v parametric value

Returns
  The homogenous point at u,v

Author
  Philippe Lavoie

Date
  24 January, 1997

## ◆ operator=()

NurbsSurface & MBSim::NurbsSurface::operator= | ( | const NurbsSurface & | nS | ) |

virtual

NurbsSurface assignment.

Parameters

  nS | the NURBS surface to copy

Author
  Philippe Lavoie

Date
  24 January, 1997

## ◆ pointAt()

fmatvec::Point< 3 > MBSim::NurbsSurface::pointAt | ( | double | u,
|  | double | v
| ) |  | const

rojects the point in the normal space

Projects the point in the normal space.

## ◆ resize()

void MBSim::NurbsSurface::resize | ( | int | Pu,
|  | int | Pv,
|  | int | DegU,
|  | int | DegV
| ) |  |

Resize the surface.

Resize the surface. Proper values must be assigned once this function has been called since the resize operator is destructive.

Parameters

  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

Author
  Philippe Lavoie

Date
  24 January, 1997

## Friends And Related Function Documentation

## ◆ surfMeshParams()

int surfMeshParams | ( | const GeneralMatrix< fmatvec::Vec3 > & | Q,
|  | VecV & | uk,
|  | VecV & | vl
| ) |  |

related

Computes the parameters for global surface interpolation.

Computes the parameters for global surface interpolation. For more information, see A9.3 on p377 on the NURBS book.

Parameters

  Q | the matrix of 3D points
  uk | the knot coefficients in the U direction
  vl | the knot coefficients in the V direction

Returns
  0 if an error occurs, 1 otherwise

Warning

Author
  Philippe Lavoie

Date
  24 January, 1997

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

- /mbsim-env/mbsim/kernel/mbsim/numerics/nurbs/nurbs_surface.h
- /mbsim-env/mbsim/kernel/mbsim/numerics/nurbs/nurbs_surface.cc