From: kga Date: Tue, 12 Feb 2013 10:46:13 +0000 (+0000) Subject: Improve GEOM visualization (remove redundant code) X-Git-Tag: V6_main_FINAL~38 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=01c35a8a66ecb514b0e7ea20b156ad9e6f2ddf38;p=modules%2Fgeom.git Improve GEOM visualization (remove redundant code) --- diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.h b/src/GEOMToolsGUI/GEOMToolsGUI.h index 6c04a9be5..6e7e2f9b4 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.h +++ b/src/GEOMToolsGUI/GEOMToolsGUI.h @@ -60,8 +60,6 @@ public: enum ActionType { SHOWDLG, INCR, DECR }; - static void SetColor( const QString&, const QColor&, bool ); - private: // Import and export topology methods bool Import(); @@ -99,18 +97,6 @@ private: _PTR(Study), QList, GEOM_Displayer* ); - - static void setVtkColor( SalomeApp_Study* study, - int mgrId, - SVTK_View* view, - const Handle_SALOME_InteractiveObject& IO, - const QColor& color ); - - static void setOccColor( SalomeApp_Study* study, - int mgrId, - const Handle_AIS_InteractiveContext& ic, - const Handle_SALOME_InteractiveObject& IO, - const QColor& color ); }; #endif // GEOMTOOLSGUI_H diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx index 268c101c1..307fced25 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx @@ -131,40 +131,36 @@ void GEOMToolsGUI::OnCheckGeometry() void GEOMToolsGUI::OnAutoColor() { - SALOME_ListIO selected; - SalomeApp_Application* app = - dynamic_cast< SalomeApp_Application* >(SUIT_Session::session()->activeApplication()); - if (!app) - return; + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; + + SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() ); + if ( !appStudy ) return; LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); - SalomeApp_Study* appStudy = dynamic_cast(app->activeStudy()); - if (!aSelMgr || !appStudy) - return; + if ( !aSelMgr ) return; - aSelMgr->selectedObjects(selected); - if (selected.IsEmpty()) - return; + SALOME_ListIO selected; + aSelMgr->selectedObjects( selected ); + if ( selected.IsEmpty() ) return; Handle(SALOME_InteractiveObject) anIObject = selected.First(); _PTR(Study) aStudy = appStudy->studyDS(); _PTR(SObject) aMainSObject(aStudy->FindObjectID(anIObject->getEntry())); GEOM::GEOM_Object_var aMainObject = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aMainSObject)); - if (CORBA::is_nil(aMainObject)) - return; + if (CORBA::is_nil(aMainObject)) return; aMainObject->SetAutoColor( true ); QList aReservedColors; - GEOM_Displayer aDisp (appStudy); + GEOM_Displayer displayer ( appStudy ); - SALOME_View* vf = aDisp.GetActiveView(); + SALOME_View* window = displayer.GetActiveView(); + if ( !window ) return; - SUIT_ViewWindow* window = app->desktop()->activeWindow(); - bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() ); - bool isVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() ); + int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId(); for( _PTR(ChildIterator) it( aStudy->NewChildIterator( aMainSObject ) ); it->More(); it->Next() ) { @@ -185,76 +181,19 @@ void GEOMToolsGUI::OnAutoColor() aReservedColors.append( aColor ); #endif // SIMPLE_AUTOCOLOR aChildObject->SetColor( aColor ); - + QColor c( (int)( aColor.R * 255.0 ), (int)( aColor.G * 255.0 ), (int)( aColor.B * 255.0 ) ); - SALOME_Prs* aPrs = vf->CreatePrs( aChildSObject->GetID().c_str() ); - - if ( isVTK ) - { - SVTK_ViewWindow* vtkVW = dynamic_cast( window ); - if ( !vtkVW ) - return; - SVTK_View* aView = vtkVW->getView(); - SUIT_OverrideCursor(); - for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) - aView->SetColor( It.Value(), c ); - } - else if ( isOCC ) - { - OCCViewer_Viewer* vm = dynamic_cast( window->getViewManager()->getViewModel() ); - Handle(AIS_InteractiveContext) ic = vm->getAISContext(); - - SOCC_Prs* anOCCPrs = dynamic_cast( aPrs ); - if( !anOCCPrs ) - continue; - - AIS_ListOfInteractive aList; - anOCCPrs->GetObjects( aList ); - if( !aList.Extent() ) - continue; - - Handle(AIS_InteractiveObject) io = aList.First(); - if( io.IsNull() ) - continue; - - Quantity_Color aQuanColor( c.red() / 255., c.green() / 255., c.blue() / 255., Quantity_TOC_RGB ); - - // Set color for a point - Handle(AIS_Drawer) aCurDrawer = io->Attributes(); - Handle(Prs3d_PointAspect) aCurPointAspect = aCurDrawer->PointAspect(); - Quantity_Color aCurColor; - Standard_Real aCurScale; - Aspect_TypeOfMarker aCurTypeOfMarker; - aCurPointAspect->Aspect()->Values( aCurColor, aCurTypeOfMarker, aCurScale ); - if ( aCurTypeOfMarker != Aspect_TOM_USERDEFINED ) { - aCurDrawer->SetPointAspect( new Prs3d_PointAspect( aCurTypeOfMarker, aQuanColor, aCurScale) ); - } - else { - Standard_Integer aWidth, aHeight; - aCurPointAspect->GetTextureSize( aWidth, aHeight ); - -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 - Handle(TColStd_HArray1OfByte) aTexture = aCurPointAspect->GetTexture(); -#else - Handle(Graphic3d_HArray1OfBytes) aTexture = aCurPointAspect->GetTexture(); -#endif - - aCurDrawer->SetPointAspect( new Prs3d_PointAspect( aQuanColor, 1, aWidth, aHeight, aTexture ) ); - } - ic->SetLocalAttributes( io, aCurDrawer ); - - io->SetColor( aQuanColor ); - if ( io->IsKind( STANDARD_TYPE(GEOM_AISShape) ) ) { - Handle(GEOM_AISShape) aGAISShape = Handle(GEOM_AISShape)::DownCast( io ); - aGAISShape->SetShadingColor( aQuanColor ); - aGAISShape->storeBoundaryColors(); - } - - io->Redisplay( Standard_True ); - } + SUIT_OverrideCursor(); + + appStudy->setObjectProperty( aMgrId, aChildObject->GetEntry(), GEOM::propertyName( GEOM::Color ), c ); + Handle( SALOME_InteractiveObject ) io = new SALOME_InteractiveObject( aChildObject->GetEntry(), "GEOM", "" ); + if ( window->isVisible( io ) ) displayer.Redisplay( io, false ); } + displayer.UpdateViewer(); + // update actions + appStudy->Modified(); app->updateActions(); //SRN: To update a Save button in the toolbar } @@ -285,282 +224,89 @@ void GEOMToolsGUI::OnDisableAutoColor() aMainObject->SetAutoColor( false ); } -void GEOMToolsGUI::SetColor( const QString& entry, const QColor& color, bool updateViewer ) +void GEOMToolsGUI::OnColor() { - if ( entry.isEmpty() || !color.isValid() ) return; - // get active application SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); if ( !app ) return; // get current study - SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); + SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() ); if ( !appStudy ) return; + // get selection manager + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); + if ( !aSelMgr ) return; + + // get selection + SALOME_ListIO selected; + aSelMgr->selectedObjects( selected ); + if ( selected.IsEmpty() ) return; + + GEOM_Displayer displayer( appStudy ); + // get active view - SUIT_ViewWindow* window = app->desktop()->activeWindow(); + SALOME_View* window = displayer.GetActiveView(); if ( !window ) return; - - bool isOCC = window->getViewManager()->getType() == OCCViewer_Viewer::Type(); - bool isVTK = window->getViewManager()->getType() == SVTK_Viewer::Type(); // get view id - int mgrId = window->getViewManager()->getGlobalId(); + int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId(); - Handle(SALOME_InteractiveObject) IO = - new SALOME_InteractiveObject( entry.toLatin1().data(), "GEOM", ""); + QColor color; + QVariant v = appStudy->getObjectProperty( aMgrId, selected.First()->getEntry(), GEOM::propertyName( GEOM::Color ), color ); - if ( isVTK ) { - SVTK_ViewWindow* vtkVW = dynamic_cast( window ); - if ( !vtkVW ) return; - SVTK_View* aView = vtkVW->getView(); + // show Choose Color dialog box + color = QColorDialog::getColor( v.value(), app->desktop() ); + if ( !color.isValid() ) return; - GEOMToolsGUI::setVtkColor( appStudy, mgrId, aView, IO, color ); - if ( updateViewer ) aView->Repaint(); - } - else if ( isOCC ) { - OCCViewer_Viewer* vm = dynamic_cast ( window->getViewManager()->getViewModel() ); - Handle (AIS_InteractiveContext) ic = vm->getAISContext(); - GEOMToolsGUI::setOccColor( appStudy, mgrId, ic, IO, color ); - if ( updateViewer ) ic->UpdateCurrentViewer(); + // iterate through list of objects and assign new color + SUIT_OverrideCursor(); + for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { + Handle( SALOME_InteractiveObject ) io = It.Value(); + appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::Color ), color ); + if ( window->isVisible( io ) ) displayer.Redisplay( io, false ); } + displayer.UpdateViewer(); - // mark study as modified - GeometryGUI::Modified(); - // update actions + appStudy->Modified(); app->updateActions(); //SRN: To update a Save button in the toolbar } -void GEOMToolsGUI::OnColor() +void GEOMToolsGUI::OnTexture() { - // get active application SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); if ( !app ) return; - // get current study - SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); + SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() ); if ( !appStudy ) return; - // get selection manager LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); if ( !aSelMgr ) return; - // get selection - SALOME_ListIO selected; + SALOME_ListIO selected; aSelMgr->selectedObjects( selected ); if ( selected.IsEmpty() ) return; - - // get active view - SUIT_ViewWindow* window = app->desktop()->activeWindow(); - bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() ); - bool isVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() ); - // get view id - int mgrId = window ? window->getViewManager()->getGlobalId() : -1; - - if ( isVTK ) { - SVTK_ViewWindow* vtkVW = dynamic_cast( window ); - if ( !vtkVW ) return; - - // get initial color (use first object from selection) - SVTK_View* aView = vtkVW->getView(); - QColor color = aView->GetColor( selected.First() ); - QVariant v = appStudy->getObjectProperty( mgrId, selected.First()->getEntry(), GEOM::propertyName( GEOM::Color ), color ); + GEOM_Displayer displayer( appStudy ); + SALOME_View* window = displayer.GetActiveView(); + if ( !window ) return; - // show Choose Color dialog box - color = QColorDialog::getColor( v.value(), app->desktop() ); - if ( !color.isValid() ) return; + int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId(); - // iterate through list of objects and assign new color - SUIT_OverrideCursor(); + QString aTexture = QFileDialog::getOpenFileName( dynamic_cast< SUIT_ViewWindow* >( window ),tr("GEOM_SELECT_IMAGE"),QString(), tr("OCC_TEXTURE_FILES")); + if( !aTexture.isEmpty() ) { + displayer.SetTexture( aTexture.toStdString() ); for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { - GEOMToolsGUI::setVtkColor( appStudy, mgrId, aView, It.Value(), color ); + Handle( SALOME_InteractiveObject ) io = It.Value(); + appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::DisplayMode ), 3 ); + if ( window->isVisible( io ) ) displayer.Redisplay( io, false ); } - aView->Repaint(); - } - else if ( isOCC ) { - // find AIS interactive object (for first item in selection) - Handle(AIS_InteractiveObject) io = GEOMBase::GetAIS( selected.First() ); - if ( io.IsNull() ) return; - - // get initial color (use first object from selection) - Quantity_Color aColor; - io->Color( aColor ); - QColor color = QColor((int)( aColor.Red() * 255.0 ), - (int)( aColor.Green() * 255.0 ), - (int)( aColor.Blue() * 255.0 )); - QVariant v = appStudy->getObjectProperty( mgrId, selected.First()->getEntry(), GEOM::propertyName( GEOM::Color ), color ); - - // show Choose Color dialog box - color = QColorDialog::getColor( v.value(), app->desktop() ); - if ( !color.isValid() ) return; - - // iterate through list of objects and assign new color - SUIT_OverrideCursor(); - OCCViewer_Viewer* vm = dynamic_cast ( window->getViewManager()->getViewModel() ); - Handle (AIS_InteractiveContext) ic = vm->getAISContext(); - for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { - GEOMToolsGUI::setOccColor( appStudy, mgrId, ic, It.Value(), color ); - } - ic->UpdateCurrentViewer(); } + displayer.UpdateViewer(); - // mark study as modified - GeometryGUI::Modified(); - // update actions - app->updateActions(); //SRN: To update a Save button in the toolbar -} - - -void GEOMToolsGUI::setVtkColor( SalomeApp_Study* study, // study - int mgrId, // view window id - SVTK_View* view, // VTK view - const Handle(SALOME_InteractiveObject)& IO, // interactive object - const QColor& color ) // color -{ - // get material property - QString matProp; - matProp = study->getObjectProperty( mgrId, IO->getEntry(), GEOM::propertyName( GEOM::Material ), matProp ).toString(); - Material_Model material; - material.fromProperties( matProp ); - - // change color only for shapes with not physical type of material - if ( !material.isPhysical() ) { - view->SetColor( IO, color ); - study->setObjectProperty( mgrId, IO->getEntry(), GEOM::propertyName( GEOM::Color ), color ); - } - - // store color to GEOM_Object - _PTR(Study) aStudy = study->studyDS(); - _PTR(SObject) aSObject( aStudy->FindObjectID( IO->getEntry() ) ); - if ( !aSObject ) return; - - GEOM::GEOM_Object_var anObject = - GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aSObject)); - - if ( CORBA::is_nil( anObject ) ) return; - - SALOMEDS::Color aSColor; - aSColor.R = (double)color.red() / 255.0; - aSColor.G = (double)color.green() / 255.0; - aSColor.B = (double)color.blue() / 255.0; - anObject->SetColor( aSColor ); - anObject->SetAutoColor( false ); -} - -void GEOMToolsGUI::setOccColor( SalomeApp_Study* study, // study - int mgrId, // view window id - const Handle(AIS_InteractiveContext)& ic, // OCC interactive context - const Handle(SALOME_InteractiveObject)& IO, // interactive object - const QColor& color ) // color -{ - // get AIS object - Handle(AIS_InteractiveObject) io = GEOMBase::GetAIS( IO, true ); - if ( io.IsNull() ) return; - - // get material property - QString matProp; - matProp = study->getObjectProperty( mgrId, IO->getEntry(), GEOM::propertyName( GEOM::Material ), matProp ).toString(); - Material_Model material; - material.fromProperties( matProp ); - - Quantity_Color aColor = Quantity_Color( color.red() / 255., color.green() / 255., color.blue() / 255., Quantity_TOC_RGB ); - - // change color only for shapes with not physical type of material - if ( !material.isPhysical() ) { - if ( io->IsKind( STANDARD_TYPE(AIS_Shape) ) ) { - TopoDS_Shape theShape = Handle(AIS_Shape)::DownCast( io )->Shape(); - bool onlyVertex = (theShape.ShapeType() == TopAbs_VERTEX || GEOM_Displayer::isCompoundOfVertices( theShape )); - if ( onlyVertex ) { - // set color for a point - Handle(AIS_Drawer) aCurDrawer = io->Attributes(); - Handle(Prs3d_PointAspect) aCurPointAspect = aCurDrawer->PointAspect(); - Quantity_Color aCurColor; - Standard_Real aCurScale; - Aspect_TypeOfMarker aCurTypeOfMarker; - aCurPointAspect->Aspect()->Values( aCurColor, aCurTypeOfMarker, aCurScale ); - if ( aCurTypeOfMarker != Aspect_TOM_USERDEFINED ) { - aCurDrawer->SetPointAspect( new Prs3d_PointAspect( aCurTypeOfMarker, aColor, aCurScale ) ); - } - else { - Standard_Integer aWidth, aHeight; - aCurPointAspect->GetTextureSize( aWidth, aHeight ); -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 - Handle(TColStd_HArray1OfByte) aTexture = aCurPointAspect->GetTexture(); -#else - Handle(Graphic3d_HArray1OfBytes) aTexture = aCurPointAspect->GetTexture(); -#endif - aCurDrawer->SetPointAspect( new Prs3d_PointAspect( aColor, 1, aWidth, aHeight, aTexture ) ); - } - ic->SetLocalAttributes( io, aCurDrawer, Standard_False ); - } - } - - io->SetColor( aColor ); - if ( io->IsKind( STANDARD_TYPE(GEOM_AISShape) ) ) { - Handle(GEOM_AISShape) aGAISShape = Handle(GEOM_AISShape)::DownCast( io ); - aGAISShape->SetShadingColor( aColor ); - aGAISShape->storeBoundaryColors(); - } - - io->Redisplay( Standard_True ); - - study->setObjectProperty( mgrId, IO->getEntry(), GEOM::propertyName( GEOM::Color ), color ); - } - - // store color to GEOM_Object - _PTR(Study) aStudy = study->studyDS(); - _PTR(SObject) aSObject( aStudy->FindObjectID( IO->getEntry() ) ); - GEOM::GEOM_Object_var anObject = - GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aSObject)); - SALOMEDS::Color aSColor; - aSColor.R = (double)color.red() / 255.0; - aSColor.G = (double)color.green() / 255.0; - aSColor.B = (double)color.blue() / 255.0; - anObject->SetColor( aSColor ); - anObject->SetAutoColor( false ); -} - -void GEOMToolsGUI::OnTexture() -{ - SALOME_ListIO selected; - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); - if ( app && appStudy ) { - LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); - if ( aSelMgr ) { - aSelMgr->selectedObjects( selected ); - if ( !selected.IsEmpty() ) { - SUIT_ViewWindow* window = app->desktop()->activeWindow(); - bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() ); - if ( isOCC ) { - QString aTexture = QFileDialog::getOpenFileName(window,tr( "GEOM_SELECT_IMAGE"),QString(), tr("OCC_TEXTURE_FILES")); - if( !aTexture.isEmpty() ) - { - SUIT_OverrideCursor(); - OCCViewer_Viewer* vm = dynamic_cast ( window->getViewManager()->getViewModel() ); - Handle (AIS_InteractiveContext) ic = vm->getAISContext(); - Handle(AIS_InteractiveObject) io ; - for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { - io = GEOMBase::GetAIS( It.Value(), true ); - if ( !io.IsNull() ) { - if ( io->IsKind( STANDARD_TYPE(GEOM_AISShape) ) ) - Handle(GEOM_AISShape)::DownCast( io )->SetTextureFileName(TCollection_AsciiString(aTexture.toStdString().c_str())); - io->Redisplay( Standard_True ); - } // if ( !io.IsNull() ) - } // for - ic->UpdateCurrentViewer(); - GeometryGUI::Modified(); - GeometryGUI* myGeomGUI = getGeometryGUI(); - myGeomGUI->OnGUIEvent(GEOMOp::OpTexture); - } // if ( !selFile.isEmpty() ) - } // if ( isOCC ) - } // if ( selection not empty ) - } - } - + appStudy->Modified(); app->updateActions(); //SRN: To update a Save button in the toolbar } @@ -572,377 +318,155 @@ void GEOMToolsGUI::OnTransparency() void GEOMToolsGUI::OnChangeTransparency( bool increase ) { - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - if ( !app ) - return; + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; + + SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() ); + if( !appStudy) return; + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); - if ( !aSelMgr ) - return; + if ( !aSelMgr ) return; + SALOME_ListIO selected; aSelMgr->selectedObjects( selected ); - if ( selected.IsEmpty() ) - return; + if ( selected.IsEmpty() ) return; - Handle(SALOME_InteractiveObject) FirstIOS = selected.First(); - if ( FirstIOS.IsNull() ) - return; + GEOM_Displayer displayer( appStudy ); + SALOME_View* window = displayer.GetActiveView(); + if ( !window ) return; + + int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId(); // Delta float delta = 0.1; // VSR: 23/11/2010 (transparency value <= 0.05 is ignored) if ( !increase ) delta *= -1; - - SUIT_ViewWindow* window = app->desktop()->activeWindow(); - bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() ); - bool isVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() ); - - if ( isVTK ) { - SVTK_ViewWindow* vtkVW = dynamic_cast( window ); - if ( !vtkVW ) - return; - SVTK_View* aView = vtkVW->getView(); - - float transp = aView->GetTransparency(FirstIOS); - - // Compute new transparency value - transp = transp + delta; - if ( transp < 0 ) - transp = 0; - else if ( transp > 1 ) - transp = 1; - for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { - aView->SetTransparency( It.Value(), transp ); - } - aView->Repaint(); - GeometryGUI::Modified(); - } // if ( isVTK ) - - else if ( isOCC ) { - GEOMBase* gb = new GEOMBase(); - Handle(GEOM_AISShape) aisShape; - - aisShape = gb->ConvertIOinGEOMAISShape( FirstIOS, true ); - if( aisShape.IsNull() ) - return; - float transp = aisShape->Transparency(); + QVariant v = appStudy->getObjectProperty( aMgrId, selected.First()->getEntry(), GEOM::propertyName( GEOM::Transparency ), QVariant() ); + float transp = v.isValid() ? v.toFloat() : 1; - // Compute new transparency value - transp = transp + delta; - if ( transp < 0 ) - transp = 0; - else if ( transp > 1 ) - transp = 1; + // Compute new transparency value + transp = transp + delta; + if ( transp < 0 ) + transp = 0; + else if ( transp > 1 ) + transp = 1; - OCCViewer_Viewer* vm = dynamic_cast( window->getViewManager()->getViewModel() ); - if ( !vm ) - return; - Handle(AIS_InteractiveContext) ic = vm->getAISContext(); - for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { - aisShape = gb->ConvertIOinGEOMAISShape( It.Value(), true ); - if ( !aisShape.IsNull() ) { - ic->SetTransparency( aisShape, transp, false ); - ic->Redisplay( aisShape, Standard_False, Standard_True ); - } - } // for... - ic->UpdateCurrentViewer(); - GeometryGUI::Modified(); - } // if ( isOCC ) + for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { + Handle( SALOME_InteractiveObject ) io = It.Value(); + appStudy->setObjectProperty( aMgrId ,io->getEntry(), GEOM::propertyName( GEOM::Transparency ), transp ); + if ( window->isVisible( io ) ) displayer.Redisplay( io, false ); + } + displayer.UpdateViewer(); } void GEOMToolsGUI::OnNbIsos( ActionType actionType ) { - SalomeApp_Application* app = - dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - SalomeApp_Study* aStudy = dynamic_cast( app->activeStudy() ); - SUIT_ViewWindow* window = app->desktop()->activeWindow(); - - bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() ); - bool isVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() ); - - if(isOCC){ // if is OCCViewer - - OCCViewer_Viewer* vm = dynamic_cast( window->getViewManager()->getViewModel() ); - Handle (AIS_InteractiveContext) ic = vm->getAISContext(); - int aMgrId = window->getViewManager()->getGlobalId(); - - ic->InitCurrent(); - if ( ic->MoreCurrent() ) { - Handle(GEOM_AISShape) CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current()); - CurObject->restoreIsoNumbers(); - Handle(AIS_Drawer) CurDrawer = CurObject->Attributes(); - - int UIso = CurDrawer->UIsoAspect()->Number(); - int VIso = CurDrawer->VIsoAspect()->Number(); - - int newNbUIso = -1; - int newNbVIso = -1; - - if ( actionType == SHOWDLG ) { - GEOMToolsGUI_NbIsosDlg * NbIsosDlg = - new GEOMToolsGUI_NbIsosDlg( SUIT_Session::session()->activeApplication()->desktop() ); - - NbIsosDlg->setU( UIso ); - NbIsosDlg->setV( VIso ); - - if ( NbIsosDlg->exec() ) { - SUIT_OverrideCursor(); - - newNbUIso = NbIsosDlg->getU(); - newNbVIso = NbIsosDlg->getV(); - } else //Cancel case - return; - } - else if ( actionType == INCR || actionType == DECR ) { - int delta = 1; - if (actionType == DECR) - delta = -1; - - newNbUIso = UIso + delta; - newNbVIso = VIso + delta; - - if ( newNbUIso < 0 || newNbVIso < 0 || newNbUIso > 99 || newNbVIso > 99 ) - return; - } - - for(; ic->MoreCurrent(); ic->NextCurrent()) { - CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current()); - - Handle(AIS_Drawer) CurDrawer = CurObject->Attributes(); - - QVariant v = aStudy->getObjectProperty( aMgrId, CurObject->getIO()->getEntry(), GEOM::propertyName( GEOM::LineWidth ) , QVariant() ); + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; - int width = v.isValid() ? v.toInt() : 1; + SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() ); + if ( !appStudy ) return; - CurDrawer->SetUIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, width , newNbUIso) ); - CurDrawer->SetVIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, width , newNbVIso) ); + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); + if ( !aSelMgr ) return; - CurObject->storeIsoNumbers(); - - ic->SetLocalAttributes(CurObject, CurDrawer); - ic->Redisplay(CurObject); + SALOME_ListIO selected; + aSelMgr->selectedObjects( selected ); + if ( selected.IsEmpty() ) return; - QString anIsos = QString("%1%2%3").arg(newNbUIso).arg(GEOM::subSectionSeparator()).arg(newNbVIso); - aStudy->setObjectProperty(aMgrId ,CurObject->getIO()->getEntry(), GEOM::propertyName( GEOM::NbIsos ), anIsos); - } - } - GeometryGUI::Modified(); + GEOM_Displayer displayer( appStudy ); + SALOME_View* window = displayer.GetActiveView(); + if ( !window ) return; + + int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId(); + + QVariant v = appStudy->getObjectProperty( aMgrId, selected.First()->getEntry(), GEOM::propertyName( GEOM::NbIsos ) , QVariant() ); + QString aStr = v.toString(); + QStringList aStrList = aStr.split( GEOM::subSectionSeparator() ); + int UIso = SUIT_Session::session()->resourceMgr()->integerValue( "Geometry", "iso_number_u", 1 ); + int VIso = SUIT_Session::session()->resourceMgr()->integerValue( "Geometry", "iso_number_v", 1 ); + if ( aStrList.count() == 2 ) { + if ( !aStrList[0].isEmpty() ) UIso = aStrList[0].toInt(); + if ( !aStrList[1].isEmpty() ) VIso = aStrList[1].toInt(); } - else if(isVTK){ // if is VTKViewer - // - // Warning. It's works incorrect. must be recheked. - // - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* > - ( SUIT_Session::session()->activeApplication() ); - if ( !app ) - return; - LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); - if ( !aSelMgr ) - return; - SALOME_ListIO selected; - aSelMgr->selectedObjects( selected ); - if ( selected.IsEmpty() ) - return; - - SVTK_ViewWindow* vtkVW = dynamic_cast( window ); - if ( !vtkVW ) - return; - - int aMgrId = window->getViewManager()->getGlobalId(); - SALOME_View* view = GEOM_Displayer::GetActiveView(); + int newNbUIso = -1; + int newNbVIso = -1; - vtkActorCollection* aCollection = vtkActorCollection::New(); + if ( actionType == SHOWDLG ) { + GEOMToolsGUI_NbIsosDlg * NbIsosDlg = + new GEOMToolsGUI_NbIsosDlg( SUIT_Session::session()->activeApplication()->desktop() ); - for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { - Handle(SALOME_InteractiveObject) anIObject = It.Value(); - SALOME_Prs* aPrs = view->CreatePrs( anIObject->getEntry() ); - SVTK_Prs* vtkPrs = dynamic_cast( aPrs ); - if ( vtkPrs ) { - vtkActorCollection* anActors = vtkPrs->GetObjects(); - anActors->InitTraversal(); - vtkActor* anAct = anActors->GetNextActor(); - aCollection->AddItem(anAct); - } - } + NbIsosDlg->setU( UIso ); + NbIsosDlg->setV( VIso ); - if(aCollection) - aCollection->InitTraversal(); - else + if ( NbIsosDlg->exec() ) { + SUIT_OverrideCursor(); + newNbUIso = NbIsosDlg->getU(); + newNbVIso = NbIsosDlg->getV(); + } else //Cancel case return; + } + else if ( actionType == INCR || actionType == DECR ) { + int delta = 1; + if (actionType == DECR) + delta = -1; - int UIso = 0; - int VIso = 0; + newNbUIso = UIso + delta; + newNbVIso = VIso + delta; - vtkActor* anAct = aCollection->GetNextActor(); - if (GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(anAct)) { - anActor->RestoreIsoNumbers(); - anActor->GetNbIsos(UIso,VIso); - } - else + if ( newNbUIso < 0 || newNbVIso < 0 || newNbUIso > 99 || newNbVIso > 99 ) return; - - int newNbUIso = -1; - int newNbVIso = -1; - - if ( actionType == SHOWDLG ) { - GEOMToolsGUI_NbIsosDlg* NbIsosDlg = - new GEOMToolsGUI_NbIsosDlg( SUIT_Session::session()->activeApplication()->desktop() ); - - NbIsosDlg->setU( UIso ); - NbIsosDlg->setV( VIso ); - - if ( NbIsosDlg->exec() ) { - SUIT_OverrideCursor(); + } - newNbUIso = NbIsosDlg->getU(); - newNbVIso = NbIsosDlg->getV(); - } else - return; //Cancel case - } - else if ( actionType == INCR || actionType == DECR ) { - int delta = 1; - if (actionType == DECR) - delta = -1; - - newNbUIso = UIso + delta; - newNbVIso = VIso + delta; - - if ( newNbUIso < 0 || newNbVIso < 0 || newNbUIso > 99 || newNbVIso > 99 ) - return; - } - - while( anAct!=NULL ) { - if(GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(anAct)){ - // There are no casting to needed actor. - int aIsos[2]={newNbUIso,newNbVIso}; - anActor->SetNbIsos(aIsos); - anActor->StoreIsoNumbers(); - - QString anIsos = QString("%1%2%3").arg(newNbUIso).arg(GEOM::subSectionSeparator()).arg(newNbVIso); - aStudy->setObjectProperty(aMgrId ,anActor->getIO()->getEntry(), GEOM::propertyName( GEOM::NbIsos ), anIsos); - } - anAct = aCollection->GetNextActor(); - } - view->Repaint(); - GeometryGUI::Modified(); - } // end vtkviewer + for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { + Handle( SALOME_InteractiveObject ) io = It.Value(); + QString anIsos = QString( "%1%2%3" ).arg( newNbUIso ).arg( GEOM::subSectionSeparator() ).arg( newNbVIso ); + appStudy->setObjectProperty( aMgrId ,io->getEntry(), GEOM::propertyName( GEOM::NbIsos ), anIsos ); + if ( window->isVisible( io ) ) displayer.Redisplay( io, false ); + } + displayer.UpdateViewer(); } void GEOMToolsGUI::OnDeflection() { - SUIT_ViewWindow* window = SUIT_Session::session()->activeApplication()->desktop()->activeWindow(); - SalomeApp_Study* appStudy = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); - - - bool isOCC = (window && window->getViewManager()->getType() == OCCViewer_Viewer::Type()); - bool isVTK = (window && window->getViewManager()->getType() == SVTK_Viewer::Type()); - int mgrId = window ? window->getViewManager()->getGlobalId() : -1; - - if (isOCC) { // if is OCCViewer - OCCViewer_Viewer* vm = dynamic_cast(window->getViewManager()->getViewModel()); - Handle (AIS_InteractiveContext) ic = vm->getAISContext(); - - ic->InitCurrent(); - if (ic->MoreCurrent()) { - Handle(GEOM_AISShape) CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current()); - - Standard_Real aDC, aPrevDC; - Standard_Boolean isOwnDC = CurObject->OwnDeviationCoefficient(aDC, aPrevDC); - if (!isOwnDC) - aDC = ic->DeviationCoefficient(); - - GEOMToolsGUI_DeflectionDlg * DeflectionDlg = new GEOMToolsGUI_DeflectionDlg - (SUIT_Session::session()->activeApplication()->desktop()); - DeflectionDlg->setTheDC(aDC); - double aNewDC = 0.0; - bool ok = false; - while (!ok) { - if (DeflectionDlg->exec()) { - SUIT_OverrideCursor(); - aNewDC = DeflectionDlg->getTheDC(); - ok = (1e-07 <= aNewDC && aNewDC <= 1.0); // spinbox can return zero - if (ok) { - for (; ic->MoreCurrent(); ic->NextCurrent()) { - CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current()); - ic->SetDeviationCoefficient(CurObject, aNewDC, Standard_True); - ic->Redisplay(CurObject); - appStudy->setObjectProperty(mgrId,CurObject->getIO()->getEntry(), GEOM::propertyName( GEOM::Deflection ), aNewDC); - } - } - } - else { - ok = true; - } - } - } - GeometryGUI::Modified(); - } - else if (isVTK) { // if is VTKViewer - SalomeApp_Application* app = dynamic_cast - (SUIT_Session::session()->activeApplication()); - if (!app) - return; - - LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); - if (!aSelMgr) - return; + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; - SALOME_ListIO selected; - aSelMgr->selectedObjects(selected); - if (selected.IsEmpty()) - return; + SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() ); + if ( !appStudy ) return; - SVTK_ViewWindow* vtkVW = dynamic_cast(window); - if (!vtkVW) - return; + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); + if ( !aSelMgr ) return; - SALOME_View* view = GEOM_Displayer::GetActiveView(); + SALOME_ListIO selected; + aSelMgr->selectedObjects( selected ); + if ( selected.IsEmpty() ) return; - vtkActorCollection* aCollection = vtkActorCollection::New(); + GEOM_Displayer displayer( appStudy ); + SALOME_View* window = displayer.GetActiveView(); + if ( !window ) return; - for (SALOME_ListIteratorOfListIO It (selected); It.More(); It.Next()) { - Handle(SALOME_InteractiveObject) anIObject = It.Value(); - SALOME_Prs* aPrs = view->CreatePrs(anIObject->getEntry()); - SVTK_Prs* vtkPrs = dynamic_cast(aPrs); - if (vtkPrs) { - vtkActorCollection* anActors = vtkPrs->GetObjects(); - anActors->InitTraversal(); - vtkActor* anAct = anActors->GetNextActor(); - aCollection->AddItem(anAct); - } - } + int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId(); - if (aCollection) - aCollection->InitTraversal(); - else - return; + QVariant v = appStudy->getObjectProperty( aMgrId, selected.First()->getEntry(), GEOM::propertyName( GEOM::Deflection ), QVariant() ); + double aDC = v.isValid() ? v.toDouble() : SUIT_Session::session()->resourceMgr()->doubleValue( "Geometry", "deflection_coef", 0.001 ); - double aDC = 0.; - - vtkActor* anAct = aCollection->GetNextActor(); - if (GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(anAct)) - aDC = anActor->GetDeflection(); - else - return; + GEOMToolsGUI_DeflectionDlg * DeflectionDlg = new GEOMToolsGUI_DeflectionDlg + ( SUIT_Session::session()->activeApplication()->desktop() ); + DeflectionDlg->setTheDC( aDC ); + if ( DeflectionDlg->exec() ) { + SUIT_OverrideCursor(); + aDC = DeflectionDlg->getTheDC(); - GEOMToolsGUI_DeflectionDlg* DeflectionDlg = new GEOMToolsGUI_DeflectionDlg - (SUIT_Session::session()->activeApplication()->desktop()); - DeflectionDlg->setTheDC(aDC); - if (DeflectionDlg->exec()) { - SUIT_OverrideCursor(); - aDC = DeflectionDlg->getTheDC(); - while (anAct != NULL) { - if (GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(anAct)) { - // There are no casting to needed actor. - anActor->SetDeflection(aDC); - appStudy->setObjectProperty(mgrId, anActor->getIO()->getEntry(), GEOM::propertyName( GEOM::Deflection ), aDC); - } - anAct = aCollection->GetNextActor(); - } + for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { + Handle( SALOME_InteractiveObject ) io = It.Value(); + appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::Deflection ), aDC ); + if ( window->isVisible( io ) ) displayer.Redisplay( io, false ); } - GeometryGUI::Modified(); - } // end vtkviewer + } + displayer.UpdateViewer(); } void GEOMToolsGUI::OnSelectOnly(int mode) @@ -1098,361 +622,144 @@ void GEOMToolsGUI::OnPublishObject() { void GEOMToolsGUI::OnEdgeWidth() { - SUIT_ViewWindow* window = SUIT_Session::session()->activeApplication()->desktop()->activeWindow(); - SalomeApp_Study* appStudy = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); - - - bool isOCC = (window && window->getViewManager()->getType() == OCCViewer_Viewer::Type()); - bool isVTK = (window && window->getViewManager()->getType() == SVTK_Viewer::Type()); - int mgrId = window ? window->getViewManager()->getGlobalId() : -1; - - if (isOCC) { // if is OCCViewer - OCCViewer_Viewer* vm = dynamic_cast(window->getViewManager()->getViewModel()); - Handle (AIS_InteractiveContext) ic = vm->getAISContext(); - SALOME_View* view = GEOM_Displayer::GetActiveView(); - ic->InitCurrent(); - if (ic->MoreCurrent()) { - Handle(GEOM_AISShape) CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current()); - - int aWidth = (int)CurObject->Width(); - - GEOMToolsGUI_LineWidthDlg * Dlg = new GEOMToolsGUI_LineWidthDlg - (SUIT_Session::session()->activeApplication()->desktop(),"EDGE_WIDTH_TLT"); - Dlg->setTheLW(aWidth); - int aNewWidth = 0; - if (Dlg->exec()) { - aNewWidth = Dlg->getTheLW(); - bool ok = (aNewWidth != aWidth && aNewWidth != 0 ); - if (ok) { - for(; ic->MoreCurrent(); ic->NextCurrent()) { - CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current()); - SOCC_Prs* aPrs = dynamic_cast(view->CreatePrs(CurObject->getIO()->getEntry())); - AIS_ListOfInteractive anAISObjects; - aPrs->GetObjects( anAISObjects ); - AIS_ListIteratorOfListOfInteractive aIter( anAISObjects ); - for ( ; aIter.More(); aIter.Next() ) { - Handle(SALOME_AISShape) cur = Handle(SALOME_AISShape)::DownCast(aIter.Value()); - if ( !cur.IsNull() ) { - cur->SetWidth(aNewWidth); - ic->Redisplay(cur); - } - } - appStudy->setObjectProperty(mgrId, CurObject->getIO()->getEntry(), GEOM::propertyName( GEOM::LineWidth ), aNewWidth); - } - } - } - } - else { - return; - } - GeometryGUI::Modified(); - } - else if (isVTK) { // if is VTKViewer - SalomeApp_Application* app = dynamic_cast - (SUIT_Session::session()->activeApplication()); - if (!app) - return; - - LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); - if (!aSelMgr) - return; + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; - SALOME_ListIO selected; - aSelMgr->selectedObjects(selected); - if (selected.IsEmpty()) - return; + SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() ); + if ( !appStudy ) return; - SVTK_ViewWindow* vtkVW = dynamic_cast(window); - if (!vtkVW) - return; + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); + if ( !aSelMgr ) return; - SALOME_View* view = GEOM_Displayer::GetActiveView(); + SALOME_ListIO selected; + aSelMgr->selectedObjects( selected ); + if ( selected.IsEmpty() ) return; - vtkActorCollection* aCollection = vtkActorCollection::New(); + GEOM_Displayer displayer( appStudy ); - for (SALOME_ListIteratorOfListIO It (selected); It.More(); It.Next()) { - Handle(SALOME_InteractiveObject) anIObject = It.Value(); - SALOME_Prs* aPrs = view->CreatePrs(anIObject->getEntry()); - SVTK_Prs* vtkPrs = dynamic_cast(aPrs); - if (vtkPrs) { - vtkActorCollection* anActors = vtkPrs->GetObjects(); - anActors->InitTraversal(); - vtkActor* anAct = anActors->GetNextActor(); - aCollection->AddItem(anAct); - } - } + SALOME_View* window = displayer.GetActiveView(); + if ( !window ) return; - if (aCollection) - aCollection->InitTraversal(); - else - return; + int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId(); - int aWidth = 1; + GEOMToolsGUI_LineWidthDlg* Dlg = + new GEOMToolsGUI_LineWidthDlg( SUIT_Session::session()->activeApplication()->desktop(), "EDGE_WIDTH_TLT" ); - vtkActor* anAct = aCollection->GetNextActor(); - if (GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(anAct)) - aWidth = anActor->GetWidth(); - else - return; + QVariant v = appStudy->getObjectProperty( aMgrId, selected.First()->getEntry(), GEOM::propertyName( GEOM::LineWidth ), QVariant() ); + int aWidth = v.isValid() ? v.toInt() : SUIT_Session::session()->resourceMgr()->integerValue( "Geometry", "edge_width", 1 ); - GEOMToolsGUI_LineWidthDlg * Dlg = new GEOMToolsGUI_LineWidthDlg - (SUIT_Session::session()->activeApplication()->desktop(),"EDGE_WIDTH_TLT"); - - Dlg->setTheLW(aWidth); - if (Dlg->exec()) { - SUIT_OverrideCursor(); - aWidth = Dlg->getTheLW(); - while (anAct != NULL) { - if (GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(anAct)) { - // There are no casting to needed actor. - anActor->SetWidth(aWidth); - appStudy->setObjectProperty(mgrId, anActor->getIO()->getEntry(), GEOM::propertyName( GEOM::LineWidth ), aWidth); - } - anAct = aCollection->GetNextActor(); - } + Dlg->setTheLW( aWidth ); + if ( Dlg->exec() ) { + SUIT_OverrideCursor(); + aWidth = Dlg->getTheLW(); + } else + return; //Cancel case + for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { + Handle( SALOME_InteractiveObject ) io = It.Value(); + appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::LineWidth ), aWidth ); + if ( window->isVisible( io ) ) displayer.Redisplay( io, false ); } - GeometryGUI::Modified(); - } // end vtkviewer + displayer.UpdateViewer(); } void GEOMToolsGUI::OnIsosWidth() { - SalomeApp_Application* app = - dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - SalomeApp_Study* aStudy = dynamic_cast( app->activeStudy() ); - SUIT_ViewWindow* window = app->desktop()->activeWindow(); - - bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() ); - bool isVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() ); - - if(isOCC){ // if is OCCViewer - - OCCViewer_Viewer* vm = dynamic_cast( window->getViewManager()->getViewModel() ); - Handle (AIS_InteractiveContext) ic = vm->getAISContext(); - int aMgrId = window->getViewManager()->getGlobalId(); - - ic->InitCurrent(); - if ( ic->MoreCurrent() ) { - Handle(GEOM_AISShape) CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current()); - CurObject->restoreIsoNumbers(); - Handle(AIS_Drawer) CurDrawer = CurObject->Attributes(); - - Handle(Graphic3d_AspectLine3d) asp = CurDrawer->UIsoAspect()->Aspect(); - - Quantity_Color C; - Aspect_TypeOfLine T; - Standard_Real W; - asp->Values(C,T,W); - - int aWidth = (int)W; - - GEOMToolsGUI_LineWidthDlg * Dlg = - new GEOMToolsGUI_LineWidthDlg( SUIT_Session::session()->activeApplication()->desktop(),"ISOS_WIDTH_TLT" ); - - Dlg->setTheLW( aWidth ); - - if ( Dlg->exec() ) { - SUIT_OverrideCursor(); - aWidth = Dlg->getTheLW(); - } else //Cancel case - return; - - for(; ic->MoreCurrent(); ic->NextCurrent()) { - CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current()); - - Handle(AIS_Drawer) CurDrawer = CurObject->Attributes(); - - CurObject->Attributes()->UIsoAspect()->SetWidth(aWidth); - CurObject->Attributes()->VIsoAspect()->SetWidth(aWidth); - - ic->Redisplay(CurObject); - - aStudy->setObjectProperty(aMgrId ,CurObject->getIO()->getEntry(), GEOM::propertyName( GEOM::IsosWidth ), aWidth); - } - GeometryGUI::Modified(); - } - } - else if(isVTK){ // if is VTKViewer - // - // Warning. It's works incorrect. must be recheked. - // - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* > - ( SUIT_Session::session()->activeApplication() ); - if ( !app ) - return; - LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); - if ( !aSelMgr ) - return; - SALOME_ListIO selected; - aSelMgr->selectedObjects( selected ); - if ( selected.IsEmpty() ) - return; + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; - SVTK_ViewWindow* vtkVW = dynamic_cast( window ); - if ( !vtkVW ) - return; + SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() ); + if ( !appStudy ) return; - int aMgrId = window->getViewManager()->getGlobalId(); + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); + if ( !aSelMgr ) return; - SALOME_View* view = GEOM_Displayer::GetActiveView(); + SALOME_ListIO selected; + aSelMgr->selectedObjects( selected ); + if ( selected.IsEmpty() ) return; - vtkActorCollection* aCollection = vtkActorCollection::New(); + GEOM_Displayer displayer( appStudy ); - for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { - Handle(SALOME_InteractiveObject) anIObject = It.Value(); - SALOME_Prs* aPrs = view->CreatePrs( anIObject->getEntry() ); - SVTK_Prs* vtkPrs = dynamic_cast( aPrs ); - if ( vtkPrs ) { - vtkActorCollection* anActors = vtkPrs->GetObjects(); - anActors->InitTraversal(); - vtkActor* anAct = anActors->GetNextActor(); - aCollection->AddItem(anAct); - } - } + SALOME_View* window = displayer.GetActiveView(); + if ( !window ) return; - if(aCollection) - aCollection->InitTraversal(); - else - return; + int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId(); - int aWidth = 1; + GEOMToolsGUI_LineWidthDlg* Dlg = + new GEOMToolsGUI_LineWidthDlg( SUIT_Session::session()->activeApplication()->desktop(), "ISOS_WIDTH_TLT" ); - vtkActor* anAct = aCollection->GetNextActor(); - if (GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(anAct)) { - aWidth = anActor->GetIsosWidth(); - } - else - return; - - GEOMToolsGUI_LineWidthDlg* Dlg = - new GEOMToolsGUI_LineWidthDlg( SUIT_Session::session()->activeApplication()->desktop(), "ISOS_WIDTH_TLT" ); - - Dlg->setTheLW( aWidth ); - if (Dlg->exec() ) { - SUIT_OverrideCursor(); - aWidth = Dlg->getTheLW(); - } else - return; //Cancel case - - while( anAct!= NULL ) { - if(GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(anAct)) { - // There are no casting to needed actor. - anActor->SetIsosWidth(aWidth); - aStudy->setObjectProperty(aMgrId ,anActor->getIO()->getEntry(), GEOM::propertyName( GEOM::IsosWidth ), aWidth); - } - anAct = aCollection->GetNextActor(); - } - - view->Repaint(); - GeometryGUI::Modified(); - } // end vtkviewer + QVariant v = appStudy->getObjectProperty( aMgrId, selected.First()->getEntry(), GEOM::propertyName( GEOM::IsosWidth ), QVariant() ); + int aWidth = v.isValid() ? v.toInt() : SUIT_Session::session()->resourceMgr()->integerValue( "Geometry", "isolines_width", 1 ); + + Dlg->setTheLW( aWidth ); + if ( Dlg->exec() ) { + SUIT_OverrideCursor(); + aWidth = Dlg->getTheLW(); + } else + return; //Cancel case + for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { + Handle( SALOME_InteractiveObject ) io = It.Value(); + appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::IsosWidth ), aWidth ); + if ( window->isVisible( io ) ) displayer.Redisplay( io, false ); + } + displayer.UpdateViewer(); } void GEOMToolsGUI::OnBringToFront() { - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - if ( !app ) - return; + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; + + SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy()); + if (!appStudy) return; - SalomeApp_Module* mod = dynamic_cast(app->activeModule()); - if(!mod) - return; - - GEOM_Displayer* disp = dynamic_cast(mod->displayer()); - - if(!disp) - return; - LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); - if ( !aSelMgr ) - return; + if ( !aSelMgr ) return; SALOME_ListIO selected; aSelMgr->selectedObjects( selected ); - if ( selected.IsEmpty() ) - return; + if ( selected.IsEmpty() ) return; - SalomeApp_Study* appStudy = dynamic_cast(app->activeStudy()); - if(!appStudy) - return; + GEOM_Displayer displayer( appStudy ); - SUIT_ViewWindow* window = app->desktop()->activeWindow(); + SALOME_View* window = displayer.GetActiveView(); + if ( !window ) return; - OCCViewer_Viewer* vm = dynamic_cast( window->getViewManager()->getViewModel() ); - if ( !vm ) - return; - - bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() ); + int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId(); QAction* a = getGeometryGUI()->getAction( GEOMOp::OpBringToFront ); bool checked = a->isChecked(); - - if ( isOCC ) { - GEOMBase* gb = new GEOMBase(); - Handle(GEOM_AISShape) aisShape; - int aMgrId = window->getViewManager()->getGlobalId(); - - Handle(AIS_InteractiveContext) ic = vm->getAISContext(); - SALOME_ListIO anIOlst; - for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { - aisShape = gb->ConvertIOinGEOMAISShape( It.Value(), true ); - if ( !aisShape.IsNull() ) { - appStudy->setObjectProperty( aMgrId, aisShape->getIO()->getEntry(), GEOM::propertyName( GEOM::TopLevel ), checked ); - aisShape->setTopLevel(checked); - anIOlst.Append(aisShape->getIO()); - } - } // for... - disp->Redisplay(anIOlst); - GeometryGUI::Modified(); - } // if ( isOCC ) + + for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { + Handle( SALOME_InteractiveObject ) io = It.Value(); + appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), checked ); + if ( window->isVisible( io ) ) displayer.Redisplay( io, false ); + } + displayer.UpdateViewer(); } void GEOMToolsGUI::OnClsBringToFront() { - SalomeApp_Application* app = - dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - if(!app) - return; + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) return; - SalomeApp_Module* mod = dynamic_cast(app->activeModule()); - if(!mod) - return; - - GEOM_Displayer* disp = dynamic_cast(mod->displayer()); - - if(!disp) - return; + SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() ); + if ( !appStudy ) return; + GEOM_Displayer displayer( appStudy ); - SalomeApp_Study* appStudy = dynamic_cast(app->activeStudy()); - if(!appStudy) - return; - - SUIT_ViewWindow* window = app->desktop()->activeWindow(); - - bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() ); - - if(isOCC){ // if is OCCViewer - - OCCViewer_Viewer* vm = dynamic_cast( window->getViewManager()->getViewModel() ); - Handle (AIS_InteractiveContext) ic = vm->getAISContext(); - int aMgrId = window->getViewManager()->getGlobalId(); - - SALOME_ListIO anIOlst; - AIS_ListOfInteractive aList; - ic->DisplayedObjects( aList ); - for ( AIS_ListIteratorOfListOfInteractive it( aList ); it.More(); it.Next() ) { - - Handle(GEOM_AISShape) CurObject = Handle(GEOM_AISShape)::DownCast(it.Value()); - - if(CurObject.IsNull()) - continue; - - appStudy->setObjectProperty( aMgrId, QString(CurObject->getIO()->getEntry()), GEOM::propertyName( GEOM::TopLevel ), Standard_False ); - CurObject->setTopLevel(Standard_False); - anIOlst.Append(CurObject->getIO()); - } - disp->Redisplay(anIOlst); - GeometryGUI::Modified(); + SALOME_View* window = displayer.GetActiveView(); + if ( !window ) return; + + int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId(); + + SALOME_ListIO anIOlst; + window->GetVisible( anIOlst ); + + for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) { + Handle( SALOME_InteractiveObject ) io = It.Value(); + appStudy->setObjectProperty( aMgrId, QString( io->getEntry() ), GEOM::propertyName( GEOM::TopLevel ), Standard_False ); + if ( window->isVisible( io ) ) displayer.Redisplay( io, false ); } + displayer.Redisplay( anIOlst ); + displayer.UpdateViewer(); } void GEOMToolsGUI::OnSetMaterial( const QVariant& theParam )