]> SALOME platform Git repositories - modules/smesh.git/commitdiff
Salome HOME
Fix for the bug "21427: EDF 2024 SMESH: numbering does not take into account clipping". V6_4_0_BR V6_4_0_WIN_BR V6_4_0 V6_4_0rc2 V6_4_0rc3
authorrnv <rnv@opencascade.com>
Wed, 30 Nov 2011 14:14:36 +0000 (14:14 +0000)
committerrnv <rnv@opencascade.com>
Wed, 30 Nov 2011 14:14:36 +0000 (14:14 +0000)
src/OBJECT/Makefile.am
src/OBJECT/SMESH_Actor.cxx
src/OBJECT/SMESH_ActorDef.h
src/OBJECT/SMESH_CellLabelActor.cxx [new file with mode: 0644]
src/OBJECT/SMESH_CellLabelActor.h [new file with mode: 0644]
src/OBJECT/SMESH_DeviceActor.cxx
src/OBJECT/SMESH_NodeLabelActor.cxx [new file with mode: 0644]
src/OBJECT/SMESH_NodeLabelActor.h [new file with mode: 0644]

index 0264d62eb58e13b6ca9a3508db07a06b61734c28..6b38c0ca43dd8974f880bac823579ec2c6423be3 100644 (file)
@@ -35,7 +35,9 @@ salomeinclude_HEADERS = \
        SMESH_PreviewActorsCollection.h \
        SMESH_ExtractGeometry.h \
        SMESH_FaceOrientationFilter.h \
-       SMESH_ScalarBarActor.h
+       SMESH_ScalarBarActor.h \
+       SMESH_NodeLabelActor.h \
+       SMESH_CellLabelActor.h
 
 # Libraries targets
 
@@ -48,7 +50,9 @@ dist_libSMESHObject_la_SOURCES = \
        SMESH_ExtractGeometry.cxx \
        SMESH_ActorUtils.cxx \
        SMESH_FaceOrientationFilter.cxx \
-       SMESH_ScalarBarActor.cxx
+       SMESH_ScalarBarActor.cxx \
+       SMESH_NodeLabelActor.cxx \
+       SMESH_CellLabelActor.cxx 
 
 libSMESHObject_la_CPPFLAGS = \
         $(QT_INCLUDES) \
index 42800dd766c5caa79754eff3dd570f26760cc2cc..4d5dcfd113f48d99b652ad782de01084cf71dead 100644 (file)
 #include "SMESH_ActorDef.h"
 #include "SMESH_ActorUtils.h"
 #include "SMESH_DeviceActor.h"
+#include "SMESH_NodeLabelActor.h"
+#include "SMESH_CellLabelActor.h"
 #include "SMESH_ObjectDef.h"
 #include "SMESH_ControlsDef.hxx"
 #include "SMDS_UnstructuredGrid.hxx"
 #include "SMESH_ScalarBarActor.h"
-#include "VTKViewer_CellCenters.h"
 #include "VTKViewer_ExtractUnstructuredGrid.h"
 #include "VTKViewer_FramedTextActor.h"
 #include "SALOME_InteractiveObject.hxx"
 #include <vtkActor2D.h>
 #include <vtkProperty2D.h>
 #include <vtkPolyData.h>
-#include <vtkMaskPoints.h>
 #include <vtkTextProperty.h>
-#include <vtkLabeledDataMapper.h>
-#include <vtkSelectVisiblePoints.h>
 
 #include <vtkLookupTable.h>
 
@@ -121,7 +119,8 @@ SMESH_Actor* SMESH_Actor::New(TVisualObjPtr theVisualObj,
 
 SMESH_ActorDef::SMESH_ActorDef()
 {
-  if(MYDEBUG) MESSAGE("SMESH_ActorDef - "<<this);
+  if(MYDEBUG) MESSAGE("SMESH_ActorDef - "<<this);  
+  myBaseActor = SMESH_DeviceActor::New();
 
   myTimeStamp = vtkTimeStamp::New();
 
@@ -158,7 +157,8 @@ SMESH_ActorDef::SMESH_ActorDef()
   bfc = Qtx::mainColorToSecondary(ffc, delta);
   myBackSurfaceProp->SetColor( bfc.red() / 255. , bfc.green() / 255. , bfc.blue() / 255. );
 
-  my2DActor = SMESH_DeviceActor::New();
+  my2DActor = SMESH_CellLabelActor::New();
+  my2DActor->SetStoreGemetryMapping(true);
   my2DActor->SetUserMatrix(aMatrix);
   my2DActor->PickableOff();
   my2DActor->SetProperty(mySurfaceProp);
@@ -193,7 +193,8 @@ SMESH_ActorDef::SMESH_ActorDef()
   aFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE);
   aFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD);
 
-  my3DActor = SMESH_DeviceActor::New();
+  my3DActor = SMESH_CellLabelActor::New();
+  my3DActor->SetStoreGemetryMapping(true);
   my3DActor->SetUserMatrix(aMatrix);
   my3DActor->PickableOff();
   my3DActor->SetProperty(mySurfaceProp);
@@ -246,7 +247,8 @@ SMESH_ActorDef::SMESH_ActorDef()
   myEdgeProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
   myEdgeProp->SetLineWidth(aLineWidth);
 
-  my1DActor = SMESH_DeviceActor::New();
+  my1DActor = SMESH_CellLabelActor::New();
+  my1DActor->SetStoreGemetryMapping(true);
   my1DActor->SetUserMatrix(aMatrix);
   my1DActor->PickableOff();
   my1DActor->SetHighlited(true);
@@ -291,9 +293,9 @@ SMESH_ActorDef::SMESH_ActorDef()
   my0DProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
   my0DProp->SetPointSize(aElem0DSize);
 
-  my0DActor = SMESH_DeviceActor::New();
+  my0DActor = SMESH_CellLabelActor::New();
   my0DActor->SetUserMatrix(aMatrix);
