X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_PrsImage.cxx;h=985dc27d45a7f22a178519b96209eff757958d4a;hb=e7225e329739e01faed6682de0bc83cf84c28de6;hp=172f5f72b41b7b4a2edb7eac4b3f10631d03cef4;hpb=de7cf9bb0a7a41d6487013c87f4a54d0664cd303;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_PrsImage.cxx b/src/HYDROGUI/HYDROGUI_PrsImage.cxx index 172f5f72..985dc27d 100644 --- a/src/HYDROGUI/HYDROGUI_PrsImage.cxx +++ b/src/HYDROGUI/HYDROGUI_PrsImage.cxx @@ -27,6 +27,7 @@ #include #include +#include //======================================================================= // name : HYDROGUI_PrsImage @@ -38,6 +39,7 @@ HYDROGUI_PrsImage::HYDROGUI_PrsImage( const Handle(HYDROData_Entity)& theObject myCaptionItem( 0 ), myPrsImageFrame( 0 ), myIsTransformationPointPreview( false ), + myIsByTwoPoints( true ), myTransformationPointType( None ) { myTransformationPointCursor = new QCursor( Qt::CrossCursor ); @@ -60,9 +62,13 @@ HYDROGUI_PrsImage::~HYDROGUI_PrsImage() // Function : setImage // Purpose : //================================================================ -void HYDROGUI_PrsImage::setImage( const QImage& theImage ) +void HYDROGUI_PrsImage::setImage( const QImage& theImage, const bool theCompute ) { myImage = theImage; + if ( theCompute ) { + compute(); + computeTransformationPoints( true ); + } } //================================================================ @@ -291,62 +297,91 @@ void HYDROGUI_PrsImage::setSelected( bool theState ) // Function : computeTransformationPoints // Purpose : //================================================================ -void HYDROGUI_PrsImage::computeTransformationPoints() +void HYDROGUI_PrsImage::computeTransformationPoints( const bool theObligatoryInit ) { - if( myTransformationPointMap.isEmpty() ) { - int aWidth = myImage.width(); - int aHeight = myImage.height(); - - // Create presentations for transformation points A, B and C for( int aPointType = PointA; aPointType <= PointC; aPointType++ ) { - TransformationPoint aTransformationPoint; - - QPoint aPoint; - QString aCaption; - QColor aColor = Qt::black; - switch( aPointType ) - { - case PointA: - aPoint = QPoint( 0, 0 ); - aCaption = "A"; - aColor = Qt::darkRed; - break; - case PointB: - aPoint = QPoint( aWidth, 0 ); - aCaption = "B"; - aColor = Qt::darkGreen; - break; - case PointC: - aPoint = QPoint( 0, aHeight ); - aCaption = "C"; - aColor = Qt::darkBlue; - break; - } - - aTransformationPoint.Point = aPoint; - aTransformationPoint.Caption = aCaption; - - aTransformationPoint.PointItem = new QGraphicsEllipseItem( this ); - aTransformationPoint.PointItem->setVisible( false ); - aTransformationPoint.PointItem->setPen( QPen( aColor ) ); - aTransformationPoint.PointItem->setBrush( QBrush( aColor ) ); - - aTransformationPoint.CaptionItem = new QGraphicsSimpleTextItem( aCaption, this ); - aTransformationPoint.CaptionItem->setVisible( false ); - aTransformationPoint.CaptionItem->setPen( QPen( aColor ) ); - aTransformationPoint.CaptionItem->setBrush( QBrush( aColor ) ); - - myTransformationPointMap[ aPointType ] = aTransformationPoint; + if( myTransformationPointMap.isEmpty() || theObligatoryInit ) + initTrsfPoints( aPointType ); + // Show/hide the point if necessary + updateTrsfPoint( aPointType ); + } } +} - for( int aPointType = PointA; aPointType <= PointC; aPointType++ ) +QGraphicsItemGroup* HYDROGUI_PrsImage::createPointItem( const QString& theCaption, + const QColor& theColor ) +{ + QGraphicsEllipseItem* aPointItem = new QGraphicsEllipseItem( this ); + aPointItem->setPen( QPen( theColor ) ); + aPointItem->setBrush( QBrush( theColor ) ); + + double aRadius = 3; + QRectF aRect( -QPointF( aRadius, aRadius ), QSizeF( aRadius * 2 + 1, aRadius * 2 + 1 ) ); + aPointItem->setRect( aRect ); + aPointItem->setPos( QPointF( 0, 0 ) ); + + QGraphicsSimpleTextItem* aCaptionItem = aCaptionItem = new QGraphicsSimpleTextItem( theCaption, this ); + aCaptionItem->setPen( QPen( theColor ) ); + aCaptionItem->setBrush( QBrush( theColor ) ); + QFont aFont = aCaptionItem->font(); + aFont.setPointSize( qApp->font().pointSize() ); + aCaptionItem->setFont( aFont ); + aCaptionItem->setPos( QPointF( -aRadius * 2, aRadius * 2 ) ); + + QGraphicsItemGroup* aGroupItem = new QGraphicsItemGroup( this ); + aGroupItem->addToGroup( aPointItem ); + aGroupItem->addToGroup( aCaptionItem ); + aGroupItem->setVisible( false ); + aGroupItem->setFlag( QGraphicsItem::ItemIgnoresTransformations ); + + return aGroupItem; +} + +//================================================================ +// Function : initTrsfPoints +// Purpose : +//================================================================ +void HYDROGUI_PrsImage::initTrsfPoints( const int thePointType ) +{ + QPoint aPoint; + QString aCaption; + QColor aColor = Qt::black; + + int aWidth = myImage.width(); + int aHeight = myImage.height(); + switch( thePointType ) { - // Show/hide the point if necessary - updateTrsfPoint( aPointType ); + case PointA: + aPoint = QPoint( 0, 0 ); + aCaption = "A"; + aColor = Qt::darkRed; + break; + case PointB: + aPoint = QPoint( aWidth, 0 ); + aCaption = "B"; + aColor = Qt::darkGreen; + break; + case PointC: + aPoint = QPoint( 0, aHeight ); + aCaption = "C"; + aColor = Qt::darkBlue; + break; } + + TransformationPoint aTransformationPoint; + if ( myTransformationPointMap.contains( thePointType ) ) + aTransformationPoint = myTransformationPointMap[thePointType]; + + aTransformationPoint.Point = aPoint; + aTransformationPoint.Caption = aCaption; + if ( !aTransformationPoint.GroupItem ) + aTransformationPoint.GroupItem = createPointItem( aCaption, aColor ); + aTransformationPoint.GroupItem->setPos( aPoint ); + + myTransformationPointMap[ thePointType ] = aTransformationPoint; } //================================================================ @@ -358,17 +393,12 @@ void HYDROGUI_PrsImage::updateTrsfPoint( const int thePointType ) // If image is transformed only by two points then the point C is invisible bool anIsPointVisible = myIsTransformationPointPreview && ( ( !myIsByTwoPoints ) || ( myIsByTwoPoints && ( thePointType != PointC ) ) ); + TransformationPoint& aTransformationPoint = myTransformationPointMap[ thePointType ]; - double aRadius = 5; const QPointF& aPoint = aTransformationPoint.Point; - QRectF aRect( aPoint - QPointF( aRadius, aRadius ), QSizeF( aRadius * 2 + 1, aRadius * 2 + 1 ) ); - aTransformationPoint.PointItem->setRect( aRect ); - aTransformationPoint.PointItem->setVisible( anIsPointVisible ); - - QPointF aCaptionShift( -aRadius * 2, aRadius * 2 ); - aTransformationPoint.CaptionItem->setPos( aPoint + aCaptionShift ); - aTransformationPoint.CaptionItem->setVisible( anIsPointVisible ); + aTransformationPoint.GroupItem->setPos( aPoint ); + aTransformationPoint.GroupItem->setVisible( anIsPointVisible ); } //================================================================