X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDRO_tests%2FTestViewer.cxx;h=3f886a5c025c8f8ac29d17457dead53007e7967c;hb=ddc8b027120ad163e63fd1a6b9828aeec3aff79b;hp=ba0b7b5d059b76a37bb623a5179be8096df2aa77;hpb=ac056ee3c8e228f5b79eca9bad0fec624c595b1b;p=modules%2Fhydro.git diff --git a/src/HYDRO_tests/TestViewer.cxx b/src/HYDRO_tests/TestViewer.cxx index ba0b7b5d..3f886a5c 100644 --- a/src/HYDRO_tests/TestViewer.cxx +++ b/src/HYDRO_tests/TestViewer.cxx @@ -54,11 +54,15 @@ #endif #include +#include OCCViewer_ViewManager* TestViewer::myViewManager = 0; OCCViewer_ViewFrame* TestViewer::myViewWindow = 0; QString TestViewer::myKey = ""; +extern QString REF_DATA_PATH; +extern QString TMP_DIR; + OCCViewer_ViewManager* TestViewer::viewManager() { if( myViewManager ) @@ -67,13 +71,13 @@ OCCViewer_ViewManager* TestViewer::viewManager() myViewManager = new OCCViewer_ViewManager( 0, 0 ); OCCViewer_Viewer* aViewer = new OCCViewer_Viewer( true ); - aViewer->setTrihedronSize( 100, true ); + aViewer->setTrihedronSize( 0, true ); aViewer->setInteractionStyle( 0 ); aViewer->setZoomingStyle( 1 ); myViewManager->setViewModel( aViewer ); myViewWindow = dynamic_cast( myViewManager->createViewWindow() ); - + aViewer->setTrihedronShown( false ); return myViewManager; } @@ -118,10 +122,22 @@ QColor TestViewer::GetColor(int i) } } -void TestViewer::eraseAll( bool isUpdate ) +void TestViewer::eraseAll( bool isUpdate, bool eraseStructures ) { context()->CloseLocalContext( -1, Standard_False ); context()->EraseAll( isUpdate ); + if( eraseStructures ) + { + Graphic3d_MapOfStructure GmapS; + viewer()->getViewer3d()->StructureManager()->DisplayedStructures(GmapS); + for (Graphic3d_MapOfStructure::Iterator it(GmapS); it.More(); it.Next()) + { + Handle(Graphic3d_Structure) GS = it.Key(); + GS->Erase(); + } + } + viewer()->setTrihedronShown( false ); + qApp->processEvents(); } void TestViewer::show( const Handle(AIS_InteractiveObject)& theObject, @@ -131,17 +147,17 @@ void TestViewer::show( const Handle(AIS_InteractiveObject)& theObject, if( !aNewKey.isEmpty() ) { myKey = aNewKey; - eraseAll( false ); + eraseAll( false, true ); } if( theSelectionMode > 0 ) { context()->OpenLocalContext(); - context()->Display( theObject, theMode, theSelectionMode ); + context()->Display( theObject, theMode, theSelectionMode, true ); context()->Activate( theObject, theSelectionMode, Standard_True ); } else - context()->Display( theObject, theMode, theSelectionMode ); + context()->Display( theObject, theMode, theSelectionMode, true ); if( isFitAll ) fitAll(); @@ -157,6 +173,7 @@ void TestViewer::show( const TopoDS_Shape& theShape, int theMode, bool isFitAll, int theUIANb, int theVIANb) { Handle(AIS_Shape) aShape = new AIS_Shape( theShape ); + cout <Attributes()->PointAspect()->SetTypeOfMarker( Aspect_TOM_X ); if (theShape.ShapeType()==TopAbs_FACE) @@ -174,6 +191,7 @@ void TestViewer::show( const TopoDS_Shape& theShape, int theMode, bool isFitAll, if( isFitAll ) fitAll(); } + void TestViewer::show( const TopoDS_Shape& theShape, int theMode, bool isFitAll, const char* theKey, int theUIANb, int theVIANb) { @@ -265,7 +283,22 @@ bool AreImagesEqual( const QImage& theImage1, const QImage& theImage2, double th return true; } -bool TestViewer::AssertImages( QString& theMessage, const QImage* theImage, const char* theCase ) +QImage TestViewer::diff( const QImage& theExpectedRefImage, const QImage& theActualImage ) +{ + const QImage::Format aFormat = QImage::Format_RGB32; + + QImage anExpectedRefImage = theExpectedRefImage.convertToFormat( aFormat ); + QImage anActualImage = theActualImage.convertToFormat( aFormat ); + + QImage aDiff( anExpectedRefImage.width(), anExpectedRefImage.height(), aFormat ); + QPainter aPainter( &aDiff ); + aPainter.drawImage( 0, 0, anExpectedRefImage ); + aPainter.setCompositionMode( QPainter::RasterOp_SourceXorDestination ); + aPainter.drawImage( 0, 0, anActualImage ); + return aDiff; +} + +bool TestViewer::AssertImages( QString& theMessage, const QImage* theImage, const char* theCase, bool swapRGB ) { QImage anActualImage; if( theImage ) @@ -273,8 +306,7 @@ bool TestViewer::AssertImages( QString& theMessage, const QImage* theImage, cons else anActualImage = viewWindow()->getView(OCCViewer_ViewFrame::MAIN_VIEW)->dumpView(); - const bool SWAP_RGB_ORDER = true; - if( SWAP_RGB_ORDER ) + if( swapRGB ) { // A temporary patch for bug in SALOME/OCC dump; the result image contains swapped RGB colors anActualImage = anActualImage.rgbSwapped(); @@ -284,10 +316,11 @@ bool TestViewer::AssertImages( QString& theMessage, const QImage* theImage, cons if( theCase ) myKey = theCase; - QString anExpectedRefFilePath = qgetenv( "HYDRO_ROOT_DIR" ) + "/bin/salome/test/HYDRO"; + QString anExpectedRefFilePath = REF_DATA_PATH; anExpectedRefFilePath += "/" + myKey + ".png"; QImage anExpectedRefImage; anExpectedRefImage.load( anExpectedRefFilePath ); + //std::cout << "Expected image loading: " << anExpectedRefFilePath.toStdString() << std::endl; if( AreImagesEqual( anActualImage, anExpectedRefImage, 0.001 ) ) { @@ -295,21 +328,22 @@ bool TestViewer::AssertImages( QString& theMessage, const QImage* theImage, cons return true; } - QString aPath = QDir::tempPath() + "/" + myKey + ".png"; + QString aPath = TMP_DIR + "/" + myKey + ".png"; anActualImage.save( aPath ); + //std::cout << "Actual image: " << aPath.toStdString() << std::endl; + //std::cout << anActualImage.width() << "x" << anActualImage.height() << std::endl; theMessage = "The viewer contents does not correspond to the reference image: " + myKey; - QImage aDiff( anExpectedRefImage.width(), anExpectedRefImage.height(), QImage::Format_ARGB32 ); - QPainter aPainter( &aDiff ); - aPainter.drawImage( 0, 0, anExpectedRefImage ); - aPainter.setCompositionMode( QPainter::RasterOp_SourceXorDestination ); - aPainter.drawImage( 0, 0, anActualImage ); + QImage aDiff = diff( anExpectedRefImage, anActualImage ); - QString aDiffFilePath = QDir::tempPath() + "/" + myKey + "_diff.png"; + QString aDiffFilePath = TMP_DIR + "/" + myKey + "_diff.png"; aDiff.save( aDiffFilePath ); + //std::cout << "Diff image: " << aDiffFilePath.toStdString() << std::endl; - anExpectedRefImage.save( QDir::tempPath() + "/" + myKey + "_1.png"); + QString anExpected = TMP_DIR + "/" + myKey + "_1.png"; + //std::cout << "Expected image: " << anExpected.toStdString() << std::endl; + anExpectedRefImage.save( anExpected ); return false; } @@ -349,12 +383,12 @@ void TestViewer::showColorScale( bool isShow ) if( isShow ) { if( !context()->IsDisplayed( aColorScale ) ) - context()->Display( aColorScale ); + context()->Display( aColorScale, true ); } else { if( context()->IsDisplayed( aColorScale ) ) - context()->Erase( aColorScale ); + context()->Erase( aColorScale, true ); } } @@ -366,8 +400,9 @@ bool TestViewer::ColorScaleIsDisplayed() void TestViewer::select( int theViewX, int theViewY ) { Handle(V3d_View) aView = myViewWindow->getViewPort()->getView(); - context()->MoveTo( theViewX, theViewY, aView ); - context()->Select(); + context()->MoveTo( theViewX, theViewY, aView, true); + context()->Select(true); + // context()->CloseAllContexts(); } QString GetLine( QFile& theFile, bool isUtf8 ) @@ -387,16 +422,24 @@ bool TestViewer::areScriptsEqual( const QString& theBaseName, int theLinesToOmit, QString& theMsg ) { - QString anExpectedRefFilePath = qgetenv( "HYDRO_ROOT_DIR" ) + "/bin/salome/test/HYDRO"; + QString anExpectedRefFilePath = REF_DATA_PATH; anExpectedRefFilePath += "/" + theBaseName; - QString anActualFilePath = QDir::tempPath() + "/" + theBaseName; + QString anActualFilePath = TMP_DIR + "/" + theBaseName; QFile anExpected( anExpectedRefFilePath ); QFile anActual( anActualFilePath ); - if( !anExpected.open( QFile::ReadOnly | QFile::Text ) || - !anActual.open ( QFile::ReadOnly | QFile::Text ) ) + if( !anExpected.open( QFile::ReadOnly | QFile::Text ) ) + { + theMsg = "Expected file cannot be opened: " + anExpectedRefFilePath; return false; + } + + if( !anActual.open( QFile::ReadOnly | QFile::Text ) ) + { + theMsg = "Actual file cannot be opened: " + anActualFilePath; + return false; + } for( int i=0; i