1 /*=========================================================================
2 
3   Program:   Visualization Toolkit
4   Module:    vtkCPExodusIINodalCoordinatesTemplate.h
5 
6   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7   All rights reserved.
8   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10      This software is distributed WITHOUT ANY WARRANTY; without even
11      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12      PURPOSE.  See the above copyright notice for more information.
13 
14 =========================================================================*/
15 
16 /**
17  * @class   vtkCPExodusIINodalCoordinatesTemplate
18  * @brief   Map native Exodus II coordinate
19  * arrays into the vtkDataArray interface.
20  *
21  *
22  * Map native Exodus II coordinate arrays into the vtkDataArray interface. Use
23  * the vtkCPExodusIIInSituReader to read an Exodus II file's data into this
24  * structure.
25 */
26 
27 #ifndef vtkCPExodusIINodalCoordinatesTemplate_h
28 #define vtkCPExodusIINodalCoordinatesTemplate_h
29 
30 #include "vtkMappedDataArray.h"
31 #include "vtkIOExodusModule.h" // For export macro
32 
33 #include "vtkObjectFactory.h" // for vtkStandardNewMacro
34 
35 template <class Scalar>
36 class vtkCPExodusIINodalCoordinatesTemplate: public vtkMappedDataArray<Scalar>
37 {
38 public:
39   vtkAbstractTemplateTypeMacro(vtkCPExodusIINodalCoordinatesTemplate<Scalar>,
40                                vtkMappedDataArray<Scalar>)
41   vtkMappedDataArrayNewInstanceMacro(
42       vtkCPExodusIINodalCoordinatesTemplate<Scalar>)
43   static vtkCPExodusIINodalCoordinatesTemplate *New();
44   void PrintSelf(ostream &os, vtkIndent indent) override;
45 
46   typedef typename Superclass::ValueType ValueType;
47 
48   /**
49    * Set the raw scalar arrays for the coordinate set. This class takes
50    * ownership of the arrays and deletes them with delete[].
51    */
52   void SetExodusScalarArrays(Scalar *x, Scalar *y, Scalar *z,
53                              vtkIdType numPoints);
54 
55   // Reimplemented virtuals -- see superclasses for descriptions:
56   void Initialize() override;
57   void GetTuples(vtkIdList *ptIds, vtkAbstractArray *output) override;
58   void GetTuples(vtkIdType p1, vtkIdType p2, vtkAbstractArray *output) override;
59   void Squeeze() override;
60   VTK_NEWINSTANCE vtkArrayIterator *NewIterator() override;
61   vtkIdType LookupValue(vtkVariant value) override;
62   void LookupValue(vtkVariant value, vtkIdList *ids) override;
63   vtkVariant GetVariantValue(vtkIdType idx) override;
64   void ClearLookup() override;
65   double* GetTuple(vtkIdType i) override;
66   void GetTuple(vtkIdType i, double *tuple) override;
67   vtkIdType LookupTypedValue(Scalar value) override;
68   void LookupTypedValue(Scalar value, vtkIdList *ids) override;
69   ValueType GetValue(vtkIdType idx) const override;
70   ValueType& GetValueReference(vtkIdType idx) override;
71   void GetTypedTuple(vtkIdType idx, Scalar *t) const override;
72 
73   //@{
74   /**
75    * This container is read only -- this method does nothing but print a
76    * warning.
77    */
78   vtkTypeBool Allocate(vtkIdType sz, vtkIdType ext) override;
79   vtkTypeBool Resize(vtkIdType numTuples) override;
80   void SetNumberOfTuples(vtkIdType number) override;
81   void SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source) override;
82   void SetTuple(vtkIdType i, const float *source) override;
83   void SetTuple(vtkIdType i, const double *source) override;
84   void InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source) override;
85   void InsertTuple(vtkIdType i, const float *source) override;
86   void InsertTuple(vtkIdType i, const double *source) override;
87   void InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds,
88                     vtkAbstractArray *source) override;
89   void InsertTuples(vtkIdType dstStart, vtkIdType n, vtkIdType srcStart,
90                     vtkAbstractArray* source) override;
91   vtkIdType InsertNextTuple(vtkIdType j, vtkAbstractArray *source) override;
92   vtkIdType InsertNextTuple(const float *source) override;
93   vtkIdType InsertNextTuple(const double *source) override;
94   void DeepCopy(vtkAbstractArray *aa) override;
95   void DeepCopy(vtkDataArray *da) override;
96   void InterpolateTuple(vtkIdType i, vtkIdList *ptIndices,
97                         vtkAbstractArray* source,  double* weights) override;
98   void InterpolateTuple(vtkIdType i, vtkIdType id1, vtkAbstractArray *source1,
99                         vtkIdType id2, vtkAbstractArray *source2, double t) override;
100   void SetVariantValue(vtkIdType idx, vtkVariant value) override;
101   void InsertVariantValue(vtkIdType idx, vtkVariant value) override;
102   void RemoveTuple(vtkIdType id) override;
103   void RemoveFirstTuple() override;
104   void RemoveLastTuple() override;
105   void SetTypedTuple(vtkIdType i, const Scalar *t) override;
106   void InsertTypedTuple(vtkIdType i, const Scalar *t) override;
107   vtkIdType InsertNextTypedTuple(const Scalar *t) override;
108   void SetValue(vtkIdType idx, Scalar value) override;
109   vtkIdType InsertNextValue(Scalar v) override;
110   void InsertValue(vtkIdType idx, Scalar v) override;
111   //@}
112 
113 protected:
114   vtkCPExodusIINodalCoordinatesTemplate();
115   ~vtkCPExodusIINodalCoordinatesTemplate() override;
116 
117   Scalar *XArray;
118   Scalar *YArray;
119   Scalar *ZArray;
120 
121 private:
122   vtkCPExodusIINodalCoordinatesTemplate(
123       const vtkCPExodusIINodalCoordinatesTemplate &) = delete;
124   void operator=(
125       const vtkCPExodusIINodalCoordinatesTemplate &) = delete;
126 
127   vtkIdType Lookup(const Scalar &val, vtkIdType startIndex);
128   double *TempDoubleArray;
129 };
130 
131 #include "vtkCPExodusIINodalCoordinatesTemplate.txx"
132 
133 #endif //vtkCPExodusIINodalCoordinatesTemplate_h
134 
135 // VTK-HeaderTest-Exclude: vtkCPExodusIINodalCoordinatesTemplate.h
136