[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