]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Implementation of the logarithmic scaling mode
authorouv <ouv@opencascade.com>
Mon, 31 Aug 2009 09:50:33 +0000 (09:50 +0000)
committerouv <ouv@opencascade.com>
Mon, 31 Aug 2009 09:50:33 +0000 (09:50 +0000)
src/Qtx/QtxColorScale.cxx
src/Qtx/QtxColorScale.h

index 44589c9c1e75b35ecbdf4ec1ee046c39f901f7c2..a993910fee20bc6fbb2672008f31c9c8157e9fd2 100755 (executable)
@@ -50,6 +50,7 @@ QtxColorScale::QtxColorScale( QWidget* parent, Qt::WindowFlags f )
   myDumpMode( NoDump ),
   myColorMode( Auto ),
   myLabelMode( Auto ),
+  myScalingMode( Linear ),
   myFlags( AtBorder | WrapTitle ),
   myLabelPos( Right ),
   myTitlePos( Center )
@@ -73,6 +74,7 @@ QtxColorScale::QtxColorScale( const int num, QWidget* parent, Qt::WindowFlags f
   myDumpMode( NoDump ),
   myColorMode( Auto ),
   myLabelMode( Auto ),
+  myScalingMode( Linear ),
   myFlags( AtBorder | WrapTitle ),
   myLabelPos( Right ),
   myTitlePos( Center )
@@ -167,6 +169,15 @@ int QtxColorScale::colorMode() const
   return myColorMode;
 }
 
+/*!
+  \brief Get scaling mode.
+  \return current scaling mode (QtxColorScale::ScalingMode)
+*/
+int QtxColorScale::scalingMode() const
+{
+  return myScalingMode;
+}
+
 /*!
   \brief Get number of color scale intervals.
   \return number of intervals
@@ -416,6 +427,19 @@ void QtxColorScale::setColorMode( const int mode )
   updateScale();
 }
 
+/*!
+  \brief Set color scale scaling mode.
+  \param mode new scaling mode (QtxColorScale::ScalingMode)
+*/
+void QtxColorScale::setScalingMode( const int mode )
+{
+  if ( myScalingMode == mode )
+    return;
+  
+  myScalingMode = mode;
+  updateScale();
+}
+
 /*!
   \brief Set color scale dump mode.
   \param mode new dump mode (QtxColorScale::DumpMode)
@@ -822,7 +846,7 @@ void QtxColorScale::drawScale( QPainter* p, const QColor& bg, const bool transp,
       labels.prepend( getLabel( idx ) );
     }
   }
-  
+
   if ( testFlags( AtBorder ) )
   {
     if ( reverse )
@@ -1002,7 +1026,20 @@ double QtxColorScale::getNumber( const int idx ) const
 {
   double val = 0;
   if ( intervalsNumber() > 0 )
-    val = minimum() + idx * ( qAbs( maximum() - minimum() ) / intervalsNumber() );
+  {
+    if ( scalingMode() == Linear )
+      val = minimum() + idx * ( qAbs( maximum() - minimum() ) / intervalsNumber() );
+    else if ( scalingMode() == Logarithmic )
+    {
+      if ( minimum() > 0 && maximum() > 0 )
+      {
+        double logMin = log10( minimum() );
+        double logMax = log10( maximum() );
+        double logVal = logMin + idx * ( qAbs( logMax - logMin ) / intervalsNumber() );
+        val = pow( 10, logVal );
+      }
+    }
+  }
   return val;
 }
 
index 10014c8d9181861f722e9c304105f5b253391820..d5b74c685da78bcb8d39604234fecf5c105032f9 100755 (executable)
@@ -43,6 +43,11 @@ public:
     Auto,            //!< auto
     User             //!< user defined
   } Mode;
+  //! Color scale scaling mode.
+  typedef enum {
+    Linear,          //!< linear
+    Logarithmic      //!< logarithmic
+  } ScalingMode;
   //! Color scale title, label position.
   typedef enum { 
     None,            //!< do not draw
@@ -78,6 +83,7 @@ public:
   int                   dumpMode() const;
   int                   labelMode() const;
   int                   colorMode() const;
+  int                   scalingMode() const;
   int                   intervalsNumber() const;
 
   QString               title() const;
@@ -96,6 +102,7 @@ public:
   void                  setDumpMode( const int );
   void                  setColorMode( const int );
   void                  setLabelMode( const int );
+  void                  setScalingMode( const int );
   void                  setIntervalsNumber( const int );
 
   void                  setTitle( const QString& );
@@ -151,6 +158,7 @@ private:
   int                   myDumpMode;        //!< dump mode (QtxColorScale::DumpMode)
   int                   myColorMode;       //!< color mode (QtxColorScale::Mode)
   int                   myLabelMode;       //!< label mode (QtxColorScale::Mode)
+  int                   myScalingMode;     //!< scaling mode (QtxColorScale::ScalingMode)
 
   QList<QColor>         myColors;          //!< list of colors
   QList<QString>        myLabels;          //!< list of labels