Go::SmoothSurf Class Reference
['geometry' - a spline library]

This class modifies a tensor product B-spline surface with respect to conditions on smoothness, editing constraints and boundary conditions. More...

#include <SmoothSurf.h>

List of all members.

Public Member Functions

 SmoothSurf ()
 Default constructor. Initializes class variable.
 SmoothSurf (bool copy_coefs)
 Constructor.
virtual ~SmoothSurf ()
 Destructor.
void attach (boost::shared_ptr< SplineSurface > &insf, int seem[], int coef_known[], int num_side_constraints=0, int has_normal_cond=0)
 Initializes data given by an intermediate surface.
virtual void setOptimize (const double weight1, const double weight2, const double weight3)
 Compute the smoothing part of the equation system.
void setLeastSquares (std::vector< double > &pnts, std::vector< double > &param_pnts, std::vector< double > &pnt_weights, const double weight)
 Compute matrices for least squares approximation.
int setNormalCond (std::vector< double > &pnts, std::vector< double > &param_pnts, std::vector< double > &pnt_weights, const double weight)
 Compute matrices for approximation of normal directions.
void approxOrig (double weight)
 Compute the contribution to the equation system from the approximation of an original surface, i.e.
virtual void setPeriodicity (int pardir, int cont, double weight1, double weight2)
 Set periodicity constraints in one par.
void setSideConstraints (std::vector< sideConstraint > &constraints)
 Add linear side constraints to the system equation.
int equationSolve (boost::shared_ptr< SplineSurface > &surf)
 Solve equation system, and produce output surface.

Protected Member Functions

virtual void releaseScratch ()
 Free all memory allocated for class members.
virtual void prepareIntegral ()
 Prepare storage for integrals of inner products of basis functions.
