[Paraview-developers] How to implement an identity filter ?
houssen
houssen at ipgp.fr
Tue Jul 14 17:38:15 EDT 2015
How to write an identity filter ? (1 input port, 1 output port, output
= input whatever input may be)
I need to write a custom filter. I am used to VTK "from outside"
(creating/handling vtk pipelines/scene/object from a main program) that
is basically without the need to understand all internal VTK mechanics
(except the SetInputConnection concept). I am not yet used to VTK
internal mechanics that is necessary for writing a ParaView plugin.
I need my filter to do "complex" stuffs. As I couldn't make it work, I
simplified as much as possible to obtain finally an identity filter (!)
: this is still not working. I feel I still miss something from VTK
internal mechanics.
As far as I understand, in the constructor, I need :
myFilter::myFilter () { SetNumberOfInputPorts ( 1 );
SetNumberOfOutputPorts ( 1 ); }
So then I need to implement the FillXXXPortInformation :
int myFilter::FillInputPortInformation ( int vtkNotUsed ( iPort ),
vtkInformation * ipInfo )
{
if ( ipInfo ) ipInfo -> Set ( vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE
(), "vtkDataObject" ); // Filter allowed data types
return 1;
}
int myFilter::FillOutputPortInformation ( int vtkNotUsed ( iPort ),
vtkInformation * ipInfo )
{
if ( ipInfo ) ipInfo -> Set ( vtkDataObject::DATA_TYPE_NAME (),
"vtkDataObject" ); // Output data type to be created
return 1;
}
So, now I only need to implement the ProcessRequest gateway:
int myFilter::ProcessRequest ( vtkInformation * ipRequest,
vtkInformationVector ** ipInputVector, vtkInformationVector *
opOutputVector )
{
if ( ipRequest && ipRequest -> Has (
vtkDemandDrivenPipeline::REQUEST_DATA () ) )
if ( ipInputVector && opOutputVector ) opOutputVector =
ipInputVector[0];
return Superclass::ProcessRequest ( ipRequest, ipInputVector,
opOutputVector );
}
I believed that I would be the only steps to proceed to get an identity
filter. When I use my identity filter in Paraview, I get errors like :
ERROR: In
/.../ParaView-v4.3.1-source/VTK/Common/ExecutionModel/vtkDemandDrivenPipeline.cxx,
line 810
vtkPVPostFilterExecutive : Input for connection index 0 on input port
index 0 for algorithm vtkPVPostFilter(0x16d0ec0) is of type
vtkDataObject, but a vtkPolyData is required.
Some logic is still missing here : could somebody explain me what and
why ?
Thanks,
Franck
More information about the Paraview-developers
mailing list