[vtk-developers] SetInput fails?

Berk Geveci berk.geveci at kitware.com
Mon May 31 10:06:13 EDT 2010


Can you compare the value of the input information in
GetInputConnection (the info variable) with this:

dti->GetProducerPort()->GetProducer()->GetExecutive()->GetOutputInformation(0)

-berk


On Mon, May 31, 2010 at 9:54 AM, Tim Peeters <thjmpeeters at gmail.com> wrote:
> I execute filter->GetExecutive() before setting input, after setting
> input, and after getting input. The address is always the same so the
> executive of the filter does not change.
>
> Tim.
>
>
> On Mon, May 31, 2010 at 15:44, Berk Geveci <berk.geveci at kitware.com> wrote:
>>> 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?
>>
>> Once the executive is set, it should not change. If it does, the input
>> connections and the output would be wiped. Yes, the executive contains
>> the input connections and the output information.
>>
>> Can you check if the executive changes?
>>
>> -berk
>>
>>
>> On Mon, May 31, 2010 at 6:04 AM, 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