virtual void getBasis (const double *sb1, const double *sb2, int kleft1, int kleft2, int ider, double *sbasis)
 Given the value of non-zero B-spline functions, compute the value of the corresponding surface basis function (i.e.
void preparePeriodicity (int seem[])
 Set pointers between identical coefficients at a periodic seem.
void setC1AtSeem (int pardir, double weight)
 Set constraints on C1-continuity across a seem and add these to the equation system.
void setC2AtSeem (int pardir, double weight)
 Set constraints on C2-continuity across a seem and add these to the equation system.
virtual int adjustAtSeem ()
 Ensure that the expected C1 or C2 continuity at the seem is satisfied.

Protected Attributes

int kdim_
int idim_
int idim1_
int ider_
bool integralset_
int cont_seem_ [2]
int kncond_
int knconstraint_
const int kpointer_
int * coefknown_
std::vector< int > pivot_
boost::shared_ptr< SplineSurfacesrf_
int kk1_
int kk2_
int kn1_
int kn2_
std::vector< double >::const_iterator st1_
std::vector< double >::const_iterator st2_
const bool copy_coefs_
std::vector< double > coef_array_
 Parameters used to define the specific input spline surface.
std::vector< double >::iterator scoef_
std::vector< double > gmat_
 Storage of the equation system.
std::vector< double > gright_


Detailed Description

This class modifies a tensor product B-spline surface with respect to conditions on smoothness, editing constraints and boundary conditions.

Definition at line 70 of file SmoothSurf.h.


Constructor & Destructor Documentation

Go::SmoothSurf::SmoothSurf ( bool  copy_coefs  ) 

Constructor.

Initializes class variable.

Parameters:
copy_coefs true if coefficients on attached surface are not to be modified.


Member Function Documentation

void Go::SmoothSurf::attach ( boost::shared_ptr< SplineSurface > &  insf,
int  seem[],
int  coef_known[],
int  num_side_constraints = 0,
int  has_normal_cond = 0 
)

Initializes data given by an intermediate surface.

Parameters:
insf the initial surface.
seem continuity across opposite edges. 0 not specified, 1 = C0, 2 = C1, 3 = C2.
coef_known whether the coefs are free to be altered. 0: not known, 1: known >= kpointer_ = 3: the coefficients indexed by ki & coef_known[ki] - kpointer_ should be equal.
num_side_constraints the number of linear side constraints in the system.
has_normal_cond whether the system must fulfill normal conditions.

virtual void Go::SmoothSurf::setOptimize ( const double  weight1,
const double  weight2,
const double  weight3 
) [virtual]

Compute the smoothing part of the equation system.

Parameters:
weight1 contribution weight with respect to the 1st derivative.
weight2 contribution weight with respect to the 2nd derivative.
weight3 contribution weight with respect to the 3rd derivative.

void Go::SmoothSurf::setLeastSquares ( std::vector< double > &  pnts,
std::vector< double > &  param_pnts,
std::vector< double > &  pnt_weights,
const double  weight 
)

Compute matrices for least squares approximation.

Parameters:
pnts points on surface to be approximated. Stored as (for 3D): (x0, y0, z0, x1, y1, z1, ...)
param_pnts the corresponding 2-dimensional parametric points. Stored as: (u0, v0, u1, v1, ...)
pnt_weights each of the pnts is assigned a weight lying in the unit interval. 1.0 if all pnts are equally important.
weight the contribution of the approximation of the pnts in the system. weight should lie in the unit interval.

int Go::SmoothSurf::setNormalCond ( std::vector< double > &  pnts,
std::vector< double > &  param_pnts,
std::vector< double > &  pnt_weights,
const double  weight 
)

Compute matrices for approximation of normal directions.

Parameters:
pnts normals in sf to be approximated. Stored as (for 3D): (x0, y0, z0, x1, y1, z1, ...)
param_pnts the corresponding 2-dimensional parametric points. Stored as: (u0, v0, u1, v1, ...)
pnt_weights each of the pnts is assigned a weight lying in the unit interval. 1.0 if all pnts are equally important.
weight the contribution of the approximation of the normals in the system. weight should lie in the unit interval.
Returns:
status value: 0 = OK, 1 = warning (system not prepared for normal conditions).

void Go::SmoothSurf::approxOrig ( double  weight  ) 

Compute the contribution to the equation system from the approximation of an original surface, i.e.

the contribution of the original coefficients.

Parameters:
weight the relative contribution of the original coefs. Should lie in the unit interval.

virtual void Go::SmoothSurf::setPeriodicity ( int  pardir,
int  cont,
double  weight1,
double  weight2 
) [virtual]

Set periodicity constraints in one par.

dir.

Parameters:
pardir the direction of the periodicity, 1 == udir && 2 == vdir.
cont the continuity across the seem, 0 = C0, 1 = C1, 2 = C2.
weight1 C1 continuity contribution used in approximation.
weight2 C2 continuity contribution used in approximation.

void Go::SmoothSurf::setSideConstraints ( std::vector< sideConstraint > &  constraints  ) 

Add linear side constraints to the system equation.

Parameters:
constraints the linear side constraints between surface coefficients.

int Go::SmoothSurf::equationSolve ( boost::shared_ptr< SplineSurface > &  surf  ) 

Solve equation system, and produce output surface.

If failing to solve the routine may throw an exception.

Parameters:
surf the output surface.
Returns:
0 = OK, negative = failed solving system.

virtual void Go::SmoothSurf::getBasis ( const double *  sb1,
const double *  sb2,
int  kleft1,
int  kleft2,
int  ider,
double *  sbasis 
) [protected, virtual]

Given the value of non-zero B-spline functions, compute the value of the corresponding surface basis function (i.e.

the products of the u- and v-basis functions).

Parameters:
sb1 the basis values in the first parameter direction (u).
sb2 the basis values in the second parameter direction (v).
kleft1 index of the first knot interval in u-dir.
kleft2 index of the first knot interval in v-dir.
ider the number of derivatives to compute.
sbasis the computed basis values in sf. size = order_u()*order_v()*(ider + 1)*(ider + 1). The space must be allocated on the outside.

void Go::SmoothSurf::preparePeriodicity ( int  seem[]  )  [protected]

Set pointers between identical coefficients at a periodic seem.

If possible, update fixed coefficients at the seem.

Parameters:
seem continuity across the seem. Array size = 2.

virtual int Go::SmoothSurf::adjustAtSeem (  )  [protected, virtual]

Ensure that the expected C1 or C2 continuity at the seem is satisfied.

Only applicable if seem_[0] > 1 || seem_[1] > 1.


The documentation for this class was generated from the following file:
Generated on Mon Jun 11 14:48:19 2007 for GoTools Core Library by  doxygen 1.5.1