]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Fix for IPAL17690 : Plot 2D grid/axial marks.
authormkr <mkr@opencascade.com>
Tue, 11 Nov 2008 08:11:49 +0000 (08:11 +0000)
committermkr <mkr@opencascade.com>
Tue, 11 Nov 2008 08:11:49 +0000 (08:11 +0000)
src/Plot2d/Plot2d_ViewFrame.cxx
src/Plot2d/Plot2d_ViewFrame.h

index 325435af3b9a3ddca0d9a614498cdcab4bcd130b..7d8e8aac373a2dfeab1309998cee3b0e78b0297e 100755 (executable)
@@ -151,7 +151,7 @@ Plot2d_ViewFrame::Plot2d_ViewFrame( QWidget* parent, const QString& title )
        myXGridMinorEnabled( false ), myYGridMinorEnabled( false ), myY2GridMinorEnabled( false ),
        myXGridMaxMajor( 8 ), myYGridMaxMajor( 8 ), myY2GridMaxMajor( 8 ),
        myXGridMaxMinor( 5 ), myYGridMaxMinor( 5 ), myY2GridMaxMinor( 5 ),
-       myXMode( 0 ), myYMode( 0 ), mySecondY( false ), myIsRescaled( false )
+       myXMode( 0 ), myYMode( 0 ), mySecondY( false )
 {
   /* Plot 2d View */
   QVBoxLayout* aLayout = new QVBoxLayout( this ); 
@@ -170,8 +170,6 @@ Plot2d_ViewFrame::Plot2d_ViewFrame( QWidget* parent, const QString& title )
      this,   SLOT( plotMouseReleased( const QMouseEvent& ) ) );
   connect( myPlot, SIGNAL( legendClicked( long ) ),
      this, SIGNAL( legendClicked( long ) ) );
-  connect( myPlot, SIGNAL( rescale() ),
-     this, SLOT( rescale() ) );
 
   /* Initial Setup - get from the preferences */
   readPreferences();
@@ -803,26 +801,26 @@ void Plot2d_ViewFrame::fitAll()
 
   myPlot->setAxisAutoScale( QwtPlot::yLeft );
   myPlot->setAxisAutoScale( QwtPlot::xBottom );
-  //myPlot->replot();
+  myPlot->replot();
 
   // for existing grid
   QwtDiMap xMap = myPlot->canvasMap( QwtPlot::xBottom );
   QwtDiMap yMap = myPlot->canvasMap( QwtPlot::yLeft );
 
   myPlot->setAxisScale( QwtPlot::xBottom, 
-      QString::number(myPlot->invTransform( QwtPlot::xBottom, xMap.i1() )).toDouble(), 
-      QString::number(myPlot->invTransform( QwtPlot::xBottom, xMap.i2() )).toDouble() );
+      myPlot->invTransform( QwtPlot::xBottom, xMap.i1() ), 
+      myPlot->invTransform( QwtPlot::xBottom, xMap.i2() ) );
   myPlot->setAxisScale( QwtPlot::yLeft, 
-      QString::number(myPlot->invTransform( QwtPlot::yLeft, yMap.i1() )).toDouble(), 
-      QString::number(myPlot->invTransform( QwtPlot::yLeft, yMap.i2() )).toDouble() );
+      myPlot->invTransform( QwtPlot::yLeft, yMap.i1() ), 
+      myPlot->invTransform( QwtPlot::yLeft, yMap.i2() ) );
 
   if (mySecondY) {
     myPlot->setAxisAutoScale( QwtPlot::yRight );
     myPlot->replot();
     QwtDiMap yMap2 = myPlot->canvasMap( QwtPlot::yRight );
     myPlot->setAxisScale( QwtPlot::yRight, 
-       QString::number(myPlot->invTransform( QwtPlot::yRight, yMap2.i1() )).toDouble(), 
-        QString::number(myPlot->invTransform( QwtPlot::yRight, yMap2.i2() )).toDouble() );
+        myPlot->invTransform( QwtPlot::yRight, yMap2.i1() ), 
+        myPlot->invTransform( QwtPlot::yRight, yMap2.i2() ) );
   }
   myPlot->replot();
 }
@@ -1480,28 +1478,6 @@ void Plot2d_ViewFrame::plotMouseReleased( const QMouseEvent& me )
      aParent->putInfo(tr("INF_READY"));
   myOperation = NoOpId;
 }
