[vtkusers] Re: ReleaseDataFlagOn in VTK 5.0

Stefanie Nowak stefanie.nowak at igd.fraunhofer.de
Thu Mar 16 12:00:19 EST 2006


Hi Goodwin,

thanks a lot for help.
It is working with  filter->GetOutput()->SetGlobalReleaseDataFlag(1)
I am using the new pipeline with SetInputConnection() and GetOutputPort().

I thought that the ReleaseDatFlagOn() belongs to the old pipeline 
because of these lines
in class vtkAlgorithm.h and because it is not working in our application 
with the new pipeline mechanism:


//======================================================================
00285   //The following block of code is to support old style VTK applications. If
00286   //you are using these calls there are better ways to do it in the new
00287   //pipeline
00288   //======================================================================
00289   
00291 
00292   virtual void SetReleaseDataFlag(int);
00293   virtual int GetReleaseDataFlag();
00294   void ReleaseDataFlagOn();
00295   void ReleaseDataFlagOff();
00297 
00298   //========================================================================

Stefanie




Goodwin Lawlor wrote:
> Stefanie Nowak wrote:
>> Hallo,
>>
>> we recently updated our program from VTK 4.4 to VTK 5.0 and have some 
>> problems with the new pipeline mechanism.
>> In class vtkAlgorithm it is described that the methods 
>> ReleaseDataFlagOn() and ReleaseDataFlagOff() belong to the old pipeline.
>> How is it possible to release memory in the new pipeline?
>>
>> Thanks a lot for help,
>> Stefanie
>
> Hi Stefanie,
>
> I can't find where in the (5.0) documentation is says that 
> ReleaseDataFlagOn() belongs to the old pipeline. It just says that 
> vtkAlgorithm::ReleaseDataFlagOn is now a convenience routine. It is 
> equivalent to:
>
> vtkAlgorithm::GetExective()->GetOutputInformation(port)->Set(RELEASE_DATA(), 
> 1)
>
> for each of the filter's output ports.
>
> vtkAlgorithm::GetExective()->SetReleaseDataFlag(port, 1)
>
> does the same thing.
>
> Looking at the source code (vtkDemandDrivenPipeline::ExecuteDataEnd) 
> it looks like the input port information is checked for the 
> RELEASE_DATA() flag (not the output port info which the above methods 
> set) when deciding whether or not to release data (the 
> GlobalReleaseDataFlag is checked too).
>
> So you could try:
>
> vtkDemandDrivenPipeline* ddp =
>      vtkDemandDrivenPipeline::SafeDownCast(filter->GetExecutive());
> ddp->GetInputInformation(port)->Set(RELEASE_DATA(),1);
>
> or
>
> filter->GetOutput()->SetGlobalReleaseDataFlag(1);
>
>
> It seems that info gets copied between output and input ports when 
> they are connected... but only when the 
> filter2->SetInputConnection(filter1->GetOutputPort()) methods are 
> used. Are you still using the old 
> filter2->SetInput(filter1->GetOutput())? This could be the problem...
>
>
> hth
>
> Goodwin
>
>
> _______________________________________________
> This is the private VTK discussion list. Please keep messages 
> on-topic. Check the FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers




More information about the vtkusers mailing list