From dddf7ce4e415416d2e9987571c9ad0a37b7a6ec8 Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 19 Feb 2013 15:12:40 +0000 Subject: [PATCH] Porting to dev version of OCCT --- src/GLViewer/GLViewer_ViewPort.cxx | 1 - src/OCCViewer/OCCViewer_VService.cxx | 137 +++++++++++++++++++------ src/OCCViewer/OCCViewer_VService.h | 45 +++----- src/OCCViewer/OCCViewer_ViewPort.cxx | 1 - src/OCCViewer/OCCViewer_ViewPort3d.cxx | 10 +- 5 files changed, 124 insertions(+), 70 deletions(-) diff --git a/src/GLViewer/GLViewer_ViewPort.cxx b/src/GLViewer/GLViewer_ViewPort.cxx index b11d7d29f..9f5cb4c4a 100644 --- a/src/GLViewer/GLViewer_ViewPort.cxx +++ b/src/GLViewer/GLViewer_ViewPort.cxx @@ -51,7 +51,6 @@ #include #undef QT_CLEAN_NAMESPACE #include -#include /*! \struct CMapEntry diff --git a/src/OCCViewer/OCCViewer_VService.cxx b/src/OCCViewer/OCCViewer_VService.cxx index 86181d953..b795935fe 100755 --- a/src/OCCViewer/OCCViewer_VService.cxx +++ b/src/OCCViewer/OCCViewer_VService.cxx @@ -25,6 +25,30 @@ #include #include +#include + +#if OCC_VERSION_LARGE > 0x06050400 +#error OCC_VERSION_LARGE + +// +// new code, changed in OCCT v6.6.0 +// + +#include +#include +#include +#ifdef WNT +#include +#else +#include +#endif + +#else // #if OCC_VERSION_LARGE > 0x06050400 + +// +// obsolete code (before OCCT v6.6.0); to be removed +// + #ifdef WNT #include #include @@ -33,57 +57,82 @@ #include #endif +#endif // #if OCC_VERSION_LARGE > 0x06050400 + /*! Create native view window for CasCade view [ static ] */ Handle(Aspect_Window) OCCViewer_VService::CreateWindow( const Handle(V3d_View)& view, - const Standard_Integer hiwin, - const Standard_Integer lowin, - const Xw_WindowQuality quality ) + WId winId ) { +#if OCC_VERSION_LARGE > 0x06050400 + +// +// new code, changed in OCCT v6.6.0 +// + Aspect_Handle aWindowHandle = (Aspect_Handle)winId; +#ifdef WNT + Handle(WNT_Window) viewWindow = new WNT_Window( aWindowHandle ); +#else + Handle(Aspect_DisplayConnection) aDispConnection = view->Viewer()->Driver()->GetDisplayConnection(); + Handle(Xw_Window) viewWindow = new Xw_Window( aDispConnection, aWindowHandle ); +#endif + return viewWindow; + +#else // #if OCC_VERSION_LARGE > 0x06050400 + +// +// 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, quality ); + 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 > 0x06050400 } /*! 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 ) ); -} +// 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 ); -} +// 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 ] @@ -96,6 +145,32 @@ Handle(V3d_Viewer) OCCViewer_VService::Viewer3d( const Standard_CString aDisplay const Standard_Boolean ComputedMode, const Standard_Boolean aDefaultComputedMode ) { +#if OCC_VERSION_LARGE > 0x06050400 + +// +// 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 ); +#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 > 0x06050400 + +// +// obsolete code (before OCCT v6.6.0); to be removed +// + #ifndef WNT static Handle(Graphic3d_GraphicDevice) defaultdevice; if ( defaultdevice.IsNull() ) @@ -111,4 +186,6 @@ Handle(V3d_Viewer) OCCViewer_VService::Viewer3d( const Standard_CString aDisplay Quantity_NOC_GRAY30, V3d_ZBUFFER, V3d_GOURAUD, V3d_WAIT, ComputedMode, aDefaultComputedMode, V3d_TEX_NONE); #endif // WNT + +#endif // #if OCC_VERSION_LARGE > 0x06050400 } diff --git a/src/OCCViewer/OCCViewer_VService.h b/src/OCCViewer/OCCViewer_VService.h index 73dfcff45..b4f9fe938 100755 --- a/src/OCCViewer/OCCViewer_VService.h +++ b/src/OCCViewer/OCCViewer_VService.h @@ -29,34 +29,20 @@ #include #include #include -#include +//#include #include -#include +//#include #include +#include + class Standard_EXPORT OCCViewer_VService { public: - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if ( anAddress ) Standard::Free((Standard_Address&)anAddress); - } - - // STATIC METHODS - static Handle(Aspect_Window) - CreateWindow( const Handle(V3d_View)& view, - const Standard_Integer hiwin, - const Standard_Integer lowin, - const Xw_WindowQuality quality ); + // 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, @@ -71,14 +57,15 @@ public: 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) 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 ); }; #endif diff --git a/src/OCCViewer/OCCViewer_ViewPort.cxx b/src/OCCViewer/OCCViewer_ViewPort.cxx index 4c6dd5d2d..c976636c0 100755 --- a/src/OCCViewer/OCCViewer_ViewPort.cxx +++ b/src/OCCViewer/OCCViewer_ViewPort.cxx @@ -49,7 +49,6 @@ #include #undef QT_CLEAN_NAMESPACE #include -#include struct CMapEntry { diff --git a/src/OCCViewer/OCCViewer_ViewPort3d.cxx b/src/OCCViewer/OCCViewer_ViewPort3d.cxx index 3dd08a812..7e3593e5b 100755 --- a/src/OCCViewer/OCCViewer_ViewPort3d.cxx +++ b/src/OCCViewer/OCCViewer_ViewPort3d.cxx @@ -746,15 +746,7 @@ bool OCCViewer_ViewPort3d::setWindow( const Handle(V3d_View)& view ) if ( view.IsNull() ) return false; - int hwnd = (int)winId(); - if ( !hwnd ) - return false; - - /* set this widget as the drawing window */ - short lo = (short)hwnd; - short hi = (short)( hwnd >> 16 ); - - attachWindow( view, OCCViewer_VService::CreateWindow( view, (int)hi, (int)lo, Xw_WQ_SAMEQUALITY ) ); + attachWindow( view, OCCViewer_VService::CreateWindow( view, winId() ) ); myWindow = view->Window(); return !myWindow.IsNull(); -- 2.39.2