-// VISU OBJECT : interactive object for VISU entities implementation
+// Copyright (C) 2007-2010 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>
+#define GAP_COEFFICIENT 0.0001
+
+
+//----------------------------------------------------------------------------
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;
+
+ myCellDataToPointData = VISU_CellDataToPointData::New();
}
-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){
+
+//----------------------------------------------------------------------------
+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);
+ SetRangeFixed(aPipeLine->IsRangeFixed());
}
- VISU_ScalarMapPL::ShallowCopy(thePipeLine);
}
-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], bool theIsForced)
+{
+ if(VISU::CheckIsSameRange(myRange, theRange) && !theIsForced)
+ 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( IsRangeFixed() ) {
+ double aDelta = fabs( aRange[1] - aRange[0] ) * GAP_COEFFICIENT;
+ aRange[0] += aDelta;
+ aRange[1] -= aDelta;
+ }
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
+::SetRangeFixed(bool theIsFixed)
+{
+ myIsRangeFixed = theIsFixed;
+ SetRange( myRange, true );
+}
+
+
+//----------------------------------------------------------------------------
+bool
+VISU_IsoSurfacesPL
+::IsRangeFixed()
+{
+ return myIsRangeFixed;
+}
+
+
+void
+//----------------------------------------------------------------------------
+VISU_IsoSurfacesPL
+::Init()
+{
+ Superclass::Init();
SetNbParts(10);
- float aScalarRange[2];
+
+ vtkFloatingPointType aScalarRange[2];
GetSourceRange(aScalarRange);
SetRange(aScalarRange);
+
+ SetRangeFixed(true);
}
-VISU_ScalarMapPL::THook* VISU_IsoSurfacesPL::DoHook(){
- VISU::CellDataToPoint(myContourFilter,myCellDataToPointData,GetInput2(),myFieldTransform);
+//----------------------------------------------------------------------------
+void
+VISU_IsoSurfacesPL
+::Build()
+{
+ Superclass::Build();
+
+ VISU::CellDataToPoint(myContourFilter,
+ myCellDataToPointData,
+ GetMergedInput());
+
+}
+
+
+//----------------------------------------------------------------------------
+
+vtkDataSet*
+VISU_IsoSurfacesPL
+::InsertCustomPL()
+{
return myContourFilter->GetOutput();
}
-void VISU_IsoSurfacesPL::Update()
+//----------------------------------------------------------------------------
+unsigned long int
+VISU_IsoSurfacesPL
+::GetMemorySize()
{
- VISU_ScalarMapPL::Update();
+ 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;
+
+ 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( IsRangeFixed() ) {
+ double aDelta = fabs( aNewRange[1] - aNewRange[0] ) * GAP_COEFFICIENT;
+ aNewRange[0] += aDelta;
+ aNewRange[1] -= aDelta;
+ }
if(GetScaling() == VTK_SCALE_LOG10)
VISU_LookupTable::ComputeLogRange(aRange,aNewRange);
- myContourFilter->GenerateValues(GetNbParts(),aNewRange);
- Modified();
+ myContourFilter->GenerateValues(GetNbParts(), aNewRange);
}
+
+
+//----------------------------------------------------------------------------