comac_desk_app/ThirdpartyLibs/Libs/windows-x86_64/vtk/include/vtkImageCityBlockDistance.h

61 lines
2.3 KiB
C
Raw Permalink Normal View History

2024-11-21 11:50:43 +08:00
/*=========================================================================
Program: Visualization Toolkit
Module: vtkImageCityBlockDistance.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 vtkImageCityBlockDistance
* @brief 1,2 or 3D distance map.
*
* vtkImageCityBlockDistance creates a distance map using the city block
* (Manhatten) distance measure. The input is a mask. Zero values are
* considered boundaries. The output pixel is the minimum of the input pixel
* and the distance to a boundary (or neighbor value + 1 unit).
* distance values are calculated in pixels.
* The filter works by taking 6 passes (for 3d distance map): 2 along each
* axis (forward and backward). Each pass keeps a running minimum distance.
* For some reason, I preserve the sign if the distance. If the input
* mask is initially negative, the output distances will be negative.
* Distances maps can have inside (negative regions)
* and outsides (positive regions).
*/
#ifndef vtkImageCityBlockDistance_h
#define vtkImageCityBlockDistance_h
#include "vtkImageDecomposeFilter.h"
#include "vtkImagingGeneralModule.h" // For export macro
class VTKIMAGINGGENERAL_EXPORT vtkImageCityBlockDistance : public vtkImageDecomposeFilter
{
public:
static vtkImageCityBlockDistance* New();
vtkTypeMacro(vtkImageCityBlockDistance, vtkImageDecomposeFilter);
void PrintSelf(ostream& os, vtkIndent indent) override;
protected:
vtkImageCityBlockDistance();
~vtkImageCityBlockDistance() override = default;
int IterativeRequestUpdateExtent(vtkInformation* in, vtkInformation* out) override;
int IterativeRequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
void AllocateOutputScalars(
vtkImageData* outData, int* updateExtent, int* wholeExtent, vtkInformation* outInfo);
private:
vtkImageCityBlockDistance(const vtkImageCityBlockDistance&) = delete;
void operator=(const vtkImageCityBlockDistance&) = delete;
};
#endif