Commit d2c03e50 authored by Luis Penaranda's avatar Luis Penaranda
Browse files

added "shrink all" button to the interface

parent db101c5e
Loading
Loading
Loading
Loading
+40 −69
Original line number Diff line number Diff line
@@ -58,29 +58,7 @@ void OpenGLCanvas::change_fov(double f){

    if (fov!=f && f>=1.f && f<=360.f)
        fov=f;
    if (shrink_for_all || visualization=="Moebius" || visualization=="3D Sphere"){
        if (fov<=fov_max)
            scale=1.f;
        //else if (fov>295.f)
        //    scale = 0.02f; // TODO: check this value wrt fov_max
        else {
            if (fov_scale_relation == "Naive")
                scale=fov_max/fov;
            else if (fov_scale_relation == "Square Root")
                scale=sqrtf((360.f-fov_max-fov)/(360.-2*fov_max));
            else if (fov_scale_relation == "Linear")
                scale=(360.f-fov_max-fov)/(360.f-2.f*fov_max);
            else if (fov_scale_relation == "Square Power")
                scale=powf((360.f-fov_max-fov)/(360.f-2.f*fov_max),2.f);
            else if (fov_scale_relation == "Cubic Power")
                scale=powf((360.f-fov_max-fov)/(360.f-2.f*fov_max),3.f);
            else if (fov_scale_relation == "Logarithm")
                scale=logf(expf(1.f)+(1.f-expf(1.f))*(fov-fov_max)/(360.f-2.f*fov_max));
        }
    }else{
        scale=1.f;
    }

    compute_scale();
//    scale = 0.3f;

    fprintf(stderr,"change fov, fov=%f, fov_max=%f, scale=%f\n",fov,fov_max,scale);
@@ -95,6 +73,12 @@ void OpenGLCanvas::automaxbutton(bool autovalue){
    change_fov_max(compute_auto_fov_max(fov));
}

void OpenGLCanvas::shrinkallbutton(bool shrinkvalue){
    shrink_for_all=shrinkvalue;
    compute_scale();
    updateGL();
}

void OpenGLCanvas::change_fov(int new_fov){
    if(new_fov<=360&&new_fov>=1){
        change_fov((double)new_fov);
@@ -106,28 +90,7 @@ void OpenGLCanvas::change_fov(int new_fov){
void OpenGLCanvas::change_fov_max(int new_fov_max){
    if(new_fov_max<=360.f&&new_fov_max>=1)
            fov_max=(double)new_fov_max;
    if (shrink_for_all || visualization=="Moebius" || visualization=="3D Sphere"){
        if (fov<=fov_max)
            scale=1.f;
        //else if (fov>295.f)
        //    scale = 0.02f; // TODO: check this value wrt fov_max
        else {
            if (fov_scale_relation == "Naive")
                scale=fov_max/fov;
            else if (fov_scale_relation == "Square Root")
                scale=sqrtf((360.f-fov_max-fov)/(360.f-2.f*fov_max));
            else if (fov_scale_relation == "Linear")
                scale=(360.f-fov_max-fov)/(360.f-2.f*fov_max);
            else if (fov_scale_relation == "Square Power")
                scale=powf((360.f-fov_max-fov)/(360.f-2.f*fov_max),2.f);
            else if (fov_scale_relation == "Cubic Power")
                scale=powf((360.f-fov_max-fov)/(360.f-2.f*fov_max),3.f);
            else if (fov_scale_relation == "Logarithm")
                scale=logf(expf(1.f)+(1.f-expf(1.f))*(fov-fov_max)/(360.f-2.f*fov_max));
        }
    }else{
        scale=1.f;
    }
    compute_scale();
    fprintf(stderr,"change fov_max, fov=%f, fov_max=%f, new scale=%f\n",fov,fov_max,scale);
    emit max_fov_changed((int)fov_max);
    updateGL();
@@ -167,26 +130,7 @@ void OpenGLCanvas::re_center(){
void OpenGLCanvas::change_fov_scale_relation(QString name){

    fov_scale_relation = name;
    if (shrink_for_all || visualization=="Moebius" || visualization=="3D Sphere"){
        if (fov<fov_max) scale = 1.f;
        //else if (fov>295.f) scale = 0.01f;
        else{
            if (fov_scale_relation == "Naive")
                scale=fov_max/fov;
            else if (fov_scale_relation == "Square Root")
                scale=sqrtf((360.f-fov_max-fov)/(360.f-2.f*fov_max));
            else if (fov_scale_relation == "Linear")
                scale=(360.f-fov_max-fov)/(360.f-2.f*fov_max);
            else if (fov_scale_relation == "Square Power")
                scale=powf((360.f-fov_max-fov)/(360.f-2.f*fov_max),2.f);
            else if (fov_scale_relation == "Cubic Power")
                scale=powf((360.f-fov_max-fov)/(360.f-2.f*fov_max),3.f);
            else if (fov_scale_relation == "Logarithm")
                scale=logf(expf(1.f)+(1.f-expf(1.f))*(fov-fov_max)/(360.f-2.f*fov_max));
        }
    }else{
        scale=1.f;
    }
    compute_scale();
    fprintf(stderr,"changed scale relation, scale=%f, fov_max=%f\n",scale,fov_max);
    updateGL();

@@ -194,8 +138,7 @@ void OpenGLCanvas::change_fov_scale_relation(QString name){

void OpenGLCanvas::change_visualization(QString name){
    visualization=name;
    if(!shrink_for_all && visualization!="Moebius" && visualization!="3D Sphere")
        scale=1.f;
    compute_scale();
    updateGL();
}

@@ -606,12 +549,12 @@ float OpenGLCanvas::calculate_extent(float fov_rads){
        // Write now it's olny showing the entire panorama intead of
        // the corresponging FOV.
    }
    if (visualization=="Zorin-Barr"){
    else if (visualization=="Zorin-Barr"){
        // TODO: check whether this is correct
        u=x/(-z);
        v=y/(-z);
    }
    if (visualization=="Orthographic"){
    else if (visualization=="Orthographic"){
        if(z<0.f){
            u=x;
            v=y;
@@ -653,6 +596,34 @@ int OpenGLCanvas::compute_auto_fov_max(int new_fov){
            return (90-new_fov/2);
}

// This function computes the scale, in function of the projection method,
// the fov/scale ratio and the value of shrink_for_all.
void OpenGLCanvas::compute_scale(){
    if (shrink_for_all || visualization=="Moebius" || visualization=="3D Sphere"){
        if (fov<=fov_max){
            scale=1.f;
        //else if (fov>295.f)
        //    scale = 0.02f; // TODO: check this value wrt fov_max
        }else{
            if(fov_scale_relation == "Naive")
                scale=fov_max/fov;
            else if(fov_scale_relation == "Square Root")
                scale=sqrtf((360.f-fov_max-fov)/(360.f-2.f*fov_max));
            else if(fov_scale_relation == "Linear")
                scale=(360.f-fov_max-fov)/(360.f-2.f*fov_max);
            else if(fov_scale_relation == "Square Power")
                scale=powf((360.f-fov_max-fov)/(360.f-2.f*fov_max),2.f);
            else if(fov_scale_relation == "Cubic Power")
                scale=powf((360.f-fov_max-fov)/(360.f-2.f*fov_max),3.f);
            else if(fov_scale_relation == "Logarithm")
                scale=logf(expf(1.f)+(1.f-expf(1.f))*(fov-fov_max)/(360.f-2.f*fov_max));
        }
    }else{
        scale=1.f;
    }
}


void OpenGLCanvas::resizeGL(int w, int h){
    if(w>h)
        glViewport(0,(h-w)/2,w,w);
+2 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ protected:

private:
    int compute_auto_fov_max(int);
    void compute_scale();

    char *textFileRead(char *fn);
    void setShaders();
@@ -48,6 +49,7 @@ signals:

public slots:
    void automaxbutton(bool);
    void shrinkallbutton(bool);
    void change_fov(double f);
    void change_fov(int new_fov);
    void change_fov_max(int new_fov_max);
+35 −11
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@
     </property>
    </widget>
   </item>
   <item row="15" column="1" colspan="2">
   <item row="18" column="1" colspan="2">
    <widget class="QPushButton" name="reCenter">
     <property name="text">
      <string>Re-center</string>
@@ -40,7 +40,7 @@
     </property>
    </widget>
   </item>
   <item row="0" column="0" rowspan="18">
   <item row="0" column="0" rowspan="21">
    <widget class="OpenGLCanvas" name="GLCanvas" native="true">
     <property name="sizePolicy">
      <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
@@ -96,7 +96,7 @@
     </item>
    </widget>
   </item>
   <item row="14" column="1" alignment="Qt::AlignHCenter">
   <item row="17" column="1" alignment="Qt::AlignHCenter">
    <widget class="QSlider" name="changefovmax">
     <property name="minimum">
      <number>1</number>
@@ -118,14 +118,14 @@
     </property>
    </widget>
   </item>
   <item row="16" column="1" colspan="2">
   <item row="19" column="1" colspan="2">
    <widget class="QPushButton" name="chooseFile">
     <property name="text">
      <string>Input Image</string>
     </property>
    </widget>
   </item>
   <item row="13" column="1" alignment="Qt::AlignHCenter">
   <item row="16" column="1" alignment="Qt::AlignHCenter">
    <widget class="QLCDNumber" name="fovmaxled">
     <property name="frameShape">
      <enum>QFrame::NoFrame</enum>
@@ -135,14 +135,14 @@
     </property>
    </widget>
   </item>
   <item row="17" column="1" colspan="2">
   <item row="20" column="1" colspan="2">
    <widget class="QPushButton" name="pushButton">
     <property name="text">
      <string>Close</string>
     </property>
    </widget>
   </item>
   <item row="14" column="2" alignment="Qt::AlignHCenter">
   <item row="17" column="2" alignment="Qt::AlignHCenter">
    <widget class="QSlider" name="changefov">
     <property name="minimum">
      <number>1</number>
@@ -158,7 +158,7 @@
     </property>
    </widget>
   </item>
   <item row="13" column="2" alignment="Qt::AlignHCenter">
   <item row="16" column="2" alignment="Qt::AlignHCenter">
    <widget class="QLCDNumber" name="fovled">
     <property name="frameShape">
      <enum>QFrame::NoFrame</enum>
@@ -168,7 +168,7 @@
     </property>
    </widget>
   </item>
   <item row="12" column="2" alignment="Qt::AlignHCenter">
   <item row="15" column="2" alignment="Qt::AlignHCenter">
    <widget class="QLabel" name="label_6">
     <property name="text">
      <string>FOV</string>
@@ -214,14 +214,14 @@
     </item>
    </widget>
   </item>
   <item row="12" column="1">
   <item row="15" column="1">
    <widget class="QLabel" name="label_5">
     <property name="text">
      <string>FOV max</string>
     </property>
    </widget>
   </item>
   <item row="11" column="1" colspan="2">
   <item row="14" column="1" colspan="2">
    <widget class="QCheckBox" name="automax">
     <property name="enabled">
      <bool>true</bool>
@@ -237,6 +237,13 @@
     </property>
    </widget>
   </item>
   <item row="13" column="1">
    <widget class="QCheckBox" name="shrinkAll">
     <property name="text">
      <string>Shrink all</string>
     </property>
    </widget>
   </item>
  </layout>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
@@ -260,6 +267,7 @@
    <slot>change_fov(int)</slot>
    <slot>re_center()</slot>
    <slot>automaxbutton(bool)</slot>
    <slot>shrinkallbutton(bool)</slot>
   </slots>
  </customwidget>
 </customwidgets>
@@ -489,5 +497,21 @@
    </hint>
   </hints>
  </connection>
  <connection>
   <sender>shrinkAll</sender>
   <signal>toggled(bool)</signal>
   <receiver>GLCanvas</receiver>
   <slot>shrinkallbutton(bool)</slot>
   <hints>
    <hint type="sourcelabel">
     <x>540</x>
     <y>185</y>
    </hint>
    <hint type="destinationlabel">
     <x>247</x>
     <y>249</y>
    </hint>
   </hints>
  </connection>
 </connections>
</ui>