X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDRO_tests%2FTestViewer.cxx;h=ba0b7b5d059b76a37bb623a5179be8096df2aa77;hb=ac056ee3c8e228f5b79eca9bad0fec624c595b1b;hp=e541d989fea8998bf45830179bc44c3d9bd264dd;hpb=c85ae099df066af072edac2b16f8eafebed67e19;p=modules%2Fhydro.git diff --git a/src/HYDRO_tests/TestViewer.cxx b/src/HYDRO_tests/TestViewer.cxx index e541d989..ba0b7b5d 100644 --- a/src/HYDRO_tests/TestViewer.cxx +++ b/src/HYDRO_tests/TestViewer.cxx @@ -30,13 +30,12 @@ #ifdef WIN32 #pragma warning ( disable: 4251 ) #endif -#include +#include #ifdef WIN32 #pragma warning ( disable: 4251 ) #endif -#include #include -#include +#include #include #include #include @@ -44,6 +43,11 @@ #include #include #include +#include + +#include +#include +#include #ifdef WIN32 #pragma warning ( default: 4251 ) @@ -52,7 +56,7 @@ #include OCCViewer_ViewManager* TestViewer::myViewManager = 0; -OCCViewer_ViewWindow* TestViewer::myViewWindow = 0; +OCCViewer_ViewFrame* TestViewer::myViewWindow = 0; QString TestViewer::myKey = ""; OCCViewer_ViewManager* TestViewer::viewManager() @@ -68,7 +72,7 @@ OCCViewer_ViewManager* TestViewer::viewManager() aViewer->setZoomingStyle( 1 ); myViewManager->setViewModel( aViewer ); - myViewWindow = dynamic_cast( myViewManager->createViewWindow() ); + myViewWindow = dynamic_cast( myViewManager->createViewWindow() ); return myViewManager; } @@ -78,15 +82,15 @@ OCCViewer_Viewer* TestViewer::viewer() return dynamic_cast( viewManager()->getViewModel() ); } -OCCViewer_ViewWindow* TestViewer::viewWindow() +OCCViewer_ViewFrame* TestViewer::viewWindow() { viewManager(); //to create the view if it was not created earlier return myViewWindow; } -Handle(AIS_InteractiveContext) context() +Handle(AIS_InteractiveContext) TestViewer::context() { - return TestViewer::viewer()->getAISContext(); + return viewer()->getAISContext(); } QColor TestViewer::GetColor(int i) @@ -114,6 +118,12 @@ QColor TestViewer::GetColor(int i) } } +void TestViewer::eraseAll( bool isUpdate ) +{ + context()->CloseLocalContext( -1, Standard_False ); + context()->EraseAll( isUpdate ); +} + void TestViewer::show( const Handle(AIS_InteractiveObject)& theObject, int theMode, int theSelectionMode, bool isFitAll, const char* theKey ) { @@ -121,47 +131,56 @@ void TestViewer::show( const Handle(AIS_InteractiveObject)& theObject, if( !aNewKey.isEmpty() ) { myKey = aNewKey; - context()->CloseLocalContext(); - context()->EraseAll( Standard_False ); + eraseAll( false ); } - context()->Display( theObject, theMode, theSelectionMode ); if( theSelectionMode > 0 ) { context()->OpenLocalContext(); + context()->Display( theObject, theMode, theSelectionMode ); context()->Activate( theObject, theSelectionMode, Standard_True ); } + else + context()->Display( theObject, theMode, theSelectionMode ); if( isFitAll ) - { - viewWindow()->onTopView(); - viewWindow()->onFitAll(); - } + fitAll(); +} + +void TestViewer::fitAll() +{ + viewWindow()->onTopView(); + viewWindow()->onFitAll(); } -void TestViewer::show( const TopoDS_Shape& theShape, int theMode, bool isFitAll, const QColor& theColor ) +void TestViewer::show( const TopoDS_Shape& theShape, int theMode, bool isFitAll, const QColor& theColor, + int theUIANb, int theVIANb) { Handle(AIS_Shape) aShape = new AIS_Shape( theShape ); if( theShape.ShapeType()==TopAbs_VERTEX ) aShape->Attributes()->PointAspect()->SetTypeOfMarker( Aspect_TOM_X ); + if (theShape.ShapeType()==TopAbs_FACE) + { + context()->DefaultDrawer()->UIsoAspect()->SetNumber(theUIANb); + context()->DefaultDrawer()->VIsoAspect()->SetNumber(theVIANb); + Handle_Prs3d_Drawer aDrawer = aShape->Attributes(); + aDrawer->UIsoAspect()->SetNumber(theUIANb); + aDrawer->VIsoAspect()->SetNumber(theVIANb); + } aShape->SetMaterial( Graphic3d_NOM_PLASTIC ); aShape->SetColor( HYDROData_Tool::toOccColor( theColor ) ); context()->Display( aShape, theMode, 0, Standard_False ); if( isFitAll ) - { - viewWindow()->onTopView(); - viewWindow()->onFitAll(); - } + fitAll(); } - -void TestViewer::show( const TopoDS_Shape& theShape, int theMode, bool isFitAll, const char* theKey ) +void TestViewer::show( const TopoDS_Shape& theShape, int theMode, bool isFitAll, const char* theKey, + int theUIANb, int theVIANb) { QString aNewKey = theKey; if( !aNewKey.isEmpty() ) { - context()->CloseLocalContext(); - context()->EraseAll( Standard_False ); + eraseAll( false ); myKey = aNewKey; } @@ -170,25 +189,37 @@ void TestViewer::show( const TopoDS_Shape& theShape, int theMode, bool isFitAll, int i = 0; //show all faces first + TopTools_ListOfShape aListOfFaces; TopExp_Explorer aFE( theShape, TopAbs_FACE ); - for( ; aFE.More(); aFE.Next(), i++ ) - show( aFE.Current(), theMode, false, GetColor(i) ); + for( ; aFE.More(); aFE.Next() ) + aListOfFaces.Append(aFE.Current()); + GEOMUtils::SortShapes(aListOfFaces); + TopTools_ListIteratorOfListOfShape aLF(aListOfFaces); + for( ; aLF.More(); aLF.Next(), i++) + show( aLF.Value(), theMode, false, GetColor(i), theUIANb, theVIANb ); //show all independent wires + TopTools_ListOfShape aListOfWires; TopExp_Explorer aWE( theShape, TopAbs_WIRE, TopAbs_FACE ); - for( ; aWE.More(); aWE.Next(), i++ ) - show( aWE.Current(), theMode, false, GetColor(i) ); + for( ; aWE.More(); aWE.Next() ) + aListOfWires.Append(aWE.Current()); + GEOMUtils::SortShapes(aListOfWires); + TopTools_ListIteratorOfListOfShape aLW(aListOfWires); + for( ; aLW.More(); aLW.Next(), i++) + show( aLW.Value(), theMode, false, GetColor(i) ); //show all independent edges + TopTools_ListOfShape aListOfEdges; TopExp_Explorer anEE( theShape, TopAbs_EDGE, TopAbs_WIRE ); - for( ; anEE.More(); anEE.Next(), i++ ) - show( anEE.Current(), theMode, false, GetColor(i) ); + for( ; anEE.More(); anEE.Next()) + aListOfEdges.Append(anEE.Current()); + GEOMUtils::SortShapes(aListOfEdges); + TopTools_ListIteratorOfListOfShape aLE(aListOfEdges); + for( ; aLE.More(); aLE.Next(), i++) + show( aLE.Value(), theMode, false, GetColor(i) ); if( isFitAll ) - { - viewWindow()->onTopView(); - viewWindow()->onFitAll(); - } + fitAll(); } /*void TestViewer::ShowShape(const TopoDS_Shape& theShape, int theMode, int& i) @@ -234,11 +265,26 @@ bool AreImagesEqual( const QImage& theImage1, const QImage& theImage2, double th return true; } -bool TestViewer::AssertImages( QString& theMessage ) +bool TestViewer::AssertImages( QString& theMessage, const QImage* theImage, const char* theCase ) { - QImage anActualImage = viewWindow()->dumpView(); + QImage anActualImage; + if( theImage ) + anActualImage = *theImage; + else + anActualImage = viewWindow()->getView(OCCViewer_ViewFrame::MAIN_VIEW)->dumpView(); + + const bool SWAP_RGB_ORDER = true; + if( SWAP_RGB_ORDER ) + { + // A temporary patch for bug in SALOME/OCC dump; the result image contains swapped RGB colors + anActualImage = anActualImage.rgbSwapped(); + } + - QString anExpectedRefFilePath = qgetenv( "HYDRO_REFERENCE_DATA" ); + if( theCase ) + myKey = theCase; + + QString anExpectedRefFilePath = qgetenv( "HYDRO_ROOT_DIR" ) + "/bin/salome/test/HYDRO"; anExpectedRefFilePath += "/" + myKey + ".png"; QImage anExpectedRefImage; anExpectedRefImage.load( anExpectedRefFilePath ); @@ -263,18 +309,23 @@ bool TestViewer::AssertImages( QString& theMessage ) QString aDiffFilePath = QDir::tempPath() + "/" + myKey + "_diff.png"; aDiff.save( aDiffFilePath ); + anExpectedRefImage.save( QDir::tempPath() + "/" + myKey + "_1.png"); + return false; } -Handle_Aspect_ColorScale TestViewer::showColorScale( bool isShow ) +Handle(AIS_ColorScale) TestViewer::colorScale() { - Handle(V3d_View) aView = myViewWindow->getViewPort()->getView(); - if( aView.IsNull() ) - return Handle(Aspect_ColorScale)(); + static Handle(AIS_ColorScale) aColorScale = new AIS_ColorScale(); - Handle(Aspect_ColorScale) aColorScale = aView->ColorScale(); + return aColorScale; +} + +void TestViewer::showColorScale( bool isShow ) +{ + Handle(AIS_ColorScale) aColorScale = colorScale(); if( aColorScale.IsNull() ) - return aColorScale; + return; Standard_Real anXPos = 0.05; Standard_Real anYPos = 0.1; @@ -293,17 +344,23 @@ Handle_Aspect_ColorScale TestViewer::showColorScale( bool isShow ) aColorScale->SetTitle( "test" ); aColorScale->SetRange( 0, 1 ); + aColorScale->SetToUpdate(); + if( isShow ) { - if( !aView->ColorScaleIsDisplayed() ) - aView->ColorScaleDisplay(); + if( !context()->IsDisplayed( aColorScale ) ) + context()->Display( aColorScale ); } else { - if( aView->ColorScaleIsDisplayed() ) - aView->ColorScaleErase(); + if( context()->IsDisplayed( aColorScale ) ) + context()->Erase( aColorScale ); } - return aColorScale; +} + +bool TestViewer::ColorScaleIsDisplayed() +{ + return context()->IsDisplayed( colorScale() ); } void TestViewer::select( int theViewX, int theViewY ) @@ -330,7 +387,7 @@ bool TestViewer::areScriptsEqual( const QString& theBaseName, int theLinesToOmit, QString& theMsg ) { - QString anExpectedRefFilePath = qgetenv( "HYDRO_REFERENCE_DATA" ); + QString anExpectedRefFilePath = qgetenv( "HYDRO_ROOT_DIR" ) + "/bin/salome/test/HYDRO"; anExpectedRefFilePath += "/" + theBaseName; QString anActualFilePath = QDir::tempPath() + "/" + theBaseName; @@ -364,3 +421,8 @@ bool TestViewer::areScriptsEqual( const QString& theBaseName, return isEqual; } + +void TestViewer::setKey( const QString& theKey ) +{ + myKey = theKey; +}