Salome HOME
Implementation of the "0022102: EDF 1496 SMESH : Displaying of discrete elements...
[modules/smesh.git] / src / OBJECT / SMESH_DeviceActor.cxx
index dc878600a5489ec96672c7eb2892ba0496210e33..4a46932cc7f52eb89953f21da815187f584dc8b0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2013  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
@@ -228,6 +228,11 @@ SMESH_DeviceActor
     myExtractUnstructuredGrid->SetInputData(theGrid);
 
     myMergeFilter->SetGeometryConnection(myExtractUnstructuredGrid->GetOutputPort());
+    
+    //Pass diameters of the balls
+    if(myMapper->GetBallEnabled()) {
+      myMergeFilter->SetScalarsConnection(myExtractUnstructuredGrid->GetOutputPort());
+    }
 
     myExtractGeometry->SetInputConnection(myMergeFilter->GetOutputPort());
 
@@ -295,30 +300,42 @@ SMESH_DeviceActor
     vtkIdType aNbCells = aGrid->GetNumberOfCells();
     aScalars->SetNumberOfComponents(1);
     aScalars->SetNumberOfTuples(aNbCells);
+    double* range;// = aScalars->GetRange();
     
     myVisualObj->UpdateFunctor(theFunctor);
 
     using namespace SMESH::Controls;
-    if(NumericalFunctor* aNumericalFunctor = dynamic_cast<NumericalFunctor*>(theFunctor.get())){
+    if(NumericalFunctor* aNumericalFunctor = dynamic_cast<NumericalFunctor*>(theFunctor.get()))
+    {
       for(vtkIdType i = 0; i < aNbCells; i++){
         vtkIdType anId = myExtractUnstructuredGrid->GetInputId(i);
         vtkIdType anObjId = myVisualObj->GetElemObjId(anId);
         double aValue = aNumericalFunctor->GetValue(anObjId);
         aScalars->SetValue(i,aValue);
       }
-    }else if(Predicate* aPredicate = dynamic_cast<Predicate*>(theFunctor.get())){
+      range = aScalars->GetRange();
+      if ( range[1] - range[0] < ( qMax(qAbs(range[0]),qAbs(range[1])) + 1e-100 ) * 1e-6 )
+      {
+        range[1] = range[0];
+        for(vtkIdType i = 0; i < aNbCells; i++)
+          aScalars->SetValue(i,range[0]);
+      }
+    }
+    else if(Predicate* aPredicate = dynamic_cast<Predicate*>(theFunctor.get()))
+    {
       for(vtkIdType i = 0; i < aNbCells; i++){
         vtkIdType anId = myExtractUnstructuredGrid->GetInputId(i);
         vtkIdType anObjId = myVisualObj->GetElemObjId(anId);
         bool aValue = aPredicate->IsSatisfy(anObjId);
         aScalars->SetValue(i,aValue);
       }
+      range = aScalars->GetRange();
     }
 
     aDataSet->GetCellData()->SetScalars(aScalars);
     aScalars->Delete();
-        
-    theLookupTable->SetRange(aScalars->GetRange());
+
+    theLookupTable->SetRange( range );
     theLookupTable->SetNumberOfTableValues(theScalarBarActor->GetMaximumNumberOfColors());
     theLookupTable->Build();
     
@@ -923,6 +940,14 @@ void SMESH_DeviceActor::SetMarkerEnabled( bool theMarkerEnabled )
   myMapper->SetMarkerEnabled( theMarkerEnabled );
 }
 
+/*!
+ * Set point marker enabled
+ * \param theBallEnabled flag to enable/disable ball drawing
+ */
+void SMESH_DeviceActor::SetBallEnabled( bool theBallEnabled ) {
+  myMapper->SetBallEnabled( theBallEnabled );
+}
+
 /*!
  * Set standard point marker
  * \param theMarkerType type of the marker