-
-/*!
-  Slot, rescales axis on the first show of view frame in order to take into account the correct canvas map
-*/
-void Plot2d_ViewFrame::rescale()
-{
-  if ( myPlot && !myIsRescaled ) {
-    myIsRescaled = true;
-
-    QwtDiMap map;
-    int axis[3] = { QwtPlot::xBottom, QwtPlot::yLeft, QwtPlot::yRight };
-    double dMin, dMax;
-    for ( int i = 0; i < 3; i++ )
-      if ( i < 2 || i == 2 && mySecondY ) {
-       map = myPlot->canvasMap(axis[i]);
-       dMin = myPlot->invTransform(axis[i], map.i1()); dMax = myPlot->invTransform(axis[i], map.i2());
-       myPlot->setAxisScale( axis[i], QString::number(dMin).toDouble(), QString::number(dMax).toDouble() ); 
-      }
-    myPlot->replot();
-  }
-}
-
 /*!
   Slot, called when user wheeling mouse
 */
@@ -1805,13 +1781,31 @@ bool Plot2d_Plot2d::existMarker( const QwtSymbol::Style typeMarker, const QColor
 }
 
 /*!
-  Emits rescale() signal on the first drawing of the QwtPlotCanvas.
+  In addition to draw canvas, checks the current labels format and change it if needed
 */
 void Plot2d_Plot2d::drawCanvas(QPainter *painter)
 {
-  if ( Plot2d_ViewFrame* aVF = dynamic_cast<Plot2d_ViewFrame*>(parentWidget()) )
-    if ( !aVF->isRescaled() )
-      emit rescale();
+  if ( dynamic_cast<Plot2d_ViewFrame*>(parentWidget()) ) {
+    QwtDiMap map; 
+    double aStep;
+    char f; int prec, fieldwidth;
+    int axis[3] = { QwtPlot::xBottom, QwtPlot::yLeft, QwtPlot::yRight };
+    for ( int i = 0; i < 3; i++ ) {
+      if ( axisEnabled( axis[i] ) ) {
+       map = canvasMap( axis[i] );
+       aStep = fabs( map.d2() - map.d1() ) / ( axisMaxMajor( axis[i] ) * axisMaxMinor( axis[i] ) );
+
+       QString aStepStr;
+       aStepStr.sprintf("%e",aStep);
+       int aPrecision = aStepStr.right(aStepStr.length()-aStepStr.find('e')-2).toInt();
+
+       axisLabelFormat( axis[i], f, prec, fieldwidth );
+
+       if ( aPrecision != prec )
+         setAxisLabelFormat( axis[i], 'f', aPrecision );
+      }
+    }
+  }
   
   QwtPlot::drawCanvas(painter);
 }
index 558790db77551679cf85709f32b1195495f6b3d3..e7b09bdcf730398706d0326a98f2e4dce72fa242 100755 (executable)
@@ -125,8 +125,6 @@ public:
   void    incrementalPan ( const int incrX, const int incrY );
   void    incrementalZoom( const int incrX, const int incrY );
 
-  bool    isRescaled() const { return myIsRescaled; }
-
 protected:
   int     testOperation( const QMouseEvent& );
   void    readPreferences();
@@ -158,7 +156,6 @@ protected slots:
   void    plotMousePressed( const QMouseEvent& );
   void    plotMouseMoved( const QMouseEvent& );
   void    plotMouseReleased( const QMouseEvent& );
-  void    rescale();
 
 signals:
   void    vpModeHorChanged();
@@ -187,7 +184,6 @@ protected:
   int            myXMode, myYMode;
   double         myXDistance, myYDistance, myYDistance2;
   bool           mySecondY;
-  bool           myIsRescaled;
 };
 
 class Plot2d_Plot2d : public QwtPlot 
@@ -214,12 +210,9 @@ public:
 public slots:
   virtual void polish();
 
-signals:
-  void rescale();
-
 protected:
   bool         existMarker( const QwtSymbol::Style typeMarker, const QColor& color, const Qt::PenStyle typeLine );
-  virtual void drawCanvas(QPainter *);
+  virtual void drawCanvas( QPainter *painter );
 
 protected:
   QValueList<QColor> myColors;