]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Raw development for ImageViewer.
authorouv <ouv@opencascade.com>
Tue, 2 Jul 2013 14:08:20 +0000 (14:08 +0000)
committerouv <ouv@opencascade.com>
Tue, 2 Jul 2013 14:08:20 +0000 (14:08 +0000)
src/GraphicsView/GraphicsView_Object.cxx
src/GraphicsView/GraphicsView_Object.h
src/GraphicsView/GraphicsView_PrsImageFrame.cxx
src/GraphicsView/GraphicsView_PrsImageFrame.h
src/GraphicsView/GraphicsView_ViewPort.cxx
src/GraphicsView/GraphicsView_ViewPort.h

index 47d3959ae6bd9ae1dd28f8c0bf35de6a3c8f6d19..9c91904dff8e7e7c567b2bdf2a7f042192f6d5a5 100644 (file)
@@ -175,6 +175,15 @@ bool GraphicsView_Object::finishMove()
   return true;
 }
 
+//================================================================
+// Function : setViewTransform
+// Purpose  : 
+//================================================================
+void GraphicsView_Object::setViewTransform( const QTransform& theTransform )
+{
+  myViewTransform = theTransform;
+}
+
 //================================================================
 // Function : centerPoint
 // Purpose  : 
index 6693df0cc1a013eeccce497b61db9342a48c3c04..a9b22ea817e06d253aac48e458eb2f7d7dc807e0 100644 (file)
@@ -93,6 +93,9 @@ public:
   virtual bool               handleMouseMove( QGraphicsSceneMouseEvent* ) { return false; }
   virtual bool               handleMouseRelease( QGraphicsSceneMouseEvent* ) { return false; }
 
+  virtual QTransform         getViewTransform() const { return myViewTransform; }
+  virtual void               setViewTransform( const QTransform& theTransform );
+
   virtual QPointF            centerPoint();
 
 public:
@@ -112,6 +115,8 @@ protected:
 
   bool                       myIsMoving;
 
+  QTransform                 myViewTransform;
+
 private:
   QCursor*                   myHighlightCursor;
 };
index e361d821cc3a7a0deec3820b867095b74e8d393f..b57d0221e9b3d786ff2583e8fe13db1601c2adbc 100644 (file)
@@ -446,8 +446,7 @@ QCursor* GraphicsView_PrsImageFrame::getResizeCursor( const int theAnchor ) cons
 //=======================================================================
 GraphicsView_PrsImageFrame::UnscaledGraphicsEllipseItem::UnscaledGraphicsEllipseItem( QGraphicsItem* theParent )
 : QGraphicsEllipseItem( theParent ),
-  myRotationAngle( 0.0 ),
-  myScale( 1.0 )
+  myRotationAngle( 0.0 )
 {
 }
 
@@ -467,19 +466,26 @@ QRectF GraphicsView_PrsImageFrame::UnscaledGraphicsEllipseItem::boundingRect() c
 {
   QRectF aRect = QGraphicsEllipseItem::boundingRect();
 
-  if( fabs( myScale ) < 1e-10 )
+  GraphicsView_Object* aParent = dynamic_cast<GraphicsView_Object*>( parentItem() );
+  if( !aParent )
+    return aRect;
+
+  QTransform aTransform = aParent->getViewTransform();
+  double aScale = aTransform.m11(); // same as m22(), viewer specific
+  if( fabs( aScale ) < 1e-10 )
     return aRect;
 
   QPointF aCenter = aRect.center();
-  double aWidth = aRect.width() / myScale;
-  double aHeight = aRect.height() / myScale;
+  double aWidth = aRect.width() / aScale;
+  double aHeight = aRect.height() / aScale;
 
-  double anOffsetX = myOffset.x() / myScale;
-  double anOffsetY = myOffset.y() / myScale;
+  double anOffsetX = myOffset.x() / aScale;
+  double anOffsetY = myOffset.y() / aScale;
 
   aRect = QRectF( aCenter.x() - aWidth / 2 + anOffsetX,
                   aCenter.y() - aHeight / 2 + anOffsetY,
                   aWidth, aHeight );
+
   return aRect;
 }
 
