Salome HOME
IMP 0017328: min and max scalar map of results given at gauss points. A fix for the...
[modules/visu.git] / src / PIPELINE / VISU_IsoSurfacesPL.cxx
index 7462ff51024f04e81bda3dc35be7ae4dbf4a932d..25abb517505a28ff7e1a674122215c8cb4d34300 100644 (file)
@@ -1,6 +1,6 @@
-//  VISU OBJECT : interactive object for VISU entities implementation
+//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
 //
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  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
 //  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
-//
-//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+//  VISU OBJECT : interactive object for VISU entities implementation
 // File:    VISU_PipeLine.cxx
 // Author:  Alexey PETROV
 // Module : VISU
-
-
+//
 #include "VISU_IsoSurfacesPL.hxx"
+#include "VISU_LookupTable.hxx"
+
 #include "VISU_PipeLineUtils.hxx"
+#include "VISU_LabelPointsFilter.hxx"
 
 #include <vtkContourFilter.h>
 
+
+
+//----------------------------------------------------------------------------
 vtkStandardNewMacro(VISU_IsoSurfacesPL);
 
-VISU_IsoSurfacesPL::VISU_IsoSurfacesPL(){
+
+//----------------------------------------------------------------------------
+VISU_IsoSurfacesPL
+::VISU_IsoSurfacesPL()
+{
+  SetIsShrinkable(false);
+  SetIsFeatureEdgesAllowed(false);
+
+  SetElnoDisassembleState( true );
+
   myContourFilter = vtkContourFilter::New();
+
   myCellDataToPointData = vtkCellDataToPointData::New();
-  myIsShrinkable = false;
 }
 
-VISU_IsoSurfacesPL::~VISU_IsoSurfacesPL(){
-  myContourFilter->UnRegisterAllOutputs();
+
+//----------------------------------------------------------------------------
+VISU_IsoSurfacesPL
+::~VISU_IsoSurfacesPL()
+{
   myContourFilter->Delete();
+  myContourFilter = NULL;
 
-  myCellDataToPointData->UnRegisterAllOutputs();
   myCellDataToPointData->Delete();
+  myCellDataToPointData = NULL;
 }
 
-void VISU_IsoSurfacesPL::ShallowCopy(VISU_PipeLine *thePipeLine){
-  VISU_ScalarMapPL::ShallowCopy(thePipeLine);
+
+//----------------------------------------------------------------------------
+unsigned long int 
+VISU_IsoSurfacesPL
+::GetMTime()
+{
+  unsigned long int aTime = Superclass::GetMTime();
+
+  aTime = std::max(aTime, myCellDataToPointData->GetMTime());
+  aTime = std::max(aTime, myContourFilter->GetMTime());
+
+  return aTime;
+}
+
+
+//----------------------------------------------------------------------------
+void
+VISU_IsoSurfacesPL
+::DoShallowCopy(VISU_PipeLine *thePipeLine,
+               bool theIsCopyInput)
+{
+  Superclass::DoShallowCopy(thePipeLine, theIsCopyInput);
+
   if(VISU_IsoSurfacesPL *aPipeLine = dynamic_cast<VISU_IsoSurfacesPL*>(thePipeLine)){
     SetNbParts(aPipeLine->GetNbParts());
-    float aRange[2] = {aPipeLine->GetMin(), aPipeLine->GetMax()};
+    vtkFloatingPointType aRange[2] = {aPipeLine->GetMin(), aPipeLine->GetMax()};
     SetRange(aRange);
   }
 }
 
-int VISU_IsoSurfacesPL::GetNbParts() {
+
+//----------------------------------------------------------------------------
+int
+VISU_IsoSurfacesPL
+::GetNbParts() 
+{
   return myContourFilter->GetNumberOfContours();
 }
-void VISU_IsoSurfacesPL::SetNbParts(int theNb) {
+
+//----------------------------------------------------------------------------
+vtkFloatingPointType
+VISU_IsoSurfacesPL
+::GetValue(int i) 
+{
+  return myContourFilter->GetValue(i);
+}
+
+
+//----------------------------------------------------------------------------
+void
+VISU_IsoSurfacesPL
+::SetNbParts(int theNb) 
+{
   myContourFilter->SetNumberOfContours(theNb);
-  Modified();
 }
 
 
-void VISU_IsoSurfacesPL::SetScaling(int theScaling) {
-  VISU_ScalarMapPL::SetScaling(theScaling);
+//----------------------------------------------------------------------------
+void
+VISU_IsoSurfacesPL
+::SetScalarRange( vtkFloatingPointType theRange[2] ) 
+{
+  Superclass::SetScalarRange( theRange );
   SetRange(myRange);
 }
-void VISU_IsoSurfacesPL::SetRange(float theRange[2]){
+
+
+//----------------------------------------------------------------------------
+void
+VISU_IsoSurfacesPL
+::SetRange(vtkFloatingPointType theRange[2])
+{
+  if(VISU::CheckIsSameRange(myRange, theRange))
+    return;
+
   if(theRange[0] <= theRange[1]){
-    myRange[0] = theRange[0];  myRange[1] = theRange[1];
-    float aRange[2] = {myRange[0], myRange[1]};
+    myRange[0] = theRange[0];  
+    myRange[1] = theRange[1];
+    vtkFloatingPointType aRange[2] = {theRange[0], theRange[1]};
     if(GetScaling() == VTK_SCALE_LOG10)
-      VISU_LookupTable::ComputeLogRange(theRange,aRange);
-    myContourFilter->GenerateValues(GetNbParts(),aRange);
-    Modified();
+      VISU_LookupTable::ComputeLogRange(theRange, aRange);
+    myContourFilter->GenerateValues(GetNbParts(), aRange);
   }
 }
-float VISU_IsoSurfacesPL::GetMin() {
+
+
+//----------------------------------------------------------------------------
+vtkFloatingPointType
+VISU_IsoSurfacesPL
+::GetMin() 
+{
   return myRange[0];
 }
-float VISU_IsoSurfacesPL::GetMax() {
+
+
+//----------------------------------------------------------------------------
+vtkFloatingPointType
+VISU_IsoSurfacesPL
+::GetMax() 
+{
   return myRange[1];
 }
 
 
-void VISU_IsoSurfacesPL::Init(){
-  VISU_ScalarMapPL::Init();
+void
+//----------------------------------------------------------------------------
+VISU_IsoSurfacesPL
+::Init()
+{
+  Superclass::Init();
 
   SetNbParts(10);
-  float aScalarRange[2];
+
+  vtkFloatingPointType aScalarRange[2];
   GetSourceRange(aScalarRange);
   SetRange(aScalarRange);
 }
 
-VISU_ScalarMapPL::THook* VISU_IsoSurfacesPL::DoHook(){
+//----------------------------------------------------------------------------
+void
+VISU_IsoSurfacesPL
+::Build()
+{
+  Superclass::Build();
+
+  VISU::CellDataToPoint(myContourFilter,
+                       myCellDataToPointData,
+                       GetMergedInput());
+
+}
+
+
+//----------------------------------------------------------------------------
+
+vtkDataSet* 
+VISU_IsoSurfacesPL
+::InsertCustomPL()
+{
   return myContourFilter->GetOutput();
 }
 
 
-void VISU_IsoSurfacesPL::Update(){
-  VISU::CellDataToPoint(myContourFilter,myCellDataToPointData,GetInput2(),myFieldTransform);
-  SetMapScale();
+//----------------------------------------------------------------------------
+unsigned long int
+VISU_IsoSurfacesPL
+::GetMemorySize()
+{
+  unsigned long int aSize = Superclass::GetMemorySize();
+
+  if(vtkDataSet* aDataSet = myContourFilter->GetOutput())
+    aSize += aDataSet->GetActualMemorySize() * 1024;
+  
+  if(myCellDataToPointData->GetInput())
+    if(vtkDataSet* aDataSet = myCellDataToPointData->GetOutput())
+      aSize += aDataSet->GetActualMemorySize() * 1024;
 
-  VISU_ScalarMapPL::Update();
+  return aSize;
 }
 
-void VISU_IsoSurfacesPL::SetMapScale(float theMapScale){
-  VISU_ScalarMapPL::SetMapScale(theMapScale);
 
-  float aRange[2] = {GetMax() - theMapScale*(GetMax()-GetMin()), GetMax()};
-  float aNewRange[2] = {aRange[0], aRange[1]};
+//----------------------------------------------------------------------------
+void
+VISU_IsoSurfacesPL
+::SetMapScale(vtkFloatingPointType theMapScale)
+{
+  Superclass::SetMapScale(theMapScale);
+
+  vtkFloatingPointType aRange[2] = {GetMax() - theMapScale*(GetMax()-GetMin()), GetMax()};
+  vtkFloatingPointType aNewRange[2] = {aRange[0], aRange[1]};
   if(GetScaling() == VTK_SCALE_LOG10)
     VISU_LookupTable::ComputeLogRange(aRange,aNewRange);
-  myContourFilter->GenerateValues(GetNbParts(),aNewRange);
-  Modified();
+  myContourFilter->GenerateValues(GetNbParts(), aNewRange);
 }
+
+
+//----------------------------------------------------------------------------