]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/pPlotter.cxx
#3347 creaMaracasVisu Bug New Normal - ViewerMPR2D Reset back position when set...
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / pPlotter / pPlotter.cxx
index 769aa45398c039accc201b59d30f2670ef020f43..c6d803e05e23014b2513cfbe8f2c00c944754fb8 100644 (file)
@@ -1,3 +1,28 @@
+/*# ---------------------------------------------------------------------
+#
+# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+#                        pour la Sant�)
+# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+# Previous Authors : Laurent Guigues, Jean-Pierre Roux
+# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+#
+#  This software is governed by the CeCILL-B license under French law and
+#  abiding by the rules of distribution of free software. You can  use,
+#  modify and/ or redistribute the software under the terms of the CeCILL-B
+#  license as circulated by CEA, CNRS and INRIA at the following URL
+#  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+#  or in the file LICENSE.txt.
+#
+#  As a counterpart to the access to the source code and  rights to copy,
+#  modify and redistribute granted by the license, users are provided only
+#  with a limited warranty  and the software's author,  the holder of the
+#  economic rights,  and the successive licensors  have only  limited
+#  liability.
+#
+#  The fact that you are presently reading this means that you have had
+#  knowledge of the CeCILL-B license and that you accept its terms.
+# ------------------------------------------------------------------------ */
+
 //---------------------------------------------------------------------------------------------
 // Class definition include
 //---------------------------------------------------------------------------------------------