@@ -508,10 +514,6 @@ void GraphicsView_PrsImageFrame::UnscaledGraphicsEllipseItem::paint(
   const QStyleOptionGraphicsItem* theOption,
   QWidget* theWidget )
 {
-  QTransform aTransform = thePainter->transform();
-  aTransform.rotate( -myRotationAngle ); // exclude rotation from matrix
-  myScale = aTransform.m11(); // same as m22(), viewer specific
-
   // draw a connection line (mainly, for top-most anchor)
   thePainter->drawLine( myBasePoint, boundingRect().center() );
 
index 736b6c46b6f74d7df8db33912043121badf56f7a..84bbdf94c28047d03c80d373addca9ae93aa402b 100644 (file)
@@ -136,7 +136,6 @@ private:
   QPointF        myOffset;
 
   double         myRotationAngle;
-  double         myScale;
 };
 
 #endif
index 49f809f45be8155b854aa3c8db504dbe50782af8..3c0e263940866a389ba43075d3cb3caab4d2d0f9 100644 (file)
@@ -754,6 +754,8 @@ void GraphicsView_ViewPort::pan( double theDX, double theDY )
     myNameLabel->setAcceptMoveEvents( true );
 
   myIsTransforming = false;
+
+  applyTransform();
 }
 
 //================================================================
@@ -768,6 +770,8 @@ void GraphicsView_ViewPort::setCenter( double theX, double theY )
   centerOn( theX, theY );
 
   myIsTransforming = false;
+
+  applyTransform();
 }
 
 //================================================================
@@ -793,6 +797,8 @@ void GraphicsView_ViewPort::zoom( double theX1, double theY1, double theX2, doub
     setTransform( aTransform );
 
   myIsTransforming = false;
+
+  applyTransform();
 }
 
 //================================================================
@@ -806,6 +812,8 @@ void GraphicsView_ViewPort::fitRect( const QRectF& theRect )
   fitInView( theRect, Qt::KeepAspectRatio );
 
   myIsTransforming = false;
+
+  applyTransform();
 }
 
 //================================================================
@@ -837,6 +845,8 @@ void GraphicsView_ViewPort::fitSelect()
   }
 
   myIsTransforming = false;
+
+  applyTransform();
 }
 
 //================================================================
@@ -855,6 +865,8 @@ void GraphicsView_ViewPort::fitAll( bool theKeepScale )
   fitInView( aRect.adjusted( -aGap, -aGap, aGap, aGap ), Qt::KeepAspectRatio );
 
   myIsTransforming = false;
+
+  applyTransform();
 }
 
 //================================================================
@@ -879,6 +891,20 @@ void GraphicsView_ViewPort::fitWidth()
   ensureVisible( aLeft, aTop, aMargin, aMargin, 0, aGap );
 
   myIsTransforming = false;
+
+  applyTransform();
+}
+
+//================================================================
+// Function : applyTransform
+// Purpose  : 
+//================================================================
+void GraphicsView_ViewPort::applyTransform()
+{
+  GraphicsView_ObjectListIterator anIter( getObjects() );
+  while( anIter.hasNext() )
+    if( GraphicsView_Object* anObject = anIter.next() )
+      anObject->setViewTransform( transform() );
 }
 
 //================================================================
index 6dbc7402345d21fb973ac727419fb316b624f315..6943c8d9c951b80f72eb7775f68a471f1c3564f6 100644 (file)
@@ -149,6 +149,8 @@ public:
 
   bool                             isTransforming() const { return myIsTransforming; }
 
+  void                             applyTransform();
+
   // block status
   BlockStatus                      currentBlock();