Salome HOME
Imp: allow customization of nodes / cells numbering text properties via preferences
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_VTKUtils.cxx
index 7831412dbac727617863cc889f17ae9de56580ce..48ce5afc7d126f13cbd4563764f276554de05747 100644 (file)
@@ -34,6 +34,8 @@
 
 #include <SMESH_Actor.h>
 #include <SMESH_ActorUtils.h>
+#include "SMESH_NodeLabelActor.h"
+#include "SMESH_CellLabelActor.h"
 #include <SMESH_ObjectDef.h>
 #include <SMDS_Mesh.hxx>
 
@@ -949,6 +951,58 @@ namespace SMESH
   }
 
 
+  void UpdateFontProp( SMESHGUI* theModule )
+  {
+    if ( !theModule ) return;
+
+    SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( theModule->application() );
+    if ( !app ) return;
+
+    SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( theModule );
+    if ( !mgr ) return;
+    //
+    vtkFloatingPointType anRGBNd[3] = {1,1,1};
+    SMESH::GetColor( "SMESH", "numbering_node_color", anRGBNd[0], anRGBNd[1], anRGBNd[2], QColor( 255, 255, 255 ) );
+    int aSizeNd     = mgr->integerValue( "SMESH", "numbering_node_size",  10 );
+    SMESH::LabelFont aFamilyNd = (SMESH::LabelFont)( mgr->integerValue( "SMESH", "numbering_node_font",  2 ) );
+    bool aBoldNd    = mgr->booleanValue( "SMESH", "numbering_node_bold",   true );
+    bool anItalicNd = mgr->booleanValue( "SMESH", "numbering_node_italic", false );
+    bool aShadowNd  = mgr->booleanValue( "SMESH", "numbering_node_shadow", false );
+    //
+    vtkFloatingPointType anRGBEl[3] = {0,1,0};
+    SMESH::GetColor( "SMESH", "numbering_elem_color", anRGBEl[0], anRGBEl[1], anRGBEl[2], QColor( 0, 255, 0 ) );
+    int aSizeEl     = mgr->integerValue( "SMESH", "numbering_elem_size",  12 );
+    SMESH::LabelFont aFamilyEl = (SMESH::LabelFont)( mgr->integerValue( "SMESH", "numbering_elem_font",  2 ) );
+    bool aBoldEl    = mgr->booleanValue( "SMESH", "numbering_elem_bold",   true );
+    bool anItalicEl = mgr->booleanValue( "SMESH", "numbering_elem_italic", false );
+    bool aShadowEl  = mgr->booleanValue( "SMESH", "numbering_elem_shadow", false );
+    //
+    ViewManagerList vmList;
+    app->viewManagers( SVTK_Viewer::Type(), vmList );
+    foreach ( SUIT_ViewManager* vm, vmList ) {
+      QVector<SUIT_ViewWindow*> views = vm->getViews();
+      foreach ( SUIT_ViewWindow* vw, views ) {
+       // update VTK viewer properties
+       if ( SVTK_ViewWindow* aVtkView = GetVtkViewWindow( vw ) ) {
+         // update actors
+         vtkRenderer* aRenderer = aVtkView->getRenderer();
+         VTK::ActorCollectionCopy aCopy( aRenderer->GetActors() );
+         vtkActorCollection* aCollection = aCopy.GetActors();
+         aCollection->InitTraversal();
+         while ( vtkActor* anAct = aCollection->GetNextActor() ) {
+           if ( SMESH_NodeLabelActor* anActor = dynamic_cast< SMESH_NodeLabelActor* >( anAct ) ) {
+             anActor->SetFontProperties( aFamilyNd, aSizeNd, aBoldNd, anItalicNd, aShadowNd, anRGBNd[0], anRGBNd[1], anRGBNd[2] );
+           }
+           else if ( SMESH_CellLabelActor* anActor = dynamic_cast< SMESH_CellLabelActor* >( anAct ) ) {
+             anActor->SetFontProperties( aFamilyEl, aSizeEl, aBoldEl, anItalicEl, aShadowEl, anRGBEl[0], anRGBEl[1], anRGBEl[2] );
+           }
+         }
+         aVtkView->Repaint( false );     
+       }
+      }
+    }
+  }
+
   //----------------------------------------------------------------------------
   SVTK_Selector*
   GetSelector(SUIT_ViewWindow *theWindow)