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 "vtkIOExodusModule.h" // For export macro
31 #include "vtkMappedDataArray.h"
32 
33 #include "vtkObjectFactory.h" // for vtkStandardNewMacro
34 
35 template <class Scalar>
36 class vtkCPExodusIINodalCoordinatesTemplate : public vtkMappedDataArray<Scalar>
37 {
38 public:
39   vtkAbstractTemplateTypeMacro(
40     vtkCPExodusIINodalCoordinatesTemplate<Scalar>, vtkMappedDataArray<Scalar>)
41   vtkMappedDataArrayNewInstanceMacro(vtkCPExodusIINodalCoordinatesTemplate<
42     Scalar>) static vtkCPExodusIINodalCoordinatesTemplate* New();
43   void PrintSelf(ostream& os, vtkIndent indent) override;
44 
45   typedef typename Superclass::ValueType ValueType;
46 
47   /**
48    * Set the raw scalar arrays for the coordinate set. This class takes
49    * ownership of the arrays and deletes them with delete[].
50    */
51   void SetExodusScalarArrays(Scalar* x, Scalar* y, Scalar* z, vtkIdType numPoints);
52 
53   // Reimplemented virtuals -- see superclasses for descriptions:
54   void Initialize() override;
55   void GetTuples(vtkIdList* ptIds, vtkAbstractArray* output) override;
56   void GetTuples(vtkIdType p1, vtkIdType p2, vtkAbstractArray* output) override;
57   void Squeeze() override;
58   VTK_NEWINSTANCE vtkArrayIterator* NewIterator() override;
59   vtkIdType LookupValue(vtkVariant value) override;
60   void LookupValue(vtkVariant value, vtkIdList* ids) override;
61   vtkVariant GetVariantValue(vtkIdType idx) override;
62   void ClearLookup() override;
63   double* GetTuple(vtkIdType i) override;
64   void GetTuple(vtkIdType i, double* tuple) override;
65   vtkIdType LookupTypedValue(Scalar value) override;
66   void LookupTypedValue(Scalar value, vtkIdList* ids) override;
67   ValueType GetValue(vtkIdType idx) const override;
68   ValueType& GetValueReference(vtkIdType idx) override;
69   void GetTypedTuple(vtkIdType idx, Scalar* t) const override;
70 
71   ///@{
72   /**
73    * This container is read only -- this method does nothing but print a
74    * warning.
75    */
76   vtkTypeBool Allocate(vtkIdType sz, vtkIdType ext) override;
77   vtkTypeBool Resize(vtkIdType numTuples) override;
78   void SetNumberOfTuples(vtkIdType number) override;
79   void SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray* source) override;
80   void SetTuple(vtkIdType i, const float* source) override;
81   void SetTuple(vtkIdType i, const double* source) override;
82   void InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray* source) override;
83   void InsertTuple(vtkIdType i, const float* source) override;
84   void InsertTuple(vtkIdType i, const double* source) override;
85   void InsertTuples(vtkIdList* dstIds, vtkIdList* srcIds, vtkAbstractArray* source) override;
86   void InsertTuples(
87     vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray* source) override;
88   vtkIdType InsertNextTuple(vtkIdType j, vtkAbstractArray* source) override;
89   vtkIdType InsertNextTuple(const float* source) override;
90   vtkIdType InsertNextTuple(const double* source) override;
91   void DeepCopy(vtkAbstractArray* aa) override;
92   void DeepCopy(vtkDataArray* da) override;
93   void InterpolateTuple(
94     vtkIdType i, vtkIdList* ptIndices, vtkAbstractArray* source, double* weights) override;
95   void InterpolateTuple(vtkIdType i, vtkIdType id1, vtkAbstractArray* source1, vtkIdType id2,
96     vtkAbstractArray* source2, double t) override;
97   void SetVariantValue(vtkIdType idx, vtkVariant value) override;
98   void InsertVariantValue(vtkIdType idx, vtkVariant value) override;
99   void RemoveTuple(vtkIdType id) override;
100   void RemoveFirstTuple() override;
101   void RemoveLastTuple() override;
102   void SetTypedTuple(vtkIdType i, const Scalar* t) override;
103   void InsertTypedTuple(vtkIdType i, const Scalar* t) override;
104   vtkIdType InsertNextTypedTuple(const Scalar* t) override;
105   void SetValue(vtkIdType idx, Scalar value) override;
106   vtkIdType InsertNextValue(Scalar v) override;
107   void InsertValue(vtkIdType idx, Scalar v) override;
108   ///@}
109 
110 protected:
111   vtkCPExodusIINodalCoordinatesTemplate();
112   ~vtkCPExodusIINodalCoordinatesTemplate() override;
113 
114   Scalar* XArray;
115   Scalar* YArray;
116   Scalar* ZArray;
117 
118 private:
119   vtkCPExodusIINodalCoordinatesTemplate(const vtkCPExodusIINodalCoordinatesTemplate&) = delete;
120   void operator=(const vtkCPExodusIINodalCoordinatesTemplate&) = delete;
121 
122   vtkIdType Lookup(const Scalar& val, vtkIdType startIndex);
123   double* TempDoubleArray;
124 };
125 
126 #include "vtkCPExodusIINodalCoordinatesTemplate.txx"
127 
128 #endif // vtkCPExodusIINodalCoordinatesTemplate_h
129 
130 // VTK-HeaderTest-Exclude: vtkCPExodusIINodalCoordinatesTemplate.h
131