From 02c9930b0a94cbbb306d84bcc87afcc27cd8ef00 Mon Sep 17 00:00:00 2001 From: asl Date: Wed, 20 Sep 2017 15:03:47 +0300 Subject: [PATCH] refs #1328: draft implementation of the overview window with automatic tests --- src/HYDROGUI/CMakeLists.txt | 2 + src/HYDROGUI/HYDROGUI_Overview.cxx | 388 ++++++++++++++++++ src/HYDROGUI/HYDROGUI_Overview.h | 62 +++ src/HYDRO_tests/CMakeLists.txt | 6 +- src/HYDRO_tests/ExternalFiles.cmake | 2 + src/HYDRO_tests/TestViewer.cxx | 10 +- src/HYDRO_tests/TestViewer.h | 6 +- src/HYDRO_tests/reference_data/CMakeLists.txt | 8 + .../reference_data/overview_empty.png | Bin 0 -> 6701 bytes .../reference_data/overview_panned_1.png | Bin 0 -> 8194 bytes .../reference_data/overview_prs.png | Bin 0 -> 9342 bytes .../reference_data/overview_rotated_1.png | Bin 0 -> 10787 bytes .../reference_data/overview_selection.png | Bin 0 -> 10277 bytes .../reference_data/overview_zoomed_1.png | Bin 0 -> 8113 bytes .../reference_data/overview_zoomed_2.png | Bin 0 -> 8122 bytes src/HYDRO_tests/reference_data/test1.brep | 40 ++ src/HYDRO_tests/reference_data/test_zone.brep | 40 ++ src/HYDRO_tests/test_HYDROData_Main.cxx | 4 +- src/HYDRO_tests/test_Overview.cxx | 199 +++++++++ src/HYDRO_tests/test_Overview.h | 60 +++ 20 files changed, 815 insertions(+), 12 deletions(-) create mode 100644 src/HYDROGUI/HYDROGUI_Overview.cxx create mode 100644 src/HYDROGUI/HYDROGUI_Overview.h create mode 100644 src/HYDRO_tests/reference_data/overview_empty.png create mode 100644 src/HYDRO_tests/reference_data/overview_panned_1.png create mode 100644 src/HYDRO_tests/reference_data/overview_prs.png create mode 100644 src/HYDRO_tests/reference_data/overview_rotated_1.png create mode 100644 src/HYDRO_tests/reference_data/overview_selection.png create mode 100644 src/HYDRO_tests/reference_data/overview_zoomed_1.png create mode 100644 src/HYDRO_tests/reference_data/overview_zoomed_2.png create mode 100644 src/HYDRO_tests/reference_data/test1.brep create mode 100644 src/HYDRO_tests/reference_data/test_zone.brep create mode 100644 src/HYDRO_tests/test_Overview.cxx create mode 100644 src/HYDRO_tests/test_Overview.h diff --git a/src/HYDROGUI/CMakeLists.txt b/src/HYDROGUI/CMakeLists.txt index 96cbffbc..ae312aba 100644 --- a/src/HYDROGUI/CMakeLists.txt +++ b/src/HYDROGUI/CMakeLists.txt @@ -144,6 +144,7 @@ set(PROJECT_HEADERS HYDROGUI_LandCoverColoringOp.h HYDROGUI_SetTransparencyOp.h HYDROGUI_TransparencyDlg.h + HYDROGUI_Overview.h ) QT_WRAP_MOC(PROJECT_HEADERS_MOC ${PROJECT_HEADERS}) @@ -290,6 +291,7 @@ set(PROJECT_SOURCES HYDROGUI_LandCoverColoringOp.cxx HYDROGUI_SetTransparencyOp.cxx HYDROGUI_TransparencyDlg.cxx + HYDROGUI_Overview.cxx ) add_definitions( diff --git a/src/HYDROGUI/HYDROGUI_Overview.cxx b/src/HYDROGUI/HYDROGUI_Overview.cxx new file mode 100644 index 00000000..a72155b6 --- /dev/null +++ b/src/HYDROGUI/HYDROGUI_Overview.cxx @@ -0,0 +1,388 @@ +// 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 +#include +#include +#include +#include +#include + +class HYDROGUI_OverviewBand : public QtxPolyRubberBand +{ +public: + HYDROGUI_OverviewBand( HYDROGUI_Overview* theOverview ); + virtual ~HYDROGUI_OverviewBand(); + + void initGeometry( const QPolygon& ); + void update( bool isFromMain ); + QPoint center() const; + int count() const; + + void drag( const QPoint&, bool isStart ); + bool isDrag() const; + void dragging( const QPoint& ); + bool contains( const QPoint& ) const; + QRect boundingRect() const; + +protected: + virtual void paintEvent( QPaintEvent* ); + +private: + HYDROGUI_Overview* myOverview; + bool myIsDrag; + QPolygon myStartPoints; + QPoint myStartPnt; +}; + + +HYDROGUI_OverviewBand::HYDROGUI_OverviewBand( HYDROGUI_Overview* theOverview ) + : QtxPolyRubberBand( theOverview->getViewPort( false ) ), + myOverview( theOverview ), myIsDrag( false ) +{ +} + +HYDROGUI_OverviewBand::~HYDROGUI_OverviewBand() +{ +} + +bool isEmpty( const QPolygon& thePoly ) +{ + QSize s = thePoly.boundingRect().size(); + if( s.width() < 2 || s.height() < 2 ) + return true; + else + return false; +} + +void HYDROGUI_OverviewBand::initGeometry( const QPolygon& thePoly ) +{ + int w2 = myOverview->width()*2; + int h2 = myOverview->height()*2; + + QPolygon aPoly; + for( int i=0, n=thePoly.size(); i w2 ) + p.setX( w2 ); + if( p.y() < -h2 ) + p.setY( -h2 ); + if( p.y() > h2 ) + p.setY( h2 ); + } + + QtxPolyRubberBand::initGeometry( thePoly ); + if( isEmpty( thePoly ) ) + hide(); + else + show(); +} + +QRect HYDROGUI_OverviewBand::boundingRect() const +{ + return myPoints.boundingRect(); +} + +QPoint HYDROGUI_OverviewBand::center() const +{ + QPoint c; + int n = myPoints.size()-1; + if( n==0 ) + return QPoint(); + + for( int i=0; igetViewPort( true ); + if( isFromMain ) + { + int w = main->width(); + int h = main->height(); + + QPolygon poly; + poly.append( myOverview->fromMain( 0, 0 ) ); + poly.append( myOverview->fromMain( w, 0 ) ); + poly.append( myOverview->fromMain( w, h ) ); + poly.append( myOverview->fromMain( 0, h ) ); + poly.append( myOverview->fromMain( 0, 0 ) ); + initGeometry( poly ); + } + else + { + OCCViewer_ViewPort3d* overview = myOverview->getViewPort( false ); + QPoint c = center(); + double x1, y1, z1, x2, y2, z2; + main->getView()->Convert( main->width()/2, main->height()/2, x1, y1, z1 ); + overview->getView()->Convert( c.x(), c.y(), x2, y2, z2 ); + + gp_Trsf aTrsf; + aTrsf.SetTranslation( gp_Pnt( x1, y1, z1 ), gp_Pnt( x2, y2, z2 ) ); + main->getView()->Camera()->Transform( aTrsf ); + main->repaint(); + } +} + +void HYDROGUI_OverviewBand::paintEvent( QPaintEvent* thePaintEvent ) +{ + QPainter painter( this ); + painter.setRenderHint( QPainter::Antialiasing ); + + static QColor aColor = Qt::red; + static int aWidth = 2; + static QPen aPen( QBrush( aColor ), aWidth, Qt::SolidLine ); + + painter.setPen( aPen ); + painter.drawPolygon( myPoints ); +} + + + + + + +HYDROGUI_Overview::HYDROGUI_Overview( const QString& theTitle, int theMargin, QWidget* theParent ) + : QDockWidget( theParent ), myMargin( theMargin ), + myMainView( 0 ), myViewPort( 0 ), myBand( 0 ) +{ + setWindowTitle( theTitle ); +} + +HYDROGUI_Overview::~HYDROGUI_Overview() +{ +} + +QImage HYDROGUI_Overview::dump() const +{ + if( !myViewPort ) + return QImage(); + + Handle(V3d_View) view = myViewPort->getView(); + if( view.IsNull() ) + return QImage(); + + int aWidth = myViewPort->width(); + int aHeight = myViewPort->height(); + + Image_PixMap aPix; + view->ToPixMap( aPix,aWidth, aHeight,Graphic3d_BT_RGBA ); + + QImage anImage( aPix.Data(), aWidth, aHeight, QImage::Format_ARGB32 ); + anImage = anImage.mirrored(); + anImage = anImage.rgbSwapped(); + + if( myBand && myBand->isVisible() ) + { + QPixmap aPixmap = QPixmap::fromImage( anImage ); + QPoint p = myBand->boundingRect().topLeft(); + myBand->render( &aPixmap, p ); + anImage = aPixmap.toImage(); + } + + return anImage; +} + +OCCViewer_ViewPort3d* HYDROGUI_Overview::getViewPort( bool isMain ) const +{ + return isMain ? myMainView->getViewPort() : myViewPort; +} + +void HYDROGUI_Overview::setMainView( OCCViewer_ViewFrame* theMainView ) +{ + myMainView = theMainView; + if( !myMainView ) + return; + + OCCViewer_ViewWindow* aMainView = myMainView->getView( OCCViewer_ViewFrame::MAIN_VIEW ); + connect( aMainView, SIGNAL( vpTransformationFinished( OCCViewer_ViewWindow::OperationType ) ), + this, SLOT( OnTransformation() ) ); + connect( aMainView->getViewPort(), SIGNAL( vpResizeEvent( QResizeEvent* ) ), + this, SLOT( OnResizeEvent( QResizeEvent* ) ) ); + connect( aMainView->getViewPort(), SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), + this, SLOT( OnTransformation() ) ); + + myViewPort = new OCCViewer_ViewPort3d( this, myMainView->getViewPort()->getViewer(), V3d_ORTHOGRAPHIC ); + myViewPort->setBackgroundColor( Qt::white ); + + connect( myViewPort, SIGNAL( vpMouseEvent( QMouseEvent* ) ), + this, SLOT( OnMouseEvent( QMouseEvent* ) ) ); + connect( myViewPort, SIGNAL( vpResizeEvent( QResizeEvent* ) ), + this, SLOT( OnResizeEvent( QResizeEvent* ) ) ); + +#if defined(TEST_MODE) || defined(_DEBUG) + //qApp->installEventFilter( this ); +#endif + + setWidget( myViewPort ); + setTopView(); + + qApp->processEvents(); + myBand = new HYDROGUI_OverviewBand( this ); + myBand->update( true ); +} + +void HYDROGUI_Overview::setTopView() +{ + Handle(V3d_View) aView3d = myViewPort->getView(); + if( !aView3d.IsNull() ) + aView3d->SetProj( V3d_Zpos ); + myViewPort->fitAll(); + + // Apply margins for internal area in the view port + QRect aRect( -myMargin, -myMargin, myViewPort->width()+2*myMargin, myViewPort->height()+2*myMargin ); + myViewPort->fitRect( aRect ); + + if( myBand ) + myBand->update( true ); +} + +void HYDROGUI_Overview::OnTransformation() +{ + myBand->update( true ); +} + +QPoint HYDROGUI_Overview::fromMain( int xp, int yp ) const +{ + const double EPS = 1E-2; + + Handle(V3d_View) aMain = myMainView->getViewPort()->getView(); + Handle(V3d_View) aXY = myViewPort->getView(); + + // View coordinates to 3d (world) coordinates + double x, y, z; + aMain->Convert( xp, yp, x, y, z ); + + // Moving to the XY plane + gp_Vec aDir = aMain->Camera()->Direction(); + if( fabs( aDir.Z() )Convert( x, y, z, xp, yp ); + + return QPoint( xp, yp ); +} + +void HYDROGUI_Overview::OnMouseEvent( QMouseEvent* theEvent ) +{ + QPoint mp = theEvent->pos(); + if( !myBand ) + return; + + switch( theEvent->type() ) + { + case QEvent::MouseButtonPress: + myBand->drag( mp, true ); + break; + + case QEvent::MouseButtonRelease: + myBand->drag( mp, false ); + break; + + case QEvent::MouseMove: + if( myBand->isDrag() ) + myBand->dragging( mp ); + break; + } +} + +bool HYDROGUI_Overview::eventFilter( QObject* theObject, QEvent* theEvent ) +{ +#if defined(TEST_MODE) || defined(_DEBUG) + /*switch( theEvent->type() ) + { + case QEvent::MouseMove: + { + QPoint mp = ((QMouseEvent*)theEvent)->pos(); + //mp = getViewPort(false)->mapFromGlobal(mp); + QString coords = QString( "(%0, %1)" ).arg( mp.x() ).arg( mp.y() ); + std::string scoords = coords.toStdString(); + qDebug( scoords.c_str() ); + } + break; + }*/ +#endif + return QDockWidget::eventFilter( theObject, theEvent ); +} + +void HYDROGUI_Overview::OnResizeEvent( QResizeEvent* ) +{ + if( myBand ) + myBand->update( true ); +} diff --git a/src/HYDROGUI/HYDROGUI_Overview.h b/src/HYDROGUI/HYDROGUI_Overview.h new file mode 100644 index 00000000..11df12af --- /dev/null +++ b/src/HYDROGUI/HYDROGUI_Overview.h @@ -0,0 +1,62 @@ +// 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 +// + + +#ifndef HYDROGUI_OVERVIEW_H +#define HYDROGUI_OVERVIEW_H + +#include + +class OCCViewer_ViewPort3d; +class OCCViewer_ViewFrame; +class HYDROGUI_OverviewBand; + +class HYDROGUI_Overview : public QDockWidget +{ + Q_OBJECT + +public: + HYDROGUI_Overview( const QString& theTitle, int theMargin = 5, QWidget* theParent = 0 ); + virtual ~HYDROGUI_Overview(); + + void setMainView( OCCViewer_ViewFrame* ); + void setTopView(); + + QPoint fromMain( int xp, int yp ) const; + OCCViewer_ViewPort3d* getViewPort( bool isMain ) const; + + QImage dump() const; + +protected: + virtual bool eventFilter( QObject*, QEvent* ); + +private slots: + void OnTransformation(); + void OnMouseEvent( QMouseEvent* ); + void OnResizeEvent( QResizeEvent* ); + +private: + int myMargin; + OCCViewer_ViewFrame* myMainView; + OCCViewer_ViewPort3d* myViewPort; + HYDROGUI_OverviewBand* myBand; +}; + +#endif + + diff --git a/src/HYDRO_tests/CMakeLists.txt b/src/HYDRO_tests/CMakeLists.txt index 20f22d15..35d87abf 100644 --- a/src/HYDRO_tests/CMakeLists.txt +++ b/src/HYDRO_tests/CMakeLists.txt @@ -25,6 +25,7 @@ set(PROJECT_HEADERS test_Dependencies.h test_HYDROData_DTM.h + test_Overview.h TestShape.h TestViewer.h @@ -54,6 +55,7 @@ set(PROJECT_SOURCES test_HYDROData_Stream.cxx test_Dependencies.cxx test_HYDROData_Tool.cxx + test_Overview.cxx TestShape.cxx TestViewer.cxx @@ -61,13 +63,13 @@ set(PROJECT_SOURCES TestLib_Runner.cxx ) -add_definitions( -DLIGHT_MODE -DHYDRODATA_STATIC -DHYDROGUI_STATIC ) +add_definitions( -DLIGHT_MODE -DHYDRODATA_STATIC -DHYDROGUI_STATIC -DTEST_MODE ) IF( ${WIN32} ) add_definitions( -DWNT -D__WIN32__ -D__x86__ -D_WIN64 -D_WIN32_WINNT=0x0400 -D__NT__ -D__OSVERSION__=4 ) ENDIF() -SET( CPPUNIT_INCLUDES $ENV{CPPUNIT_ROOT}/include ) +SET( CPPUNIT_INCLUDES $ENV{CPPUNIT_ROOT_DIR}/include ) SET( CAS_INCLUDES $ENV{CASROOT}/inc ) SET( QT_INCLUDES $ENV{QT_ROOT_DIR}/include $ENV{QT_ROOT_DIR}/include/QtCore $ENV{QT_ROOT_DIR}/include/QtGui $ENV{QT_ROOT_DIR}/include/QtTest ) SET( KERNEL_INCLUDES $ENV{KERNEL_ROOT_DIR}/include/salome ) diff --git a/src/HYDRO_tests/ExternalFiles.cmake b/src/HYDRO_tests/ExternalFiles.cmake index b093912a..947468e0 100644 --- a/src/HYDRO_tests/ExternalFiles.cmake +++ b/src/HYDRO_tests/ExternalFiles.cmake @@ -77,6 +77,7 @@ set( EXTERNAL_FILES ../HYDROGUI/HYDROGUI_StreamDlg.cxx ../HYDROGUI/HYDROGUI_ListSelector.cxx ../HYDROGUI/HYDROGUI_OrderedListWidget.cxx + ../HYDROGUI/HYDROGUI_Overview.cxx ) set( MOC_HEADERS @@ -85,6 +86,7 @@ set( MOC_HEADERS ../HYDROGUI/HYDROGUI_StreamDlg.h ../HYDROGUI/HYDROGUI_ListSelector.h ../HYDROGUI/HYDROGUI_OrderedListWidget.h + ../HYDROGUI/HYDROGUI_Overview.h ) QT_WRAP_MOC( PROJECT_MOC_HEADERS ${MOC_HEADERS} ) diff --git a/src/HYDRO_tests/TestViewer.cxx b/src/HYDRO_tests/TestViewer.cxx index 5ef6d2d9..038ba333 100644 --- a/src/HYDRO_tests/TestViewer.cxx +++ b/src/HYDRO_tests/TestViewer.cxx @@ -30,7 +30,7 @@ #ifdef WIN32 #pragma warning ( disable: 4251 ) #endif -#include +#include #ifdef WIN32 #pragma warning ( disable: 4251 ) #endif @@ -56,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() @@ -72,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; } @@ -82,7 +82,7 @@ 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; @@ -272,7 +272,7 @@ bool TestViewer::AssertImages( QString& theMessage, const QImage* theImage, cons if( theImage ) anActualImage = *theImage; else - anActualImage = viewWindow()->dumpView(); + anActualImage = viewWindow()->getView(OCCViewer_ViewFrame::MAIN_VIEW)->dumpView(); if( theCase ) myKey = theCase; diff --git a/src/HYDRO_tests/TestViewer.h b/src/HYDRO_tests/TestViewer.h index 90aac840..3584ef2d 100644 --- a/src/HYDRO_tests/TestViewer.h +++ b/src/HYDRO_tests/TestViewer.h @@ -22,7 +22,7 @@ class OCCViewer_ViewManager; class OCCViewer_Viewer; -class OCCViewer_ViewWindow; +class OCCViewer_ViewFrame; class TopoDS_Shape; class QString; class QColor; @@ -35,7 +35,7 @@ class TestViewer public: static OCCViewer_ViewManager* viewManager(); static OCCViewer_Viewer* viewer(); - static OCCViewer_ViewWindow* viewWindow(); + static OCCViewer_ViewFrame* viewWindow(); static Handle(AIS_InteractiveContext) context(); static void eraseAll( bool isUpdate ); @@ -62,7 +62,7 @@ public: private: static OCCViewer_ViewManager* myViewManager; - static OCCViewer_ViewWindow* myViewWindow; + static OCCViewer_ViewFrame* myViewWindow; static QString myKey; }; diff --git a/src/HYDRO_tests/reference_data/CMakeLists.txt b/src/HYDRO_tests/reference_data/CMakeLists.txt index 021ee7f6..36f0b5d1 100644 --- a/src/HYDRO_tests/reference_data/CMakeLists.txt +++ b/src/HYDRO_tests/reference_data/CMakeLists.txt @@ -120,6 +120,14 @@ SET(REFERENCE_DATA pb_1066.cbf f_cmp.brep rebuild_cmp_out.png + test_zone.brep + overview_empty.png + overview_prs.png + overview_selection.png + overview_zoomed_1.png + overview_zoomed_2.png + overview_panned_1.png + overview_rotated_1.png ) # Application tests diff --git a/src/HYDRO_tests/reference_data/overview_empty.png b/src/HYDRO_tests/reference_data/overview_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..fa9022f66b5b823322458a5a169ab2b587c1a086 GIT binary patch literal 6701 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 literal 0 HcmV?d00001 diff --git a/src/HYDRO_tests/reference_data/overview_panned_1.png b/src/HYDRO_tests/reference_data/overview_panned_1.png new file mode 100644 index 0000000000000000000000000000000000000000..cf482f4498a5b996b5e25fe9adb45a0a898c193d GIT binary patch literal 8194 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
`DLt literal 0 HcmV?d00001 diff --git a/src/HYDRO_tests/reference_data/overview_rotated_1.png b/src/HYDRO_tests/reference_data/overview_rotated_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bc6b07abeaf839d2667eb86be4bd6ef549270475 GIT binary patch literal 10787 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 TThaoclY`h=Iaoe4cfayK=7Dzd literal 0 HcmV?d00001 diff --git a/src/HYDRO_tests/reference_data/overview_selection.png b/src/HYDRO_tests/reference_data/overview_selection.png new file mode 100644 index 0000000000000000000000000000000000000000..18e18296532b766e971250439f2bc65a70e29064 GIT binary patch literal 10277 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 e)B{Yc`&OeNqEQ||k%7LkUe*qW;Qs?w@eFbR literal 0 HcmV?d00001 diff --git a/src/HYDRO_tests/reference_data/overview_zoomed_1.png b/src/HYDRO_tests/reference_data/overview_zoomed_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e8a1339909f0b2b45adaeefbf47f4f6fc8e1584f GIT binary patch literal 8113 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 P@Zhk4nSQ3O-L3xtIW!9# literal 0 HcmV?d00001 diff --git a/src/HYDRO_tests/reference_data/overview_zoomed_2.png b/src/HYDRO_tests/reference_data/overview_zoomed_2.png new file mode 100644 index 0000000000000000000000000000000000000000..169f8a792067a0574dcfb59d29541e2d6e52f566 GIT binary patch literal 8122 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 qN@iWv2o3fRa1Ywl2)!09j**_wQ literal 0 HcmV?d00001 diff --git a/src/HYDRO_tests/reference_data/test1.brep b/src/HYDRO_tests/reference_data/test1.brep new file mode 100644 index 00000000..8538356b --- /dev/null +++ b/src/HYDRO_tests/reference_data/test1.brep @@ -0,0 +1,40 @@ +DBRep_DrawableShape + +CASCADE Topology V1, (c) Matra-Datavision +Locations 0 +Curve2ds 0 +Curves 1 +7 0 1 3 70 36 40407.271980038946 34286.049813889753 0 41434.695364891566 34075.540478759103 0 41543.12570273161 33831.147955443885 0 41928.508752776201 33552.530669669075 0 42226.032860650426 33501.618691863972 0 42512.377282165187 33124.973722831535 0 42453.660703790389 32866.169491639623 0 42636.683232638294 32556.628928349546 0 42739.39438134151 32428.165853840786 0 43128.549115071481 32261.518244588729 0 43443.242731093269 32446.919465336847 0 44036.016109793818 32224.288873884427 0 44179.57722410289 31752.96667849454 0 44803.177266519742 31590.14386194132 0 45084.459863984281 31814.973824676825 0 45675.560064011988 31824.707181937414 0 45984.207150760994 31774.346493539811 0 46525.908372059785 31602.416570081987 0 46836.237065627618 31548.151248384765 0 47094.446316425885 31158.973712595835 0 46985.800617293673 30919.759745090963 0 47061.735829872901 30490.880508444068 0 47087.294586955686 30243.390071084152 0 47367.206218256455 29831.436491266431 0 47644.267070945622 29732.981437783019 0 48152.953739038458 29298.339926965706 0 48555.596554881646 29098.186461488429 0 48876.058650707077 28433.202778072668 0 48708.832731306546 28052.63880231194 0 48875.152078196683 27522.946396343301 0 48991.386126125355 27322.638678026422 0 49283.512757001568 27015.879527516525 0 49554.875124393504 27006.838610084858 0 49893.575552385431 26400.170107647227 0 49800.72715455712 25835.116327035401 0 49518.589779786307 24575.365902450871 0 49275.343115795353 23661.566879419035 0 48291.359705885057 22996.997512096725 0 47815.105167910348 22975.697128035215 0 47004.087052337156 23289.93243118906 0 46740.993451739683 23777.424526890667 0 46248.047551012423 24506.88867875783 0 46260.590886185521 24995.543673183489 0 45680.836210398062 25501.05877251576 0 45193.753985720774 25366.06132317154 0 44590.581148817015 25827.686595926763 0 44493.664062722637 26255.356606440237 0 43948.933050954409 27032.958768022665 0 43656.230461601815 27524.575979954498 0 43105.071660809372 28045.875215102329 0 42940.306990691439 28167.220544222648 0 42603.762295052293 28308.434975899007 0 42432.49586757076 28360.468562351842 0 42074.21364716997 28320.7478952366 0 41917.096381100302 28037.963429537689 0 41486.569214885603 28200.476344627772 0 41614.444853916815 28672.004731019108 0 41269.987018698317 28933.52538392763 0 41054.385996726916 28828.819484477142 0 40757.693528306168 29000.457579083766 0 40708.885980004889 29206.646048001887 0 40449.4164612846 29438.147603314061 0 40294.101335627864 29516.952126757198 0 39783.003996026935 29799.19113954125 0 39390.932908739604 29938.975500587658 0 38884.242234228928 30203.254562777289 0 38686.66320690907 30226.017924204774 0 38136.063842492869 31257.855058452078 0 38197.278854385338 32601.346506280064 0 39349.192858351256 34043.958558363622 0 + 0 2 641.48119551550326 2 1426.6496362974799 2 2060.8793228464447 2 2505.4514983140489 2 3330.8854220777839 2 4405.0572281218629 2 5264.4041166948127 2 6178.5982235452129 2 6969.3970802085223 2 7579.7336716889931 2 8276.0462317509246 2 9073.8911129778462 2 10283.302648601682 2 11288.409861290955 2 11948.87328079275 2 12559.217598125191 2 14033.311302405891 2 16432.091682619968 2 17595.457025794673 2 19041.391950091063 2 20236.673126216578 2 21348.977050960173 2 22515.32146956044 2 24197.234934635264 2 24791.230133437406 2 25292.148004649844 2 25872.662021104232 2 26672.682971892395 2 27170.120409365692 2 27700.970143377119 2 28213.315794378472 2 29452.516362567494 2 29927.72816050606 2 32961.166784790388 2 35465.987692899391 2 +Polygon3D 0 +PolygonOnTriangulations 0 +Surfaces 1 +1 44444.760874091022 28852.226106171107 0 -0 -0 -1 -1 0 0 0 1 -0 +Triangulations 0 + +TShapes 4 +Ve +1e-007 +41225.22 34118.46 0 +0 0 + +0101101 +* +Ed + 1e-007 1 1 0 +1 1 0 0 35465.9876928994 +0 + +0101000 ++4 0 -4 0 * +Wi + +0101100 ++3 0 * +Fa +0 1e-007 1 0 + +1111000 ++2 0 * + ++1 0 \ No newline at end of file diff --git a/src/HYDRO_tests/reference_data/test_zone.brep b/src/HYDRO_tests/reference_data/test_zone.brep new file mode 100644 index 00000000..8538356b --- /dev/null +++ b/src/HYDRO_tests/reference_data/test_zone.brep @@ -0,0 +1,40 @@ +DBRep_DrawableShape + +CASCADE Topology V1, (c) Matra-Datavision +Locations 0 +Curve2ds 0 +Curves 1 +7 0 1 3 70 36 40407.271980038946 34286.049813889753 0 41434.695364891566 34075.540478759103 0 41543.12570273161 33831.147955443885 0 41928.508752776201 33552.530669669075 0 42226.032860650426 33501.618691863972 0 42512.377282165187 33124.973722831535 0 42453.660703790389 32866.169491639623 0 42636.683232638294 32556.628928349546 0 42739.39438134151 32428.165853840786 0 43128.549115071481 32261.518244588729 0 43443.242731093269 32446.919465336847 0 44036.016109793818 32224.288873884427 0 44179.57722410289 31752.96667849454 0 44803.177266519742 31590.14386194132 0 45084.459863984281 31814.973824676825 0 45675.560064011988 31824.707181937414 0 45984.207150760994 31774.346493539811 0 46525.908372059785 31602.416570081987 0 46836.237065627618 31548.151248384765 0 47094.446316425885 31158.973712595835 0 46985.800617293673 30919.759745090963 0 47061.735829872901 30490.880508444068 0 47087.294586955686 30243.390071084152 0 47367.206218256455 29831.436491266431 0 47644.267070945622 29732.981437783019 0 48152.953739038458 29298.339926965706 0 48555.596554881646 29098.186461488429 0 48876.058650707077 28433.202778072668 0 48708.832731306546 28052.63880231194 0 48875.152078196683 27522.946396343301 0 48991.386126125355 27322.638678026422 0 49283.512757001568 27015.879527516525 0 49554.875124393504 27006.838610084858 0 49893.575552385431 26400.170107647227 0 49800.72715455712 25835.116327035401 0 49518.589779786307 24575.365902450871 0 49275.343115795353 23661.566879419035 0 48291.359705885057 22996.997512096725 0 47815.105167910348 22975.697128035215 0 47004.087052337156 23289.93243118906 0 46740.993451739683 23777.424526890667 0 46248.047551012423 24506.88867875783 0 46260.590886185521 24995.543673183489 0 45680.836210398062 25501.05877251576 0 45193.753985720774 25366.06132317154 0 44590.581148817015 25827.686595926763 0 44493.664062722637 26255.356606440237 0 43948.933050954409 27032.958768022665 0 43656.230461601815 27524.575979954498 0 43105.071660809372 28045.875215102329 0 42940.306990691439 28167.220544222648 0 42603.762295052293 28308.434975899007 0 42432.49586757076 28360.468562351842 0 42074.21364716997 28320.7478952366 0 41917.096381100302 28037.963429537689 0 41486.569214885603 28200.476344627772 0 41614.444853916815 28672.004731019108 0 41269.987018698317 28933.52538392763 0 41054.385996726916 28828.819484477142 0 40757.693528306168 29000.457579083766 0 40708.885980004889 29206.646048001887 0 40449.4164612846 29438.147603314061 0 40294.101335627864 29516.952126757198 0 39783.003996026935 29799.19113954125 0 39390.932908739604 29938.975500587658 0 38884.242234228928 30203.254562777289 0 38686.66320690907 30226.017924204774 0 38136.063842492869 31257.855058452078 0 38197.278854385338 32601.346506280064 0 39349.192858351256 34043.958558363622 0 + 0 2 641.48119551550326 2 1426.6496362974799 2 2060.8793228464447 2 2505.4514983140489 2 3330.8854220777839 2 4405.0572281218629 2 5264.4041166948127 2 6178.5982235452129 2 6969.3970802085223 2 7579.7336716889931 2 8276.0462317509246 2 9073.8911129778462 2 10283.302648601682 2 11288.409861290955 2 11948.87328079275 2 12559.217598125191 2 14033.311302405891 2 16432.091682619968 2 17595.457025794673 2 19041.391950091063 2 20236.673126216578 2 21348.977050960173 2 22515.32146956044 2 24197.234934635264 2 24791.230133437406 2 25292.148004649844 2 25872.662021104232 2 26672.682971892395 2 27170.120409365692 2 27700.970143377119 2 28213.315794378472 2 29452.516362567494 2 29927.72816050606 2 32961.166784790388 2 35465.987692899391 2 +Polygon3D 0 +PolygonOnTriangulations 0 +Surfaces 1 +1 44444.760874091022 28852.226106171107 0 -0 -0 -1 -1 0 0 0 1 -0 +Triangulations 0 + +TShapes 4 +Ve +1e-007 +41225.22 34118.46 0 +0 0 + +0101101 +* +Ed + 1e-007 1 1 0 +1 1 0 0 35465.9876928994 +0 + +0101000 ++4 0 -4 0 * +Wi + +0101100 ++3 0 * +Fa +0 1e-007 1 0 + +1111000 ++2 0 * + ++1 0 \ No newline at end of file diff --git a/src/HYDRO_tests/test_HYDROData_Main.cxx b/src/HYDRO_tests/test_HYDROData_Main.cxx index 05f6b9b8..9d2951d1 100644 --- a/src/HYDRO_tests/test_HYDROData_Main.cxx +++ b/src/HYDRO_tests/test_HYDROData_Main.cxx @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include #include @@ -39,7 +39,7 @@ int main( int argc, char* argv[] ) SUIT_Session aSession; aSession.startApplication("std"); - OCCViewer_ViewWindow* aWindow = TestViewer::viewWindow(); + OCCViewer_ViewFrame* aWindow = TestViewer::viewWindow(); int W = 800, H = 600; aWindow->setGeometry( 200, 200, W, H ); diff --git a/src/HYDRO_tests/test_Overview.cxx b/src/HYDRO_tests/test_Overview.cxx new file mode 100644 index 00000000..d52f7b76 --- /dev/null +++ b/src/HYDRO_tests/test_Overview.cxx @@ -0,0 +1,199 @@ +// 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 +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +extern QString REF_DATA_PATH; +HYDROGUI_Overview* test_Overview::myOverview = 0; + +#define CPPUNIT_ASSERT_OVERVIEW( theCase ) \ + { \ + QString aMessage; \ + QImage aDump = dumpViews(); \ + if( !TestViewer::AssertImages( aMessage, &aDump, theCase ) ) \ + { \ + TestViewer::showColorScale( false ); \ + std::string aMessageStl = aMessage.toStdString(); \ + CPPUNIT_FAIL( aMessageStl.c_str() ); \ + } \ + } + +const int m = 5; //margins +const QColor aColor = Qt::blue; +const QBrush SOLID( aColor ); +const int WIDTH = 2; +const QPen PSOLID( SOLID, WIDTH ); +const QColor BACK = Qt::white; + +QImage test_Overview::dumpViews() +{ + QImage aMain = TestViewer::viewWindow()->getView(OCCViewer_ViewFrame::MAIN_VIEW)->dumpView(); + QImage anOverview = myOverview->dump(); + + aMain = aMain.rgbSwapped(); //PATCH for image came from OCCT dump + //anOverview = anOverview.rgbSwapped(); //overview dump already normalizes the image, the line is not necessary!!! + + int w1 = aMain.width(); + int w2 = anOverview.width(); + int h1 = aMain.height(); + int h2 = anOverview.height(); + int w = w1 + w2 + 2*WIDTH; + int h = qMax( h1, h2 ) + 2*WIDTH; + + QPixmap pix( w, h ); + pix.fill( BACK ); + + QPainter painter( &pix ); + painter.setPen( PSOLID ); + + painter.drawRect( WIDTH, WIDTH, w2, h2 ); + painter.drawRect( w2+WIDTH, WIDTH, w1, h1 ); + + painter.drawImage( WIDTH, WIDTH, anOverview ); + painter.drawImage( w2+WIDTH, WIDTH, aMain ); + + return pix.toImage(); +} + +void test_Overview::create() +{ + static bool isPassed = false; + if( isPassed ) + return; + + // default mouse position + QTest::mouseMove( TestViewer::viewWindow(), QPoint( 0, 0 ) ); + + // Initialization of the empty viewer + myOverview = new HYDROGUI_Overview( "Test overview" ); + myOverview->show(); + myOverview->setMainView( TestViewer::viewWindow() ); + TestViewer::viewWindow()->setGeometry( 400, 100, 800, 800 ); + myOverview->setGeometry( 100, 100, 200, 200 ); + + isPassed = true; +} + +void test_Overview::showShape() +{ + static bool isPassed = false; + if( isPassed ) + return; + + // Show loaded shape in the viewer + BRep_Builder B; + TopoDS_Shape shape; + std::string fname = (REF_DATA_PATH + "/test_zone.brep").toStdString(); + BRepTools::Read( shape, fname.c_str(), B ); + TestViewer::show( shape, AIS_Shaded, true, 0x03399FF ); + + qApp->processEvents(); + myOverview->setTopView(); //TODO: automatic fit all on show???*/ + + isPassed = true; +} + +void fitAllWithRestore( OCCViewer_ViewPort3d* vp ) +{ + double s = vp->getView()->Scale(); + double x0, y0, z0; + vp->getView()->Convert( 0, 0, x0, y0, z0 ); + TestViewer::viewWindow()->onFitAll(); + vp->getView()->SetScale( s ); + int xp, yp; + vp->getView()->Convert( x0, y0, z0, xp, yp ); + vp->pan( -xp, -yp ); +} + + + + +void test_Overview::test_default() +{ + create(); + CPPUNIT_ASSERT_OVERVIEW( "overview_empty" ); +} + + +void test_Overview::test_presentation() +{ + create(); + showShape(); + + //QTest::qWait( 20000 ); + CPPUNIT_ASSERT_OVERVIEW( "overview_prs" ); +} + +void test_Overview::test_actions_in_main() +{ + create(); + showShape(); + + OCCViewer_ViewWindow* aMain = TestViewer::viewWindow()->getView( OCCViewer_ViewFrame::MAIN_VIEW ); + OCCViewer_ViewPort3d* vp = aMain->getViewPort(); + + // 1. selection in main view + QTest::mouseMove( TestViewer::viewWindow() ); + CPPUNIT_ASSERT_OVERVIEW( "overview_selection" ); + + // 2. mouse wheel zoom + QWheelEvent we( QPoint( 243, 416 ), 120*20, Qt::NoButton, Qt::NoModifier ); + qApp->sendEvent( vp, &we ); + qApp->processEvents(); + CPPUNIT_ASSERT_OVERVIEW( "overview_zoomed_1" ); + + // 3. zoom via mouse + const int d = 100; + vp->zoom( 243, 416, 243+d, 416+d ); + CPPUNIT_ASSERT_OVERVIEW( "overview_zoomed_2" ); + + // 4. panning via mouse + vp->pan( 300, -250 ); + CPPUNIT_ASSERT_OVERVIEW( "overview_panned_1" ); + + // 5. reverse zoom and rotation via mouse + vp->getView()->AutoZFit(); + vp->getView()->ZFitAll(); + vp->getView()->Camera()->SetZRange( -10, 10 ); + vp->zoom( 243+d, 416+d, 243, 416 ); + vp->startRotation( 400, 400, OCCViewer_ViewWindow::BBCENTER, gp_Pnt() ); + vp->rotate( 200, 300, OCCViewer_ViewWindow::BBCENTER, gp_Pnt() ); + + fitAllWithRestore( vp ); + // it is necessary to apply fit all to fit correct zmin/zmax + // and after that we restore the previous aspect + CPPUNIT_ASSERT_OVERVIEW( "overview_rotated_1" ); + + //QTest::qWait( 50000 ); +} + +void test_Overview::test_actions_in_overview() +{ +} diff --git a/src/HYDRO_tests/test_Overview.h b/src/HYDRO_tests/test_Overview.h new file mode 100644 index 00000000..140663ad --- /dev/null +++ b/src/HYDRO_tests/test_Overview.h @@ -0,0 +1,60 @@ +// 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 +// + +#ifdef WIN32 + #pragma warning( disable: 4251 ) +#endif + +#include + +class HYDROGUI_Overview; +class QImage; +class QColor; + +class test_Overview : public CppUnit::TestFixture +{ + CPPUNIT_TEST_SUITE( test_Overview ); + CPPUNIT_TEST( test_default ); + CPPUNIT_TEST( test_presentation ); + CPPUNIT_TEST( test_actions_in_main ); + CPPUNIT_TEST( test_actions_in_overview ); + CPPUNIT_TEST_SUITE_END(); + +public: + void test_default(); + void test_presentation(); + void test_actions_in_main(); + void test_actions_in_overview(); + +private: + static HYDROGUI_Overview* overView(); + static QImage dumpViews(); + + void create(); + void showShape(); + +private: + static HYDROGUI_Overview* myOverview; +}; + +CPPUNIT_TEST_SUITE_REGISTRATION( test_Overview ); +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( test_Overview, "Overview" ); + +#ifdef WIN32 + #pragma warning( default: 4251 ) +#endif -- 2.39.2