CppNCorr
C++ ncorr Digital Image Correlation engine
Loading...
Searching...
No Matches
Strain2D.h
Go to the documentation of this file.
1/*
2 * File: Strain2D.h
3 * Author: justin
4 *
5 * Created on June 7, 2015, 10:14 PM
6 */
7
8#ifndef STRAIN2D_H
9#define STRAIN2D_H
10
11#include "Array2D.h"
12#include "Image2D.h"
13#include "ROI2D.h"
14#include "Data2D.h"
15
16namespace ncorr {
17
18namespace details {
19 class Strain2D_nlinfo_interpolator;
20}
21
22class Strain2D final {
23// ---------------------------------------------------------------------------//
24// Strain2D is a class for 2D strains. ---------------------------------------//
25// ---------------------------------------------------------------------------//
26public:
29 typedef details::Strain2D_nlinfo_interpolator nlinfo_interpolator;
30
31 // Rule of 5 and destructor ----------------------------------------------//
32 Strain2D() noexcept = default;
33 Strain2D(const Strain2D&) = default;
34 Strain2D(Strain2D&&) noexcept = default;
35 Strain2D& operator=(const Strain2D&) = default;
36 Strain2D& operator=(Strain2D&&) = default;
37 ~Strain2D() noexcept = default;
38
39 // Additional constructors -----------------------------------------------//
40 Strain2D(Array2D<double> eyy, Array2D<double> exy, Array2D<double> exx, const ROI2D &roi, difference_type scalefactor) : // r-value
41 eyy(std::move(eyy), roi, scalefactor), exy(std::move(exy), roi, scalefactor), exx(std::move(exx), roi, scalefactor) { }
42
43 // Static factory methods ------------------------------------------------//
44 static Strain2D load(std::ifstream&);
45
46 // Operators interface ---------------------------------------------------//
47 friend std::ostream& operator<<(std::ostream&, const Strain2D&);
48 friend void imshow(const Strain2D&, difference_type delay);
49 friend bool isequal(const Strain2D&, const Strain2D&);
50 friend void save(const Strain2D&, std::ofstream&);
51
52 // Access ----------------------------------------------------------------//
53 // Note that Strain2D is immutable, so all access is const.
54 difference_type data_height() const { return eyy.data_height(); }
55 difference_type data_width() const { return eyy.data_width(); }
56 const Data2D& get_eyy() const { return eyy; }
57 const Data2D& get_exy() const { return exy; }
58 const Data2D& get_exx() const { return exx; }
59 const ROI2D& get_roi() const { return eyy.get_roi(); }
61
62 // Interpolator ----------------------------------------------------------//
64
65 // Utility ---------------------------------------------------------------//
66 std::string size_string() const { return eyy.size_string(); }
67 std::string size_2D_string() const { return eyy.size_2D_string(); }
68
69private:
70 Data2D eyy; // Immutable - Data2D has pointer semantics
71 Data2D exy; // Immutable - Data2D has pointer semantics
72 Data2D exx; // Immutable - Data2D has pointer semantics
73};
74
75namespace details {
76 class Strain2D_nlinfo_interpolator final {
77 public:
78 typedef Strain2D::difference_type difference_type;
79 typedef Strain2D::coords coords;
80
81 friend Strain2D;
82
83 // Rule of 5 and destructor --------------------------------------//
84 Strain2D_nlinfo_interpolator() noexcept = default;
85 Strain2D_nlinfo_interpolator(const Strain2D_nlinfo_interpolator&) = default;
86 Strain2D_nlinfo_interpolator(Strain2D_nlinfo_interpolator&&) = default;
87 Strain2D_nlinfo_interpolator& operator=(const Strain2D_nlinfo_interpolator&) = default;
88 Strain2D_nlinfo_interpolator& operator=(Strain2D_nlinfo_interpolator&&) = default;
89 ~Strain2D_nlinfo_interpolator() noexcept = default;
90
91 // Additional Constructors ---------------------------------------//
92 Strain2D_nlinfo_interpolator(const Strain2D &strain, difference_type region_idx, INTERP interp_type) :
93 eyy_interp(strain.get_eyy().get_nlinfo_interpolator(region_idx,interp_type)),
94 exy_interp(strain.get_exy().get_nlinfo_interpolator(region_idx,interp_type)),
95 exx_interp(strain.get_exx().get_nlinfo_interpolator(region_idx,interp_type)) { }
96
97 // Access methods ------------------------------------------------//
98 std::tuple<double,double,double> operator()(double p1, double p2) const { return std::make_tuple(eyy_interp(p1,p2), exy_interp(p1,p2), exx_interp(p1,p2)); }
99 std::tuple<const Array2D<double>&,const Array2D<double>&,const Array2D<double>&> first_order(double p1, double p2) const { return std::make_tuple(eyy_interp.first_order(p1,p2), exy_interp.first_order(p1,p2), exx_interp.first_order(p1,p2)); }
100
101 private:
102 Data2D::nlinfo_interpolator eyy_interp; // must have copy of interpolator
103 Data2D::nlinfo_interpolator exy_interp; // must have copy of interpolator
104 Data2D::nlinfo_interpolator exx_interp; // must have copy of interpolator
105 };
106}
107
108}
109
110#endif /* STRAIN2D_H */
111
details::Data2D_nlinfo_interpolator nlinfo_interpolator
Definition Data2D.h:35
const ROI2D & get_roi() const
Definition Data2D.h:65
difference_type get_scalefactor() const
Definition Data2D.h:66
std::ptrdiff_t difference_type
Definition Data2D.h:33
difference_type data_width() const
Definition Data2D.h:63
std::string size_string() const
Definition Data2D.h:72
std::pair< difference_type, difference_type > coords
Definition Data2D.h:34
difference_type data_height() const
Definition Data2D.h:62
std::string size_2D_string() const
Definition Data2D.h:73
const ROI2D & get_roi() const
Definition Strain2D.h:59
friend void imshow(const Strain2D &, difference_type delay)
Definition Strain2D.cpp:38
Data2D::difference_type difference_type
Definition Strain2D.h:27
friend void save(const Strain2D &, std::ofstream &)
Definition Strain2D.cpp:50
details::Strain2D_nlinfo_interpolator nlinfo_interpolator
Definition Strain2D.h:29
const Data2D & get_exx() const
Definition Strain2D.h:58
const Data2D & get_exy() const
Definition Strain2D.h:57
difference_type data_width() const
Definition Strain2D.h:55
difference_type get_scalefactor() const
Definition Strain2D.h:60
std::string size_string() const
Definition Strain2D.h:66
difference_type data_height() const
Definition Strain2D.h:54
Data2D::coords coords
Definition Strain2D.h:28
friend std::ostream & operator<<(std::ostream &, const Strain2D &)
Definition Strain2D.cpp:30
nlinfo_interpolator get_nlinfo_interpolator(difference_type, INTERP) const
Definition Strain2D.cpp:58
friend bool isequal(const Strain2D &, const Strain2D &)
Definition Strain2D.cpp:46
const Data2D & get_eyy() const
Definition Strain2D.h:56
Strain2D() noexcept=default
static Strain2D load(std::ifstream &)
Definition Strain2D.cpp:13
std::string size_2D_string() const
Definition Strain2D.h:67
INTERP
Definition Array2D.h:77