You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.3 KiB
C
114 lines
3.3 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkImplicitSum.h
|
||
|
|
||
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||
|
All rights reserved.
|
||
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||
|
|
||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||
|
PURPOSE. See the above copyright notice for more information.
|
||
|
|
||
|
=========================================================================*/
|
||
|
/**
|
||
|
* @class vtkImplicitSum
|
||
|
* @brief implicit sum of other implicit functions
|
||
|
*
|
||
|
* vtkImplicitSum produces a linear combination of other implicit functions.
|
||
|
* The contribution of each function is weighted by a scalar coefficient.
|
||
|
* The NormalizeByWeight option normalizes the output so that the
|
||
|
* scalar weights add up to 1. Note that this function gives accurate
|
||
|
* sums and gradients only if the input functions are linear.
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkImplicitSum_h
|
||
|
#define vtkImplicitSum_h
|
||
|
|
||
|
#include "vtkCommonDataModelModule.h" // For export macro
|
||
|
#include "vtkImplicitFunction.h"
|
||
|
|
||
|
class vtkDoubleArray;
|
||
|
class vtkImplicitFunctionCollection;
|
||
|
|
||
|
class VTKCOMMONDATAMODEL_EXPORT vtkImplicitSum : public vtkImplicitFunction
|
||
|
{
|
||
|
public:
|
||
|
static vtkImplicitSum* New();
|
||
|
|
||
|
vtkTypeMacro(vtkImplicitSum, vtkImplicitFunction);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Evaluate implicit function using current functions and weights.
|
||
|
*/
|
||
|
using vtkImplicitFunction::EvaluateFunction;
|
||
|
double EvaluateFunction(double x[3]) override;
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Evaluate gradient of the weighted sum of functions. Input functions
|
||
|
* should be linear.
|
||
|
*/
|
||
|
void EvaluateGradient(double x[3], double g[3]) override;
|
||
|
|
||
|
/**
|
||
|
* Override modified time retrieval because of object dependencies.
|
||
|
*/
|
||
|
vtkMTimeType GetMTime() override;
|
||
|
|
||
|
/**
|
||
|
* Add another implicit function to the list of functions, along with a
|
||
|
* weighting factor.
|
||
|
*/
|
||
|
void AddFunction(vtkImplicitFunction* in, double weight);
|
||
|
|
||
|
/**
|
||
|
* Add another implicit function to the list of functions, weighting it by
|
||
|
* a factor of 1.
|
||
|
*/
|
||
|
void AddFunction(vtkImplicitFunction* in) { this->AddFunction(in, 1.0); }
|
||
|
|
||
|
/**
|
||
|
* Remove all functions from the list.
|
||
|
*/
|
||
|
void RemoveAllFunctions();
|
||
|
|
||
|
/**
|
||
|
* Set the weight (coefficient) of the given function to be weight.
|
||
|
*/
|
||
|
void SetFunctionWeight(vtkImplicitFunction* f, double weight);
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* When calculating the function and gradient values of the
|
||
|
* composite function, setting NormalizeByWeight on will divide the
|
||
|
* final result by the total weight of the component functions.
|
||
|
* This process does not otherwise normalize the gradient vector.
|
||
|
* By default, NormalizeByWeight is off.
|
||
|
*/
|
||
|
vtkSetMacro(NormalizeByWeight, vtkTypeBool);
|
||
|
vtkGetMacro(NormalizeByWeight, vtkTypeBool);
|
||
|
vtkBooleanMacro(NormalizeByWeight, vtkTypeBool);
|
||
|
//@}
|
||
|
|
||
|
protected:
|
||
|
vtkImplicitSum();
|
||
|
~vtkImplicitSum() override;
|
||
|
|
||
|
vtkImplicitFunctionCollection* FunctionList;
|
||
|
vtkDoubleArray* Weights;
|
||
|
double TotalWeight;
|
||
|
|
||
|
void CalculateTotalWeight(void);
|
||
|
vtkTypeBool NormalizeByWeight;
|
||
|
|
||
|
private:
|
||
|
vtkImplicitSum(const vtkImplicitSum&) = delete;
|
||
|
void operator=(const vtkImplicitSum&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|