bug in pqPipelineFilter

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

bug in pqPipelineFilter

Maxim Torgonskiy
Hello,

It seems that there's a bug in pqPipelineFilter::getInputPortName(int). I have a vtk filter which has 3 inputs and when I try to access the inputs with pqPipelineFilter the function getInputPortName doesn't respect their order:

.xml :
<?xml version="1.0"?>
<ServerManagerConfiguration>
  <ProxyGroup name="filters">
    <SourceProxy class="Dummy" name="Dummy">
      <InputProperty
        name="Zero"
        port_index="0"
        command="SetInputConnection">
        <ProxyGroupDomain name="groups">
          <Group name="sources"/>
          <Group name="filters"/>
        </ProxyGroupDomain>
        <DataTypeDomain name="input_type">
          <DataType value="vtkPolyData"/>
        </DataTypeDomain>
      </InputProperty>
      <InputProperty
        name="One"
        port_index="1"
        optional="1"
        command="SetInputConnection">
        <ProxyGroupDomain name="groups">
          <Group name="sources"/>
          <Group name="filters"/>
        </ProxyGroupDomain>
        <DataTypeDomain name="input_type">
          <DataType value="vtkPointSet"/>
        </DataTypeDomain>
      </InputProperty>
      <InputProperty
        name="Two"
        port_index="2"
        optional="1"
        command="SetInputConnection">
        <ProxyGroupDomain name="groups">
          <Group name="sources"/>
          <Group name="filters"/>
        </ProxyGroupDomain>
        <DataTypeDomain name="input_type">
          <DataType value="vtkPolyData"/>
        </DataTypeDomain>
      </InputProperty>
    </SourceProxy>
  </ProxyGroup>
</ServerManagerConfiguration>

.cxx :
int Dummy::RequestData(
  vtkInformation *vtkNotUsed(info),
  vtkInformationVector **inputVector,
  vtkInformationVector *outputVector)
{
  pqPipelineFilter* self_pqfilter = qobject_cast<pqPipelineFilter*>(pqActiveObjects::instance().activeSource());
  Q_ASSERT(self_pqfilter);

  for(int i = 0; i < GetNumberOfInputPorts(); ++i)
    qDebug() << self_pqfilter->getInputPortName(i);

  return 1;
}

output :
"One"
"Two"
"Zero"


A minimal reproducible example is attached.
 
Regards,
Maxim


_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Search the list archives at: http://markmail.org/search/?q=Paraview-developers

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/paraview-developers

Dummy.zip (3K) Download Attachment
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: bug in pqPipelineFilter

Utkarsh Ayachit
There's was never meant to be any order matching between the VTK port numbers and input ports provided by pqPipelineFilter. The latter indeed used a map internally using the property  name as the key for the map (hence the change in order).

If there's a convincing reason to preserve it, we can surely fix it, however.

Utkarsh

On Wed, Aug 2, 2017 at 4:08 PM, Maxim Torgonskiy <[hidden email]> wrote:
Hello,

It seems that there's a bug in pqPipelineFilter::getInputPortName(int). I have a vtk filter which has 3 inputs and when I try to access the inputs with pqPipelineFilter the function getInputPortName doesn't respect their order:

.xml :
<?xml version="1.0"?>
<ServerManagerConfiguration>
  <ProxyGroup name="filters">
    <SourceProxy class="Dummy" name="Dummy">
      <InputProperty
        name="Zero"
        port_index="0"
        command="SetInputConnection">
        <ProxyGroupDomain name="groups">
          <Group name="sources"/>
          <Group name="filters"/>
        </ProxyGroupDomain>
        <DataTypeDomain name="input_type">
          <DataType value="vtkPolyData"/>
        </DataTypeDomain>
      </InputProperty>
      <InputProperty
        name="One"
        port_index="1"
        optional="1"
        command="SetInputConnection">
        <ProxyGroupDomain name="groups">
          <Group name="sources"/>
          <Group name="filters"/>
        </ProxyGroupDomain>
        <DataTypeDomain name="input_type">
          <DataType value="vtkPointSet"/>
        </DataTypeDomain>
      </InputProperty>
      <InputProperty
        name="Two"
        port_index="2"
        optional="1"
        command="SetInputConnection">
        <ProxyGroupDomain name="groups">
          <Group name="sources"/>
          <Group name="filters"/>
        </ProxyGroupDomain>
        <DataTypeDomain name="input_type">
          <DataType value="vtkPolyData"/>
        </DataTypeDomain>
      </InputProperty>
    </SourceProxy>
  </ProxyGroup>
</ServerManagerConfiguration>