-  my0DActor->SetStoreClippingMapping(true);
+  my0DActor->SetStoreGemetryMapping(true);
   my0DActor->PickableOff();
   my0DActor->SetVisibility(false);
   my0DActor->SetProperty(my0DProp);
@@ -331,7 +333,7 @@ SMESH_ActorDef::SMESH_ActorDef()
   SMESH::GetColor( "SMESH", "node_color", anRGB[0], anRGB[1], anRGB[2], QColor( 255, 0, 0 ) );
   myNodeProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
 
-  myNodeActor = SMESH_DeviceActor::New();
+  myNodeActor = SMESH_NodeLabelActor::New();
   myNodeActor->SetUserMatrix(aMatrix);
   myNodeActor->SetStoreClippingMapping(true);
   myNodeActor->PickableOff();
@@ -363,11 +365,9 @@ SMESH_ActorDef::SMESH_ActorDef()
   //Definition of Pickable and Highlitable engines
   //----------------------------------------------
 
-  myBaseActor = SMESH_DeviceActor::New();
   myBaseActor->SetUserMatrix(aMatrix);
   myBaseActor->SetStoreGemetryMapping(true);
   myBaseActor->GetProperty()->SetOpacity(0.0);
-
   myPickableActor = myBaseActor;
 
   myHighlightProp = vtkProperty::New();
@@ -430,92 +430,12 @@ SMESH_ActorDef::SMESH_ActorDef()
   if( !mgr )
     return;
 
-  //Definition of points numbering pipeline
-  //---------------------------------------
-  myPointsNumDataSet = vtkUnstructuredGrid::New();
-
-  myPtsMaskPoints = vtkMaskPoints::New();
-  myPtsMaskPoints->SetInput(myPointsNumDataSet);
-  myPtsMaskPoints->SetOnRatio(1);
-
-  myPtsSelectVisiblePoints = vtkSelectVisiblePoints::New();
-  myPtsSelectVisiblePoints->SetInput(myPtsMaskPoints->GetOutput());
-  myPtsSelectVisiblePoints->SelectInvisibleOff();
-  myPtsSelectVisiblePoints->SetTolerance(0.1);
-    
-  myPtsLabeledDataMapper = vtkLabeledDataMapper::New();
-  myPtsLabeledDataMapper->SetInput(myPtsSelectVisiblePoints->GetOutput());
-#if (VTK_XVERSION < 0x050200)
-  myPtsLabeledDataMapper->SetLabelFormat("%g");
-#endif
-  myPtsLabeledDataMapper->SetLabelModeToLabelScalars();
-    
-  vtkTextProperty* aPtsTextProp = vtkTextProperty::New();
-  aPtsTextProp->SetFontFamilyToTimes();
-  static int aPointsFontSize = 10;
-  aPtsTextProp->SetFontSize(aPointsFontSize);
-  aPtsTextProp->SetBold(1);
-  aPtsTextProp->SetItalic(0);
-  aPtsTextProp->SetShadow(0);
-  myPtsLabeledDataMapper->SetLabelTextProperty(aPtsTextProp);
-  aPtsTextProp->Delete();
-  
   myEntityMode = eAllEntity;
-
-  myIsPointsLabeled = false;
-
-  myPointLabels = vtkActor2D::New();
-  myPointLabels->SetMapper(myPtsLabeledDataMapper);
-  myPointLabels->GetProperty()->SetColor(1,1,1);
-  myPointLabels->SetVisibility(myIsPointsLabeled);
-
-
-  //Definition of cells numbering pipeline
-  //---------------------------------------
-  myCellsNumDataSet = vtkUnstructuredGrid::New();
-
-  myCellCenters = VTKViewer_CellCenters::New();
-  myCellCenters->SetInput(myCellsNumDataSet);
-
-  myClsMaskPoints = vtkMaskPoints::New();
-  myClsMaskPoints->SetInput(myCellCenters->GetOutput());
-  myClsMaskPoints->SetOnRatio(1);
-    
-  myClsSelectVisiblePoints = vtkSelectVisiblePoints::New();
-  myClsSelectVisiblePoints->SetInput(myClsMaskPoints->GetOutput());
-  myClsSelectVisiblePoints->SelectInvisibleOff();
-  myClsSelectVisiblePoints->SetTolerance(0.1);
-    
-  myClsLabeledDataMapper = vtkLabeledDataMapper::New();
-  myClsLabeledDataMapper->SetInput(myClsSelectVisiblePoints->GetOutput());
-#if (VTK_XVERSION < 0x050200)
-  myClsLabeledDataMapper->SetLabelFormat("%g");
-#endif
-  myClsLabeledDataMapper->SetLabelModeToLabelScalars();
-    
-  vtkTextProperty* aClsTextProp = vtkTextProperty::New();
-  aClsTextProp->SetFontFamilyToTimes();
-  static int aCellsFontSize = 12;
-  aClsTextProp->SetFontSize(aCellsFontSize);
-  aClsTextProp->SetBold(1);
-  aClsTextProp->SetItalic(0);
-  aClsTextProp->SetShadow(0);
-  myClsLabeledDataMapper->SetLabelTextProperty(aClsTextProp);
-  aClsTextProp->Delete();
-    
-  myIsCellsLabeled = false;
-
-  myCellsLabels = vtkActor2D::New();
-  myCellsLabels->SetMapper(myClsLabeledDataMapper);
-  myCellsLabels->GetProperty()->SetColor(0,1,0);
-  myCellsLabels->SetVisibility(myIsCellsLabeled);
-
+  
   // Clipping planes
   myImplicitBoolean = vtkImplicitBoolean::New();
   myImplicitBoolean->SetOperationTypeToIntersection();
   
-
-
   //Quadratic 2D elements representation
   //-----------------------------------------------------------------------------
   int aQuadratic2DMode = mgr->integerValue( "SMESH", "quadratic_mode", 0);
@@ -596,50 +516,9 @@ SMESH_ActorDef::~SMESH_ActorDef()
   myNodeActor->Delete();
   myBaseActor->Delete();
 
