[Paraview-developers] Filter Plugin (update plugin data)

Frank TT frank.tt at einseinself.org
Thu Oct 2 09:45:29 EDT 2014


On 2014-10-02 14:24, Utkarsh Ayachit wrote:
> 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();
>     }
> }

Thx. It's working.






> 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