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

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

#include <SmoothSurfSet.h>

List of all members.

Public Member Functions

 SmoothSurfSet ()
 Default constructor. Initializes class variable.
 SmoothSurfSet (bool copy_coefs)
 Constructor.
virtual ~SmoothSurfSet ()
 Destructor.
void attach (std::vector< boost::shared_ptr< SplineSurface > > &insf, std::vector< std::vector< int > > &coef_known, int num_side_constraints=0, int has_normal_cond=0)
 Initializes data given by an intermediate surface.
virtual void setOptimize (double weight1, double weight2, double weight3)
 Compute the smoothing part of the equation system.
void setLeastSquares (std::vector< std::vector< double > > &pnts, std::vector< std::vector< double > > &param_pnts, std::vector< std::vector< double > > &pnt_weights, double weight)
 Compute matrices for least squares approximation.
int setNormalCond (std::vector< std::vector< double > > &pnts, std::vector< std::vector< double > > &param_pnts, std::vector< std::vector< double > > &pnt_weights, 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.
void setSideConstraints (std::vector< sideConstraintSet > &constraints)
 Add linear side constraints to the system equation.
void setApproxSideConstraints (std::vector< sideConstraintSet > &constraints, double weight)
 Use least squares to minimize the error given by the constraints.
int equationSolve (std::vector< boost::shared_ptr< SplineSurface > > &surfaces)
 Solve equation system, and produce output surfaces.

Protected Member Functions

virtual void getBasis (double *sb1, double *sb2, int kk1, int kk2, 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.

Protected Attributes

int kdim_
int idim_
int idim1_
int ider_
int kncond_
int knconstraint_
std::vector< std::vector<
int >::iterator > 
coef_known_
std::vector< std::vector<
int > > 
pivot_
std::vector< boost::shared_ptr<
SplineSurface > > 
srfs_
const int copy_coefs_
std::vector< std::vector<
double > > 
coef_array_
std::vector< double > gmat_
std::vector< double > gright_


Detailed Description

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

Definition at line 66 of file SmoothSurfSet.h.


Constructor & Destructor Documentation

Go::SmoothSurfSet::SmoothSurfSet ( bool  copy_coefs  ) 

Constructor.

Initializes class variable.

Parameters:
copy_coefs whether to copy coefs in input surface or work directly on them.


Member Function Documentation

void Go::SmoothSurfSet::attach ( std::vector< boost::shared_ptr< SplineSurface > > &  insf,
std::vector< std::vector< int > > &  coef_known,
int  num_side_constraints = 0,
int  has_normal_cond = 0 
)

Initializes data given by an intermediate surface.

Parameters:
insf input set of surfaces to be smoothed.
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. Size of coef_known equal to that of insf, size of coef_known[ki] equals the number of control points in insf[ki].
num_side_constraints number of side constraints to the minimization problem
has_normal_cond indicates if normal conditions will be given

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

Compute the smoothing part of the equation system.

All weights should be positive, and their sum not exceed 1.0.

Parameters:
weight1 smoothing weight w.r.t. the 1st derivative.
weight2 smoothing weight w.r.t. the 2nd derivative.
weight3 smoothing weight w.r.t. the 3rd derivative.

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

Compute matrices for least squares approximation.

First index of all vectors corresponds to the indexing of the attached surfaces.

Parameters:
pnts points on surfaces 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::SmoothSurfSet::setNormalCond ( std::vector< std::vector< double > > &  pnts,
std::vector< std::vector< double > > &  param_pnts,
std::vector< std::vector< double > > &  pnt_weights,
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::SmoothSurfSet::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.

void Go::SmoothSurfSet::setSideConstraints ( std::vector< sideConstraintSet > &  constraints  ) 

Add linear side constraints to the system equation.

Parameters:
constraints the linear side constraints between surface coefficients.

int Go::SmoothSurfSet::equationSolve ( std::vector< boost::shared_ptr< SplineSurface > > &  surfaces  ) 

Solve equation system, and produce output surfaces.

If failing to solve the routine may throw an exception.

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

virtual void Go::SmoothSurfSet::getBasis ( double *  sb1,
double *  sb2,
int  kk1,
int  kk2,
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).
kk1 order in the first (u) direction.
kk2 order in the second (v) direction.
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.


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