Salome HOME
Fix for Bug IPAL8945
[modules/visu.git] / src / PIPELINE / VISU_DeformedShapePL.cxx
index c276548df7820aa02e608f686d19ac9fd9e3f663..0b8e346208120b6f36c319bd5c9646e5b313c96f 100644 (file)
@@ -47,10 +47,10 @@ VISU_DeformedShapePL::~VISU_DeformedShapePL(){
 }
 
 void VISU_DeformedShapePL::ShallowCopy(VISU_PipeLine *thePipeLine){
-  VISU_ScalarMapPL::ShallowCopy(thePipeLine);
   if(VISU_DeformedShapePL *aPipeLine = dynamic_cast<VISU_DeformedShapePL*>(thePipeLine)){
     SetScale(aPipeLine->GetScale());
   }
+  VISU_ScalarMapPL::ShallowCopy(thePipeLine);
 }
 
 float VISU_DeformedShapePL::GetScaleFactor(vtkDataSet* theDataSet){
@@ -74,20 +74,27 @@ float VISU_DeformedShapePL::GetScaleFactor(vtkDataSet* theDataSet){
 
 
 void VISU_DeformedShapePL::SetScale(float theScale) {
-  if(myScaleFactor == theScale) return;
+  myWarpVector->SetScaleFactor(theScale);
   myScaleFactor = theScale;
-  myWarpVector->SetScaleFactor(myScaleFactor);
   Modified();
 }
 float VISU_DeformedShapePL::GetScale() {
-  return myWarpVector->GetScaleFactor();
+  return myScaleFactor;
 }
 
 void VISU_DeformedShapePL::Init(){
   VISU_ScalarMapPL::Init();
   float aScalarRange[2];
   GetSourceRange(aScalarRange);
-  SetScale(GetScaleFactor(GetInput2())/aScalarRange[1]);
+
+  vtkDataSet* aDataSet = GetInput2();
+  float aScaleFactor = VISU_DeformedShapePL::GetScaleFactor( aDataSet );
+
+  static double EPS = 1.0 / VTK_LARGE_FLOAT;
+  if(fabs(aScalarRange[1]) > EPS)
+    SetScale(aScaleFactor / aScalarRange[1]);
+  else
+    SetScale(0.0);
 }
 
 VISU_ScalarMapPL::THook* VISU_DeformedShapePL::DoHook(){