From: vsr Date: Mon, 16 Sep 2013 13:56:10 +0000 (+0000) Subject: Merge from BR_new_bop4 (porting to new OCCT BOP) 13/09/2013 X-Git-Tag: BR_hydro_v_0_3_1~62 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=22848c5a37cca698c3499080b49212bbcae0d93f;p=modules%2Fgui.git Merge from BR_new_bop4 (porting to new OCCT BOP) 13/09/2013 --- diff --git a/src/OCCViewer/OCCViewer_VService.cxx b/src/OCCViewer/OCCViewer_VService.cxx index 5c0616b3f..32d4b3216 100755 --- a/src/OCCViewer/OCCViewer_VService.cxx +++ b/src/OCCViewer/OCCViewer_VService.cxx @@ -25,14 +25,6 @@ #include #include -#include - -#if OCC_VERSION_LARGE > 0x06050500 - -// -// new code, changed in OCCT v6.6.0 -// - #include #include #include @@ -42,33 +34,12 @@ #include #endif -#else // #if OCC_VERSION_LARGE > 0x06050500 - -// -// obsolete code (before OCCT v6.6.0); to be removed -// - -#ifdef WNT -#include -#include -#else -#include -#include -#endif - -#endif // #if OCC_VERSION_LARGE > 0x06050500 - /*! Create native view window for CasCade view [ static ] */ Handle(Aspect_Window) OCCViewer_VService::CreateWindow( const Handle(V3d_View)& view, WId winId ) { -#if OCC_VERSION_LARGE > 0x06050500 - -// -// new code, changed in OCCT v6.6.0 -// Aspect_Handle aWindowHandle = (Aspect_Handle)winId; #ifdef WNT Handle(WNT_Window) viewWindow = new WNT_Window( aWindowHandle ); @@ -77,114 +48,32 @@ Handle(Aspect_Window) OCCViewer_VService::CreateWindow( const Handle(V3d_View)& Handle(Xw_Window) viewWindow = new Xw_Window( aDispConnection, aWindowHandle ); #endif return viewWindow; - -#else // #if OCC_VERSION_LARGE > 0x06050500 - -// -// obsolete code (before OCCT v6.6.0); to be removed -// - int hwnd = (int)winId; - short lowin = (short)hwnd; - short hiwin = (short)( hwnd >> 16 ); - -#ifdef WNT - Handle(WNT_Window) viewWindow = new WNT_Window( Handle(Graphic3d_WNTGraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin ); - // Prevent flickering - viewWindow->SetFlags( WDF_NOERASEBKGRND ); -#else - Handle(Xw_Window) viewWindow = new Xw_Window( Handle(Graphic3d_GraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin, Xw_WQ_SAMEQUALITY ); -#endif - return viewWindow; - -#endif // #if OCC_VERSION_LARGE > 0x06050500 } -/*! - Maps CasCade view to the window [ static ] -*/ -// void OCCViewer_VService::SetWindow( const Handle(V3d_View)& view, -// const Standard_Integer hiwin, -// const Standard_Integer lowin, -// const Xw_WindowQuality quality ) -// { -// view->SetWindow( OCCViewer_VService::CreateWindow( view, hiwin, lowin, quality ) ); -// } - -/*! - Magnifies 'view' based on previous view [ static ] -*/ -// void OCCViewer_VService::SetMagnify( const Handle(V3d_View)& view, -// const Standard_Integer hiwin, -// const Standard_Integer lowin, -// const Handle(V3d_View)& prevView, -// const Standard_Integer x1, -// const Standard_Integer y1, -// const Standard_Integer x2, -// const Standard_Integer y2, -// const Xw_WindowQuality aQuality ) -// { -// #ifdef WNT -// Handle(WNT_Window) w = -// new WNT_Window( Handle(Graphic3d_WNTGraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin ); -// #else -// Handle(Xw_Window) w = -// new Xw_Window( Handle(Graphic3d_GraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin, aQuality ); -// #endif -// view->SetMagnify( w, prevView, x1, y1, x2, y2 ); -// } - /*! Creates viewer 3d [ static ] */ -Handle(V3d_Viewer) OCCViewer_VService::Viewer3d( const Standard_CString aDisplay, - const Standard_ExtString aName, - const Standard_CString aDomain, - const Standard_Real ViewSize , - const V3d_TypeOfOrientation ViewProj, - const Standard_Boolean ComputedMode, - const Standard_Boolean aDefaultComputedMode ) +Handle(V3d_Viewer) OCCViewer_VService::CreateViewer( const Standard_ExtString name, + const Standard_CString displayName, + const Standard_CString domain, + const Standard_Real viewSize , + const V3d_TypeOfOrientation viewProjection, + const Standard_Boolean computedMode, + const Standard_Boolean defaultComputedMode ) { -#if OCC_VERSION_LARGE > 0x06050500 - -// -// new code, changed in OCCT v6.6.0 -// - static Handle(Graphic3d_GraphicDriver) aGraphicDriver; if (aGraphicDriver.IsNull()) { Handle(Aspect_DisplayConnection) aDisplayConnection; #ifndef WNT - aDisplayConnection = new Aspect_DisplayConnection( aDisplay ); + aDisplayConnection = new Aspect_DisplayConnection( displayName ); +#else + aDisplayConnection = new Aspect_DisplayConnection(); #endif aGraphicDriver = Graphic3d::InitGraphicDriver( aDisplayConnection ); } - return new V3d_Viewer( aGraphicDriver, aName, aDomain, ViewSize, ViewProj, - Quantity_NOC_GRAY30, V3d_ZBUFFER, V3d_GOURAUD, V3d_WAIT, - ComputedMode, aDefaultComputedMode, V3d_TEX_NONE ); - -#else // #if OCC_VERSION_LARGE > 0x06050500 - -// -// obsolete code (before OCCT v6.6.0); to be removed -// - -#ifndef WNT - static Handle(Graphic3d_GraphicDevice) defaultdevice; - if ( defaultdevice.IsNull() ) - defaultdevice = new Graphic3d_GraphicDevice( aDisplay ); - return new V3d_Viewer( defaultdevice, aName, aDomain, ViewSize, ViewProj, + return new V3d_Viewer( aGraphicDriver, name, domain, viewSize, viewProjection, Quantity_NOC_GRAY30, V3d_ZBUFFER, V3d_GOURAUD, V3d_WAIT, - ComputedMode, aDefaultComputedMode, V3d_TEX_NONE ); -#else - static Handle(Graphic3d_WNTGraphicDevice) defaultdevice; - if ( defaultdevice.IsNull() ) - defaultdevice = new Graphic3d_WNTGraphicDevice(); - return new V3d_Viewer( defaultdevice, aName, aDomain, ViewSize, ViewProj, - Quantity_NOC_GRAY30, V3d_ZBUFFER, V3d_GOURAUD, V3d_WAIT, - ComputedMode, aDefaultComputedMode, V3d_TEX_NONE); -#endif // WNT - -#endif // #if OCC_VERSION_LARGE > 0x06050500 + computedMode, defaultComputedMode, V3d_TEX_NONE ); } diff --git a/src/OCCViewer/OCCViewer_VService.h b/src/OCCViewer/OCCViewer_VService.h index e2784eb80..0655ca265 100755 --- a/src/OCCViewer/OCCViewer_VService.h +++ b/src/OCCViewer/OCCViewer_VService.h @@ -29,9 +29,7 @@ #include #include #include -//#include #include -//#include #include #include @@ -39,33 +37,16 @@ class Standard_EXPORT OCCViewer_VService { public: - // STATIC METHODS - static Handle(Aspect_Window) CreateWindow( const Handle(V3d_View)& view, WId id ); - /* - static void SetWindow( const Handle( V3d_View )& view, - const Standard_Integer hiwin, - const Standard_Integer lowin, - const Xw_WindowQuality quality = Xw_WQ_3DQUALITY ); + static Handle(Aspect_Window) CreateWindow( const Handle(V3d_View)&, WId ); - static void SetMagnify( const Handle( V3d_View)& view, - const Standard_Integer hiwin, - const Standard_Integer lowin, - const Handle( V3d_View)& aPreviousView, - const Standard_Integer x1, - const Standard_Integer y1, - const Standard_Integer x2, - const Standard_Integer y2, - const Xw_WindowQuality quality = Xw_WQ_3DQUALITY ); - */ - - static Handle(V3d_Viewer) Viewer3d( const Standard_CString display, - const Standard_ExtString name, - const Standard_CString domain = "", - const Quantity_Length ViewSize = 1000.0, - const V3d_TypeOfOrientation ViewProj = V3d_XposYnegZpos, - const Standard_Boolean ComputedMode = Standard_True, - const Standard_Boolean DefaultComputedMode = Standard_True ); + static Handle(V3d_Viewer) CreateViewer( const Standard_ExtString, + const Standard_CString = "", + const Standard_CString = "", + const Quantity_Length = 1000.0, + const V3d_TypeOfOrientation = V3d_XposYnegZpos, + const Standard_Boolean = Standard_True, + const Standard_Boolean = Standard_True ); }; #endif diff --git a/src/OCCViewer/OCCViewer_ViewModel.cxx b/src/OCCViewer/OCCViewer_ViewModel.cxx index b728482f1..2ed855b85 100755 --- a/src/OCCViewer/OCCViewer_ViewModel.cxx +++ b/src/OCCViewer/OCCViewer_ViewModel.cxx @@ -99,23 +99,20 @@ OCCViewer_Viewer::OCCViewer_Viewer( bool DisplayTrihedron) myTrihedronSize(100) { // init CasCade viewers - myV3dViewer = OCCViewer_VService::Viewer3d( "", (short*) "Viewer3d", "", 1000., - V3d_XposYnegZpos, true, true ); - + myV3dViewer = OCCViewer_VService::CreateViewer( TCollection_ExtendedString("Viewer3d").ToExtString() ); myV3dViewer->Init(); - - myV3dCollector = OCCViewer_VService::Viewer3d( "", (short*) "Collector3d", "", 1000., - V3d_XposYnegZpos, true, true ); + myV3dCollector = OCCViewer_VService::CreateViewer( TCollection_ExtendedString("Collector3d").ToExtString() ); myV3dCollector->Init(); // init selector - myAISContext = new AIS_InteractiveContext( myV3dViewer, myV3dCollector); + myAISContext = new AIS_InteractiveContext( myV3dViewer, myV3dCollector ); myAISContext->SelectionColor( Quantity_NOC_WHITE ); // display isoline on planar faces (box for ex.) myAISContext->IsoOnPlane( true ); + /* double h = QApplication::desktop()->screenGeometry( QApplication::desktop()->primaryScreen() ).height() / 300. ; Handle(Prs3d_Drawer) drawer = myAISContext->DefaultDrawer(); Handle(Prs3d_TextAspect) ta = drawer->TextAspect(); @@ -124,9 +121,10 @@ OCCViewer_Viewer::OCCViewer_Viewer( bool DisplayTrihedron) drawer->SetTextAspect(ta); drawer->AngleAspect()->SetTextAspect(ta); drawer->LengthAspect()->SetTextAspect(ta); + */ /* create trihedron */ - if( DisplayTrihedron ) + if ( DisplayTrihedron ) { Handle(Geom_Axis2Placement) anAxis = new Geom_Axis2Placement(gp::XOY()); myTrihedron = new AIS_Trihedron(anAxis); @@ -138,15 +136,12 @@ OCCViewer_Viewer::OCCViewer_Viewer( bool DisplayTrihedron) myTrihedron->SetSize(100); Handle(AIS_Drawer) drawer = myTrihedron->Attributes(); if (drawer->HasDatumAspect()) { - Handle(Prs3d_DatumAspect) daspect = drawer->DatumAspect(); - daspect->FirstAxisAspect()->SetColor(Quantity_Color(1.0, 0.0, 0.0, Quantity_TOC_RGB)); - daspect->SecondAxisAspect()->SetColor(Quantity_Color(0.0, 1.0, 0.0, Quantity_TOC_RGB)); - daspect->ThirdAxisAspect()->SetColor(Quantity_Color(0.0, 0.0, 1.0, Quantity_TOC_RGB)); - } - - myAISContext->Display(myTrihedron); - myAISContext->Deactivate(myTrihedron); + Handle(Prs3d_DatumAspect) daspect = drawer->DatumAspect(); + daspect->FirstAxisAspect()->SetColor(Quantity_Color(1.0, 0.0, 0.0, Quantity_TOC_RGB)); + daspect->SecondAxisAspect()->SetColor(Quantity_Color(0.0, 1.0, 0.0, Quantity_TOC_RGB)); + daspect->ThirdAxisAspect()->SetColor(Quantity_Color(0.0, 0.0, 1.0, Quantity_TOC_RGB)); } + } // set interaction style to standard myInteractionStyle = 0; @@ -250,6 +245,7 @@ SUIT_ViewWindow* OCCViewer_Viewer::createView( SUIT_Desktop* theDesktop ) vw->setBackground( background(0) ); // 0 means MAIN_VIEW (other views are not yet created here) // connect signal from viewport connect(view->getViewPort(), SIGNAL(vpClosed()), this, SLOT(onViewClosed())); + connect(view->getViewPort(), SIGNAL(vpMapped()), this, SLOT(onViewMapped())); return view; } @@ -408,6 +404,11 @@ void OCCViewer_Viewer::onViewClosed() } } +void OCCViewer_Viewer::onViewMapped() +{ + setTrihedronShown( true ); +} + int OCCViewer_Viewer::getTopLayerId() { #if OCC_VERSION_LARGE > 0x06050200 @@ -821,10 +822,13 @@ void OCCViewer_Viewer::setTrihedronShown( const bool on ) if ( myTrihedron.IsNull() ) return; - if ( on ) + if ( on ) { myAISContext->Display( myTrihedron ); - else + myAISContext->Deactivate(myTrihedron); + } + else { myAISContext->Erase( myTrihedron ); + } } /*! @@ -986,6 +990,9 @@ bool OCCViewer_Viewer::computeTrihedronSize( double& theNewSize, double& theSize * Update the size of the trihedron */ void OCCViewer_Viewer::updateTrihedron() { + if ( myTrihedron.IsNull() ) + return; + if(myIsRelative){ double newSz, oldSz; diff --git a/src/OCCViewer/OCCViewer_ViewModel.h b/src/OCCViewer/OCCViewer_ViewModel.h index 1ad1ddd4f..e6893e307 100755 --- a/src/OCCViewer/OCCViewer_ViewModel.h +++ b/src/OCCViewer/OCCViewer_ViewModel.h @@ -169,6 +169,7 @@ protected slots: virtual void onMouseRelease(SUIT_ViewWindow*, QMouseEvent*); virtual void onKeyPress(SUIT_ViewWindow*, QKeyEvent*); virtual void onViewClosed(); + virtual void onViewMapped(); void onDumpView(); void onChangeBackground(); diff --git a/src/OCCViewer/OCCViewer_ViewPort3d.cxx b/src/OCCViewer/OCCViewer_ViewPort3d.cxx index 5946a43ff..34cce7126 100755 --- a/src/OCCViewer/OCCViewer_ViewPort3d.cxx +++ b/src/OCCViewer/OCCViewer_ViewPort3d.cxx @@ -135,6 +135,9 @@ bool OCCViewer_ViewPort3d::mapView( const Handle(V3d_View)& view ) view->TriedronDisplay( Aspect_TOTP_LEFT_LOWER, Quantity_NOC_WHITE, 0.05, V3d_ZBUFFER ); } } + + emit( vpMapped() ); + return true; } diff --git a/src/OCCViewer/OCCViewer_ViewPort3d.h b/src/OCCViewer/OCCViewer_ViewPort3d.h index db1c513e4..e4f3cd724 100755 --- a/src/OCCViewer/OCCViewer_ViewPort3d.h +++ b/src/OCCViewer/OCCViewer_ViewPort3d.h @@ -95,6 +95,7 @@ public: signals: void vpChangeBackground( const Qtx::BackgroundData& ); void vpClosed(); + void vpMapped(); public slots: virtual bool synchronize( OCCViewer_ViewPort* );