X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPIPELINE%2FVISU_IsoSurfacesPL.cxx;h=99ee33f086614c320d77a84d8ddb8fa838c57cb7;hb=1f9d5836e71aac9c59192e955e63465940ef7a6f;hp=2d0be6cc83452081ab4c9762f4c50bee04728b05;hpb=e967b0415406f4f86ca2c9489abc8554b4c15dae;p=modules%2Fvisu.git diff --git a/src/PIPELINE/VISU_IsoSurfacesPL.cxx b/src/PIPELINE/VISU_IsoSurfacesPL.cxx index 2d0be6cc..99ee33f0 100644 --- a/src/PIPELINE/VISU_IsoSurfacesPL.cxx +++ b/src/PIPELINE/VISU_IsoSurfacesPL.cxx @@ -1,6 +1,6 @@ -// 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 @@ -17,88 +17,148 @@ // 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 -// -// +// 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 +#define GAP_COEFFICIENT 0.0001 + + +//---------------------------------------------------------------------------- vtkStandardNewMacro(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(); myContourFilter->Delete(); + myContourFilter = NULL; - myCellDataToPointData->UnRegisterAllOutputs(); myCellDataToPointData->Delete(); + myCellDataToPointData = NULL; +} + + +//---------------------------------------------------------------------------- +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 -::ShallowCopy(VISU_PipeLine *thePipeLine) +::DoShallowCopy(VISU_PipeLine *thePipeLine, + bool theIsCopyInput) { + Superclass::DoShallowCopy(thePipeLine, theIsCopyInput); + if(VISU_IsoSurfacesPL *aPipeLine = dynamic_cast(thePipeLine)){ SetNbParts(aPipeLine->GetNbParts()); vtkFloatingPointType aRange[2] = {aPipeLine->GetMin(), aPipeLine->GetMax()}; SetRange(aRange); + SetRangeFixed(aPipeLine->IsRangeFixed()); } - VISU_ScalarMapPL::ShallowCopy(thePipeLine); } + +//---------------------------------------------------------------------------- int VISU_IsoSurfacesPL ::GetNbParts() { return myContourFilter->GetNumberOfContours(); } + +//---------------------------------------------------------------------------- +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) +::SetScalarRange( vtkFloatingPointType theRange[2] ) { - VISU_ScalarMapPL::SetScaling(theScaling); + Superclass::SetScalarRange( theRange ); SetRange(myRange); } + + +//---------------------------------------------------------------------------- void VISU_IsoSurfacesPL -::SetRange(vtkFloatingPointType theRange[2]) +::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]; - vtkFloatingPointType 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); } } + +//---------------------------------------------------------------------------- vtkFloatingPointType VISU_IsoSurfacesPL ::GetMin() @@ -106,6 +166,8 @@ VISU_IsoSurfacesPL return myRange[0]; } + +//---------------------------------------------------------------------------- vtkFloatingPointType VISU_IsoSurfacesPL ::GetMax() @@ -114,44 +176,101 @@ VISU_IsoSurfacesPL } +//---------------------------------------------------------------------------- void VISU_IsoSurfacesPL +::SetRangeFixed(bool theIsFixed) +{ + myIsRangeFixed = theIsFixed; + SetRange( myRange, true ); +} + + +//---------------------------------------------------------------------------- +bool +VISU_IsoSurfacesPL +::IsRangeFixed() +{ + return myIsRangeFixed; +} + + +void +//---------------------------------------------------------------------------- +VISU_IsoSurfacesPL ::Init() { - VISU_ScalarMapPL::Init(); + Superclass::Init(); SetNbParts(10); + vtkFloatingPointType aScalarRange[2]; GetSourceRange(aScalarRange); SetRange(aScalarRange); + + SetRangeFixed(true); } -VISU_ScalarMapPL::THook* +//---------------------------------------------------------------------------- +void +VISU_IsoSurfacesPL +::Build() +{ + Superclass::Build(); + + VISU::CellDataToPoint(myContourFilter, + myCellDataToPointData, + GetMergedInput()); + +} + + +//---------------------------------------------------------------------------- + +vtkDataSet* VISU_IsoSurfacesPL -::DoHook() +::InsertCustomPL() { - VISU::CellDataToPoint(myContourFilter,myCellDataToPointData,GetInput2(),myFieldTransform); return myContourFilter->GetOutput(); } -void +//---------------------------------------------------------------------------- +unsigned long int VISU_IsoSurfacesPL -::Update() +::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(vtkFloatingPointType theMapScale) { - VISU_ScalarMapPL::SetMapScale(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); } + + +//----------------------------------------------------------------------------