]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
#2618: post - procesing - sensitive variable problem (PLEX). CTH_1_10_2
authorrkv <roman.kozlov@opencascade.com>
Thu, 26 Feb 2015 15:14:20 +0000 (18:14 +0300)
committerrkv <roman.kozlov@opencascade.com>
Thu, 26 Feb 2015 15:14:20 +0000 (18:14 +0300)
src/Plot2d/Plot2d_ToolTip.cxx
src/Plot2d/Plot2d_ViewFrame.cxx
src/Plot2d/Plot2d_ViewFrame.h

index 043c5c487887b02884f4b0ced06652f7365f33d8..1344edfb417c8c67f482d6e7f7bc6b589daad56a 100644 (file)
@@ -48,24 +48,40 @@ Plot2d_ToolTip::~Plot2d_ToolTip()
 
 void Plot2d_ToolTip::onToolTip( QPoint p, QString& str, QFont& f, QRect& txtRect, QRect& rect )
 {
-  int pInd;
-  double dist;
+  QList< QList< int > > pInd;
 
-  Plot2d_Curve* c = myPlot->getClosestCurve( p, dist, pInd );
-  if( !c || dist>maxDist )
+  // Get all curves points in the vicinity.
+  QList<Plot2d_Curve*> aCurves = myPlot->getClosestPoints( p, maxDist, pInd );
+  if( aCurves.isEmpty() )
     return;
+  
+  QString aTxt;
+
+  // Produce a tooltip containing text from all found points.
+  for(int i = 0; i < aCurves.length(); i++)
+  {
+    const QList< int >& aPnts = pInd[i];
+    foreach(int j, aPnts)
+    {
+      aTxt = aCurves[i]->text( j );
+      if (!aTxt.isEmpty())
+      {
+        str += ("<p>" + aTxt + "</p>");
+      }
+    }
+  }
 
-  str = c->text( pInd );
   if( str.isEmpty() )
     return;
 
+  // Compute a size according to the produced tooltip text.
   QFontMetrics m( f );
-  QStringList lst = str.split( "\n", QString::SkipEmptyParts );
+  QStringList lst = str.split( QRegExp("\n|(<p>)|(</p>)"), QString::SkipEmptyParts );
   QStringList::const_iterator anIt = lst.begin(), aLast = lst.end();
   int w = 0, h = 0;
   for( ; anIt!=aLast; anIt++ )
   {
-    if( h>0 )
+    //RKV: if( h>0 )
       h+= m.lineSpacing();
 
     QRect r = m.boundingRect( *anIt );
index 36e56f289bf63da08cdca668673f0238a339bc89..29189c2faaf4f21c7a3aacc5f95197e3d3665475 100755 (executable)
@@ -2233,6 +2233,59 @@ Plot2d_Curve* Plot2d_Plot2d::getClosestCurve( QPoint p, double& distance, int& i
   return aClosestCurve;
 }
 
+/*!
+  Get list of curves located in the vicinity of the given point.
+  @param thePoint the point
+  @param theRadius the vicinity radius
+  @param thePntIndex the nearest points indexes of found curves
+  @return list of curves
+*/
+QList<Plot2d_Curve*> Plot2d_Plot2d::getClosestPoints( QPoint thePoint, double theRadius, QList< QList< int > >& thePntIndex )
+{
+  QList<Plot2d_Curve*> res;
+  thePntIndex.clear();
+  // The square of the vicinity radius.
+  const double aMaxD = theRadius * theRadius;
+  const QwtScaleMap xMap = canvasMap(QwtPlot::xBottom);
+  const QwtScaleMap yMap = canvasMap(QwtPlot::yLeft);
+
+  QwtPlotCurve* aCurve;
+  CurveDict::Iterator it = getCurves().begin();
+  // Check each curve of this plot.
+  for ( ; it != getCurves().end(); it++ ) {
+    aCurve = it.key();
+    if ( !aCurve )
+      continue;
+
+    // Gather points located in the vicinity of the given point for the current curve.
+    const pointList& aPnts = it.value()->getPointList();
+    QList< int > aPntIndex;
+
+    for (int i = 0; i < aPnts.length(); i++)
+    {
+      // Compute the square of the distance from the current curve point to the given point.
+      const double cx = xMap.xTransform(aCurve->x(i)) - thePoint.x();
+      const double cy = yMap.xTransform(aCurve->y(i)) - thePoint.y();
+      const double f = qwtSqr(cx) + qwtSqr(cy);
+
+      // If the current curve point is in the vicinity then keep its index.
+      if ( f < aMaxD )
+      {
+        aPntIndex << i;
+      }
+    }
+
+    // Keep this curve if it has points in the vicinity.
+    if (!aPntIndex.isEmpty())
+    {
+      res << it.value();
+      thePntIndex << aPntIndex;
+    }
+  }
+
+  return res;
+}
+
 /*!
   Sets number of markers for steps. If number of markers is equal to 1 then 
   markers are displayed for steps only. If number of markers is equal to 3 
index 079d0d9ecc3fdf472bfe5fd02c63bff0f0cc3d0f..9f2b11407bf9c58855fb39e354e265de4028d58c 100755 (executable)
@@ -255,6 +255,7 @@ public:
   QwtPlotGrid*        grid() { return myGrid; };
   CurveDict& getCurves() { return myCurves; }
   Plot2d_Curve*       getClosestCurve( QPoint p, double& distance, int& index );
+  QList<Plot2d_Curve*> getClosestPoints( QPoint thePoint, double theRadius, QList< QList< int > >& thePntIndex );
 
   long                insertCurve( const QString &title,
                                    int xAxis = xBottom,