1111
1212// Program Header files
1313#include " ./dicinterpolator.hpp"
14-
14+ #include " ./dicutil.hpp"
15+ #include " defines.hpp"
16+ #include " ./dicsignalhandler.hpp"
1517
1618
1719inline int idx_from_2d (const int x, const int y, const int length){
@@ -49,10 +51,27 @@ Interpolator::Interpolator(double*img, int px_hori, int px_vert){
4951
5052 // interpolator data
5153 std::vector<double > data (px_hori,0 );
54+
55+
56+ indicators::ProgressBar bar;
57+ std::atomic<int > current_progress = 0 ;
58+ int prev_pct = 0 ;
59+ int niters = px_vert+px_hori+px_hori;
60+
61+ if (g_debug_level == 1 ){
62+ std::string bar_title = " Creating Interpolator: " ;
63+ util::create_progress_bar (bar, bar_title, niters);
64+ }
65+
5266
5367 // #pragma omp parallel for
5468 for (int j = 0 ; j < px_vert; j++){
5569
70+ // exit if ctrl+C
71+ if (stop_request){
72+ continue ;
73+ }
74+
5675 // get 1D data
5776 for (int i = 0 ; i < px_hori; i++) {
5877 data[i] = image[j*px_hori + i];
@@ -62,13 +81,24 @@ Interpolator::Interpolator(double*img, int px_hori, int px_vert){
6281 for (int i = 0 ; i < px_hori; i++){
6382 dx[j*px_hori + i] = cspline_eval_deriv (px_x, data, px_x[i], px_hori);
6483 }
84+
85+ // update progress bar if enabled
86+ if (g_debug_level == 1 ){
87+ int progress = current_progress.fetch_add (1 );
88+ util::update_progress_bar (bar, progress, niters, prev_pct);
89+ }
6590 }
6691
6792 data.resize (px_vert,0 );
6893
6994 // #pragma omp parallel for
7095 for (int i = 0 ; i < px_hori; ++i) {
7196
97+ // exit if ctrl+C
98+ if (stop_request){
99+ continue ;
100+ }
101+
72102 // get 1D data
73103 for (int j = 0 ; j < px_vert; j++){
74104 data[j] = image[j*px_hori + i];
@@ -78,6 +108,12 @@ Interpolator::Interpolator(double*img, int px_hori, int px_vert){
78108 for (int j = 0 ; j < px_vert; j++){
79109 dy[j*px_hori + i] = cspline_eval_deriv (px_y, data, px_y[j], px_vert);
80110 }
111+
112+ // update progress bar if enabled
113+ if (g_debug_level == 1 ){
114+ int progress = current_progress.fetch_add (1 );
115+ util::update_progress_bar (bar, progress, niters, prev_pct);
116+ }
81117 }
82118
83119
@@ -86,6 +122,11 @@ Interpolator::Interpolator(double*img, int px_hori, int px_vert){
86122 // #pragma omp parallel for
87123 for (int j = 0 ; j < px_vert; j++){
88124
125+ // exit if ctrl+C
126+ if (stop_request){
127+ continue ;
128+ }
129+
89130 // get 1D data
90131 for (int i = 0 ; i < px_hori; i++) {
91132 data[i] = dy[j*px_hori + i];
@@ -95,6 +136,20 @@ Interpolator::Interpolator(double*img, int px_hori, int px_vert){
95136 for (int i = 0 ; i < px_hori; i++){
96137 dxy[j*px_hori + i] = cspline_eval_deriv (px_x, data, px_x[i], px_hori);
97138 }
139+
140+ // update progress bar if enabled
141+ if (g_debug_level == 1 ){
142+ int progress = current_progress.fetch_add (1 );
143+ util::update_progress_bar (bar, progress, niters, prev_pct);
144+ }
145+ }
146+
147+
148+ if (g_debug_level == 1 ){
149+ int progress = current_progress;
150+ util::update_progress_bar (bar, progress-1 , niters, prev_pct);
151+ bar.mark_as_completed ();
152+ indicators::show_console_cursor (true );
98153 }
99154}
100155
0 commit comments