-// 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.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 <vtkContourFilter.h>
+#define GAP_COEFFICIENT 0.0001
+
//----------------------------------------------------------------------------
vtkStandardNewMacro(VISU_IsoSurfacesPL);
::VISU_IsoSurfacesPL()
{
SetIsShrinkable(false);
+ SetIsFeatureEdgesAllowed(false);
+
+ SetElnoDisassembleState( true );
myContourFilter = vtkContourFilter::New();
- myCellDataToPointData = vtkCellDataToPointData::New();
+ myCellDataToPointData = VISU_CellDataToPointData::New();
}
void
VISU_IsoSurfacesPL
::DoShallowCopy(VISU_PipeLine *thePipeLine,
- bool theIsCopyInput)
+ bool theIsCopyInput)
{
Superclass::DoShallowCopy(thePipeLine, theIsCopyInput);
SetNbParts(aPipeLine->GetNbParts());
vtkFloatingPointType aRange[2] = {aPipeLine->GetMin(), aPipeLine->GetMax()};
SetRange(aRange);
+ SetRangeFixed(aPipeLine->IsRangeFixed());
}
}
return myContourFilter->GetNumberOfContours();
}
+//----------------------------------------------------------------------------
+vtkFloatingPointType
+VISU_IsoSurfacesPL
+::GetValue(int i)
+{
+ return myContourFilter->GetValue(i);
+}
+
//----------------------------------------------------------------------------
void
//----------------------------------------------------------------------------
void
VISU_IsoSurfacesPL
-::SetScalarRange(vtkFloatingPointType theRange[2])
+::SetScalarRange( vtkFloatingPointType theRange[2] )
{
- Superclass::SetScalarRange(theRange);
+ Superclass::SetScalarRange( theRange );
SetRange(myRange);
}
//----------------------------------------------------------------------------
void
VISU_IsoSurfacesPL
-::SetRange(vtkFloatingPointType theRange[2])
+::SetRange(vtkFloatingPointType theRange[2], bool theIsForced)
{
- if(VISU::CheckIsSameRange(myRange, theRange))
+ if(VISU::CheckIsSameRange(myRange, theRange) && !theIsForced)
return;
if(theRange[0] <= theRange[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);
}
+//----------------------------------------------------------------------------
+void
+VISU_IsoSurfacesPL
+::SetRangeFixed(bool theIsFixed)
+{
+ myIsRangeFixed = theIsFixed;
+ SetRange( myRange, true );
+}
+
+
+//----------------------------------------------------------------------------
+bool
+VISU_IsoSurfacesPL
+::IsRangeFixed()
+{
+ return myIsRangeFixed;
+}
+
+
void
//----------------------------------------------------------------------------
VISU_IsoSurfacesPL
vtkFloatingPointType aScalarRange[2];
GetSourceRange(aScalarRange);
SetRange(aScalarRange);
+
+ SetRangeFixed(true);
}
//----------------------------------------------------------------------------
Superclass::Build();
VISU::CellDataToPoint(myContourFilter,
- myCellDataToPointData,
- GetMergedInput());
+ myCellDataToPointData,
+ GetMergedInput());
+
}
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);