https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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. \
46Define 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 "vtkImageBinaryThreshold.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{
83public:
93
94 MeshBaseImageSampler(const InputParameters & parameters);
95
100 virtual libMesh::Real sample(const libMesh::Point & p);
101
106
107protected:
111 void vtkShiftAndScale();
112
116 void vtkThreshold();
117
123 void vtkMagnitude();
124
130 void vtkFlip();
131
132private:
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<vtkImageBinaryThreshold> _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};
A helper class for re-directing output streams to Console output objects form MooseObjects.
To be called in the validParams functions of classes that need to operate on ranges of files.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
A helper class for reading and sampling images using VTK, but with a Meshbase object.
std::vector< int > _dims
Pixel dimension of image.
virtual libMesh::Real sample(const libMesh::Point &p)
Return the pixel value for the given point.
libMesh::Point _physical_dims
Physical dimensions of image.
std::vector< double > _voxel
Physical pixel size.
static InputParameters validParams()
Constructor.
vtkAlgorithmOutput * _algorithm
VTK-6 seems to work better in terms of "algorithm outputs" rather than vtkImageData pointers....
virtual void setupImageSampler(libMesh::MeshBase &mesh)
Perform initialization of image data.
vtkSmartPointer< vtkImageShiftScale > _shift_scale_filter
Pointer to the shift and scaling filter.
vtkSmartPointer< vtkImageReader2 > _image
Complete image data.
const InputParameters & _is_pars
Parameters for interface.
unsigned int _component
Component to extract.
vtkSmartPointer< vtkStringArray > _files
List of file names to extract data.
vtkSmartPointer< vtkImageMagnitude > _magnitude_filter
Pointer to the magnitude filter.
libMesh::Point _origin
Origin of image.
ConsoleStream _is_console
Create a console stream object for this helper class.
void vtkThreshold()
Perform thresholding.
vtkImageData * _data
Complete image data.
vtkSmartPointer< vtkImageFlip > _flip_filter
Pointers to image flipping filter. May be used for x, y, or z.
void vtkMagnitude()
Convert the image to greyscale.
void vtkFlip()
Perform image flipping.
vtkSmartPointer< vtkImageFlip > imageFlip(const int &axis)
Helper method for flipping image.
void vtkShiftAndScale()
Apply image re-scaling using the vtkImageShiftAndRescale object.
vtkSmartPointer< vtkImageBinaryThreshold > _image_threshold
Pointer to thresholding filter.
libMesh::BoundingBox _bounding_box
Bounding box for testing points.
MeshBase & mesh
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real