X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FDisplayGUI%2FDisplayGUI.cxx;h=67665f66e955fdf6141b9baedbc8fb7e66640277;hb=48f5c2df5815348d168fd8e80fcc9e52dd69f137;hp=3cfa07c76d5159e2156b86ea82819d638fbc2e2e;hpb=68a6e5ca4b8f36aabaf23089cc335da4afb4fb55;p=modules%2Fgeom.git diff --git a/src/DisplayGUI/DisplayGUI.cxx b/src/DisplayGUI/DisplayGUI.cxx index 3cfa07c76..67665f66e 100644 --- a/src/DisplayGUI/DisplayGUI.cxx +++ b/src/DisplayGUI/DisplayGUI.cxx @@ -1,30 +1,32 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2012 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 +// Copyright (C) 2003-2007 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 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. +// 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 +// 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 + // GEOM GEOMGUI : GUI for Geometry component // File : DisplayGUI.cxx // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) -// + #include "DisplayGUI.h" #include +#include "GeometryGUI_Operations.h" +#include #include #include #include @@ -89,73 +91,62 @@ bool DisplayGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent) SALOME_ListIO selected; Sel->selectedObjects( selected ); - switch (theCommandID) { - case 211: // MENU VIEW - WIREFRAME/SHADING - { - InvertDisplayMode(); - int newMode = GetDisplayMode(); - getGeometryGUI()->action( 211 )->setText - ( newMode == 1 ? tr( "GEOM_MEN_WIREFRAME" ) : tr("GEOM_MEN_SHADING") ); - getGeometryGUI()->menuMgr()->update(); - break; - } - case 212: // MENU VIEW - DISPLAY ALL - { - getGeometryGUI()->EmitSignalDeactivateDialog(); - DisplayAll(); - break; - } - case 213: // MENU VIEW - DISPLAY ONLY - { - getGeometryGUI()->EmitSignalDeactivateDialog(); - DisplayOnly(); - break; - } - case 214: // MENU VIEW - ERASE ALL - { - EraseAll(); - break; - } - case 215: // MENU VIEW - ERASE - { - Erase(); - break; - } - case 216: // MENU VIEW - DISPLAY - { - getGeometryGUI()->EmitSignalDeactivateDialog(); - Display(); - break; - } - case 218: // MENU VIEW - VECTORS MODE - { - bool mode = GetVectorMode(); - SetVectorMode(!mode); - getGeometryGUI()->action( 218 )->setText - ( mode == false ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") ); - getGeometryGUI()->menuMgr()->update(); - break; - } - case 80311: // POPUP VIEWER - WIREFRAME - { - ChangeDisplayMode( 0 ); - break; - } - case 80312: // POPUP VIEWER - SHADING - { - ChangeDisplayMode( 1 ); - break; - } - case 80313: // POPUP VIEWER - VECTORS - { - ChangeDisplayMode( 2 ); - break; - } + switch ( theCommandID ) { + case GEOMOp::OpDMWireframe: // MENU VIEW - DISPLAY MODE - WIREFRAME + SetDisplayMode( 0 ); + break; + case GEOMOp::OpDMShading: // MENU VIEW - DISPLAY MODE - SHADING + SetDisplayMode( 1 ); + break; + case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - DISPLAY MODE - SHADING WITH EDGES + SetDisplayMode( 2 ); + break; + case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL + getGeometryGUI()->EmitSignalDeactivateDialog(); + DisplayAll(); + break; + case GEOMOp::OpShowOnly: // POPUP MENU - SHOW ONLY + getGeometryGUI()->EmitSignalDeactivateDialog(); + DisplayOnly(); + break; + case GEOMOp::OpShowOnlyChildren: // POPUP MENU - SHOW ONLY CHILDREN + getGeometryGUI()->EmitSignalDeactivateDialog(); + DisplayOnlyChildren(); + break; + case GEOMOp::OpHideAll: // MENU VIEW - HIDE ALL + EraseAll(); + break; + case GEOMOp::OpHide: // POPUP MENU - HIDE + Erase(); + break; + case GEOMOp::OpShow: // POPUP MENU - SHOW + getGeometryGUI()->EmitSignalDeactivateDialog(); + Display(); + break; + case GEOMOp::OpSwitchVectors: // MENU VIEW - DISPLAY MODE - SHOW EDGE DIRECTION + SetVectorMode(!GetVectorMode()); + getGeometryGUI()->action( GEOMOp::OpSwitchVectors )->setText + ( GetVectorMode() ? tr("MEN_VECTOR_MODE_ON") : tr( "MEN_VECTOR_MODE_OFF" ) ); + getGeometryGUI()->menuMgr()->update(); + break; + case GEOMOp::OpWireframe: // POPUP MENU - DISPLAY MODE - WIREFRAME + ChangeDisplayMode( 0 ); + break; + case GEOMOp::OpShading: // POPUP MENU - DISPLAY MODE - SHADING + ChangeDisplayMode( 1 ); + break; + case GEOMOp::OpShadingWithEdges: // POPUP MENU - DISPLAY MODE - SHADING WITH EDGES + ChangeDisplayMode( 2 ); + break; + case GEOMOp::OpTexture: // POPUP MENU - DISPLAY MODE - TEXTURE + ChangeDisplayMode( 3 ); + break; + case GEOMOp::OpVectors: // POPUP MENU - DISPLAY MODE - SHOW EDGE DIRECTION + ChangeDisplayMode( 4 ); + break; default: - { - app->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID)); - break; - } + app->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID)); + break; } Sel->setSelectedObjects( selected ); return true; @@ -212,8 +203,8 @@ void DisplayGUI::EraseAll() SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); SUIT_ViewManager* vman = vw->getViewManager(); if ( vman->getType() == OCCViewer_Viewer::Type() || - vman->getType() == SVTK_Viewer::Type() ) { - GEOM_Displayer( appStudy ).EraseAll(); + vman->getType() == SVTK_Viewer::Type() ) { + GEOM_Displayer( appStudy ).EraseAll(); } } } @@ -229,6 +220,62 @@ void DisplayGUI::DisplayOnly() Display(); } +//===================================================================================== +// function : DisplayGUI::DisplayOnlyChildren() +// purpose : Display only children of selected GEOM objects and erase other +//===================================================================================== +void DisplayGUI::DisplayOnlyChildren() +{ + EraseAll(); + + SALOME_ListIO listIO; + + SalomeApp_Application* app = getGeometryGUI()->getApp(); + if (!app) return; + + SalomeApp_Study* anActiveStudy = dynamic_cast(app->activeStudy()); + if (!anActiveStudy) return; + + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); + if (!aSelMgr) return; + + // get selection + SALOME_ListIO aList; + //aSelMgr->selectedObjects(aList); + aSelMgr->selectedObjects(aList, "ObjectBrowser", false); + SALOME_ListIteratorOfListIO It (aList); + + SUIT_OverrideCursor(); + + for (; It.More(); It.Next()) { + Handle(SALOME_InteractiveObject) anIObject = It.Value(); + if (anIObject->hasEntry()) { + _PTR(SObject) SO (anActiveStudy->studyDS()->FindObjectID(anIObject->getEntry())); + if (SO) { + _PTR(SComponent) SC (SO->GetFatherComponent()); + if (QString(SO->GetID().c_str()) == QString(SO->GetFatherComponent()->GetID().c_str())) { + // if component is selected, pass it + } + else { + _PTR(ChildIterator) anIter (anActiveStudy->studyDS()->NewChildIterator(SO)); + anIter->InitEx(true); + while (anIter->More()) { + _PTR(SObject) valSO (anIter->Value()); + _PTR(SObject) refSO; + if (!valSO->ReferencedObject(refSO)) { + listIO.Append(new SALOME_InteractiveObject(valSO->GetID().c_str(), + SC->ComponentDataType().c_str(), + valSO->GetName().c_str())); + } + anIter->Next(); + } + } + } + } + } + GEOM_Displayer(anActiveStudy).Display(listIO, true); +} + //===================================================================================== // function : DisplayGUI::Display() // purpose : Display selected GEOM objects @@ -258,25 +305,25 @@ void DisplayGUI::Display() if ( anIObject->hasEntry() ) { _PTR(SObject) SO ( anActiveStudy->studyDS()->FindObjectID( anIObject->getEntry() ) ); if ( SO && QString(SO->GetID().c_str()) == QString(SO->GetFatherComponent()->GetID().c_str()) ) { - _PTR(SComponent) SC ( SO->GetFatherComponent() ); - // if component is selected - listIO.Clear(); - _PTR(ChildIterator) anIter ( anActiveStudy->studyDS()->NewChildIterator( SO ) ); - anIter->InitEx( true ); - while( anIter->More() ) { - _PTR(SObject) valSO ( anIter->Value() ); - _PTR(SObject) refSO; - if ( !valSO->ReferencedObject( refSO ) ) { - listIO.Append( new SALOME_InteractiveObject(valSO->GetID().c_str(), + _PTR(SComponent) SC ( SO->GetFatherComponent() ); + // if component is selected + listIO.Clear(); + _PTR(ChildIterator) anIter ( anActiveStudy->studyDS()->NewChildIterator( SO ) ); + anIter->InitEx( true ); + while( anIter->More() ) { + _PTR(SObject) valSO ( anIter->Value() ); + _PTR(SObject) refSO; + if ( !valSO->ReferencedObject( refSO ) ) { + listIO.Append( new SALOME_InteractiveObject(valSO->GetID().c_str(), SC->ComponentDataType().c_str(), valSO->GetName().c_str()) ); - } - anIter->Next(); - } - break; + } + anIter->Next(); + } + break; } else { - listIO.Append( anIObject ); + listIO.Append( anIObject ); } } else { @@ -316,25 +363,25 @@ void DisplayGUI::Erase() if ( anIObject->hasEntry() ) { _PTR(SObject) SO ( anActiveStudy->studyDS()->FindObjectID( anIObject->getEntry() ) ); if ( SO && QString(SO->GetID().c_str()) == QString(SO->GetFatherComponent()->GetID().c_str()) ) { - _PTR(SComponent) SC ( SO->GetFatherComponent() ); - // if component is selected - listIO.Clear(); - _PTR(ChildIterator) anIter ( anActiveStudy->studyDS()->NewChildIterator( SO ) ); - anIter->InitEx( true ); - while( anIter->More() ) { - _PTR(SObject) valSO ( anIter->Value() ); - _PTR(SObject) refSO; - if ( !valSO->ReferencedObject( refSO ) ) { - listIO.Append( new SALOME_InteractiveObject(valSO->GetID().c_str(), + _PTR(SComponent) SC ( SO->GetFatherComponent() ); + // if component is selected + listIO.Clear(); + _PTR(ChildIterator) anIter ( anActiveStudy->studyDS()->NewChildIterator( SO ) ); + anIter->InitEx( true ); + while( anIter->More() ) { + _PTR(SObject) valSO ( anIter->Value() ); + _PTR(SObject) refSO; + if ( !valSO->ReferencedObject( refSO ) ) { + listIO.Append( new SALOME_InteractiveObject(valSO->GetID().c_str(), SC->ComponentDataType().c_str(), valSO->GetName().c_str()) ); - } - anIter->Next(); - } - break; + } + anIter->Next(); + } + break; } else { - listIO.Append( anIObject ); + listIO.Append( anIObject ); } } else { @@ -364,50 +411,54 @@ void DisplayGUI::SetDisplayMode( const int mode, SUIT_ViewWindow* viewWindow ) if ( viewWindow->getViewManager()->getType() == SVTK_Viewer::Type() ) { SVTK_View* aView = ((SVTK_ViewWindow*)viewWindow)->getView(); aView->SetDisplayMode( mode ); + GeometryGUI::Modified(); } else if ( viewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() ) { OCCViewer_Viewer* v3d = ((OCCViewer_ViewManager*)(viewWindow->getViewManager()))->getOCCViewer(); Handle(AIS_InteractiveContext) ic = v3d->getAISContext(); - AIS_DisplayMode newmode = (mode == 1 ? AIS_Shaded : AIS_WireFrame); + + AIS_DisplayMode newmode; + switch (mode) { + case 0: + newmode = AIS_WireFrame; + break; + case 1: + newmode = AIS_Shaded; + break; + case 2: + newmode = AIS_DisplayMode( GEOM_AISShape::ShadingWithEdges ); + break; + case 3: + newmode = AIS_DisplayMode( GEOM_AISShape::TexturedShape ); + break; + default: + break; + } + AIS_ListOfInteractive List; ic->DisplayedObjects( List ); AIS_ListOfInteractive List1; ic->ObjectsInCollector( List1 ); List.Append( List1 ); - + AIS_ListIteratorOfListOfInteractive ite( List ); while( ite.More() ) { if( ite.Value()->IsInstance( STANDARD_TYPE(GEOM_AISShape) ) ) { Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast( ite.Value() ); - ic->SetDisplayMode( aSh, Standard_Integer( newmode ),true ); + if(aSh->isTopLevel()) { + aSh->setPrevDisplayMode(Standard_Integer( newmode )); + } + else { + ic->SetDisplayMode( aSh, Standard_Integer( newmode ),true ); + } } ite.Next(); } - + ic->SetDisplayMode( newmode, Standard_False ); - } -} -//===================================================================================== -// function : DisplayGUI::GetDisplayMode() -// purpose : Get display mode of the viewer (current viewer if - 0 ) -//===================================================================================== -int DisplayGUI::GetDisplayMode( SUIT_ViewWindow* viewWindow ) -{ - int dispMode = 0; - if ( !viewWindow ) - viewWindow = getGeometryGUI()->getApp()->desktop()->activeWindow(); - if ( viewWindow->getViewManager()->getType() == SVTK_Viewer::Type() ) { - SVTK_View* aView = ((SVTK_ViewWindow*)viewWindow)->getView(); - dispMode = aView->GetDisplayMode(); - } - else if ( viewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() ) { - OCCViewer_Viewer* v3d = ((OCCViewer_ViewManager*)(viewWindow->getViewManager()))->getOCCViewer(); - Handle(AIS_InteractiveContext) ic = v3d->getAISContext(); - AIS_DisplayMode mode = (AIS_DisplayMode)ic->DisplayMode(); - dispMode = (mode == AIS_WireFrame ? 0 : 1 ); + GeometryGUI::Modified(); } - return dispMode; } //===================================================================================== @@ -421,23 +472,24 @@ void DisplayGUI::SetVectorMode( const bool mode, SUIT_ViewWindow* viewWindow ) if ( !viewWindow ) viewWindow = getGeometryGUI()->getApp()->desktop()->activeWindow(); if ( viewWindow->getViewManager()->getType() == SVTK_Viewer::Type() ) { - viewWindow->setCustomData( "VectorsMode", QVariant( mode ) ); + viewWindow->setProperty( "VectorsMode", mode ); SVTK_ViewWindow* vw = dynamic_cast( viewWindow ); vtkActorCollection* allActors = vw->getRenderer()->GetActors(); allActors->InitTraversal(); while (vtkActor* actor = allActors->GetNextActor()) { if (actor->GetVisibility()) { // only for visible actors - GEOM_Actor* aGeomActor = 0; - if ( actor->IsA( "GEOM_Actor" ) ) { - aGeomActor = GEOM_Actor::SafeDownCast( actor ); - if ( aGeomActor ) - aGeomActor->SetVectorMode( mode ); - } + GEOM_Actor* aGeomActor = 0; + if ( actor->IsA( "GEOM_Actor" ) ) { + aGeomActor = GEOM_Actor::SafeDownCast( actor ); + if ( aGeomActor ) + aGeomActor->SetVectorMode( mode ); + } } } + GeometryGUI::Modified(); } else if ( viewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() ) { - viewWindow->setCustomData( "VectorsMode", QVariant( mode ) ); + viewWindow->setProperty( "VectorsMode", mode ); OCCViewer_Viewer* v3d = ((OCCViewer_ViewManager*)(viewWindow->getViewManager()))->getOCCViewer(); Handle(AIS_InteractiveContext) ic = v3d->getAISContext(); AIS_ListOfInteractive List; @@ -449,12 +501,13 @@ void DisplayGUI::SetVectorMode( const bool mode, SUIT_ViewWindow* viewWindow ) AIS_ListIteratorOfListOfInteractive ite( List ); while( ite.More() ) { if( ite.Value()->IsInstance( STANDARD_TYPE(GEOM_AISShape) ) ) { - Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast( ite.Value() ); - aSh->SetDisplayVectors(mode); - ic->RecomputePrsOnly(ite.Value()); + Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast( ite.Value() ); + aSh->SetDisplayVectors(mode); + ic->RecomputePrsOnly(ite.Value()); } ite.Next(); } + GeometryGUI::Modified(); } } @@ -466,7 +519,7 @@ int DisplayGUI::GetVectorMode( SUIT_ViewWindow* viewWindow ) { if ( !viewWindow ) viewWindow = getGeometryGUI()->getApp()->desktop()->activeWindow(); - return viewWindow->getCustomData( "VectorsMode" ).toBool(); + return viewWindow->property( "VectorsMode" ).toBool(); } //===================================================================================== @@ -485,6 +538,11 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); if ( !aSelMgr ) return; + SalomeApp_Study* aStudy = dynamic_cast(app->activeStudy()); + + if(!aStudy) + return; + SUIT_OverrideCursor(); SALOME_ListIO aList; @@ -492,6 +550,8 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow if ( viewWindow->getViewManager()->getType() == SVTK_Viewer::Type() ) { SVTK_ViewWindow* vw = dynamic_cast( viewWindow ); SVTK_View* aView = vw->getView(); + int mgrId = viewWindow->getViewManager()->getGlobalId(); + bool vectorMode = false; aSelMgr->selectedObjects( aList ); SALOME_ListIteratorOfListIO It( aList ); @@ -501,21 +561,31 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow SVTK_Prs* vtkPrs = stvkViewer ? dynamic_cast( stvkViewer->CreatePrs( It.Value()->getEntry() ) ) : 0; if ( vtkPrs && !vtkPrs->IsNull() ) { - if ( mode == 0 ) - aView->ChangeRepresentationToWireframe( vtkPrs->GetObjects() ); + if (mode == 0 ) + aView->ChangeRepresentationToWireframe( vtkPrs->GetObjects() ); else if ( mode == 1 ) - aView->ChangeRepresentationToSurface( vtkPrs->GetObjects() ); - else if ( mode == 2 ) { - vtkActorCollection* anActors = vtkPrs->GetObjects(); - anActors->InitTraversal(); - while (vtkActor* anAct = anActors->GetNextActor()) { - GEOM_Actor* aGeomActor = GEOM_Actor::SafeDownCast(anAct); - aGeomActor->SetVectorMode(!aGeomActor->GetVectorMode()); - } + aView->ChangeRepresentationToSurface( vtkPrs->GetObjects() ); + else if ( mode == 2 ) + aView->ChangeRepresentationToSurfaceWithEdges( vtkPrs->GetObjects() ); + else if ( mode == 4 ) { + vtkActorCollection* anActors = vtkPrs->GetObjects(); + anActors->InitTraversal(); + while (vtkActor* anAct = anActors->GetNextActor()) { + GEOM_Actor* aGeomActor = GEOM_Actor::SafeDownCast(anAct); + vectorMode = !aGeomActor->GetVectorMode(); + aGeomActor->SetVectorMode(vectorMode); + } + } + if(mode == 0 || mode == 1 || mode == 2) { + aStudy->setObjectProperty(mgrId,It.Value()->getEntry(),DISPLAY_MODE_PROP, mode); + } + else if (mode == 4) { + aStudy->setObjectProperty(mgrId, It.Value()->getEntry(),VECTOR_MODE_PROP, vectorMode); } } } aView->Repaint(); + GeometryGUI::Modified(); } else if ( viewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() ) { OCCViewer_Viewer* v3d = ((OCCViewer_ViewManager*)(viewWindow->getViewManager()))->getOCCViewer(); @@ -523,27 +593,47 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow aSelMgr->selectedObjects( aList ); SALOME_ListIteratorOfListIO It( aList ); + int mgrId = viewWindow->getViewManager()->getGlobalId(); + bool vectorMode = 0; for( ;It.More(); It.Next() ) { SOCC_Viewer* soccViewer = (SOCC_Viewer*)(viewWindow->getViewManager()->getViewModel()); SOCC_Prs* occPrs = dynamic_cast( soccViewer->CreatePrs( It.Value()->getEntry() ) ); if ( occPrs && !occPrs->IsNull() ) { - AIS_ListOfInteractive shapes; occPrs->GetObjects( shapes ); - AIS_ListIteratorOfListOfInteractive interIter( shapes ); - for ( ; interIter.More(); interIter.Next() ) { - if ( mode == 0 ) - ic->SetDisplayMode( interIter.Value(), AIS_WireFrame, false ); - else if ( mode == 1 ) - ic->SetDisplayMode( interIter.Value(), AIS_Shaded, false ); - if (mode == 2 ) { - Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast( interIter.Value() ); - aSh->SetDisplayVectors(!aSh->isShowVectors()); - ic->RecomputePrsOnly(interIter.Value()); - } + AIS_ListOfInteractive shapes; occPrs->GetObjects( shapes ); + AIS_ListIteratorOfListOfInteractive interIter( shapes ); + for ( ; interIter.More(); interIter.Next() ) { + Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast( interIter.Value() ); + if ( !aSh.IsNull() ) { + if(!aSh->isTopLevel()) { + if ( mode == 0 ) + ic->SetDisplayMode( interIter.Value(), AIS_WireFrame, false ); + else if ( mode == 1 ) + ic->SetDisplayMode( interIter.Value(), AIS_Shaded, false ); + else if ( mode == 2 ) + ic->SetDisplayMode( interIter.Value(), GEOM_AISShape::ShadingWithEdges, false ); + else if ( mode == 3 ) + ic->SetDisplayMode( interIter.Value(), AIS_ExactHLR, false ); + } else { + aSh->setPrevDisplayMode(mode); + } + if (mode == 4 ) { + vectorMode = !aSh->isShowVectors(); + aSh->SetDisplayVectors(vectorMode); + ic->RecomputePrsOnly(interIter.Value()); + } + } + } + if(mode == 0 || mode == 1 || mode == 2 || mode == 3) { + aStudy->setObjectProperty(mgrId, It.Value()->getEntry(),DISPLAY_MODE_PROP, mode); + } + else if (mode == 4) { + aStudy->setObjectProperty(mgrId, It.Value()->getEntry(),VECTOR_MODE_PROP, vectorMode); } } } ic->UpdateCurrentViewer(); + GeometryGUI::Modified(); } }