]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/mathplot.cxx
#2490 creaMaracasVisu Feature New High - Histogram Interaction
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / pPlotter / mathplot.cxx
index 7661beec1da8001dac586234fb9a2cf3158fff7c..af3e86591c91280d11a42fa6a1869c3fdfb7df18 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.
+# ------------------------------------------------------------------------ */
+
 /////////////////////////////////////////////////////////////////////////////
 // Name:        mathplot.cpp
 // Purpose:     Framework for mathematical graph plotting in wxWindows
@@ -320,7 +345,7 @@ mpScaleY::mpScaleY(wxString name)
        SetFont( ff );
 }
 
-void mpScaleY::Plot(wxDC & dc, mpWindow & w)
+void mpScaleY::Plot(wxDC & dc, mpWindow & w, int orgy)
 {
        dc.SetPen( m_pen);
        dc.SetFont( m_font);
@@ -328,7 +353,9 @@ void mpScaleY::Plot(wxDC & dc, mpWindow & w)
        const int orgx   = -(int)(w.GetPosX() * w.GetScaleX());
        const int extend = w.GetScrY()/2;
 
-       dc.DrawLine( orgx, -extend, orgx, extend);
+       double sizedc = dc.GetSize().GetHeight()-orgy;
+
+       dc.DrawLine( orgx, GetYTranslated(sizedc, -extend), orgx, GetYTranslated(sizedc, extend));
 
        const double dig  = floor( log( 128.0 / w.GetScaleY() ) / mpLN10 );
        const double step = exp( mpLN10 * dig);
@@ -354,19 +381,19 @@ void mpScaleY::Plot(wxDC & dc, mpWindow & w)
        for (;n < end; n += step)
        {
                const int p = (int)((w.GetPosY() - n) * w.GetScaleY());
-               dc.DrawLine( orgx, p, orgx+4, p);
+               dc.DrawLine( orgx, GetYTranslated(sizedc, p), orgx+4, GetYTranslated(sizedc,p));
 
                s.Printf(fmt, n);
                dc.GetTextExtent(s, &tx, &ty);
                if ((tmp-p+ty/2) > 32)
                {
-                       dc.DrawText( s, orgx+4, p-ty/2);
+                       dc.DrawText( s, orgx+4, GetYTranslated(sizedc,p-ty/2));
                        tmp=p-ty/2;
                }
        }
 
        dc.GetTextExtent(m_name, &tx, &ty);
-       dc.DrawText( m_name, orgx-tx-4, -extend + ty + 4);
+       dc.DrawText( m_name, orgx-tx-4, GetYTranslated(sizedc,-extend + ty + 4));
 }
 
 //-----------------------------------------------------------------------------
@@ -392,7 +419,7 @@ EVT_MENU( mpID_LOCKASPECT,mpWindow::OnLockAspect)
 END_EVENT_TABLE()
 
 mpWindow::mpWindow( wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size, int flag )
-: wxScrolledWindow( parent, id, pos, size, flag, wxT("wxPlotter") )
+: wxScrolledWindow( parent, id, wxDefaultPosition, wxDefaultSize, flag, wxT("wxPlotter") )
 {
        m_scaleX = m_scaleY = 1.0;
        m_posX   = m_posY   = 0;
@@ -406,6 +433,7 @@ mpWindow::mpWindow( wxWindow *parent, wxWindowID id, const wxPoint &pos, const w
        m_lockaspect = FALSE;
        offsetX = offsetY = 0;
        offsetPixelX = offsetPixelY= 0;
+       _bitmap_functions=NULL;
 
        real_guideLine_X = -1;
        real_guideLine_Y = -1;
@@ -440,7 +468,7 @@ void mpWindow::Fit()
        {
                int cx, cy;
                GetClientSize( &cx, &cy);
-
+               
                double d;
                d = m_maxX - m_minX;
                if (d!=0)
@@ -588,8 +616,15 @@ void mpWindow::OnPaint( wxPaintEvent &event )
        
        //dc.SetDeviceOrigin(70,40);
        //dc.SetAxisOrientation(false,true);
-       temp_dc.SetAxisOrientation(true,false);
-       dc.Blit(0,0, m_scrX, m_scrY, &temp_dc,-70,-m_scrY+40);
+       //temp_dc.SetAxisOrientation(true,false);
+       
+       //EED 14mai2009
+       //dc.Blit(0,0, m_scrX, m_scrY, &temp_dc,-70,-m_scrY+40);
+       
+       temp_dc.SetDeviceOrigin(0,0);
+       dc.Blit(0,0, m_scrX, m_scrY, &temp_dc,0,0);
+       
+       
        delete _bitmap_functions; 
        //_bitmap_functions
        //dc.SetAxisOrientation(false,true);
@@ -688,20 +723,18 @@ bool mpWindow::UpdateBBox()
        return first == FALSE;
 }
 
-void mpWindow :: UpdateAll()
+void mpWindow::UpdateAll()
 {
        if (UpdateBBox())
        {
                int cx, cy;
                GetClientSize( &cx, &cy);
-
-               //const int sx = (int)((m_maxX - m_minX) * GetScaleX()); // JPRx
-               //const int sy = (int)((m_maxY - m_minY) * GetScaleY()); // JPRx
-               //const int px = (int)((GetPosX() - m_minX) * GetScaleX() - (cx>>1)); // JPRx
-               //const int py = (int)((GetPosY() - m_minY) * GetScaleY() - (cy>>1)); // JPRx
-               //SetScrollbars( 1, 1, sx, sy, px, py);
+               const int sx = (int)((m_maxX - m_minX) * GetScaleX()); // JPRx
+               const int sy = (int)((m_maxY - m_minY) * GetScaleY()); // JPRx
+               const int px = (int)((GetPosX() - m_minX) * GetScaleX() - (cx>>1)); // JPRx
+               const int py = (int)((GetPosY() - m_minY) * GetScaleY() - (cy>>1)); // JPRx
+               SetScrollbars( 1, 1, sx, sy, px, py);
        }
-
        FitInside();
        Refresh( false );
 }