1 // Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 // VISU OBJECT : interactive object for VISU entities implementation
24 // File: VISU_GaussPoints.cxx
25 // Author: Alexey PETROV
28 #include "VISU_GaussPointsPL.hxx"
29 #include "VISU_PointSpriteMapperHolder.hxx"
30 #include "VISU_OpenGLPointSpriteMapper.hxx"
31 #include "VISU_DeformedShapePL.hxx"
32 #include "VISU_FieldTransform.hxx"
33 #include "VISU_LookupTable.hxx"
35 #include "VISU_PipeLineUtils.hxx"
36 #include "VISU_AppendFilter.hxx"
37 #include "VISU_GaussMergeFilter.hxx"
39 #include <vtkPointSource.h>
40 #include <vtkElevationFilter.h>
41 #include <vtkImageGaussianSource.h>
42 #include <vtkXMLImageDataReader.h>
43 #include <vtkGeometryFilter.h>
44 #include <vtkImageData.h>
45 #include <vtkWarpVector.h>
46 #include <vtkGlyph3D.h>
47 #include <vtkSphereSource.h>
48 #include <vtkPassThroughFilter.h>
50 //----------------------------------------------------------------------------
51 vtkStandardNewMacro(VISU_GaussPointsPL);
53 //----------------------------------------------------------------------------
55 ::VISU_GaussPointsPL():
57 myMagnificationIncrement(2),
58 myAppendFilter(VISU_AppendFilter::New()),
59 myMergeFilter(VISU_GaussMergeFilter::New())
61 SetIsShrinkable(false);
62 SetIsFeatureEdgesAllowed(false);
64 myWarpVector = vtkWarpVector::New();
66 myGlyph = vtkGlyph3D::New();
67 myGlyph->SetScaleModeToScaleByScalar();
68 myGlyph->SetColorModeToColorByScalar();
69 myGlyph->ClampingOn();
71 mySphereSource = vtkSphereSource::New();
72 mySphereSource->SetThetaResolution( 8 );
73 mySphereSource->SetPhiResolution( 8 );
74 myGlyph->SetSource( mySphereSource->GetOutput() );
76 for(int i = 0; i < 3; i++)
77 myPassFilter.push_back(vtkPassThroughFilter::New());
79 myPrimitiveType = VISU_OpenGLPointSpriteMapper::PointSprite;
81 myAppendFilter->SetMergingInputs(true);
82 myAppendFilter->Delete();
84 myMergeFilter->SetMergingInputs(true);
85 myMergeFilter->Delete();
89 //----------------------------------------------------------------------------
91 ::~VISU_GaussPointsPL()
93 myWarpVector->Delete();
97 mySphereSource->Delete();
99 for(int i = 0; i < 3; i++)
100 myPassFilter[i]->Delete();
104 //----------------------------------------------------------------------------
109 unsigned long int aTime = Superclass::GetMTime();
111 aTime = std::max(aTime, myWarpVector->GetMTime());
112 aTime = std::max(aTime, myGlyph->GetMTime());
113 aTime = std::max(aTime, mySphereSource->GetMTime());
114 aTime = std::max(aTime, myAppendFilter->GetMTime());
115 aTime = std::max(aTime, myMergeFilter->GetMTime());
117 for(int i = 0; i < 3; i++)
118 aTime = std::max(aTime, myPassFilter[i]->GetMTime());
124 //----------------------------------------------------------------------------
127 ::OnCreateMapperHolder()
129 myPointSpriteMapperHolder = VISU_PointSpriteMapperHolder::New();
130 myPointSpriteMapperHolder->Delete();
132 SetMapperHolder(myPointSpriteMapperHolder.GetPointer());
136 //----------------------------------------------------------------------------
139 ::SetGaussPtsIDMapper(const VISU::PGaussPtsIDMapper& theIDMapper)
141 GetPointSpriteMapperHolder()->SetGaussPtsIDMapper(theIDMapper);
145 //----------------------------------------------------------------------------
146 const VISU::PGaussPtsIDMapper&
148 ::GetGaussPtsIDMapper()
150 return GetPointSpriteMapperHolder()->GetGaussPtsIDMapper();
154 //----------------------------------------------------------------------------
155 VISU_PointSpriteMapperHolder*
157 ::GetPointSpriteMapperHolder()
161 return myPointSpriteMapperHolder.GetPointer();
164 //----------------------------------------------------------------------------
169 VISU::TNamedIDMapper* aNamedIDMapper = GetGaussPtsIDMapper()->GetParent();
170 return aNamedIDMapper->GetOutput();
173 //----------------------------------------------------------------------------
175 CopyGlyph( vtkGlyph3D* theSource, vtkGlyph3D* theDestination )
177 vtkFloatingPointType* aSourceRange = theSource->GetRange();
178 vtkFloatingPointType* aDestinationRange = theDestination->GetRange();
179 if(!VISU::CheckIsSameRange(aDestinationRange, aSourceRange))
180 theDestination->SetRange( aSourceRange );
182 theDestination->SetScaling( theSource->GetScaling() );
183 theDestination->SetClamping( theSource->GetClamping() );
184 theDestination->SetScaleMode( theSource->GetScaleMode() );
185 theDestination->SetColorMode( theSource->GetColorMode() );
186 theDestination->SetScaleFactor( theSource->GetScaleFactor() );
190 //----------------------------------------------------------------------------
193 ::DoShallowCopy(VISU_PipeLine *thePipeLine,
196 Superclass::DoShallowCopy(thePipeLine, theIsCopyInput);
197 VISU_MergedPL::DoShallowCopy(thePipeLine, theIsCopyInput);
199 if(VISU_GaussPointsPL *aPipeLine = dynamic_cast<VISU_GaussPointsPL*>(thePipeLine)){
200 SetPrimitiveType(aPipeLine->GetPrimitiveType());
201 SetBicolor(aPipeLine->GetBicolor());
202 SetClamp(aPipeLine->GetClamp());
203 SetSize(aPipeLine->GetSize());
204 SetMinSize(aPipeLine->GetMinSize());
205 SetMaxSize(aPipeLine->GetMaxSize());
206 SetMagnification(aPipeLine->GetMagnification());
207 SetMagnificationIncrement(aPipeLine->GetMagnificationIncrement());
208 SetAlphaThreshold(aPipeLine->GetAlphaThreshold());
209 SetResolution(aPipeLine->GetResolution());
211 SetIsDeformed( aPipeLine->GetIsDeformed() );
212 SetScale( aPipeLine->GetScale() );
214 vtkFloatingPointType aRadius = aPipeLine->mySphereSource->GetRadius();
215 if(!VISU::CheckIsSameValue(mySphereSource->GetRadius(), aRadius))
216 mySphereSource->SetRadius( aRadius );
218 CopyGlyph( aPipeLine->myGlyph, this->myGlyph );
223 //----------------------------------------------------------------------------
224 VISU_OpenGLPointSpriteMapper*
226 ::GetPointSpriteMapper()
228 return GetPointSpriteMapperHolder()->GetPointSpriteMapper();
232 //----------------------------------------------------------------------------
235 ::GetPickableDataSet()
237 return myPassFilter[1]->GetPolyDataOutput();
241 //----------------------------------------------------------------------------
248 //SetExtractInside(false);
250 vtkDataSet* aDataSet = GetParentMesh();
251 vtkFloatingPointType aScaleFactor = VISU_DeformedShapePL::GetScaleFactor( aDataSet );
253 vtkFloatingPointType* aScalarRange = GetScalarRange();
254 static double EPS = 1.0 / VTK_LARGE_FLOAT;
255 if(fabs(aScalarRange[1]) > EPS)
256 SetScale( aScaleFactor / aScalarRange[1] );
262 //----------------------------------------------------------------------------
271 vtkDataSet* aDataSet = GetFieldTransformFilter()->GetOutput();
273 myMergeFilter->SetGeometry(myAppendFilter->GetOutput());
275 myMergeFilter->SetScalars(aDataSet);
276 myMergeFilter->SetVectors(aDataSet);
278 myMergeFilter->RemoveFields();
279 myMergeFilter->AddField("VISU_FIELD", aDataSet);
280 myMergeFilter->AddField("VISU_POINTS_MAPPER", aDataSet);
281 myMergeFilter->AddField("VISU_INPUTS_MAPPER", aDataSet);
282 myMergeFilter->AddField("VISU_CELLS_MAPPER", aDataSet);
284 myMergeFilter->SetGaussPtsIDMapper(GetGaussPtsIDMapper());
286 myPassFilter[0]->SetInput(InsertCustomPL());
288 myPassFilter[1]->SetInput(myPassFilter[0]->GetOutput());
290 // Geometrical Sphere
291 myPassFilter[2]->SetInput(myPassFilter[1]->GetOutput());
293 GetPointSpriteMapper()->SetInput( myPassFilter[2]->GetPolyDataOutput() );
295 // Update according the current state
296 SetIsDeformed(GetIsDeformed());
298 SetPrimitiveType(GetPrimitiveType());
302 //----------------------------------------------------------------------------
307 if(IsExternalGeometryUsed() || GetNumberOfGeometry() > 1 ){
308 myMergeFilter->Update();
309 myPassFilter[0]->SetInput(myMergeFilter->GetOutput());
312 myPassFilter[0]->SetInput(GetFieldTransformFilter()->GetOutput());
315 SetAverageCellSize( VISU_DeformedShapePL::GetScaleFactor( GetParentMesh() ) );
319 Superclass::Update();
324 //----------------------------------------------------------------------------
329 unsigned long int aSize = Superclass::GetMemorySize();
332 if(vtkDataSet* aDataSet = myWarpVector->GetOutput())
333 aSize += aDataSet->GetActualMemorySize() * 1024;
335 if(GetPrimitiveType() == VISU_OpenGLPointSpriteMapper::GeomSphere)
336 if(vtkDataSet* aDataSet = myGlyph->GetOutput())
337 aSize += aDataSet->GetActualMemorySize() * 1024;
343 //----------------------------------------------------------------------------
348 vtkFloatingPointType* aScalarRange = GetScalarRange();
350 if( GetPointSpriteMapper()->GetPointSpriteMode() == 0 ) // Results
352 myGlyph->ClampingOn();
353 myGlyph->SetScaleModeToScaleByScalar();
354 myGlyph->SetColorModeToColorByScalar();
356 vtkFloatingPointType aScaleFactor = 0.0;
357 vtkFloatingPointType aMinSize = GetMinSize();
358 vtkFloatingPointType aMaxSize = GetMaxSize();
359 if(!VISU::CheckIsSameValue(aMaxSize, aMinSize))
360 aScaleFactor = ( aScalarRange[1] - aScalarRange[0] ) / ( aMaxSize - aMinSize );
362 vtkFloatingPointType aMinRange = aScalarRange[0] - aMinSize * aScaleFactor;
363 vtkFloatingPointType aMaxRange = aMinRange + aScaleFactor;
364 vtkFloatingPointType aRange[2] = {aMinRange, aMaxRange};
366 if(!VISU::CheckIsSameRange(myGlyph->GetRange(), aRange))
367 myGlyph->SetRange( aRange );
369 if(!VISU::CheckIsSameValue(myGlyph->GetScaleFactor(), 1.0))
370 myGlyph->SetScaleFactor( 1.0 );
372 else if( GetPointSpriteMapper()->GetPointSpriteMode() == 1 ) // Geometry
374 myGlyph->ClampingOff();
375 myGlyph->SetScaleModeToDataScalingOff();
376 myGlyph->SetColorModeToColorByScale();
378 vtkFloatingPointType aScaleFactor = GetSize();
379 if(!VISU::CheckIsSameValue(myGlyph->GetScaleFactor(), aScaleFactor))
380 myGlyph->SetScaleFactor( aScaleFactor );
382 else if( GetPointSpriteMapper()->GetPointSpriteMode() == 2 ) // Outside
384 myGlyph->ClampingOff();
385 myGlyph->SetScaleModeToDataScalingOff();
386 myGlyph->SetColorModeToColorByScalar();
388 vtkFloatingPointType aScaleFactor = GetSize();
389 if(!VISU::CheckIsSameValue(myGlyph->GetScaleFactor(), aScaleFactor))
390 myGlyph->SetScaleFactor( aScaleFactor );
393 vtkFloatingPointType aRadius = GetMagnification() * GetAverageCellSize() / 2.0;
394 if(!VISU::CheckIsSameValue(mySphereSource->GetRadius(), aRadius))
395 mySphereSource->SetRadius( aRadius );
399 //----------------------------------------------------------------------------
402 ::GetObjID(vtkIdType theID)
404 return GetGaussPtsIDMapper()->GetObjID(theID);
408 //----------------------------------------------------------------------------
411 ::SetIsDeformed( bool theIsDeformed )
414 myWarpVector->SetInput( myPassFilter[0]->GetPolyDataOutput() );
415 myPassFilter[1]->SetInput(myWarpVector->GetOutput());
417 myPassFilter[1]->SetInput(myPassFilter[0]->GetOutput());
420 //----------------------------------------------------------------------------
425 return myPassFilter[1]->GetInput() != myPassFilter[0]->GetOutput();
428 //----------------------------------------------------------------------------
431 ::SetBicolor(bool theBicolor)
433 if(GetBicolor() == theBicolor)
436 GetMapperTable()->SetBicolor( theBicolor );
437 GetBarTable()->SetBicolor( theBicolor );
440 //----------------------------------------------------------------------------
445 return GetMapperTable()->GetBicolor();
448 //----------------------------------------------------------------------------
451 ::SetIsColored(bool theIsColored)
453 GetPointSpriteMapper()->SetPointSpriteMode( theIsColored ? 0 : 1 ); // Results / Geometry
456 //----------------------------------------------------------------------------
461 return GetPointSpriteMapper()->GetPointSpriteMode() == 0;
464 //----------------------------------------------------------------------------
467 ::SetPrimitiveType(int thePrimitiveType)
469 if( thePrimitiveType == VISU_OpenGLPointSpriteMapper::GeomSphere )
471 myGlyph->SetInput( myPassFilter[1]->GetOutput() );
472 myPassFilter[2]->SetInput(myGlyph->GetOutput());
475 myPassFilter[2]->SetInput(myPassFilter[1]->GetOutput());
477 GetPointSpriteMapper()->SetPrimitiveType( thePrimitiveType );
479 myPrimitiveType = thePrimitiveType;
483 //----------------------------------------------------------------------------
488 return myPrimitiveType;
492 //----------------------------------------------------------------------------
495 ::GetMaximumSupportedSize()
497 return GetPointSpriteMapper()->GetMaximumSupportedSize();
501 //----------------------------------------------------------------------------
504 ::SetClamp(vtkFloatingPointType theClamp)
506 GetPointSpriteMapper()->SetPointSpriteClamp( theClamp );
510 //----------------------------------------------------------------------------
515 return GetPointSpriteMapper()->GetPointSpriteClamp();
518 //----------------------------------------------------------------------------
521 ::SetSize(vtkFloatingPointType theSize)
523 GetPointSpriteMapper()->SetPointSpriteSize( theSize );
527 //----------------------------------------------------------------------------
532 return GetPointSpriteMapper()->GetPointSpriteSize();
536 //----------------------------------------------------------------------------
539 ::SetMinSize(vtkFloatingPointType theMinSize)
541 GetPointSpriteMapper()->SetPointSpriteMinSize( theMinSize );
545 //----------------------------------------------------------------------------
550 return GetPointSpriteMapper()->GetPointSpriteMinSize();
554 //----------------------------------------------------------------------------
557 ::SetMaxSize(vtkFloatingPointType theMaxSize)
559 GetPointSpriteMapper()->SetPointSpriteMaxSize( theMaxSize );
563 //----------------------------------------------------------------------------
568 return GetPointSpriteMapper()->GetPointSpriteMaxSize();
572 //----------------------------------------------------------------------------
575 ::SetMagnification(vtkFloatingPointType theMagnification)
577 GetPointSpriteMapper()->SetPointSpriteMagnification( theMagnification );
581 //----------------------------------------------------------------------------
586 return GetPointSpriteMapper()->GetPointSpriteMagnification();
590 //----------------------------------------------------------------------------
593 ::SetMagnificationIncrement(vtkFloatingPointType theIncrement)
595 if(VISU::CheckIsSameValue(myMagnificationIncrement, theIncrement))
598 myMagnificationIncrement = theIncrement;
603 //----------------------------------------------------------------------------
606 ::SetAlphaThreshold(vtkFloatingPointType theAlphaThreshold)
608 GetPointSpriteMapper()->SetPointSpriteAlphaThreshold( theAlphaThreshold );
612 //----------------------------------------------------------------------------
615 ::GetAlphaThreshold()
617 return GetPointSpriteMapper()->GetPointSpriteAlphaThreshold();
621 //----------------------------------------------------------------------------
624 ::SetOpacity(vtkFloatingPointType theOpacity)
626 GetPointSpriteMapper()->SetPointSpriteOpacity( theOpacity );
630 //----------------------------------------------------------------------------
635 return GetPointSpriteMapper()->GetPointSpriteOpacity();
639 //----------------------------------------------------------------------------
642 ::SetResolution(int theResolution)
644 mySphereSource->SetThetaResolution( theResolution );
645 mySphereSource->SetPhiResolution( theResolution );
649 //----------------------------------------------------------------------------
654 return mySphereSource->GetThetaResolution();
658 //----------------------------------------------------------------------------
661 ::ChangeMagnification( bool up )
663 vtkFloatingPointType anIncrement = up ? myMagnificationIncrement : 1.0 / myMagnificationIncrement;
664 SetMagnification( GetMagnification() * anIncrement );
668 //----------------------------------------------------------------------------
671 ::GetPointSize(vtkIdType theID, vtkDataArray* theScalarArray)
673 vtkFloatingPointType aMaxSize = GetAverageCellSize() * GetMaxSize();
674 vtkFloatingPointType aMinSize = GetAverageCellSize() * GetMinSize();
675 vtkFloatingPointType aDelta = aMaxSize - aMinSize;
676 vtkFloatingPointType aVal = theScalarArray->GetTuple1(theID);
678 vtkFloatingPointType* aScalarRange = GetScalarRange();
679 vtkFloatingPointType aDeltaScalarRange = aScalarRange[1] - aScalarRange[0];
681 // to avoid FPE if the minimum is equal to maximum
682 if( aDeltaScalarRange < 1.0 / VTK_LARGE_FLOAT )
685 return aMinSize + aDelta*(aVal - aScalarRange[0]) / aDeltaScalarRange;
689 //----------------------------------------------------------------------------
694 return GetAverageCellSize() * GetMaxSize();
698 //----------------------------------------------------------------------------
701 ::GetPointSize(vtkIdType theID)
703 vtkMapper* aMapper = GetMapper();
704 vtkDataSet* aDataSet = aMapper->GetInput();
705 vtkPointData* aPointData = aDataSet->GetPointData();
706 vtkDataArray* aScalarArray = aPointData->GetScalars();
707 return GetPointSize(theID, aScalarArray);
711 //----------------------------------------------------------------------------
714 ::SetAverageCellSize(vtkFloatingPointType theAverageCellSize)
716 GetPointSpriteMapper()->SetAverageCellSize( theAverageCellSize );
720 //----------------------------------------------------------------------------
723 ::GetAverageCellSize()
725 return GetPointSpriteMapper()->GetAverageCellSize();
729 //----------------------------------------------------------------------------
732 ::SetImageData(vtkImageData* theImageData)
734 GetPointSpriteMapper()->SetImageData( theImageData );
738 //----------------------------------------------------------------------------
739 vtkSmartPointer<vtkImageData>
741 ::MakeTexture( const char* theMainTexture,
742 const char* theAlphaTexture )
744 if( !theMainTexture || !theAlphaTexture )
747 vtkXMLImageDataReader* aMainReader = vtkXMLImageDataReader::New();
748 vtkXMLImageDataReader* anAlphaReader = vtkXMLImageDataReader::New();
750 aMainReader->SetFileName( theMainTexture );
751 anAlphaReader->SetFileName( theAlphaTexture );
753 aMainReader->Update();
754 anAlphaReader->Update();
756 vtkImageData* aMainImageData = aMainReader->GetOutput();
757 vtkImageData* anAlphaImageData = anAlphaReader->GetOutput();
759 int* aMainImageSize = aMainImageData->GetDimensions();
760 int* anAlphaImageSize = anAlphaImageData->GetDimensions();
761 if(aMainImageSize[0] != anAlphaImageSize[0] || aMainImageSize[1] != anAlphaImageSize[1])
764 vtkSmartPointer<vtkImageData> aCompositeImageData = vtkImageData::New();
765 aCompositeImageData->Delete();
767 int aNbCompositeComponents = 4;
768 aCompositeImageData->SetDimensions(aMainImageSize);
769 aCompositeImageData->SetScalarTypeToUnsignedChar();
770 aCompositeImageData->SetNumberOfScalarComponents(aNbCompositeComponents);
771 aCompositeImageData->AllocateScalars();
773 unsigned char* aMainDataPtr = (unsigned char*)aMainImageData->GetScalarPointer();
774 unsigned char* anAlphaDataPtr = (unsigned char*)anAlphaImageData->GetScalarPointer();
775 unsigned char *aCompositeDataPtr = (unsigned char * )aCompositeImageData->GetScalarPointer();
777 int aNbMainComponents = aMainImageData->GetNumberOfScalarComponents();
778 int aNbAlphaComponents = anAlphaImageData->GetNumberOfScalarComponents();
779 int aCompositeSize = aMainImageSize[0] * aMainImageSize[1] * aNbCompositeComponents;
781 int aMainId = 0, anAlphaId = 0, aCompositeId = 0;
782 for(; aCompositeId < aCompositeSize;)
784 aCompositeDataPtr[aCompositeId] = aMainDataPtr[aMainId];
785 aCompositeDataPtr[aCompositeId + 1] = aMainDataPtr[aMainId + 1];
786 aCompositeDataPtr[aCompositeId + 2] = aMainDataPtr[aMainId + 2];
787 aCompositeDataPtr[aCompositeId + 3] = anAlphaDataPtr[anAlphaId];
789 aMainId += aNbMainComponents;
790 anAlphaId += aNbAlphaComponents;
791 aCompositeId += aNbCompositeComponents;
793 aMainReader->Delete();
794 anAlphaReader->Delete();
795 aCompositeImageData->Update();
797 return aCompositeImageData;
803 ::SetScale( vtkFloatingPointType theScale )
805 if(VISU::CheckIsSameValue(myWarpVector->GetScaleFactor(), theScale))
808 myWarpVector->SetScaleFactor( theScale );
809 myScaleFactor = theScale;
817 return myWarpVector->GetScaleFactor();
823 ::SetMapScale( vtkFloatingPointType theMapScale )
825 Superclass::SetMapScale( theMapScale );
827 vtkFloatingPointType aMapScale = myScaleFactor * theMapScale;
828 if(VISU::CheckIsSameValue(myWarpVector->GetScaleFactor(), aMapScale))
831 myWarpVector->SetScaleFactor( aMapScale );
836 ::SetSourceGeometry()
838 if(IsExternalGeometryUsed()){
840 myAppendFilter->AddInput(GetFieldTransformFilter()->GetOutput());
848 return GetMergedInput();
853 ::AddGeometry(vtkDataSet* theGeometry, const VISU::TName& theGeomName)
855 // Fix for issue 0020167 (like in VISU_ScalarMapPL)
856 if(!IsExternalGeometryUsed())
858 AddGeometryName(theGeomName);
859 myAppendFilter->AddInput(theGeometry);
860 return GetNumberOfGeometry();
865 ::GetGeometry(int theGeomNumber, VISU::TName& theGeomName)
867 theGeomName = GetGeometryName(theGeomNumber);
868 return vtkDataSet::SafeDownCast(myAppendFilter->GetInput(theGeomNumber));
873 ::GetNumberOfGeometry()
875 return myAppendFilter->GetNumberOfInputConnections(0);
880 ::IsExternalGeometryUsed()
882 return myAppendFilter->GetInput() != GetFieldTransformFilter()->GetOutput();
889 ClearGeometryNames();
890 myAppendFilter->RemoveAllInputs();
895 ::GetSourceRange(vtkFloatingPointType theRange[2])
897 if(!IsExternalGeometryUsed())
898 Superclass::GetSourceRange(theRange);
900 GetMergedInput()->GetScalarRange( theRange );
907 if(myMergeFilter->GetInput())
908 myMergeFilter->Update();
909 return myMergeFilter->GetOutput();