[Paraview-developers] Filter Plugin
Utkarsh Ayachit
utkarsh.ayachit at kitware.com
Thu Oct 2 08:24:32 EDT 2014
You need to call Modified() any time properties on the
vtkAlogirthm-subclass change to trigger execution.
void marchingCubes::setIsoValue(double value)
{
if (isoValue != value)
{
isoValue = value;
this->updateMarchingData();
this->Modified();
}
}
On Thu, Oct 2, 2014 at 8:22 AM, Frank TT <frank.tt at einseinself.org> wrote:
> On 2014-09-29 14:37, Utkarsh Ayachit wrote:
>>
>> Frank,
>>
>> ParaView is based on VTK, and relies on VTK to provide the execution
>> model and data model. Thus, when writing you a new data processing
>> filter, you're basically going to wrote a VTK filter. The ParaView
>> plugin infrastructure comes into play to make such a VTK filter
>> available/accessible in ParaView.
>>
>> I'd suggesting starting with a existing VTK filter that closely
>> matches what you're doing e.g. vtkMarchingCubes [1].
>>
>> [1] http://www.vtk.org/doc/nightly/html/classvtkImageMarchingCubes.html
>
>
> Thx, the plugin is working, in basic. I have a problem to update the iso
> surface, when the iso value was changed by user. vtkPolyData has no Update()
> function.
> How can I do an update on outputData?
>
> Greetings,
>
> Frank
>
>
>
>
> ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ###
> //marchingCubes.cxx
>
> #include <iostream>
>
> #include "vtkObjectFactory.h"
> #include "vtkInformation.h"
> #include "vtkInformationVector.h"
> #include "vtkSmartPointer.h"
> #include "vtkDemandDrivenPipeline.h"
> #include "vtkImageData.h"
> #include "vtkPolyData.h"
>
> #include "marchingCubes.h"
>
> vtkStandardNewMacro(marchingCubes);
>
> //----------------------------------------------------------------------------
> marchingCubes::marchingCubes()
> {
> inputInfo = vtkSmartPointer< vtkInformation >::New();
> outputInfo = vtkSmartPointer< vtkInformation >::New();
>
> inputData = vtkSmartPointer< vtkImageData >::New();
> outputData = vtkSmartPointer< vtkPolyData >::New();
>
> marchingData = vtkSmartPointer< vtkImageMarchingCubes >::New();
>
> firstRun = true;// Will be true, while ::RequestData(…) was not running.
> (When 'Apply' was already not pressed.)
> }
>
> //----------------------------------------------------------------------------
> marchingCubes::~marchingCubes()
> {
>
> }
>
> //----------------------------------------------------------------------------
> void marchingCubes::PrintSelf(ostream& os, vtkIndent indent)
> {
> this->Superclass::PrintSelf(os,indent);
> }
>
> //----------------------------------------------------------------------------
> int marchingCubes::RequestData( vtkInformation *vtkNotUsed(request),
> vtkInformationVector **inputVector,
> vtkInformationVector *outputVector)
> {
> inputInfo = inputVector[0]->GetInformationObject(0);
> outputInfo = outputVector->GetInformationObject(0);
>
> inputData = vtkImageData::SafeDownCast( inputInfo->Get(
> vtkDataObject::DATA_OBJECT() ) );
> outputData = vtkPolyData::SafeDownCast(
> outputInfo->Get(vtkDataObject::DATA_OBJECT() ) );
>
> this->updateMarchingData();
>
> firstRun = false;
>
> return 1;
> }
>
> //----------------------------------------------------------------------------
> // From application.
> void marchingCubes::setIsoValue(double value)
> {
> isoValue = value;
> this->updateMarchingData();
> }
>
> double marchingCubes::getIsoValue()
> {
> return isoValue;
> }
>
> //----------------------------------------------------------------------------
> void marchingCubes::updateMarchingData()
> {
> //TODO: Implement all iso surface(s) creation modes by
> vtkImageMarchingCubes.
>
> if(!firstRun)
> {
> marchingData->SetValue(0, this->getIsoValue());
> marchingData->Update();
>
> //outputData = NULL;
> //outputData->Delete();
> outputData->CopyStructure(marchingData->GetOutput(0));
> }else
> {
> marchingData->SetInputData(inputData);
> marchingData->SetValue(0, this->getIsoValue());
> marchingData->Update();
>
> //outputData->SetPolys(marchingData->GetOutput()->GetPolys());//
> Does not work.
> outputData->CopyStructure(marchingData->GetOutput(0));
> }
> }
>
More information about the Paraview-developers
mailing list