.cxx :
int Dummy::RequestData(
  vtkInformation *vtkNotUsed(info),
  vtkInformationVector **inputVector,
  vtkInformationVector *outputVector)
{
  pqPipelineFilter* self_pqfilter = qobject_cast<pqPipelineFilter*>(pqActiveObjects::instance().activeSource());
  Q_ASSERT(self_pqfilter);

  for(int i = 0; i < GetNumberOfInputPorts(); ++i)
    qDebug() << self_pqfilter->getInputPortName(i);

  return 1;
}

output :
"One"
"Two"
"Zero"


A minimal reproducible example is attached.
 
Regards,
Maxim


_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Search the list archives at: http://markmail.org/search/?q=Paraview-developers

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/paraview-developers



_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Search the list archives at: http://markmail.org/search/?q=Paraview-developers

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/paraview-developers
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: bug in pqPipelineFilter

Maxim Torgonskiy
Sounds convincing, I'll switch to named access. Thank you for the clarification!

Le 3 août 2017 11:14, "Utkarsh Ayachit" <[hidden email]> a écrit :
While the mismatch may be confusing, ParaView deliberately opted for "named" access to the inputs since the proxy mechanism does provide ability to hide/ignore/change input ports. For example, proxy may not even have input properties for all input ports if some of them are optional.

On Wed, Aug 2, 2017 at 6:19 PM, Maxim Torgonskiy <[hidden email]> wrote:
Ok, I see. I just supposed that the order of ports is the same. Before, in my paraview plugin I used everywhere access by index (for both VTK and pqPipeline* parts) and now I should mix it with access by input name which is less consistent.

Thanks,
Maxim



2017-08-02 17:39 GMT-04:00 Utkarsh Ayachit <[hidden email]>:
There's was never meant to be any order matching between the VTK port numbers and input ports provided by pqPipelineFilter. The latter indeed used a map internally using the property  name as the key for the map (hence the change in order).

If there's a convincing reason to preserve it, we can surely fix it, however.

Utkarsh

On Wed, Aug 2, 2017 at 4:08 PM, Maxim Torgonskiy <[hidden email]> wrote:
Hello,

It seems that there's a bug in pqPipelineFilter::getInputPortName(int). I have a vtk filter which has 3 inputs and when I try to access the inputs with pqPipelineFilter the function getInputPortName doesn't respect their order:

.xml :
<?xml version="1.0"?>
<ServerManagerConfiguration>
  <ProxyGroup name="filters">
    <SourceProxy class="Dummy" name="Dummy">
      <InputProperty
        name="Zero"
        port_index="0"
        command="SetInputConnection">
        <ProxyGroupDomain name="groups">
          <Group name="sources"/>
          <Group name="filters"/>
        </ProxyGroupDomain>
        <DataTypeDomain name="input_type">
          <DataType value="vtkPolyData"/>
        </DataTypeDomain>
      </InputProperty>
      <InputProperty
        name="One"
        port_index="1"
        optional="1"
        command="SetInputConnection">
        <ProxyGroupDomain name="groups">
          <Group name="sources"/>
          <Group name="filters"/>
        </ProxyGroupDomain>
        <DataTypeDomain name="input_type">
          <DataType value="vtkPointSet"/>
        </DataTypeDomain>
      </InputProperty>
      <InputProperty
        name="Two"
        port_index="2"
        optional="1"
        command="SetInputConnection">
        <ProxyGroupDomain name="groups">
          <Group name="sources"/>
          <Group name="filters"/>
        </ProxyGroupDomain>
        <DataTypeDomain name="input_type">
          <DataType value="vtkPolyData"/>
        </DataTypeDomain>
      </InputProperty>
    </SourceProxy>
  </ProxyGroup>
</ServerManagerConfiguration>

.cxx :
int Dummy::RequestData(
  vtkInformation *vtkNotUsed(info),
  vtkInformationVector **inputVector,
  vtkInformationVector *outputVector)
{
  pqPipelineFilter* self_pqfilter = qobject_cast<pqPipelineFilter*>(pqActiveObjects::instance().activeSource());
  Q_ASSERT(self_pqfilter);

  for(int i = 0; i < GetNumberOfInputPorts(); ++i)
    qDebug() << self_pqfilter->getInputPortName(i);

  return 1;
}

output :
"One"
"Two"
"Zero"


A minimal reproducible example is attached.
 
Regards,
Maxim


_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Search the list archives at: http://markmail.org/search/?q=Paraview-developers

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/paraview-developers






_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Search the list archives at: http://markmail.org/search/?q=Paraview-developers

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/paraview-developers
Loading...