[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