https://mooseframework.inl.gov
MeshBaseImageSampler.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 // MOOSE includes
13 #include "FileRangeBuilder.h"
14 #include "ConsoleStream.h"
15 
16 #include "libmesh/bounding_box.h"
17 #include "libmesh/mesh_base.h"
18 
19 // VTK includes
20 #ifdef LIBMESH_HAVE_VTK
21 
22 // Some VTK header files have extra semi-colons in them, and clang
23 // loves to warn about it...
24 #include "libmesh/ignore_warnings.h"
25 
26 // If VTK is built without an external nlohmann, then it assumes it
27 // will never be compiled against another nlohmann, and it includes
28 // its own copy but modified with macro tricks. We have probably
29 // already included nlohmann headers, which we didn't tamper with
30 // because OF COURSE NOT, but now we need to take care not to let the
31 // include guards prevent them from including their copy with their
32 // different namespace.
33 #ifndef MOOSE_VTK_UNDEF_NLOHMANNJSON_HEADER_GUARDS
34 #define MOOSE_VTK_UNDEF_NLOHMANNJSON_HEADER_GUARDS 0
35 // Detect if VTK built with external nlohmann
36 #ifdef __has_include
37 #if __has_include("vtk_nlohmannjson.h")
38 #include "vtk_nlohmannjson.h"
39 #if !VTK_MODULE_USE_EXTERNAL_vtknlohmannjson
40 #undef MOOSE_VTK_UNDEF_NLOHMANNJSON_HEADER_GUARDS
41 #define MOOSE_VTK_UNDEF_NLOHMANNJSON_HEADER_GUARDS 1
42 #endif // !VTK_MODULE_USE_EXTERNAL_vtknlohmannjson
43 #endif // __has_include("vtk_nlohmannjson.h")
44 #else // __has_include
45 #error "Could not auto-detect whether VTK built with external nlohmann json. \
46 Define MOOSE_VTK_UNDEF_NLOHMANNJSON_HEADER_GUARDS=1 if built with vendored nlohmann \
47 , otherwise define MOOSE_VTK_UNDEF_NLOHMANNJSON_HEADER_GUARDS=0"
48 #endif // __has_include
49 #endif // MOOSE_VTK_UNDEF_NLOHMANNJSON_HEADER_GUARDS
50 
51 #if MOOSE_VTK_UNDEF_NLOHMANNJSON_HEADER_GUARDS && !defined(MOOSE_VTK_NLOHMANN_INCLUDED)
52 #undef INCLUDE_NLOHMANN_JSON_FWD_HPP_
53 #define MOOSE_VTK_NLOHMANN_INCLUDED
54 #endif
55 
56 #include "vtkSmartPointer.h"
57 #include "vtkPNGReader.h"
58 #include "vtkTIFFReader.h"
59 #include "vtkImageData.h"
60 #include "vtkStringArray.h"
61 #include "vtkImageThreshold.h"
62 #include "vtkImageNormalize.h"
63 #include "vtkImageCast.h"
64 #include "vtkImageShiftScale.h"
65 #include "vtkImageMagnitude.h"
66 #include "vtkImageFlip.h"
67 
68 // If VTK is built without an external nlohmann, then it assumes it
69 // will never be compiled against another nlohmann, and it defines an
70 // nlohmann macro to point to its vtknlohmann copy. In MOOSE their
71 // assumption is wrong.
72 #undef nlohmann
73 
74 #include "libmesh/restore_warnings.h"
75 
76 #endif
77 
82 {
83 public:
93 
94  MeshBaseImageSampler(const InputParameters & parameters);
95 
100  virtual libMesh::Real sample(const libMesh::Point & p);
101 
105  virtual void setupImageSampler(libMesh::MeshBase & mesh);
106 
107 protected:
111  void vtkShiftAndScale();
112 
116  void vtkThreshold();
117 
123  void vtkMagnitude();
124 
130  void vtkFlip();
131 
132 private:
133 #ifdef LIBMESH_HAVE_VTK
134 
136  vtkSmartPointer<vtkStringArray> _files;
137 
139  vtkImageData * _data;
140 
142  vtkAlgorithmOutput * _algorithm;
143 
145  vtkSmartPointer<vtkImageReader2> _image;
146 
148  vtkSmartPointer<vtkImageThreshold> _image_threshold;
149 
151  vtkSmartPointer<vtkImageShiftScale> _shift_scale_filter;
152 
154  vtkSmartPointer<vtkImageMagnitude> _magnitude_filter;
155 
157  vtkSmartPointer<vtkImageFlip> _flip_filter;
158 #endif
159 
165 #ifdef LIBMESH_HAVE_VTK
166  vtkSmartPointer<vtkImageFlip> imageFlip(const int & axis);
167 #endif
168 
171 
173  std::vector<int> _dims;
174 
177 
179  std::vector<double> _voxel;
180 
182 #ifdef LIBMESH_HAVE_VTK
183  unsigned int _component;
184 #endif
185 
188 
191 
194 };
vtkSmartPointer< vtkImageMagnitude > _magnitude_filter
Pointer to the magnitude filter.
A helper class for re-directing output streams to Console output objects form MooseObjects.
Definition: ConsoleStream.h:30
void vtkMagnitude()
Convert the image to greyscale.
std::vector< int > _dims
Pixel dimension of image.
virtual libMesh::Real sample(const libMesh::Point &p)
Return the pixel value for the given point.
vtkSmartPointer< vtkImageFlip > imageFlip(const int &axis)
Helper method for flipping image.
vtkAlgorithmOutput * _algorithm
VTK-6 seems to work better in terms of "algorithm outputs" rather than vtkImageData pointers...
const InputParameters & _is_pars
Parameters for interface.
MeshBase & mesh
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
virtual void setupImageSampler(libMesh::MeshBase &mesh)
Perform initialization of image data.
libMesh::Point _physical_dims
Physical dimensions of image.
static InputParameters validParams()
Constructor.
MeshBaseImageSampler(const InputParameters &parameters)
vtkSmartPointer< vtkImageFlip > _flip_filter
Pointers to image flipping filter. May be used for x, y, or z.
libMesh::BoundingBox _bounding_box
Bounding box for testing points.
unsigned int _component
Component to extract.
A helper class for reading and sampling images using VTK, but with a Meshbase object.
vtkSmartPointer< vtkStringArray > _files
List of file names to extract data.
To be called in the validParams functions of classes that need to operate on ranges of files...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
vtkImageData * _data
Complete image data.
vtkSmartPointer< vtkImageShiftScale > _shift_scale_filter
Pointer to the shift and scaling filter.
vtkSmartPointer< vtkImageThreshold > _image_threshold
Pointer to thresholding filter.
std::vector< double > _voxel
Physical pixel size.
void vtkFlip()
Perform image flipping.
libMesh::Point _origin
Origin of image.
void vtkThreshold()
Perform thresholding.
vtkSmartPointer< vtkImageReader2 > _image
Complete image data.
ConsoleStream _is_console
Create a console stream object for this helper class.
void vtkShiftAndScale()
Apply image re-scaling using the vtkImageShiftAndRescale object.