The problem is down in a generated file on the server side.

if (!strcmp("GetNeighborList",method) && msg.GetNumberOfArguments(0) == 3)
    {
    vtkClientServerStreamDataArg<int    > temp0(msg, 0, 2);
    if(temp0)
      {
      op->GetNeighborList(temp0);
      return 1;
      }
    }

The problem is that msg.GetNumberOfArguments(0) returns 2 and NOT 3. I have no idea of the internals of the msg object to try and figure out what is trying to be passed. Is the client sending in a index also? 2 pointers? no idea.

I'll just assume from this that it is basically impossible to pass an array from the server to the Client in an "Information Only" fashion. I guess I can encode the values to a string and send that. Seems odd to have to encode the data into a string...

If anyone else has a better Idea I would much appreciate it.
___________________________________________________________
Mike Jackson                      www.bluequartz.net
Principal Software Engineer       [email protected]
BlueQuartz Software               Dayton, Ohio


On Mar 26, 2010, at 3:23 PM, Michael Jackson wrote:

I have a custom reader. Part of the reader is getting a "NeighborList" which is an vtkIntArray object although I have declared the following methods in my "reader" class:

 int* GetNeighborList();
 void GetNeighborList(int* list);
 vtkIdType GetNumberOfNeighbors();

And in my ServerManagerXML file I have the following:
     <IntVectorProperty name="NeighborList"
       command="GetNeighborList"
       argument_is_array="1"
       number_of_elements="0"
       repeat_command="0"
       number_of_elements_per_command="1"
       use_index="0" >
       <SimpleIntInformationHelper />
       <Documentation>
           This property lists the neighbors of the grain
         </Documentation>
       </IntVectorProperty>

On the Client side I have the following bit of code to populate a QListWidget:

void pqH5TiDataReaderPanel::updateNeighborList(QListWidget* qListWidget, QString property)
{
vtkSMProperty* smProperty = this->proxy()- >GetProperty(property.toAscii());
 if (NULL == smProperty)
 {
   std::string msg = "SMProperty [int] was NULL for ";
   msg.append(property.toAscii() );
   DebugTrace(<< msg.c_str() );
   return;
 }
 vtkSMIntVectorProperty* intProperty
                   = vtkSMIntVectorProperty::SafeDownCast(smProperty);
 if (NULL == intProperty)
 {
std::string msg = "Could not SafeDownCase to vtkSMIntVectorProperty for property ";
   msg.append(property.toAscii() );
   DebugTrace(<< msg.c_str() );
   return;
 }
 //intProperty->GetArgumentIsArray();
 int* elements = intProperty->GetElements();
 int nElements = intProperty->GetNumberOfElements(); //<== ALWAYS 0
 qListWidget->clear();  // Remove all the content

 for (int i = 0; i < nElements; ++i)
 {
qListWidget->addItem(QString::number(elements[i])); //<==== NEVER GETS HERE
 }
}

So, what am I doing wrong? I have tried reading through the relevant sections of the "ParaView Guide" but nothing is really jumping out. Also went looking for examples somewhere in the ParaView source code but came up empty. The ContourWidget is close but it "sends" its array, it never receives one from the server.

Any pointers would be great and much appreciated.
___________________________________________________________
Mike Jackson                      www.bluequartz.net
Principal Software Engineer       [email protected]
BlueQuartz Software               Dayton, Ohio



_______________________________________________
Powered by www.kitware.com

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

Please keep messages on-topic and check the ParaView Wiki at: 
http://paraview.org/Wiki/ParaView

Follow this link to subscribe/unsubscribe:
http://www.paraview.org/mailman/listinfo/paraview

Reply via email to