X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FSALOME_SWIG%2FSALOMEGUI_Swig.cxx;h=d1ee880c200091ac3a2f669aca882d4c39d36cee;hb=2400f3659b65727d5a776dccd3d5dd506d755a88;hp=b7b2481d265e7735b31bbe392f78f96aaea8101b;hpb=bb8609caf7881d966fbb88dec0a7822736da93f5;p=modules%2Fgui.git diff --git a/src/SALOME_SWIG/SALOMEGUI_Swig.cxx b/src/SALOME_SWIG/SALOMEGUI_Swig.cxx index b7b2481d2..d1ee880c2 100644 --- a/src/SALOME_SWIG/SALOMEGUI_Swig.cxx +++ b/src/SALOME_SWIG/SALOMEGUI_Swig.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // 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. +// 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 @@ -40,16 +40,28 @@ #include #include #include -#include -#include -#include -#include -#include - #include -#include -#include -#include + +#ifndef DISABLE_SALOMEOBJECT + #include + #include +#ifndef DISABLE_OCCVIEWER + #include + #include +#endif +#ifndef DISABLE_VTKVIEWER + #include + #include + #include + + #include + #include +#endif +#ifndef DISABLE_PLOT2DVIEWER + #include +#endif +#endif + /*! \class SALOMEGUI_Swig @@ -218,7 +230,7 @@ public: virtual void Execute() { if ( LightApp_Study* aStudy = getActiveStudy() ) { - myResult = aStudy->id(); + myResult = aStudy->studyName().toUtf8().constData(); } } }; @@ -613,7 +625,7 @@ public: if ( LightApp_Application* anApp = getApplication() ) { SUIT_ViewWindow* window = anApp->desktop()->activeWindow(); if ( window ) { - SALOME_View* view = dynamic_cast( window->getViewManager()->getViewModel() ); + SALOME_View* view = dynamic_cast( window->getViewManager()->getActiveView() ); if ( view ) { SALOME_Prs* aPrs = view->CreatePrs( myEntry.toLatin1() ); myResult = !aPrs->IsNull(); @@ -641,7 +653,7 @@ void SALOMEGUI_Swig::UpdateView() if ( LightApp_Application* anApp = getApplication() ) { SUIT_ViewWindow* window = anApp->desktop()->activeWindow(); if ( window ) { - SALOME_View* view = dynamic_cast( window->getViewManager()->getViewModel() ); + SALOME_View* view = dynamic_cast( window->getViewManager()->getActiveView() ); if ( view ) view->Repaint(); } @@ -665,12 +677,20 @@ void SALOMEGUI_Swig::FitAll() if ( LightApp_Application* anApp = getApplication() ) { SUIT_ViewWindow* window = anApp->desktop()->activeWindow(); if ( window ) { +#ifndef DISABLE_SALOMEOBJECT +#ifndef DISABLE_VTKVIEWER if ( dynamic_cast( window ) ) ( dynamic_cast( window ) )->onFitAll(); - else if ( dynamic_cast( window ) ) - ( dynamic_cast( window ) )->onFitAll(); - else if ( dynamic_cast( window ) ) +#endif +#ifndef DISABLE_PLOT2DVIEWER + if ( dynamic_cast( window ) ) ( dynamic_cast( window ) )->onFitAll(); +#endif +#endif +#ifndef DISABLE_OCCVIEWER + if ( dynamic_cast( window ) ) + ( dynamic_cast( window ) )->onFitAll(); +#endif } } } @@ -692,14 +712,22 @@ void SALOMEGUI_Swig::ResetView() if ( LightApp_Application* anApp = getApplication() ) { SUIT_ViewWindow* window = anApp->desktop()->activeWindow(); if ( window ) { +#ifndef DISABLE_SALOMEOBJECT +#ifndef DISABLE_VTKVIEWER if ( dynamic_cast( window ) ) (dynamic_cast( window ))->onResetView(); - else if ( dynamic_cast( window ) ) - (dynamic_cast( window ))->onResetView(); - else if ( dynamic_cast( window ) ) +#endif +#ifndef DISABLE_PLOT2DVIEWER + if ( dynamic_cast( window ) ) (dynamic_cast( window ))->onFitAll(); // VSR: there is no 'ResetView' functionality for Plot2d viewer, // so we use 'FitAll' instead. +#endif +#endif +#ifndef DISABLE_OCCVIEWER + if ( dynamic_cast( window ) ) + (dynamic_cast( window ))->onResetView(); +#endif } } } @@ -738,6 +766,8 @@ static void setView( int view ) if ( LightApp_Application* anApp = getApplication() ) { SUIT_ViewWindow* window = anApp->desktop()->activeWindow(); if ( window ) { +#ifndef DISABLE_SALOMEOBJECT +#ifndef DISABLE_VTKVIEWER if ( dynamic_cast( window ) ) { switch( myView ) { case __ViewTop: @@ -756,7 +786,10 @@ static void setView( int view ) break; } } - else if ( dynamic_cast( window ) ) { +#endif +#endif +#ifndef DISABLE_OCCVIEWER + if ( dynamic_cast( window ) ) { switch( myView ) { case __ViewTop: (dynamic_cast( window ))->onTopView(); break; @@ -774,6 +807,7 @@ static void setView( int view ) break; } } +#endif } } } @@ -828,3 +862,190 @@ void SALOMEGUI_Swig::ViewBack() { setView( __ViewBack ); } + +/* + \fn bool SALOMEGUI_Swig::getViewParameters() + \brief Get camera parameters of the active view. + + NOTE: For the current moment implemented for VTK viewer only. + + \return \c string with the view parameters +*/ + +class TGetViewParameters: public SALOME_Event +{ +public: + typedef QString TResult; + TResult myResult; + TGetViewParameters() : myResult( "" ) {} + virtual void Execute() { + if ( LightApp_Application* anApp = getApplication() ) { + if ( SUIT_ViewWindow* window = anApp->desktop()->activeWindow() ) { +#ifndef DISABLE_VTKVIEWER + if ( SVTK_ViewWindow* svtk = dynamic_cast( window ) ) { + if ( vtkRenderer* ren = svtk->getRenderer()) { + if ( vtkCamera* camera = ren->GetActiveCamera() ) { + double pos[3], focalPnt[3], viewUp[3], scale[3], parScale; + + // save position, focal point, viewUp, scale + camera->GetPosition( pos ); + camera->GetFocalPoint( focalPnt ); + camera->GetViewUp( viewUp ); + parScale = camera->GetParallelScale(); + svtk->GetRenderer()->GetScale( scale ); + + myResult += QString("sg.setCameraPosition( %1, %2, %3 )\n").arg(pos[0]).arg(pos[1]).arg(pos[2]); + myResult += QString("sg.setCameraFocalPoint( %1, %2, %3 )\n").arg(focalPnt[0]).arg(focalPnt[1]).arg(focalPnt[2]); + myResult += QString("sg.setCameraViewUp( %1, %2, %3 )\n").arg(viewUp[0]).arg(viewUp[1]).arg(viewUp[2]); + myResult += QString("sg.setViewScale(%1, %2, %3, %4 )\n").arg(parScale).arg(scale[0]).arg(scale[1]).arg(scale[2]); + } + } + } +#endif + } + } + } +}; + +const char* SALOMEGUI_Swig::getViewParameters() { + QString result = ProcessEvent( new TGetViewParameters() ); + return result.isEmpty() ? 0 : strdup( result.toLatin1().constData() ); +} + + +/*! + \brief View parameter type. + \internal +*/ +enum { + __CameraPosition, //!< position of the active camera + __CameraFocalPoint, //!< focal point of the active camera + __CameraViewUp, //!< view up of the active camera + __ViewScale //!< scale of the view +}; + + +/*! + \brief Change the camera parameters of the current view window. + \internal + + NOTE: For the current moment implemented for VTK viewer only. + + \param parameter type of the parameter + \param values value of the parameter +*/ +static void setViewParameter( int parameter, QList& values ) { + class TEvent: public SALOME_Event { + private: + int myParameter; + QList myValues; + public: + TEvent( int parameter , QList& values ) : myParameter(parameter), myValues( values ) {} + + virtual void Execute() { + if ( LightApp_Application* anApp = getApplication() ) { + if ( SUIT_ViewWindow* window = anApp->desktop()->activeWindow() ) { +#ifndef DISABLE_VTKVIEWER + if ( SVTK_ViewWindow* svtk = dynamic_cast( window ) ) { + if ( vtkRenderer* ren = svtk->getRenderer()) { + if ( vtkCamera* camera = ren->GetActiveCamera() ) { + switch(myParameter) { + case __CameraPosition : { + if ( myValues.size() == 3 ) { + camera->SetPosition( myValues[0], myValues[1], myValues[2] ); + } + break; + } + case __CameraFocalPoint : { + if ( myValues.size() == 3 ) { + camera->SetFocalPoint( myValues[0], myValues[1], myValues[2] ); + } + break; + } + case __CameraViewUp : { + if ( myValues.size() == 3 ) { + camera->SetViewUp( myValues[0], myValues[1], myValues[2] ); + } + break; + } + case __ViewScale : { + if ( myValues.size() == 4 ) { + camera->SetParallelScale( myValues[0] ); + double scale[] = { myValues[1], myValues[2], myValues[3] }; + svtk->GetRenderer()->SetScale( scale ); + } + break; + } + default: break; + } + } + } + svtk->Repaint(); + } +#endif + } + } + } + }; + ProcessVoidEvent( new TEvent( parameter, values ) ); +} + +/*! + \brief Set camera position of the active view . + \param x - X coordinate of the camera + \param y - Y coordinate of the camera + \param z - Z coordinate of the camera +*/ +void SALOMEGUI_Swig::setCameraPosition( double x, double y, double z ) { + QList lst; + lst.push_back( x ); + lst.push_back( y ); + lst.push_back( z ); + setViewParameter( __CameraPosition, lst ); +} + +/*! + \brief Set camera focal point of the active view. + \param x - X coordinate of the focal point + \param y - Y coordinate of the focal point + \param z - Z coordinate of the focal point +*/ +void SALOMEGUI_Swig::setCameraFocalPoint( double x, double y, double z ) { + QList lst; + lst.push_back( x ); + lst.push_back( y ); + lst.push_back( z ); + setViewParameter( __CameraFocalPoint, lst ); +} + +/*! + \brief Set the view up direction for the camera. + \param x - X component of the direction vector + \param y - Y component of the direction vector + \param z - Z component of the direction vector +*/ +void SALOMEGUI_Swig::setCameraViewUp( double x, double y, double z ) { + QList lst; + lst.push_back( x ); + lst.push_back( y ); + lst.push_back( z ); + setViewParameter( __CameraViewUp, lst ); +} + +/*! + \brief Set view scale. + \param parallelScale - scaling used for a parallel projection. + \param x - X scale + \param y - Y scale + \param z - Z scale +*/ +void SALOMEGUI_Swig::setViewScale( double parallelScale, double x, double y, double z ) { + QList lst; + lst.push_back( parallelScale ); + lst.push_back( x ); + lst.push_back( y ); + lst.push_back( z ); + setViewParameter( __ViewScale, lst ); +} + +