-  myNodeExtActor->Delete();
-  
+  myNodeExtActor->Delete();  
   myHighlitableActor->Delete();
 
-  //Deleting of points numbering pipeline
-  //---------------------------------------
-  myPointsNumDataSet->Delete();
-
-  // commented: porting to vtk 5.0
-  //  myPtsLabeledDataMapper->RemoveAllInputs();
-  myPtsLabeledDataMapper->Delete();
-
-  // commented: porting to vtk 5.0
-  //  myPtsSelectVisiblePoints->UnRegisterAllOutputs();
-  myPtsSelectVisiblePoints->Delete();
-
-  // commented: porting to vtk 5.0
-  //  myPtsMaskPoints->UnRegisterAllOutputs();
-  myPtsMaskPoints->Delete();
-
-  myPointLabels->Delete();
-
-
-  //Deleting of cells numbering pipeline
-  //---------------------------------------
-  myCellsNumDataSet->Delete();
-
-  myClsLabeledDataMapper->RemoveAllInputs();
-  myClsLabeledDataMapper->Delete();
-
-  // commented: porting to vtk 5.0
-  //  myClsSelectVisiblePoints->UnRegisterAllOutputs();
-  myClsSelectVisiblePoints->Delete();
-
-  // commented: porting to vtk 5.0
-  //  myClsMaskPoints->UnRegisterAllOutputs();
-  myClsMaskPoints->Delete();
-
-  // commented: porting to vtk 5.0
-  //  myCellCenters->UnRegisterAllOutputs();
-  myCellCenters->Delete();
-
-  myCellsLabels->Delete();
-
   myImplicitBoolean->Delete();
 
   myTimeStamp->Delete();
