[vtk-developers] SetInput fails?

Tim Peeters thjmpeeters at gmail.com
Mon May 31 06:04:43 EDT 2010


Yes, I debugged vtkAlgorithm::SetInputConnection(..) in MSVC 2008 Express.

I do not fully understand what happens with the executives etc, but
everything seems to go fine.

All variables (producer, consumer, newInfo) get a value, and the
function returns in the end after this->Modified() is called.
producerPort and consumerPort are set to 0.

After setting the input, I call vtkAlgorithm::GetInputConnection(0,0).
Inside this function, the info object gets a value, but after the call
of vtkExecutive::PRODUCER()->Get(info, producer, producerPort), the
producer variable holds the value NULL.



As I said, I do not fully understand what happens with the executives.
Does each filter have exactly one executive, and this executive should
not change? And the executive contains links to the input and output
ports of the filter?


Thanks,
Tim.

On Sun, May 30, 2010 at 21:47, Berk Geveci <berk.geveci at kitware.com> wrote:
> Can you step through void vtkAlgorithm::SetInputConnection(int port,
> vtkAlgorithmOutput* input) in a debugger?
>
> On Sun, May 30, 2010 at 1:57 PM, Tim Peeters <thjmpeeters at gmail.com> wrote:
>> filter->GetInputConnection(0, 0) also returns NULL.
>>
>> Even after calling filter->SetInputConnection(0,
>> dti->GetProducerPort()); it returns NULL. SetInput and
>> SetInputConnection functions seem to have the same effect. After
>> calling one of these, filter->GetTotalNumberOfInputConnections() and
>> filter->GetNumberOfInputConnections(0) both return 1, but GetInput()
>> and GetInputConnection() both return NULL.
>>
>>
>> Each of the plug-ins is loaded from its own DLL. I had problems with
>> this before when I defined a singleton (static global) Core object
>> because on Mac and Windows (MSVC), each of the libraries had their own
>> Core object, while on Linux (gcc) there was one Core object for all
>> DLL's. I fixed that problem by passing the Core object to each of the
>> plug-ins when they are loaded instead of making it global. This solved
>> the problems there, but maybe this new problem is somehow related.
>> Again on Linux everything works perfectly, but on Mac and Windows I
>> have problems. I was checking VTK for possible use of global variables
>> that do not work across multiple DLL's, but I couldn't find any. Also,
>> I cannot find out where exactly in the GetInputConnection function it
>> goes wrong.
>>
>>
>> Tim.
>>
>> On Sun, May 30, 2010 at 19:30, Berk Geveci <berk.geveci at kitware.com> wrote:
>>> What does filter->GetInputConnection(0, 0) return?
>>>
>>> -berk
>>>
>>> On Sat, May 29, 2010 at 9:31 PM, Tim Peeters <thjmpeeters at gmail.com> wrote:
>>>> Hi all,
>>>>
>>>> To make it a bit more clear, I wrote a test plug-in with the following function:
>>>>
>>>> void VTKPipelineTestPlugin::dataSetAdded(data::DataSet* ds)
>>>> {
>>>>        if (ds->getKind() != "DTI") return;
>>>>
>>>>        vtkImageData* dti = ds->getVtkImageData();
>>>>        Q_ASSERT(dti);
>>>>
>>>>        QString basename = ds->getName();
>>>>        qDebug()<<"Dataset"<<ds<<"with name"<<basename<<"and
>>>> kind"<<ds->getKind()<<"seems usable.";
>>>>
>>>>        vtkSimpleImageFilterExample* filter = vtkSimpleImageFilterExample::New();
>>>>        qDebug()<<"setting intput to"<<dti;
>>>>        filter->SetInput(dti);
>>>>        qDebug()<<"input is"<<filter->GetInput();
>>>> }
>>>>
>>>> when I run the software, and this function is executed, the output is
>>>> as follows:
>>>>
>>>> Dataset 0x101db9ed0 with name "1" and kind "DTI" seems usable.
>>>> setting intput to 0x11aa5a8f0
>>>> input is 0x0
>>>>
>>>> What can be wrong here? Where can I look to find out why Set or
>>>> GetInput() fails?
>>>>
>>>> Thanks,
>>>> Tim.
>>>>
>>>> On Fri, May 28, 2010 at 20:53, Tim Peeters <thjmpeeters at gmail.com> wrote:
>>>>> Dear developers,
>>>>>
>>>>> I am developing a VTK-based application that uses a plug-in system to
>>>>> add functionality to the core system.
>>>>> I am loading plug-ins (which are loaded as DLL's on Windows) using the
>>>>> Qt plugin system.
>>>>>
>>>>> The following code, in one of the plugins, fails:
>>>>>
>>>>> vtkTensorToEigensystemFilter* eigen = vtkTensorToEigensystemFilter::New();
>>>>> // dti is a valid vtkImageData object
>>>>> eigen->SetInput(dti);
>>>>> vtkImageData* eigenOut = eigen->GetOutput();
>>>>> // eigenOut == NULL
>>>>>
>>>>>
>>>>> vtkTensorToEigensystemFilter is a subclass of
>>>>> vtkSimpleImageToImageFilter which basically only implements the
>>>>> SimpleExecute() function and thus does not change the {Get,Set}Input()
>>>>> function(s). Since eigenOut == NULL, I assume that SetInput or
>>>>> GetOutput() fails, and I have been debugging but I get lost in the VTK
>>>>> pipeline and I cannot trace back the error. In a different place I use
>>>>> vtkExtractVOI in a similar way as vtkTensorToEigenSystemFilter, and I
>>>>> get the same problem.
>>>>>
>>>>> dti is a vtkImageData that is constructed in a different plugin and is
>>>>> the output of a reader. All the functions used to work in one "big"
>>>>> application that did not use plugins, but now it fails in MSVC2008
>>>>> express on Windows. I usually do my development on Linux (Ubuntu and
>>>>> Slackware), and with GCC on Linux everything works fine. On Windows,
>>>>> different parts of the pipeline are built in different dll's
>>>>> (plugins), but the image data (dti) and its producer port seem to be
>>>>> consistent in the plugin that creates the dti dataset and the plugin
>>>>> that uses it.
>>>>>
>>>>> Does anyone have any clues how I can track where this problem comes from?
>>>>>
>>>>> Thanks a lot!
>>>>> Tim.
>>>>>
>>>> _______________________________________________
>>>> Powered by www.kitware.com
>>>>
>>>> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>>>>
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://www.vtk.org/mailman/listinfo/vtk-developers
>>>>
>>>>
>>>
>>
>



More information about the vtk-developers mailing list