diff --git a/openglcanvas.cpp b/openglcanvas.cpp
index c3e8d249e24356e8868f8d4ea1dd72f9571cf5a3..e0c4ba2cf0cf4744b97f346dc9a950b3ceed3277 100644
--- a/openglcanvas.cpp
+++ b/openglcanvas.cpp
@@ -37,7 +37,7 @@ OpenGLCanvas::OpenGLCanvas(QWidget *parent) :
scale = 1.0f;
center_lambda = 0.f;
center_phi = 0.f;
- fov_scale_relation = "Square Root";
+ fov_scale_relation = "Naive";
visualization = "Perspective";
auto_fov_max=false;
@@ -83,17 +83,15 @@ void OpenGLCanvas::change_fov(double f){
}
+void OpenGLCanvas::automaxbutton(bool autovalue){
+ auto_fov_max=autovalue;
+}
+
void OpenGLCanvas::change_fov(int new_fov){
- if(new_fov<=360&&new_fov>=1)
- change_fov((double)new_fov);
- if(auto_fov_max){
- if(new_fov<60)
- change_fov_max(60);
- else
- if(new_fov>180)
- change_fov_max(1);
- else
- change_fov_max(90-new_fov/2);
+ if(new_fov<=360&&new_fov>=1){
+ change_fov((double)new_fov);
+ if(auto_fov_max)
+ change_fov_max(compute_auto_fov_max(new_fov));
}
}
@@ -543,6 +541,16 @@ void OpenGLCanvas::define_triangle_indices(unsigned int * indices, int m, int n)
}
+// This function computes a new value of the maximum fov and must be called
+// when the fov is changed and the auto setting is enabled.
+int OpenGLCanvas::compute_auto_fov_max(int new_fov){
+ if(new_fov<60)
+ return 60;
+ if(new_fov>180)
+ return 1;
+ //if(new_fov>60)
+ return (90-new_fov/2);
+}
void OpenGLCanvas::resizeGL(int w, int h){
if(w>h)
@@ -666,15 +674,8 @@ void OpenGLCanvas::wheelEvent(QWheelEvent *event){
}else{
int new_fov=fov+event->delta()/30;
change_fov((double)new_fov);
- if(auto_fov_max){
- if(new_fov<60)
- change_fov_max(60);
- else
- if(new_fov>180)
- change_fov_max(1);
- else
- change_fov_max(90-new_fov/2);
- }
+ if(auto_fov_max)
+ change_fov_max(compute_auto_fov_max(new_fov));
}
}
}
diff --git a/openglcanvas.h b/openglcanvas.h
index ee084a82ed906ce1097749fc345ced7e46fe65eb..e614574031b7152c3caa03d457fe29cd92e1e78e 100644
--- a/openglcanvas.h
+++ b/openglcanvas.h
@@ -32,6 +32,9 @@ protected:
float calculate_extent(float fov_rads);
void define_triangle_indices(unsigned int * indices, int m, int n);
+private:
+ int compute_auto_fov_max(int);
+
char *textFileRead(char *fn);
void setShaders();
void mousePressEvent(QMouseEvent *event);
@@ -44,6 +47,7 @@ signals:
void max_fov_changed(int new_max_fov);
public slots:
+ void automaxbutton(bool);
void change_fov(double f);
void change_fov(int new_fov);
void change_fov_max(int new_fov_max);
diff --git a/panowindow1.ui b/panowindow1.ui
index fbfa7a36ce6a79e1dd4a09ac99c62476d2dd04bc..051fa5c5f1150e1dd5a5ee345e50379edd1016c6 100644
--- a/panowindow1.ui
+++ b/panowindow1.ui
@@ -14,7 +14,9 @@
Panoramic
-
+
+
+
-
@@ -24,7 +26,7 @@
- -
+
-
Re-center
@@ -38,7 +40,7 @@
- -
+
-
@@ -54,13 +56,6 @@
- -
-
-
- FOV max
-
-
-
-
@@ -71,12 +66,12 @@
-
- Square Root
+ Naive
-
- Naive
+ Square Root
-
@@ -101,7 +96,7 @@
- -
+
-
1
@@ -123,33 +118,14 @@
- -
-
-
-
-
- Perspective
-
-
- -
-
- 3D Sphere
-
-
- -
-
- Equi-Rectangular
-
-
-
-
- -
+
-
Input Image
- -
+
-
QFrame::NoFrame
@@ -159,14 +135,14 @@
- -
+
-
Close
- -
+
-
1
@@ -182,7 +158,7 @@
- -
+
-
QFrame::NoFrame
@@ -192,13 +168,55 @@
- -
+
-
FOV
+ -
+
+
-
+
+ Perspective
+
+
+ -
+
+ 3D Sphere
+
+
+ -
+
+ Equi-Rectangular
+
+
+
+
+ -
+
+
+ FOV max
+
+
+
+ -
+
+
+ true
+
+
+
+ 0
+ 0
+
+
+
+ Auto FOV max
+
+
+
@@ -221,6 +239,7 @@
change_fov_max(int)
change_fov(int)
re_center()
+ automaxbutton(bool)
@@ -233,8 +252,8 @@
close()
- 596
- 409
+ 640
+ 490
629
@@ -269,8 +288,8 @@
106
- 496
- 123
+ 492
+ 132
@@ -281,8 +300,8 @@
change_input_image()
- 566
- 258
+ 640
+ 457
247
@@ -329,8 +348,8 @@
re_center()
- 569
- 444
+ 640
+ 424
250
@@ -345,8 +364,8 @@
change_fov_max(int)
- 512
- 363
+ 546
+ 391
250
@@ -381,8 +400,8 @@
245
- 606
- 380
+ 629
+ 236
@@ -397,8 +416,8 @@
248
- 532
- 380
+ 555
+ 236
@@ -413,8 +432,8 @@
249
- 606
- 197
+ 629
+ 236
@@ -429,8 +448,24 @@
249
- 532
- 197
+ 555
+ 236
+
+
+
+
+ automax
+ toggled(bool)
+ GLCanvas
+ automaxbutton(bool)
+
+
+ 504
+ 174
+
+
+ 454
+ 172