X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDRO_tests%2FTestViewer.cxx;h=3fd331eb3acf1248a279171595fe1a8c6bd4aa2c;hb=670039d7a5d25b1da51956b668f212756d31a86e;hp=f54fdfc064a7b80137e9c1de65fa5c1f91a484cf;hpb=a72bc1fe339d74df864cfcbc765e2b62c2543d25;p=modules%2Fhydro.git diff --git a/src/HYDRO_tests/TestViewer.cxx b/src/HYDRO_tests/TestViewer.cxx index f54fdfc0..3fd331eb 100644 --- a/src/HYDRO_tests/TestViewer.cxx +++ b/src/HYDRO_tests/TestViewer.cxx @@ -1,3 +1,20 @@ +// Copyright (C) 2014-2015 EDF-R&D +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #include #include @@ -20,10 +37,13 @@ #include #include #include +#include #include #include #include #include +#include +#include #ifdef WIN32 #pragma warning ( default: 4251 ) @@ -82,23 +102,36 @@ QColor TestViewer::GetColor(int i) << QColor(100,100,20) << QColor(10,100,150); } - return aCV[i]; + if (i < aCV.size()) + return aCV[i]; + else + { + QColor TestColor = aCV[i % aCV.size()]; + QColor NewColor((TestColor.red() + i * 41) % 256, + (TestColor.green() + i * 13) % 256, + (TestColor.blue() + i * 23) % 256); + return NewColor; + } } void TestViewer::show( const Handle(AIS_InteractiveObject)& theObject, int theMode, int theSelectionMode, bool isFitAll, const char* theKey ) { - context()->CloseLocalContext(); - context()->EraseAll( Standard_False ); + QString aNewKey = theKey; + if( !aNewKey.isEmpty() ) + { + myKey = aNewKey; + context()->CloseLocalContext(); + context()->EraseAll( Standard_False ); + } + + context()->Display( theObject, theMode, theSelectionMode ); if( theSelectionMode > 0 ) { - context()->Display( theObject, theMode, theSelectionMode ); context()->OpenLocalContext(); context()->Activate( theObject, theSelectionMode, Standard_True ); } - myKey = theKey; - if( isFitAll ) { viewWindow()->onTopView(); @@ -109,6 +142,8 @@ void TestViewer::show( const Handle(AIS_InteractiveObject)& theObject, void TestViewer::show( const TopoDS_Shape& theShape, int theMode, bool isFitAll, const QColor& theColor ) { Handle(AIS_Shape) aShape = new AIS_Shape( theShape ); + if( theShape.ShapeType()==TopAbs_VERTEX ) + aShape->Attributes()->PointAspect()->SetTypeOfMarker( Aspect_TOM_X ); aShape->SetMaterial( Graphic3d_NOM_PLASTIC ); aShape->SetColor( HYDROData_Tool::toOccColor( theColor ) ); context()->Display( aShape, theMode, 0, Standard_False ); @@ -122,18 +157,26 @@ void TestViewer::show( const TopoDS_Shape& theShape, int theMode, bool isFitAll, void TestViewer::show( const TopoDS_Shape& theShape, int theMode, bool isFitAll, const char* theKey ) { - context()->EraseAll( Standard_False ); - - myKey = theKey; - int i = 0; - if( theShape.ShapeType()==TopAbs_SHELL ) + QString aNewKey = theKey; + if( !aNewKey.isEmpty() ) { - TopoDS_Iterator anIt( theShape ); - for( ; anIt.More(); anIt.Next(), i++ ) - show( anIt.Value(), theMode, false, GetColor(i) ); + context()->CloseLocalContext(); + context()->EraseAll( Standard_False ); + myKey = aNewKey; + } + + if( theShape.IsNull() ) + return; + + if( theShape.ShapeType()==TopAbs_COMPOUND ) + { + TopExp_Explorer anExplorer( theShape, TopAbs_FACE ); + for( ; anExplorer.More(); anExplorer.Next() ) + ShowShape (anExplorer.Current(), theMode); } else - show( theShape, theMode, false, GetColor(0) ); + ShowShape(theShape, theMode); + if( isFitAll ) { @@ -142,6 +185,22 @@ void TestViewer::show( const TopoDS_Shape& theShape, int theMode, bool isFitAll, } } +void TestViewer::ShowShape(const TopoDS_Shape& theShape, int theMode) +{ + int i = 0; + if( theShape.ShapeType()==TopAbs_SHELL ) + { + TopoDS_Iterator anIt( theShape ); + for( ; anIt.More(); anIt.Next(), i++ ) + show( anIt.Value(), theMode, false, GetColor(i) ); + } + else if (theShape.ShapeType()==TopAbs_FACE || + theShape.ShapeType()==TopAbs_WIRE || + theShape.ShapeType()==TopAbs_EDGE || + theShape.ShapeType()==TopAbs_VERTEX ) + show( theShape, theMode, false, GetColor(0) ); +} + bool AreImagesEqual( const QImage& theImage1, const QImage& theImage2, double theTolerance ) { if( theImage1.isNull() || theImage2.isNull() ) @@ -206,12 +265,12 @@ Handle_Aspect_ColorScale TestViewer::showColorScale( bool isShow ) if( aColorScale.IsNull() ) return aColorScale; - Standard_Real anXPos = 0.05; //TODO - Standard_Real anYPos = 0.1; //TODO - Standard_Real aWidth = 0.2; //TODO - Standard_Real aHeight = 0.5; //TODO - Standard_Integer aTextHeight = 14; //TODO - Standard_Integer aNbIntervals = 30; //TODO + Standard_Real anXPos = 0.05; + Standard_Real anYPos = 0.1; + Standard_Real aWidth = 0.2; + Standard_Real aHeight = 0.5; + Standard_Integer aTextHeight = 14; + Standard_Integer aNbIntervals = 30; aColorScale->SetXPosition( anXPos ); aColorScale->SetYPosition( anYPos ); @@ -235,3 +294,44 @@ Handle_Aspect_ColorScale TestViewer::showColorScale( bool isShow ) } return aColorScale; } + +void TestViewer::select( int theViewX, int theViewY ) +{ + Handle(V3d_View) aView = myViewWindow->getViewPort()->getView(); + context()->MoveTo( theViewX, theViewY, aView ); + context()->Select(); +} + +bool TestViewer::areScriptsEqual( const QString& theBaseName ) +{ + QString anExpectedRefFilePath = qgetenv( "HYDRO_REFERENCE_DATA" ); + anExpectedRefFilePath += "/" + theBaseName; + + QString anActualFilePath = QDir::tempPath() + "/" + theBaseName; + + QFile anExpected( anExpectedRefFilePath ); + QFile anActual( anActualFilePath ); + if( !anExpected.open( QFile::ReadOnly | QFile::Text ) || + !anActual.open ( QFile::ReadOnly | QFile::Text ) ) + return false; + + const int aLinesToOmit = 20; + for( int i=0; i