X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMGUI%2FGEOMGUI_Selection.cxx;h=af266c29842d00068b4eaed54508dab773daf614;hb=refs%2Ftags%2FV5_0_0a2;hp=a8f1673fd259ef9ebfa7fad30a891cf5d49d9f2a;hpb=9db65c69e0e74d20b14ea66427fdfaaf62729c5e;p=modules%2Fgeom.git diff --git a/src/GEOMGUI/GEOMGUI_Selection.cxx b/src/GEOMGUI/GEOMGUI_Selection.cxx index a8f1673fd..af266c298 100644 --- a/src/GEOMGUI/GEOMGUI_Selection.cxx +++ b/src/GEOMGUI/GEOMGUI_Selection.cxx @@ -1,35 +1,61 @@ -#include +// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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. +// +// 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 +// +// File : GEOMGUI_Selection.cxx +// Author : Alexander SOLOVYOV, Open CASCADE S.A.S. (alexander.solovyov@opencascade.com) +// #include "GEOMGUI_Selection.h" + +#include "GeometryGUI.h" #include "GEOM_Displayer.h" -#include "GEOMImpl_Types.hxx" -#include +#include #include +#include #include #include #include -#include -#include -#include -#include #include #include #include #include #include -#include #include +#include +#include + +// OCCT Includes #include #include #include +// VTK Includes +#include + GEOMGUI_Selection::GEOMGUI_Selection() +: LightApp_Selection() { } @@ -37,20 +63,28 @@ GEOMGUI_Selection::~GEOMGUI_Selection() { } -QtxValue GEOMGUI_Selection::param( const int ind, const QString& p ) const +QVariant GEOMGUI_Selection::parameter( const QString& p ) const { - QtxValue val( SalomeApp_Selection::param( ind, p ) ); - if ( !val.isValid() ) { - if ( p == "isVisible" ) val = QtxValue( isVisible( ind ) ); - else if ( p == "isOCC" ) val = QtxValue( isOCC() ); - else if ( p == "type" ) val = QtxValue( typeName( ind ) ); - else if ( p == "displaymode" ) val = QtxValue( displayMode( ind ) ); - else if ( p == "isActiveViewer" ) val = QtxValue( isActiveViewer() ); + if ( p == "isOCC" ) return QVariant( activeViewType() == OCCViewer_Viewer::Type() ); + if ( p == "selectionmode" ){ + return QVariant(selectionMode()); } + return LightApp_Selection::parameter( p ); +} - //printf( "--> param() : [%s] = %s\n", p.latin1(), val.toString ().latin1() ); - - return val; +QVariant GEOMGUI_Selection::parameter( const int ind, const QString& p ) const +{ +// if ( p == "isVisible" ) return QVariant( isVisible( ind ) ); +// parameter isVisible is calculated in base SalomeApp_Selection +// else + if( p == "type" ) + return QVariant( typeName( ind ) ); + else if ( p == "displaymode" ) + return QVariant( displayMode( ind ) ); + else if ( p == "isAutoColor" ) + return QVariant( isAutoColor( ind ) ); + else + return LightApp_Selection::parameter( ind, p ); } QString GEOMGUI_Selection::typeName( const int index ) const @@ -73,25 +107,28 @@ bool GEOMGUI_Selection::isVisible( const int index ) const GEOM::GEOM_Object_var obj = getObject( index ); SALOME_View* view = GEOM_Displayer::GetActiveView(); if ( !CORBA::is_nil( obj ) && view ) { - Handle(SALOME_InteractiveObject) io = new SALOME_InteractiveObject( entry( index ).latin1(), "GEOM", "TEMP_IO" ); + Handle(SALOME_InteractiveObject) io = new SALOME_InteractiveObject( entry( index ).toLatin1().constData(), "GEOM", "TEMP_IO" ); return view->isVisible( io ); } return false; } -bool GEOMGUI_Selection::isOCC() const +bool GEOMGUI_Selection::isAutoColor( const int index ) const { - SUIT_ViewWindow* window = SUIT_Session::session()->activeApplication()->desktop()->activeWindow(); - return ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() ); + GEOM::GEOM_Object_var obj = getObject( index ); + if ( !CORBA::is_nil( obj ) ) + return obj->GetAutoColor(); + return false; } QString GEOMGUI_Selection::displayMode( const int index ) const { SALOME_View* view = GEOM_Displayer::GetActiveView(); - if ( view ) { - SALOME_Prs* prs = view->CreatePrs( entry( index ) ); + QString viewType = activeViewType(); + if ( view /*fix for 9320==>*/&& ( viewType == OCCViewer_Viewer::Type() || viewType == SVTK_Viewer::Type() ) ) { + SALOME_Prs* prs = view->CreatePrs( entry( index ).toLatin1().constData() ); if ( prs ) { - if ( isOCC() ) { // assuming OCC + if ( viewType == OCCViewer_Viewer::Type() ) { // assuming OCC SOCC_Prs* occPrs = (SOCC_Prs*) prs; AIS_ListOfInteractive lst; occPrs->GetObjects( lst ); @@ -115,10 +152,10 @@ QString GEOMGUI_Selection::displayMode( const int index ) const } } } - } - else { // assuming VTK - SVTK_Prs* vtkPrs = (SVTK_Prs*) prs; - vtkActorCollection* lst = vtkPrs->GetObjects(); + } + else if ( viewType == SVTK_Viewer::Type() ) { // assuming VTK + SVTK_Prs* vtkPrs = dynamic_cast( prs ); + vtkActorCollection* lst = vtkPrs ? vtkPrs->GetObjects() : 0; if ( lst ) { lst->InitTraversal(); vtkActor* actor = lst->GetNextActor(); @@ -128,7 +165,7 @@ QString GEOMGUI_Selection::displayMode( const int index ) const int dm = salActor->getDisplayMode(); if ( dm == 0 ) return "Wireframe"; - else if ( dm == 1 ) + else if ( dm == 1 ) return "Shading"; } // if ( salome actor ) } // if ( actor ) @@ -148,9 +185,9 @@ bool GEOMGUI_Selection::isComponent( const int index ) const _PTR(Study) study = appStudy->studyDS(); QString anEntry = entry( index ); - if ( study && !anEntry.isNull() ) { - _PTR(SObject) aSO( study->FindObjectID( anEntry.latin1() ) ); - if ( aSO && aSO->GetFatherComponent() ) + if ( study && !anEntry.isNull() ) { + _PTR(SObject) aSO( study->FindObjectID( anEntry.toStdString() ) ); + if ( aSO && aSO->GetFatherComponent() ) return aSO->GetFatherComponent()->GetIOR() == aSO->GetIOR(); } } @@ -162,22 +199,40 @@ GEOM::GEOM_Object_ptr GEOMGUI_Selection::getObject( const int index ) const SalomeApp_Study* appStudy = dynamic_cast (SUIT_Session::session()->activeApplication()->activeStudy()); - if ( appStudy && index >= 0 && index < count() ) { + if (appStudy && index >= 0 && index < count()) { _PTR(Study) study = appStudy->studyDS(); - QString anEntry = entry( index ); + QString anEntry = entry(index); - if ( study && !anEntry.isNull() ) { - _PTR(SObject) aSO( study->FindObjectID( anEntry.latin1() ) ); - if ( aSO ) { - SALOMEDS_SObject* aDSObj = dynamic_cast( aSO.get() ); - return GEOM::GEOM_Object::_narrow( aDSObj->GetObject() ); + if (study && !anEntry.isNull()) { + _PTR(SObject) aSO (study->FindObjectID(anEntry.toStdString())); + if (aSO) { + CORBA::Object_var anObj = GeometryGUI::ClientSObjectToObject(aSO); + return GEOM::GEOM_Object::_narrow(anObj); } } } return GEOM::GEOM_Object::_nil(); } -bool GEOMGUI_Selection::isActiveViewer() const +QString GEOMGUI_Selection::selectionMode() const { - return ( SUIT_Session::session()->activeApplication()->desktop()->activeWindow() != 0 ); + SalomeApp_Application* app = (SalomeApp_Application*)(SUIT_Session::session()->activeApplication()); + if (app) { + GeometryGUI* aGeomGUI = dynamic_cast( app->module( "Geometry" ) ); + if (aGeomGUI) { + switch (aGeomGUI->getLocalSelectionMode()) + { + case GEOM_POINT : return "VERTEX"; + case GEOM_EDGE : return "EDGE"; + case GEOM_WIRE : return "WIRE"; + case GEOM_FACE : return "FACE"; + case GEOM_SHELL : return "SHELL"; + case GEOM_SOLID : return "SOLID"; + case GEOM_COMPOUND : return "COMPOUND"; + case GEOM_ALLOBJECTS : return "ALL"; + default: return ""; + } + } + } + return ""; }