Skip to content
  • Utkarsh Ayachit's avatar
    ENH: · fad86463
    Utkarsh Ayachit authored
    * vtkDataArray now has a new superclass-vtkAbstractArray.vtkAbstractArray
    provides type-agnostic API to access array elements. vtkDataArray provides
    a double API to access values -- such an API is deliberately missing from
    vtkAbstractArray, since arrays like string arrays are not castable to doubles.
    
    * vtkAbstractArray has the notion of components/tuples, but does not make
    any assumptions about the arragment of these. It's up to the concrete
    subclasses how the data is represented in memory.
    
    * vtkFieldData used to provide tuple API to get/set values from data arrays
    contained in it. However, now that FieldData can have arrays that are not
    vtkDataArrays, this API is not longer valid.
    The following are the methods that are no longer available:
    double* GetTuple(const vtkIdType);
    void SetTuple(const vtkIdType i, const double* tuple);
    void GetTuple(const vtkIdType i, double* tuple);
    void InsertTuple(const vtkIdType i, const double* tuple);
    void InsertNextTuple(cons double*);
    double GetComponent(const vtkIdType i, const int j);
    void SetComponent(const vtkIdType i, const int j, const double c);
    void InsertComponent(const vtkIdType i, const int j, const double c);
    However, new API is provided to copy tuples arround from one field data to
    another using:
    void SetTuple(const vtkIdType i, const vtkIdType j, vtkFieldData* source);
    void InsertTuple(const vtkIdType i, const vtkIdType j, vtkFieldData* source);
    vtkIdType InsertNextTuple(const vtkIdType j, vtkFieldData* source);
    
    * vtkFieldData provide a vtkDataArray* GetArray(int index) to retrieve arrays
    in the field data. This function can will now return a NULL if the array
    at the given index is not a data array. It provides
    vtkAbstractArray* GetAbstractArray(int index);
    to retrieve an array even if it isn't a vtkDataArray.
    
    * Since vtkFieldData can contain arrays that aren't subclasses of
    vtkDataArray, so can vtkDataSetAttributes. However, an attribute can only be
    a vtkDataArray subclass i.e. one cannot set a vtkStringArray as the SCALARS
    array for a Point Data, for example.
    
    * String Array IO is only supported in XML file formats. If deemed important,
    support may be added for lecacy file formats.
    
    *** Array Iterators ***
    Another addition to the VTK Arrays, is the notion of Array Iterator. A
    vtkArrayIterator subclass is be provided for every vtkAbstractArray
    subclass. The iterator is a random access iterator. The iterators are not
    available in any of the wrapped languages, however, in C++ they can be used to
    write templatized code to processes the array values without any implicit type
    conversion and consequent loss of precision. vtkArrayIteratorTemplateMacro is
    provided to simply switching between different types of the arrays. Examples of
    use of this macro and the iterators can be found in
    vtkXMLWriter.cxx / vtkXMLDataReader.cxx / vtkXMLStructuredDataReader.cxx.
    fad86463