[vtk-developers] SetInput fails?

Tim Peeters thjmpeeters at gmail.com
Mon May 31 10:12:32 EDT 2010


They are the same.

On Mon, May 31, 2010 at 16:06, Berk Geveci <berk.geveci at kitware.com> wrote:
> 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