[vtk-developers] SetInput fails?

Tim Peeters thjmpeeters at gmail.com
Mon May 31 09:45:50 EDT 2010


When I go into the debugger more to see where it goes wrong, I find out that
the function vtkObjectBase*
vtkInformation::GetObjectAsBase(vtkInformationKey* key) returns 0
because in the end (val == key) fails because val is assigned the
value 0 on the line:
vtkInformationKey *val = this->Internal->Keys[hash];



On Mon, May 31, 2010 at 12:04, Tim Peeters <thjmpeeters at gmail.com> wrote:
> 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