The array-information indices should not be repeated. You're using index 1 for both array informations. Just change the 2nd one to 2 (updating the xml default values as well as when you call GetInputArrayToProcess()).
Utkarsh On Tue, Jan 4, 2011 at 5:43 PM, Winters, Kevin D. ERDC-CHL-MS <[email protected]> wrote: > I am writing a filter that will compare array values from two objects. The > filter is set up with two input ports. I would like the user to choose an > array from each object for the filter to compare. I am successful in > retrieving the two objects and the first array, but the second array is > invalid. I’m not sure if my issue is with the XML or the code. > > XML: > <InputProperty name="Input" > port_index="0" > command="SetInputConnection"> > <ProxyGroupDomain name="groups"> > <Group name="sources"/> > <Group name="filters"/> > </ProxyGroupDomain> > <DataTypeDomain name="input_type"> > <DataType value="vtkDataSet"/> > <DataType value="vtkCompositeDataSet"/> > </DataTypeDomain> > <InputArrayDomain name="input_array"> > <RequiredProperties> > <Property name="SelectInputScalars" > function="FieldDataSelection"/> > </RequiredProperties> > </InputArrayDomain> > <Documentation> > Set the first input. > </Documentation> > </InputProperty> > > <InputProperty name="Input2" > port_index="1" > command="SetInputConnection"> > <ProxyGroupDomain name="groups"> > <Group name="sources"/> > <Group name="filters"/> > </ProxyGroupDomain> > <DataTypeDomain name="input_type"> > <DataType value="vtkDataSet"/> > <DataType value="vtkCompositeDataSet"/> > </DataTypeDomain> > <InputArrayDomain name="input_array"> > <RequiredProperties> > <Property name="SelectInput2Scalars" > function="FieldDataSelection"/> > </RequiredProperties> > </InputArrayDomain> > <Documentation> > Set the second input. > </Documentation> > </InputProperty> > > <StringVectorProperty name="SelectInputScalars" > command="SetInputArrayToProcess" > number_of_elements="5" > element_types="0 0 0 0 2" > label="Input Array" > animateable="0"> > <ArrayListDomain name="array_list" > attribute_type="Scalars"> > <RequiredProperties> > <Property name="Input" function="Input"/> > </RequiredProperties> > </ArrayListDomain> > <FieldDataDomain name="field_list"> > <RequiredProperties> > <Property name="Input" function="Input"/> > </RequiredProperties> > </FieldDataDomain> > <Documentation> > Select the array. > </Documentation> > </StringVectorProperty> > > <StringVectorProperty name="SelectInput2Scalars" > command="SetInputArrayToProcess" > number_of_elements="5" > element_types="0 0 0 0 2" > default_values="0 1" > label="Input 2 Array" > animateable="0"> > <ArrayListDomain name="array_list" > attribute_type="Scalars"> > <RequiredProperties> > <Property name="Input2" function="Input"/> > </RequiredProperties> > </ArrayListDomain> > <FieldDataDomain name="field_list"> > <RequiredProperties> > <Property name="Input2" function="Input"/> > </RequiredProperties> > </FieldDataDomain> > <Documentation> > Select the array. > </Documentation> > </StringVectorProperty> > > C++: > > // get the info objects > vtkInformation* inInfo1 = inputVector[0]->GetInformationObject(0); > vtkInformation* inInfo2 = inputVector[1]->GetInformationObject(0); > > // get the input objects (should be of the same type) > vtkDataObject *inObj1 = inInfo1->Get(vtkDataObject::DATA_OBJECT()); > vtkDataObject *inObj2 = inInfo2->Get(vtkDataObject::DATA_OBJECT()); > > if (inObj1->GetDataObjectType() != inObj2->GetDataObjectType()) > { > vtkErrorMacro(<< "Inputs are different types."); > return 1; > } > > // cast inputs to correct type > if (vtkDataSet::SafeDownCast(inObj1)) > { > vtkDataSet* input1 = vtkDataSet::SafeDownCast(inObj1); > vtkDataSet* input2 = vtkDataSet::SafeDownCast(inObj2); > > vtkDataArray* inArray1 = this->GetInputArrayToProcess(0, input1); > vtkDataArray* inArray2 = this->GetInputArrayToProcess(0, input2); > > if (!inArray1) > { > vtkErrorMacro(<< "Bad inArray1."); > return 1; > } > vtkDebugMacro(<< "Array 1: " << inArray1->GetName()); > if (!inArray2) > { > vtkErrorMacro(<< "Bad inArray2."); > return 1; > } > vtkDebugMacro(<< "Array 2: " << inArray2->GetName()); > > ... > } > > Am I using the Set/GetInputArrayToProcess functions correctly with regards > to the input ports? Should I instead use helper functions that pass the > names of the two selected arrays and retrieve them from the objects? > > Thanks in advance for any insight, > Kevin > > _______________________________________________ > 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 > > _______________________________________________ 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