@@ -648,64 +527,53 @@ SMESH_ActorDef::~SMESH_ActorDef()
 
 void SMESH_ActorDef::SetPointsLabeled( bool theIsPointsLabeled )
 {    
-  vtkUnstructuredGrid* aGrid = GetUnstructuredGrid();
-    
-  myIsPointsLabeled = theIsPointsLabeled && aGrid->GetNumberOfPoints();
-
-  if ( myIsPointsLabeled )
-  {
-    myPointsNumDataSet->ShallowCopy(aGrid);
-    vtkDataSet *aDataSet = myPointsNumDataSet;
-    
-    int aNbElem = aDataSet->GetNumberOfPoints();
-    
-    vtkIntArray *anArray = vtkIntArray::New();
-    anArray->SetNumberOfValues( aNbElem );
-    
-    for ( vtkIdType anId = 0; anId < aNbElem; anId++ )
-    {
-      int aSMDSId = myVisualObj->GetNodeObjId( anId );
-      anArray->SetValue( anId, aSMDSId );
-    }
-    
-    aDataSet->GetPointData()->SetScalars( anArray );
-    anArray->Delete();
-    myPtsMaskPoints->SetInput( aDataSet );
-    myPointLabels->SetVisibility( GetVisibility() );
+  if(myNodeActor) {
+    myNodeActor->SetPointsLabeled(theIsPointsLabeled);
+    SetRepresentation(GetRepresentation());
+    myTimeStamp->Modified();
   }
-  else
-  {
-    myPointLabels->SetVisibility( false );
-  }
-  SetRepresentation(GetRepresentation());
-  myTimeStamp->Modified();
 }
 
+bool SMESH_ActorDef::GetPointsLabeled() {
+  return myNodeActor && myNodeActor->GetPointsLabeled();
+}
 
 void SMESH_ActorDef::SetCellsLabeled(bool theIsCellsLabeled)
 {
-  vtkUnstructuredGrid* aGrid = GetUnstructuredGrid();
-  myIsCellsLabeled = theIsCellsLabeled && aGrid->GetNumberOfPoints();
-  if(myIsCellsLabeled){
-    myCellsNumDataSet->ShallowCopy(aGrid);
-    vtkDataSet *aDataSet = myCellsNumDataSet;
-    int aNbElem = aDataSet->GetNumberOfCells();
-    vtkIntArray *anArray = vtkIntArray::New();
-    anArray->SetNumberOfValues(aNbElem);
-    for(int anId = 0; anId < aNbElem; anId++){
-      int aSMDSId = myVisualObj->GetElemObjId(anId);
-      anArray->SetValue(anId,aSMDSId);
-    }
-    aDataSet->GetCellData()->SetScalars(anArray);
-    myCellCenters->SetInput(aDataSet);
-    myCellsLabels->SetVisibility(GetVisibility());
-  }else{
-    myCellsLabels->SetVisibility(false);
-  }
+  if(my3DActor)
+    my3DActor->SetCellsLabeled(theIsCellsLabeled);
+
+  if(my2DActor)
+    my2DActor->SetCellsLabeled(theIsCellsLabeled);
+
+  if(my1DActor)
+    my1DActor->SetCellsLabeled(theIsCellsLabeled);
+
+  if(my0DActor)
+    my0DActor->SetCellsLabeled(theIsCellsLabeled);
+  
   myTimeStamp->Modified();
 }
 
 
+bool SMESH_ActorDef::GetCellsLabeled() {
+  bool result = false;
+  if(my3DActor)
+    result = result || my3DActor->GetCellsLabeled();
+
+  if(my2DActor)
+    result = result || my2DActor->GetCellsLabeled();
+
+  if(my1DActor)
+    result = result || my1DActor->GetCellsLabeled();
+
+  if(my0DActor)
+    result = result || my0DActor->GetCellsLabeled();
+
+  return result;
+}
+
+
 void SMESH_ActorDef::SetFacesOriented(bool theIsFacesOriented)
 {
   myIsFacesOriented = theIsFacesOriented;
@@ -993,32 +861,23 @@ SetControlMode(eControl theMode,
 
 
 void SMESH_ActorDef::AddToRender(vtkRenderer* theRenderer){
-  theRenderer->AddActor(myNodeActor);
-  theRenderer->AddActor(myBaseActor);
-  
+  theRenderer->AddActor(myBaseActor);  
   theRenderer->AddActor(myNodeExtActor);
+  theRenderer->AddActor(my1DExtActor);
 
   my3DActor->AddToRender(theRenderer);
   my3DExtActor->AddToRender(theRenderer);
   my2DActor->AddToRender(theRenderer);
   my2DExtActor->AddToRender(theRenderer);
-
-  theRenderer->AddActor(my1DActor);
-  theRenderer->AddActor(my1DExtActor);
-
-  theRenderer->AddActor(my0DActor);
+  myNodeActor->AddToRender(theRenderer);
+  my1DActor->AddToRender(theRenderer);
+  my0DActor->AddToRender(theRenderer);
   //theRenderer->AddActor(my0DExtActor);
 
   theRenderer->AddActor(myHighlitableActor);
   
   theRenderer->AddActor2D(myScalarBarActor);
 
-  myPtsSelectVisiblePoints->SetRenderer(theRenderer);
-  myClsSelectVisiblePoints->SetRenderer(theRenderer);
-
-  theRenderer->AddActor2D(myPointLabels);
-  theRenderer->AddActor2D(myCellsLabels);
-
   // the superclass' method should be called at the end
   // (in particular, for correct work of selection)
   SALOME_Actor::AddToRender(theRenderer);
@@ -1027,27 +886,25 @@ void SMESH_ActorDef::AddToRender(vtkRenderer* theRenderer){
 void SMESH_ActorDef::RemoveFromRender(vtkRenderer* theRenderer){
   SALOME_Actor::RemoveFromRender(theRenderer);
 
-  theRenderer->RemoveActor(myNodeActor);
   theRenderer->RemoveActor(myBaseActor);
 
   theRenderer->RemoveActor(myNodeExtActor);
 
   theRenderer->RemoveActor(myHighlitableActor);
 
-  theRenderer->RemoveActor(my0DActor);
   //theRenderer->RemoveActor(my0DExtActor);
 
-  theRenderer->RemoveActor(my1DActor);
   theRenderer->RemoveActor(my1DExtActor);
 
   my2DActor->RemoveFromRender(theRenderer);
   my2DExtActor->RemoveFromRender(theRenderer);
   my3DActor->RemoveFromRender(theRenderer);
   my3DExtActor->RemoveFromRender(theRenderer);
+  myNodeActor->RemoveFromRender(theRenderer);
+  my0DActor->RemoveFromRender(theRenderer);
+  my1DActor->RemoveFromRender(theRenderer);
 
   theRenderer->RemoveActor(myScalarBarActor);
-  theRenderer->RemoveActor(myPointLabels);
-  theRenderer->RemoveActor(myCellsLabels);
 }
 
 
@@ -1306,8 +1163,6 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){
   my3DExtActor->VisibilityOff();
   
   myScalarBarActor->VisibilityOff();
-  myPointLabels->VisibilityOff();
-  myCellsLabels->VisibilityOff();
   
   if(GetVisibility()){
     if(theIsUpdateRepersentation)
@@ -1362,13 +1217,21 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){
       my3DActor->VisibilityOn();
     }
     
-    if(myIsPointsLabeled){ 
-      myPointLabels->VisibilityOn();
+    if(myNodeActor->GetPointsLabeled()){ 
       myNodeActor->VisibilityOn();
     }
 
-    if(myIsCellsLabeled) 
-      myCellsLabels->VisibilityOn();
+    if(my0DActor)
+      my0DActor->UpdateLabels();
+    
+    if(my1DActor)
+      my1DActor->UpdateLabels();
+    
+    if(my2DActor)
+      my2DActor->UpdateLabels();
+    
+    if(my3DActor)
+      my3DActor->UpdateLabels();    
   } 
 #ifndef DISABLE_PLOT2DVIEWER
   else
@@ -1622,7 +1485,7 @@ void SMESH_ActorDef::SetPointRepresentation(bool theIsPointsVisible){
 }
 
 bool SMESH_ActorDef::GetPointRepresentation(){ 
-  return myIsPointsVisible || myIsPointsLabeled;
+  return myIsPointsVisible || myNodeActor->GetPointsLabeled();
 }
 
 
@@ -1729,12 +1592,22 @@ void SMESH_ActorDef::Update(){
     if (anObjTime > aTime)
       SetControlMode(GetControlMode(),false);
   }
-  if(myIsPointsLabeled){
-    SetPointsLabeled(myIsPointsLabeled);
-  }
-  if(myIsCellsLabeled){
-    SetCellsLabeled(myIsCellsLabeled);
-  }
+
+  if(myNodeActor)
+    myNodeActor->UpdateLabels();
+
+  if(my0DActor)
+    my0DActor->UpdateLabels();
+  
+  if(my1DActor)
+    my1DActor->UpdateLabels();
+  
+  if(my2DActor)
+    my2DActor->UpdateLabels();
+
+  if(my3DActor)
+    my3DActor->UpdateLabels();
+  
   if(myIsFacesOriented){
     SetFacesOriented(myIsFacesOriented);
   }
@@ -1929,6 +1802,7 @@ SMESH_ActorDef::AddClippingPlane(vtkPlane* thePlane)
     myCippingPlaneCont.push_back(thePlane);
     if(!IsImplicitFunctionUsed())
       SetImplicitFunctionUsed(true);
+    myNodeActor->UpdateLabels();
   }
   return myCippingPlaneCont.size();
 }
@@ -1941,6 +1815,7 @@ RemoveAllClippingPlanes()
   myImplicitBoolean->GetFunction()->Modified(); // VTK bug
   myCippingPlaneCont.clear();
   SetImplicitFunctionUsed(false);
+  myNodeActor->UpdateLabels();
 }
 
 vtkIdType
index 5961cbd068014d208e96ee4ee10a1317e1d2e156..6eec6aa2acb52d46ea3d2ed78161b850344cb63e 100644 (file)
@@ -61,17 +61,14 @@ class vtkMergeFilter;
 class vtkPolyData;
 class vtkMapper;
 class vtkActor2D;
-class vtkMaskPoints;
-class vtkLabeledDataMapper;
-class vtkSelectVisiblePoints;
 class vtkLookupTable;
 class vtkPlane;
 class vtkImplicitBoolean;
 class vtkTimeStamp;
 
-class VTKViewer_CellCenters;
-
 class SMESH_DeviceActor;
+class SMESH_NodeLabelActor;
+class SMESH_CellLabelActor;
 class SMESH_ScalarBarActor;
 
 #ifndef DISABLE_PLOT2DVIEWER
@@ -167,10 +164,10 @@ class SMESH_ActorDef : public SMESH_Actor
   virtual void UnShrink(); 
 
   virtual void SetPointsLabeled(bool theIsPointsLabeled);
-  virtual bool GetPointsLabeled(){ return myIsPointsLabeled;}
+  virtual bool GetPointsLabeled();
 
   virtual void SetCellsLabeled(bool theIsCellsLabeled);
-  virtual bool GetCellsLabeled(){ return myIsCellsLabeled;}
+  virtual bool GetCellsLabeled();
 
   virtual void SetFacesOriented(bool theIsFacesOriented);
   virtual bool GetFacesOriented();
@@ -232,7 +229,7 @@ class SMESH_ActorDef : public SMESH_Actor
   vtkProperty* myNodeProp;
 
   SMESH_DeviceActor* myBaseActor;
-  SMESH_DeviceActor* myNodeActor;
+  SMESH_NodeLabelActor* myNodeActor;
   SMESH_DeviceActor* myPickableActor;
 
   vtkProperty* myHighlightProp;
@@ -244,9 +241,9 @@ class SMESH_ActorDef : public SMESH_Actor
   eControl myControlMode;
   SMESH::Controls::FunctorPtr myFunctor;
   vtkProperty* my2DExtProp;
-  SMESH_DeviceActor* my2DActor;
+  SMESH_CellLabelActor* my2DActor;
   SMESH_DeviceActor* my2DExtActor;
-  SMESH_DeviceActor* my3DActor;
+  SMESH_CellLabelActor* my3DActor;
   SMESH_DeviceActor* my3DExtActor;
   SMESH_DeviceActor* myControlActor;
 
@@ -254,12 +251,12 @@ class SMESH_ActorDef : public SMESH_Actor
   SMESH_DeviceActor* myNodeExtActor;
 
   vtkProperty* my1DProp;
-  SMESH_DeviceActor* my1DActor;
+  SMESH_CellLabelActor* my1DActor;
   vtkProperty* my1DExtProp;
   SMESH_DeviceActor* my1DExtActor;
 
   vtkProperty* my0DProp;
-  SMESH_DeviceActor* my0DActor;
+  SMESH_CellLabelActor* my0DActor;
   vtkProperty* my0DExtProp;
   SMESH_DeviceActor* my0DExtActor;
 
@@ -270,21 +267,6 @@ class SMESH_ActorDef : public SMESH_Actor
   bool myIsShrinkable;
   bool myIsShrunk;
   
-  bool myIsPointsLabeled;
-  vtkUnstructuredGrid* myPointsNumDataSet;
-  vtkActor2D *myPointLabels;
-  vtkMaskPoints* myPtsMaskPoints;
-  vtkLabeledDataMapper* myPtsLabeledDataMapper;
-  vtkSelectVisiblePoints* myPtsSelectVisiblePoints;
-
-  bool myIsCellsLabeled;
-  vtkUnstructuredGrid* myCellsNumDataSet;
-  vtkActor2D *myCellsLabels;
-  vtkMaskPoints* myClsMaskPoints;
-  VTKViewer_CellCenters* myCellCenters;
-  vtkLabeledDataMapper* myClsLabeledDataMapper;
-  vtkSelectVisiblePoints* myClsSelectVisiblePoints;
-
   vtkImplicitBoolean* myImplicitBoolean;
   typedef TVTKSmartPtr<vtkPlane> TPlanePtr;
   typedef std::vector<TPlanePtr> TCippingPlaneCont;
diff --git a/src/OBJECT/SMESH_CellLabelActor.cxx b/src/OBJECT/SMESH_CellLabelActor.cxx
new file mode 100644 (file)
index 0000000..399bc86
--- /dev/null
@@ -0,0 +1,185 @@
+// Copyright (C) 2007-2011  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
+//
+// 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   : SMESH_CellLabelActor.cxx
+//  Author : Roman NIKOLAEV
+//  Module : SMESH
+//
+#include "SMESH_CellLabelActor.h"
+
+#include <VTKViewer_TransformFilter.h>
+#include <VTKViewer_CellCenters.h>
+
+#include <vtkObjectFactory.h>
+#include <vtkCallbackCommand.h>
+#include <vtkMaskPoints.h>
+#include <vtkSelectVisiblePoints.h>
+#include <vtkLabeledDataMapper.h>
+#include <vtkActor2D.h>
+#include <vtkTextProperty.h>
+#include <vtkPointData.h>
+#include <vtkProperty2D.h>
+#include <vtkRenderer.h>
+#include <vtkPolyData.h>
+#include <vtkCellData.h>
+
+vtkStandardNewMacro(SMESH_CellLabelActor);
+
+/*!
+  Constructor.
+*/
+SMESH_CellLabelActor::SMESH_CellLabelActor() {
+    //Definition of cells numbering pipeline
+  //---------------------------------------
+  myCellsNumDataSet = vtkPolyData::New();
+
+  myCellCenters = VTKViewer_CellCenters::New();
+  myCellCenters->SetInput(myCellsNumDataSet);
+
+  myClsMaskPoints = vtkMaskPoints::New();
+  myClsMaskPoints->SetInput(myCellCenters->GetOutput());
+  myClsMaskPoints->SetOnRatio(1);
+    
+  myClsSelectVisiblePoints = vtkSelectVisiblePoints::New();
+  myClsSelectVisiblePoints->SetInput(myClsMaskPoints->GetOutput());
+  myClsSelectVisiblePoints->SelectInvisibleOff();
+  myClsSelectVisiblePoints->SetTolerance(0.1);
+    
+  myClsLabeledDataMapper = vtkLabeledDataMapper::New();
+  myClsLabeledDataMapper->SetInput(myClsSelectVisiblePoints->GetOutput());
+
+  myClsLabeledDataMapper->SetLabelFormat("%d");
+  myClsLabeledDataMapper->SetLabelModeToLabelScalars();
+    
+  vtkTextProperty* aClsTextProp = vtkTextProperty::New();
+  aClsTextProp->SetFontFamilyToTimes();
+  static int aCellsFontSize = 12;
+  aClsTextProp->SetFontSize(aCellsFontSize);
+  aClsTextProp->SetBold(1);
+  aClsTextProp->SetItalic(0);
+  aClsTextProp->SetShadow(0);
+  myClsLabeledDataMapper->SetLabelTextProperty(aClsTextProp);
+  aClsTextProp->Delete();
+    
+  myIsCellsLabeled = false;
+
+  myCellsLabels = vtkActor2D::New();
+  myCellsLabels->SetMapper(myClsLabeledDataMapper);
+  myCellsLabels->GetProperty()->SetColor(0,1,0);
+  myCellsLabels->SetVisibility(myIsCellsLabeled);
+
+  vtkCallbackCommand* callBackCommand = vtkCallbackCommand::New();
+  callBackCommand->SetClientData(this);
+  callBackCommand->SetCallback(SMESH_CellLabelActor::ProcessEvents);
+
+  myTransformFilter->AddObserver("VTKViewer_TransformFilter::TransformationFinished",
+                                callBackCommand);
+  callBackCommand->Delete();
+}
+
+
+/*!
+  Destructor.
+*/
+SMESH_CellLabelActor::~SMESH_CellLabelActor() {
+  //Deleting of cells numbering pipeline
+  //---------------------------------------
+  myCellsNumDataSet->Delete();
+
+  myClsLabeledDataMapper->RemoveAllInputs();
+  myClsLabeledDataMapper->Delete();
+  
+  // commented: porting to vtk 5.0
+  //  myClsSelectVisiblePoints->UnRegisterAllOutputs();
+  myClsSelectVisiblePoints->Delete();
+  
+  // commented: porting to vtk 5.0
+  //  myClsMaskPoints->UnRegisterAllOutputs();
+  myClsMaskPoints->Delete();
+  
+  // commented: porting to vtk 5.0
+  //  myCellCenters->UnRegisterAllOutputs();
+  myCellCenters->Delete();
+  
+  myCellsLabels->Delete();
+}
+
+
+void SMESH_CellLabelActor::SetCellsLabeled(bool theIsCellsLabeled) {
+  myTransformFilter->Update();
+  vtkPolyData* aGrid = vtkPolyData::SafeDownCast(myTransformFilter->GetOutput());
+  if(!aGrid)
+    return;
+
+  myIsCellsLabeled = theIsCellsLabeled && aGrid->GetNumberOfPoints();
+  if(myIsCellsLabeled){
+    myCellsNumDataSet->ShallowCopy(aGrid);
+    vtkDataSet *aDataSet = myCellsNumDataSet;
+    int aNbElem = aDataSet->GetNumberOfCells();
+    vtkIntArray *anArray = vtkIntArray::New();
+    anArray->SetNumberOfValues(aNbElem);
+    for(int anId = 0; anId < aNbElem; anId++){
+      int aSMDSId = GetElemObjId(anId);
+      anArray->SetValue(anId,aSMDSId);
+    }
+    aDataSet->GetCellData()->SetScalars(anArray);
+    myCellCenters->SetInput(aDataSet);
+    myCellsLabels->SetVisibility(GetVisibility());
+  }else{
+    myCellsLabels->SetVisibility(false);
+  }
+}
+
+void SMESH_CellLabelActor::SetVisibility(int theMode)
+{
+  SMESH_DeviceActor::SetVisibility(theMode);
+  myCellsLabels->VisibilityOff();
+  if(myIsCellsLabeled && theMode)
+    myCellsLabels->VisibilityOn();
+}
+
+void SMESH_CellLabelActor::AddToRender(vtkRenderer* theRenderer)
+{
+  SMESH_DeviceActor::AddToRender(theRenderer);
+  myClsSelectVisiblePoints->SetRenderer(theRenderer);
+  theRenderer->AddActor2D(myCellsLabels);
+}
+
+void SMESH_CellLabelActor::RemoveFromRender(vtkRenderer* theRenderer)
+{
+  theRenderer->RemoveActor(myCellsLabels);
+  SMESH_DeviceActor::RemoveFromRender(theRenderer);
+}
+
+void SMESH_CellLabelActor::UpdateLabels() {
+  if(myIsCellsLabeled)
+    SetCellsLabeled(myIsCellsLabeled);
+}
+
+
+void SMESH_CellLabelActor::ProcessEvents(vtkObject* vtkNotUsed(theObject),
+                                        unsigned long theEvent,
+                                        void* theClientData,
+                                        void* vtkNotUsed(theCallData)) {
+  SMESH_CellLabelActor* self = reinterpret_cast<SMESH_CellLabelActor*>(theClientData);
+  if(self)
+    self->UpdateLabels();
+}
diff --git a/src/OBJECT/SMESH_CellLabelActor.h b/src/OBJECT/SMESH_CellLabelActor.h
new file mode 100644 (file)
index 0000000..dda47fe
--- /dev/null
@@ -0,0 +1,82 @@
+// Copyright (C) 2007-2011  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
+//
+// 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   : SMESH_CellLabelActor.h
+//  Author : Roman NIKOLAEV
+//  Module : SMESH
+//
+#ifndef SMESH_CELL_LABEL_ACTOR_H
+#define SMESH_CELL_LABEL_ACTOR_H
+
+#include "SMESH_DeviceActor.h"
+
+class vtkSelectVisiblePoints;
+class vtkLabeledDataMapper;
+class vtkActor2D;
+class vtkMaskPoints;
+class vtkPolyData;
+
+class VTKViewer_CellCenters;
+
+
+class SMESHOBJECT_EXPORT SMESH_CellLabelActor : public SMESH_DeviceActor {
+public:
+  static SMESH_CellLabelActor* New();
+
+  static void ProcessEvents(vtkObject* theObject,
+                           unsigned long theEvent,
+                           void* theClientData,
+                           void* theCallData);
+
+
+  vtkTypeMacro(SMESH_CellLabelActor, SMESH_DeviceActor);
+
+
+  virtual void SetCellsLabeled(bool theIsCellsLabeled);
+  virtual bool GetCellsLabeled(){ return myIsCellsLabeled;}
+
+  virtual void SetVisibility(int theMode);
+
+  virtual void AddToRender(vtkRenderer* theRenderer);
+  virtual void RemoveFromRender(vtkRenderer* theRenderer);
+
+  void UpdateLabels();
+  
+protected:
+  SMESH_CellLabelActor();
+  ~SMESH_CellLabelActor();
+
+  bool myIsCellsLabeled;
+  vtkPolyData* myCellsNumDataSet;
+  vtkActor2D *myCellsLabels;
+  vtkMaskPoints* myClsMaskPoints;
+  VTKViewer_CellCenters* myCellCenters;
+  vtkLabeledDataMapper* myClsLabeledDataMapper;
+  vtkSelectVisiblePoints* myClsSelectVisiblePoints;  
+  SMESH_DeviceActor* myBaseActor; //Pointer to the base actor
+
+protected:
+  // Not implemented.
+  SMESH_CellLabelActor(const SMESH_CellLabelActor&);
+  void operator=(const SMESH_CellLabelActor&);
+};
+
+#endif //SMESH_NODE_LABEL_ACTOR_H
index fe08178a9e272619c1757d78c3879ab9ca8e3ef3..6032c57349ccdb1ae2393ddbe75637f1388b0858 100644 (file)
@@ -626,7 +626,7 @@ void
 SMESH_DeviceActor
 ::SetFacesOriented(bool theIsFacesOriented) 
 {
-  if ( vtkDataSet* aDataSet = myPassFilter[ 1 ]->GetOutput() )
+  if ( vtkDataSet* aDataSet = myTransformFilter->GetOutput() )
   {
     myIsFacesOriented = theIsFacesOriented;
     if( theIsFacesOriented )
diff --git a/src/OBJECT/SMESH_NodeLabelActor.cxx b/src/OBJECT/SMESH_NodeLabelActor.cxx
new file mode 100644 (file)
index 0000000..51c9135
--- /dev/null
@@ -0,0 +1,187 @@
+// Copyright (C) 2007-2011  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
+//
+// 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   : SMESH_NodeLabelActor.cxx
+//  Author : Roman NIKOLAEV
+//  Module : SMESH
+//
+#include "SMESH_NodeLabelActor.h"
+
+#include <VTKViewer_TransformFilter.h>
+
+#include <vtkObjectFactory.h>
+#include <vtkCallbackCommand.h>
+#include <vtkMaskPoints.h>
+#include <vtkSelectVisiblePoints.h>
+#include <vtkLabeledDataMapper.h>
+#include <vtkActor2D.h>
+#include <vtkTextProperty.h>
+#include <vtkPointData.h>
+#include <vtkProperty2D.h>
+#include <vtkRenderer.h>
+#include <vtkPolyData.h>
+
+vtkStandardNewMacro(SMESH_NodeLabelActor);
+
+/*!
+  Constructor.
+*/
+SMESH_NodeLabelActor::SMESH_NodeLabelActor() {
+  //Definition of points numbering pipeline
+  //---------------------------------------
+  myPointsNumDataSet = vtkPolyData::New();
+
+  myPtsMaskPoints = vtkMaskPoints::New();
+  myPtsMaskPoints->SetInput(myPointsNumDataSet);
+  myPtsMaskPoints->SetOnRatio(1);
+
+  myPtsSelectVisiblePoints = vtkSelectVisiblePoints::New();
+  myPtsSelectVisiblePoints->SetInput(myPtsMaskPoints->GetOutput());
+  myPtsSelectVisiblePoints->SelectInvisibleOff();
+  myPtsSelectVisiblePoints->SetTolerance(0.1);
+    
+  myPtsLabeledDataMapper = vtkLabeledDataMapper::New();
+  myPtsLabeledDataMapper->SetInput(myPtsSelectVisiblePoints->GetOutput());
+  myPtsLabeledDataMapper->SetLabelFormat("%d");
+  myPtsLabeledDataMapper->SetLabelModeToLabelScalars();
+    
+  vtkTextProperty* aPtsTextProp = vtkTextProperty::New();
+  aPtsTextProp->SetFontFamilyToTimes();
+  static int aPointsFontSize = 10;
+  aPtsTextProp->SetFontSize(aPointsFontSize);
+  aPtsTextProp->SetBold(1);
+  aPtsTextProp->SetItalic(0);
+  aPtsTextProp->SetShadow(0);
+  myPtsLabeledDataMapper->SetLabelTextProperty(aPtsTextProp);
+  aPtsTextProp->Delete();
+
+  myIsPointsLabeled = false;
+
+  myPointLabels = vtkActor2D::New();
+  myPointLabels->SetMapper(myPtsLabeledDataMapper);
+  myPointLabels->GetProperty()->SetColor(1,1,1);
+  myPointLabels->SetVisibility(myIsPointsLabeled);
+
+  vtkCallbackCommand* callBackCommand = vtkCallbackCommand::New();
+  callBackCommand->SetClientData(this);
+  callBackCommand->SetCallback(SMESH_NodeLabelActor::ProcessEvents);
+
+  myTransformFilter->AddObserver("VTKViewer_TransformFilter::TransformationFinished",
+                                callBackCommand);
+  callBackCommand->Delete();
+}
+
+/*!
+  Destructor
+*/
+SMESH_NodeLabelActor::~SMESH_NodeLabelActor() {
+  //Deleting of points numbering pipeline
+  //---------------------------------------
+  myPointsNumDataSet->Delete();
+  
+  // commented: porting to vtk 5.0
+  //  myPtsLabeledDataMapper->RemoveAllInputs();
+  myPtsLabeledDataMapper->Delete();
+  
+  // commented: porting to vtk 5.0
+  //  myPtsSelectVisiblePoints->UnRegisterAllOutputs();
+  myPtsSelectVisiblePoints->Delete();
+  
+  // commented: porting to vtk 5.0
+  //  myPtsMaskPoints->UnRegisterAllOutputs();
+  myPtsMaskPoints->Delete();
+  myPointLabels->Delete();
+
+}
+
+void SMESH_NodeLabelActor::SetPointsLabeled(bool theIsPointsLabeled) {
+  myTransformFilter->Update();
+  vtkDataSet* aGrid = vtkPolyData::SafeDownCast(myTransformFilter->GetOutput());
+
+  if(!aGrid)
+    return;
+    
+  myIsPointsLabeled = theIsPointsLabeled && aGrid->GetNumberOfPoints();
+
+  if ( myIsPointsLabeled )
+  {
+    myPointsNumDataSet->ShallowCopy(aGrid);
+    vtkDataSet *aDataSet = myPointsNumDataSet;
+    
+    int aNbElem = aDataSet->GetNumberOfPoints();
+    
+    vtkIntArray *anArray = vtkIntArray::New();
+    anArray->SetNumberOfValues( aNbElem );
+    
+    for ( vtkIdType anId = 0; anId < aNbElem; anId++ )
+    {
+      int aSMDSId = GetNodeObjId( anId );
+      anArray->SetValue( anId, aSMDSId );
+    }
+    
+    aDataSet->GetPointData()->SetScalars( anArray );
+    myPtsMaskPoints->SetInput( aDataSet );
+    myPointLabels->SetVisibility( GetVisibility() );
+    anArray->Delete();
+  }
+  else
+  {
+    myPointLabels->SetVisibility( false );
+  } 
+}
+
+
+void SMESH_NodeLabelActor::SetVisibility(int theMode)
+{
+  SMESH_DeviceActor::SetVisibility(theMode);
+  myPointLabels->VisibilityOff();
+  if(myIsPointsLabeled && theMode)
+    myPointLabels->VisibilityOn();
+}
+
+
+void SMESH_NodeLabelActor::AddToRender(vtkRenderer* theRenderer)
+{
+  SMESH_DeviceActor::AddToRender(theRenderer);
+  myPtsSelectVisiblePoints->SetRenderer(theRenderer);
+  theRenderer->AddActor2D(myPointLabels);
+}
+
+void SMESH_NodeLabelActor::RemoveFromRender(vtkRenderer* theRenderer)
+{
+  theRenderer->RemoveActor(myPointLabels);
+  SMESH_DeviceActor::RemoveFromRender(theRenderer);
+}
+
+void SMESH_NodeLabelActor::UpdateLabels() {
+  if(myIsPointsLabeled)
+    SetPointsLabeled(myIsPointsLabeled);
+}
+
+
+void SMESH_NodeLabelActor::ProcessEvents(vtkObject* vtkNotUsed(theObject),
+                                        unsigned long theEvent,
+                                        void* theClientData,
+                                        void* vtkNotUsed(theCallData)) {
+  SMESH_NodeLabelActor* self = reinterpret_cast<SMESH_NodeLabelActor*>(theClientData);    
+  if(self)
+    self->UpdateLabels();
+}
diff --git a/src/OBJECT/SMESH_NodeLabelActor.h b/src/OBJECT/SMESH_NodeLabelActor.h
new file mode 100644 (file)
index 0000000..0a9ffaa
--- /dev/null
@@ -0,0 +1,78 @@
+// Copyright (C) 2007-2011  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
+//
+// 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   : SMESH_NodeLabelActor.h
+//  Author : Roman NIKOLAEV
+//  Module : SMESH
+//
+#ifndef SMESH_NODE_LABEL_ACTOR_H
+#define SMESH_NODE_LABEL_ACTOR_H
+
+#include "SMESH_DeviceActor.h"
+
+class vtkSelectVisiblePoints;
+class vtkLabeledDataMapper;
+class vtkActor2D;
+class vtkMaskPoints;
+class vtkPolyData;
+
+
+class SMESHOBJECT_EXPORT SMESH_NodeLabelActor : public SMESH_DeviceActor {
+public:
+  static SMESH_NodeLabelActor* New();
+
+  static void ProcessEvents(vtkObject* theObject,
+                           unsigned long theEvent,
+                           void* theClientData,
+                           void* theCallData);
+
+
+  vtkTypeMacro(SMESH_NodeLabelActor, SMESH_DeviceActor);
+
+
+  virtual void SetPointsLabeled(bool theIsPointsLabeled);
+  virtual bool GetPointsLabeled(){ return myIsPointsLabeled;}  
+
+  virtual void SetVisibility(int theMode);  
+
+  virtual void AddToRender(vtkRenderer* theRenderer); 
+  virtual void RemoveFromRender(vtkRenderer* theRenderer);
+
+  void UpdateLabels();
+  
+protected:
+  SMESH_NodeLabelActor();
+  ~SMESH_NodeLabelActor();
+  
+  bool myIsPointsLabeled;
+  vtkPolyData* myPointsNumDataSet;
+  vtkActor2D *myPointLabels;
+  vtkMaskPoints* myPtsMaskPoints;
+  vtkLabeledDataMapper* myPtsLabeledDataMapper;
+  vtkSelectVisiblePoints* myPtsSelectVisiblePoints;
+
+protected:
+  // Not implemented.
+  SMESH_NodeLabelActor(const SMESH_NodeLabelActor&);
+  void operator=(const SMESH_NodeLabelActor&);
+};
+
+#endif //SMESH_NODE_LABEL_ACTOR_H