[Paraview] Need help with UpdateExtents and RequestedExtents
Mike Jackson
mike.jackson at bluequartz.net
Sun Jul 5 14:54:31 EDT 2009
I am trying to update a previous ParaView plugin and I am running into
some trouble with the UpdateExtents and RequestedExtents. My problem
is that when my plugin runs the RequestInformation iI read from the
file to extract the origin, spacing and extent information. I then set
them into the pipeline as such:
outInfo->Set( vtkDataObject::ORIGIN(), origin, 3 );
outInfo->Set( vtkDataObject::SPACING(), this->CurrentScalingFactor, 3 );
outInfo->Set( vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT(),
this->PixelActual, 6 );
That all seems to work fine. My plugin loads up a custom gui to allow
the user to select a sub-volume to actually render as the volume is
quite large and can not be rendered in 32 bit clients or even some 64
bit clients for that matter.
So I have the Custom plugin GUI talking to my custom reader so that
values entered into the GUI are available during the RequestData()
method of my reader class. Now here is the fun:
This code:
vtkInformation* outInfo = outputVector->GetInformationObject(0);
vtkImageData* output =
vtkImageData::SafeDownCast(outInfo->Get(vtkDataObject::DATA_OBJECT()));
vtkTypeInt32 updateExtent[6];
if (outInfo->Has(vtkStreamingDemandDrivenPipeline::UPDATE_EXTENT()))
{
// Get the requested data extent.
updateExtent[0] =
(outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_EXTENT()))[0];
updateExtent[1] =
(outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_EXTENT()))[1];
updateExtent[2] =
(outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_EXTENT()))[2];
updateExtent[3] =
(outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_EXTENT()))[3];
updateExtent[4] =
(outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_EXTENT()))[4];
updateExtent[5] =
(outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_EXTENT()))[5];
}
will always return the entire volume space which I guess I can
understand as that is what I put into those values during the
RequestInformation. I was merrily just using the values that get
pushed into my class via the custom GUI text fields. These values will
differ from the UPDATE_EXTENT. I setup the output with the smaller
extents and now my "RequestData()" is executed at least twice. I have
seen this before and have no idea what I do to solve it.'
How do I tell the pipeline that the user is requesting a smaller
sub-volume? Are there some special variables I can use? or something
along those lines?
Also during the copying of the data from the file into the
vtkImageData object I get any number of errors:
Warning: In /Users/Shared/OpenSource/vtk-5.4.2/Filtering/vtkDataSet.cxx,
line 414
vtkImageData (0x353d380): Point array RoboMet Voxels with 1
components, has 0 tuples but there are only -208926896 points
Here are some stats about what I am trying to produce:
MicronVOI: 46979.1 47526.7 48347.6 49080.1 492 495.2
MicronActual: 46979.1 48525.1 48347.6 50078.9 490 510
Requested Extent: 0 7440 0 8330 490 510
PixelActual: 0 7440 0 8330 490 510
PixelVOI: 0 2631 0 3520 0 3
dims: 2632 3521 4
All that seems correct and the data seems to copy from the file into
the array but then I get the error above and ParaView will just crash.
This is all with PV CVS, OS X intel 10.5.7, Xcode 3.1.3 tooling, cmake
2.6.4 and GCC 4.2 compiler.
Any help is appreciated.
Mike Jackson
BlueQuartz Software | www.bluequartz.net
More information about the ParaView
mailing list