VTK
vtkLSDynaPart.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkLSDynaPart.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 #ifndef vtkLSDynaPart_h
16 #define vtkLSDynaPart_h
17 
18 #include "vtkIOLSDynaModule.h" // For export macro
19 #include "vtkObject.h"
20 #include "LSDynaMetaData.h" //needed for lsdyna types
21 #include "vtkStdString.h" //needed for string
22 
24 class vtkPoints;
25 
27 {
28 public:
29  static vtkLSDynaPart *New();
30 
31  vtkTypeMacro(vtkLSDynaPart,vtkObject);
32  virtual void PrintSelf(ostream &os, vtkIndent indent);
33 
34  //Description: Set the type of the part
35  void SetPartType(int type);
36 
37  //Description: Returns the type of the part
38  LSDynaMetaData::LSDYNA_TYPES PartType() const { return Type; }
39 
40  //Description: Returns if the type of the part is considered valid
41  bool hasValidType() const;
42 
43  vtkIdType GetUserMaterialId() const { return UserMaterialId; }
44  vtkIdType GetPartId() const { return PartId; }
45  bool HasCells() const;
46 
47  //Setup the part with some basic information about what it holds
48  void InitPart(vtkStdString name,
49  const vtkIdType& partId,
50  const vtkIdType& userMaterialId,
51  const vtkIdType& numGlobalPoints,
52  const int& sizeOfWord);
53 
54  //Reserves the needed space in memory for this part
55  //that way we never over allocate memory
56  void AllocateCellMemory(const vtkIdType& numCells, const vtkIdType& cellLen);
57 
58  //Add a cell to the part
59  void AddCell(const int& cellType, const vtkIdType& npts, vtkIdType conn[8]);
60 
61  //Description:
62  //Setups the part cell topology so that we can cache information
63  //between timesteps.
64  void BuildToplogy();
65 
66  //Description:
67  //Returns if the toplogy for this part has been constructed
68  bool IsTopologyBuilt() const { return TopologyBuilt; }
69 
70  //Description:
71  //Constructs the grid for this part and returns it.
72  vtkUnstructuredGrid* GenerateGrid();
73 
74  //Description:
75  //allows the part to store dead cells
76  void EnableDeadCells(const int& deadCellsAsGhostArray);
77 
78  //Description:
79  //removes the dead cells array if it exists from the grid
80  void DisableDeadCells();
81 
82  //Description:
83  //We set cells as dead to make them not show up during rendering
84  void SetCellsDeadState(unsigned char *dead, const vtkIdType &size);
85 
86  //Description:
87  //allows the part to store user cell ids
88  void EnableCellUserIds();
89 
90  //Description:
91  //Set the user ids for the cells of this grid
92  void SetNextCellUserIds(const vtkIdType& value);
93 
94 
95  //Description:
96  //Called to init point filling for a property
97  //is also able to set the point position of the grid too as that
98  //is stored as a point property
99  void AddPointProperty(const char* name, const vtkIdType& numComps,
100  const bool& isIdTypeProperty, const bool &isProperty,
101  const bool& isGeometryPoints);
102 
103  //Description:
104  //Given a chunk of point property memory copy it to the correct
105  //property on the part
106  void ReadPointBasedProperty(float *data,
107  const vtkIdType& numTuples,
108  const vtkIdType& numComps,
109  const vtkIdType& currentGlobalPointIndex);
110 
111  void ReadPointBasedProperty(double *data,
112  const vtkIdType& numTuples,
113  const vtkIdType& numComps,
114  const vtkIdType& currentGlobalPointIndex);
115 
116  //Description:
117  //Adds a property to the part
118  void AddCellProperty(const char* name, const int& offset, const int& numComps);
119 
120  //Description:
121  //Given the raw data converts it to be the properties for this part
122  //The cell properties are woven together as a block for each cell
123  void ReadCellProperties(float *cellProperties, const vtkIdType& numCells,
124  const vtkIdType &numPropertiesInCell);
125  void ReadCellProperties(double *cellsProperties, const vtkIdType& numCells,
126  const vtkIdType &numPropertiesInCell);
127 
128  //Description:
129  //Get the id of the lowest global point this part needs
130  //Note: Presumes topology has been built already
131  vtkIdType GetMinGlobalPointId() const;
132 
133  //Description:
134  //Get the id of the largest global point this part needs
135  //Note: Presumes topology has been built already
136  vtkIdType GetMaxGlobalPointId() const;
137 
138 protected:
139  vtkLSDynaPart();
140  ~vtkLSDynaPart();
141 
142  vtkUnstructuredGrid* RemoveDeletedCells();
143 
144  void BuildUniquePoints();
145  void BuildCells();
146 
147  void GetPropertyData(const char* name, const vtkIdType &numComps,
148  const bool &isIdTypeArray, const bool& isProperty, const bool& isGeometry);
149 
150  template<typename T>
151  void AddPointInformation(T *buffer,T *pointData,
152  const vtkIdType& numTuples,
153  const vtkIdType& numComps,
154  const vtkIdType& currentGlobalPointIndex);
155 
156  //basic info about the part
157  LSDynaMetaData::LSDYNA_TYPES Type;
161 
165 
168 
171 
174 
176 
177  class InternalCells;
178  InternalCells *Cells;
179 
180  class InternalCellProperties;
181  InternalCellProperties *CellProperties;
182 
183  class InternalPointsUsed;
184  class DensePointsUsed;
185  class SparsePointsUsed;
186  InternalPointsUsed *GlobalPointsUsed;
187 
188  //used when reading properties
189  class InternalCurrentPointInfo;
190  InternalCurrentPointInfo *CurrentPointPropInfo;
191 
192 private:
193  vtkLSDynaPart( const vtkLSDynaPart& ); // Not implemented.
194  void operator = ( const vtkLSDynaPart& ); // Not implemented.
195 };
196 
197 #endif // VTKLSDYNAPART
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:46
abstract base class for most VTK objects
Definition: vtkObject.h:61
vtkStdString Name
vtkIdType GetUserMaterialId() const
Definition: vtkLSDynaPart.h:43
vtkIdType NumberOfPoints
int vtkIdType
Definition: vtkType.h:275
InternalCells * Cells
virtual void PrintSelf(ostream &os, vtkIndent indent)
a simple class to control print indentation
Definition: vtkIndent.h:38
InternalCellProperties * CellProperties
bool DeadCellsAsGhostArray
dataset represents arbitrary combinations of all possible cell types
vtkUnstructuredGrid * Grid
LSDynaMetaData::LSDYNA_TYPES PartType() const
Definition: vtkLSDynaPart.h:38
InternalPointsUsed * GlobalPointsUsed
bool IsTopologyBuilt() const
Definition: vtkLSDynaPart.h:68
vtkIdType NumberOfCells
CellTypeInDataSet cellType(vtkDataSet *input)
LSDynaMetaData::LSDYNA_TYPES Type
vtkIdType GetPartId() const
Definition: vtkLSDynaPart.h:44
vtkIdType PartId
#define VTKIOLSDYNA_EXPORT
InternalCurrentPointInfo * CurrentPointPropInfo
vtkIdType NumberOfGlobalPoints
static vtkObject * New()
vtkPoints * Points
vtkIdType UserMaterialId
vtkUnstructuredGrid * ThresholdGrid
represent and manipulate 3D points
Definition: vtkPoints.h:38