@@ -100,7 +125,7 @@ END_EVENT_TABLE()
        {
                SetBackgroundColour(wxColour(255,255,255));
                m_plot = new pPlotterWindow( this, -1, wxPoint(0,0), wxSize(nWidth,nHeight), wxSUNKEN_BORDER );
-               
+               actualFunction =NULL;
                // Adding the axis layers to the plotter
                m_plot->AddLayer( new pPlotterScaleX() );
                m_plot->AddLayer( new pPlotterScaleY() );  
@@ -142,14 +167,14 @@ END_EVENT_TABLE()
                mpWindow* mplotWindow = ((mpWindow*)m_plot);
                float minReal_X = 0; //(float)mplotWindow->getMinScrX();
                float maxReal_X =(float)mplotWindow->getMaxScrX();
-               float scrX=(float)mplotWindow->GetScrX()-100;
-               double scaleX=(scrX/(maxReal_X))* (mplotWindow->getZoomFactor()); // ........
+               //float scrX=(float)mplotWindow->GetScrX()-100; // JPRx
+               //double scaleX=(scrX/(maxReal_X))* (mplotWindow->getZoomFactor()); // JPRx
                        
                // Creating the color bar with values according to the plotter added widget
                color_bar = new pColorBar(this, (m_plot->GetSize()).GetWidth(),40, true);
-               color_bar -> setRepresentedValues (minReal_X, maxReal_X);
+               color_bar -> setRepresentedValues ((int)minReal_X, (int)maxReal_X);
                color_bar -> setDeviceBlitStart (70,0);
-               color_bar -> setVisibleRange (minReal_X, maxReal_X);
+               color_bar -> setVisibleRange ((int)minReal_X,(int) maxReal_X);
                color_bar -> setDeviceEndMargin (50);
                
                
@@ -182,8 +207,9 @@ END_EVENT_TABLE()
 
 
        pPlotter :: ~pPlotter ()
-       {
-
+       {       
+               
+               
        }
 
 //---------------------------------------------------------------------------------------------
@@ -193,46 +219,49 @@ END_EVENT_TABLE()
 Set the bars according to the actual function 
 */
 
-       void pPlotter::setAll()
+void pPlotter::setAll()
 {
        actualFunction = m_plot->getActualFunction();
-
        if (actualFunction != NULL)
        {
                barrange -> setActiveStateTo(true);
                color_bar -> setActiveStateTo(true);
-
                text.Clear();
                text = _T("minX=");
                double realMin_X = actualFunction->getMinX();
+//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
+#if wxMAJOR_VERSION <= 2
                text = text + realMin_X;        
+#else
+               text = text + wxString::FromDouble( realMin_X );        
+#endif
                text = text + _T(" maxX=");
                double realMax_X = actualFunction->getMaxX();
+//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
+#if wxMAJOR_VERSION <= 2
                text = text + realMax_X;
-
+#else
+               text = text + wxString::FromDouble( realMax_X );        
+#endif
                int minShowed = actualFunction->getMinXShowed();
                int maxShowed = actualFunction->getMaxXShowed();
-
                barrange -> setRepresentedValues (realMin_X, realMax_X);
                barrange->SetStart( minShowed );
                barrange->SetEnd( maxShowed );
-
-
                std::vector<pColorPoint *> actualColorPoints;
-               actualFunction -> getColorPoints(actualColorPoints);
+               actualFunction->getColorPoints(actualColorPoints);
                if(actualColorPoints.empty())
-                       color_bar ->reinitiateColorBar (realMin_X, realMax_X);
-               else
-                       color_bar ->reinitiateColorBarTo(actualColorPoints);
-
-               color_bar -> setVisibleRange (minShowed, maxShowed);
-               
+               {
+                       color_bar->reinitiateColorBar (realMin_X, realMax_X);
+               } else {
+                       color_bar->reinitiateColorBarTo(actualColorPoints);
+               }
+               color_bar->setVisibleRange (minShowed, maxShowed);
                // Refresh
-               color_bar -> RefreshForce();
-               barrange -> RefreshForce();     
-               
+               color_bar->RefreshForce();
+               barrange->RefreshForce();       
                sendTMessage(text);
-       }
+       } // if actualFunction
 }
 
        
@@ -243,11 +272,10 @@ Set the bars according to the actual function
 //-----------------------------------------------------------------------------------------------------
 // Updating methods for occured events in the color bar
 //-----------------------------------------------------------------------------------------------------
-void  pPlotter :: onAdded_ColorPoint(wxCommandEvent& event)
+void  pPlotter::onAdded_ColorPoint(wxCommandEvent& event)
 {
        text.Clear();
        text = _T( "Last event was on color bar: Color point added, total#");
-       
        actualFunction = m_plot->getActualFunction();
        if(actualFunction!=NULL)
        {               
@@ -255,41 +283,38 @@ void  pPlotter :: onAdded_ColorPoint(wxCommandEvent& event)
                color_bar ->getAddedColorsPointsList(actualColorPoints);
                actualFunction -> setColorPoints(actualColorPoints);
                text << actualColorPoints.size();
-
                sendTMessage(text);
        }
 }
+
 void  pPlotter :: onRemoved_ColorPoint(wxCommandEvent& event)
 {      
        text.Clear();
        text = _T( "Last event on color bar: Color point removed total#");
-
        actualFunction = m_plot->getActualFunction();
        std::vector<pColorPoint *> actualColorPoints;
        color_bar ->getAddedColorsPointsList(actualColorPoints);
        actualFunction -> setColorPoints(actualColorPoints);
        text << actualColorPoints.size();
-       
        sendTMessage(text);
 }
+
 void  pPlotter :: onMoved_ColorPoint(wxCommandEvent& event)
 {
        text.Clear();
        text = _T( "Last event was on color bar: Color point moved to: ");
-       int lastReal_X = (color_bar->getLastMovedColorPoint())->getRealX();
+       int lastReal_X = (int)(color_bar->getLastMovedColorPoint())->getRealX();
        text << lastReal_X;
-       
        barrange ->setRealX_vertical_line (lastReal_X);
        barrange -> RefreshForce();
-       
        m_plot->setRealGuideX (lastReal_X);
        m_plot->UpdateAll();
-       
        sendTMessage(text);
 }
+
 void  pPlotter:: onChanged_ColorPoint(wxCommandEvent& event)
 {
-    text.Clear();
+       text.Clear();
        sendTMessage(_T("Last event was on color bar: Color point changed color"));
 }
 
@@ -341,20 +366,21 @@ void pPlotter :: onChangeFunction (wxCommandEvent& event)
                barrange->SetEnd( maxShowed );
                
                std::vector<pColorPoint *> actualColorPoints;
-               actualFunction -> getColorPoints(actualColorPoints);
+               actualFunction->getColorPoints(actualColorPoints);
                if(actualColorPoints.empty())
-                       color_bar ->reinitiateColorBar (realMin_X, realMax_X);
-               else
-                       color_bar ->reinitiateColorBarTo(actualColorPoints);
-
-               color_bar -> setVisibleRange (realMin_X, maxShowed);
+               {
+                       color_bar->reinitiateColorBar (realMin_X, realMax_X);
+               } else {
+                       color_bar->reinitiateColorBarTo(actualColorPoints);
+               }
+               color_bar->setVisibleRange ((int)realMin_X, maxShowed);
                
                // Refresh
-               color_bar -> RefreshForce();
-               barrange -> RefreshForce();     
+               color_bar->RefreshForce();
+               barrange->RefreshForce();       
                
                sendTMessage(text);
-       }
+       } // if actualFunction
 }
 
 
@@ -413,18 +439,17 @@ void  pPlotter::onBarrange(wxCommandEvent& event)
 */
 void  pPlotter::onActualChange_Bar(wxCommandEvent& event)
 {
-       text.Clear();
-       text = _T( "Last event was on min-max bar: Actual triangle moved to: " );
        int lastActual_X = barrange->GetActual();
-
-       text << lastActual_X;
        
        color_bar ->setRealX_vertical_line (lastActual_X);
-       m_plot->setRealGuideX (lastActual_X);
-
        color_bar -> RefreshForce();    
+
+       m_plot->setRealGuideX(lastActual_X);
        m_plot->UpdateAll();
 
+       text.Clear();
+       text = _T( "Last event was on min-max bar: Actual triangle moved to: " );
+       text << lastActual_X;
        sendTMessage(text);
 }
 
@@ -440,15 +465,15 @@ void  pPlotter::onStartChange_Bar(wxCommandEvent& event)
        text += wxString::Format(_T("%d"), realMin_X);  
        double realMax_X = m_plot->getMaxScrX();
        
-       color_bar -> setVisibleRange (realMin_X, realMax_X);
+       color_bar -> setVisibleRange (realMin_X, (int)realMax_X);
        
-       m_plot->actualizeViewRange(realMin_X,realMax_X);
+       m_plot->actualizeViewRange(realMin_X, (int)realMax_X);
        
        //setting the plotter for draw the functions that
        //it has to move.
        
-       float startP=(float)barrange->getStartShowPorcentage();
-       float endP=(float)barrange->getEndShowPorcentage();
+       float startP    =       (float)barrange->getStartShowPorcentage();
+       float endP              =       (float)barrange->getEndShowPorcentage();
        m_plot->moveFunctions(startP,endP);
        
        //Updating
@@ -461,19 +486,16 @@ void  pPlotter::onEndChange_Bar(wxCommandEvent& event)
 {
        text.Clear();
        text += _T("Last event was on min-max bar: End  triangle moved to: ");
-       int realMax_X = barrange->GetEnd();
+       int realMax_X           = barrange->GetEnd();
        text += wxString::Format(_T("%d"),realMax_X);   
-       double realMin_X = m_plot->getMinScrX();
-       color_bar -> setVisibleRange (realMin_X, realMax_X);
-       m_plot->actualizeViewRange(realMin_X,realMax_X);
-       
-       float startP=(float)barrange->getStartShowPorcentage();
-       float endP=(float)barrange->getEndShowPorcentage();
+       double realMin_X        = m_plot->getMinScrX();
+       color_bar -> setVisibleRange ((int)realMin_X, realMax_X);
+       m_plot->actualizeViewRange((int)realMin_X,realMax_X);
+       float startP            = (float)barrange->getStartShowPorcentage();
+       float endP                      = (float)barrange->getEndShowPorcentage();
        m_plot->moveFunctions(startP,endP);
-       
        color_bar -> RefreshForce();
        m_plot -> UpdateAll();
-
        sendTMessage(text);
 }
 
@@ -633,8 +655,8 @@ void pPlotter :: sendTMessage(wxString theText)
        }
        void pPlotter::eraseColorPoints()
        {
-               int min=color_bar->getMinValue();
-               int max=color_bar->getMaxValue();
+               int min=(int)color_bar->getMinValue();
+               int max=(int)color_bar->getMaxValue();
                color_bar->reinitiateColorBar(min,max);
        }
 
@@ -645,10 +667,12 @@ void pPlotter :: sendTMessage(wxString theText)
        {
                return barrange->getEndShowPorcentage();
        }
+
        float pPlotter::getMinShowedPorcentage()
        {
                return barrange->getStartShowPorcentage();
        }
+
        float pPlotter::getActualShowedPorcentage()
        {
                return barrange->getActualShowPorcentage();
@@ -717,5 +741,52 @@ void pPlotter :: sendTMessage(wxString theText)
        */
        
 
+/**
+**     Returns two vectors, the grey level of the point and its value, the value is between [0,1]
+**/
+void pPlotter::GetValuesPointsFunction(std::vector<double>& greylevel,std::vector<double>& value, int histogramsize)
+{
+       if(actualFunction != NULL)
+       {
+               double* xval = actualFunction->getX_RealValues();
+               double* yval = actualFunction->getY_RealValues();
+               actualFunction->getScaleY();
+               for(int i = 0; i < actualFunction->getSizePoints();i++)
+               {
+                       greylevel.push_back(xval[i]);
+                       value.push_back(yval[i]/histogramsize);
+               } // for
+       } // if
+}
+
+/**
+**     Returns two vectors, the grey level of the point and its value, the red, green
+**     and blue value is between [0,1]
+**/
+void pPlotter::GetValuesColorPointsFunction(std::vector<double>& greylevel,
+                                                               std::vector<double>& red,
+                                                               std::vector<double>& green,
+                                                               std::vector<double>& blue)
+{
+       if(color_bar != NULL)
+       {
+               std::vector<pColorPoint*> colors;
+      color_bar->getAddedColorsPointsList(colors);
+               for(int i = 0; i < colors.size();i++)
+               {
+                       pColorPoint* pcolor     = colors[i];
+                       greylevel.push_back(pcolor->getRealX());
+                       wxColour colour                 = pcolor->getColor();
+                       double _red                     = (double)(colour.Red())/255.0;
+                       double _green                   = (double)(colour.Green())/255.0;
+                       double _blue                    = (double)(colour.Blue())/255.0;
+                       red.push_back(_red);
+                       green.push_back(_green);
+                       blue.push_back(_blue);
+               } // for
+       } // if
+}
+
+