You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
5.9 KiB
C
189 lines
5.9 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkLSDynaPart.h
|
||
|
|
||
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||
|
All rights reserved.
|
||
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||
|
|
||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||
|
PURPOSE. See the above copyright notice for more information.
|
||
|
=========================================================================*/
|
||
|
|
||
|
#ifndef vtkLSDynaPart_h
|
||
|
#define vtkLSDynaPart_h
|
||
|
#ifndef __VTK_WRAP__
|
||
|
|
||
|
#include "LSDynaMetaData.h" //needed for lsdyna types
|
||
|
#include "vtkIOLSDynaModule.h" // For export macro
|
||
|
#include "vtkObject.h"
|
||
|
#include "vtkStdString.h" //needed for string
|
||
|
|
||
|
class vtkUnstructuredGrid;
|
||
|
class vtkPoints;
|
||
|
|
||
|
class VTKIOLSDYNA_EXPORT vtkLSDynaPart : public vtkObject
|
||
|
{
|
||
|
public:
|
||
|
static vtkLSDynaPart* New();
|
||
|
|
||
|
vtkTypeMacro(vtkLSDynaPart, vtkObject);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
// Description: Set the type of the part
|
||
|
void SetPartType(int type);
|
||
|
|
||
|
// Description: Returns the type of the part
|
||
|
LSDynaMetaData::LSDYNA_TYPES PartType() const { return Type; }
|
||
|
|
||
|
// Description: Returns if the type of the part is considered valid
|
||
|
bool hasValidType() const;
|
||
|
|
||
|
vtkIdType GetUserMaterialId() const { return UserMaterialId; }
|
||
|
vtkIdType GetPartId() const { return PartId; }
|
||
|
bool HasCells() const;
|
||
|
|
||
|
// Setup the part with some basic information about what it holds
|
||
|
void InitPart(vtkStdString name, const vtkIdType& partId, const vtkIdType& userMaterialId,
|
||
|
const vtkIdType& numGlobalPoints, const int& sizeOfWord);
|
||
|
|
||
|
// Reserves the needed space in memory for this part
|
||
|
// that way we never over allocate memory
|
||
|
void AllocateCellMemory(const vtkIdType& numCells, const vtkIdType& cellLen);
|
||
|
|
||
|
// Add a cell to the part
|
||
|
void AddCell(const int& cellType, const vtkIdType& npts, vtkIdType conn[8]);
|
||
|
|
||
|
// Description:
|
||
|
// Setups the part cell topology so that we can cache information
|
||
|
// between timesteps.
|
||
|
void BuildToplogy();
|
||
|
|
||
|
// Description:
|
||
|
// Returns if the toplogy for this part has been constructed
|
||
|
bool IsTopologyBuilt() const { return TopologyBuilt; }
|
||
|
|
||
|
// Description:
|
||
|
// Constructs the grid for this part and returns it.
|
||
|
vtkUnstructuredGrid* GenerateGrid();
|
||
|
|
||
|
// Description:
|
||
|
// allows the part to store dead cells
|
||
|
void EnableDeadCells(const int& deadCellsAsGhostArray);
|
||
|
|
||
|
// Description:
|
||
|
// removes the dead cells array if it exists from the grid
|
||
|
void DisableDeadCells();
|
||
|
|
||
|
// Description:
|
||
|
// We set cells as dead to make them not show up during rendering
|
||
|
void SetCellsDeadState(unsigned char* dead, const vtkIdType& size);
|
||
|
|
||
|
// Description:
|
||
|
// allows the part to store user cell ids
|
||
|
void EnableCellUserIds();
|
||
|
|
||
|
// Description:
|
||
|
// Set the user ids for the cells of this grid
|
||
|
void SetNextCellUserIds(const vtkIdType& value);
|
||
|
|
||
|
// Description:
|
||
|
// Called to init point filling for a property
|
||
|
// is also able to set the point position of the grid too as that
|
||
|
// is stored as a point property
|
||
|
void AddPointProperty(const char* name, const vtkIdType& numComps, const bool& isIdTypeProperty,
|
||
|
const bool& isProperty, const bool& isGeometryPoints);
|
||
|
|
||
|
// Description:
|
||
|
// Given a chunk of point property memory copy it to the correct
|
||
|
// property on the part
|
||
|
void ReadPointBasedProperty(float* data, const vtkIdType& numTuples, const vtkIdType& numComps,
|
||
|
const vtkIdType& currentGlobalPointIndex);
|
||
|
|
||
|
void ReadPointBasedProperty(double* data, const vtkIdType& numTuples, const vtkIdType& numComps,
|
||
|
const vtkIdType& currentGlobalPointIndex);
|
||
|
|
||
|
// Description:
|
||
|
// Adds a property to the part
|
||
|
void AddCellProperty(const char* name, const int& offset, const int& numComps);
|
||
|
|
||
|
// Description:
|
||
|
// Given the raw data converts it to be the properties for this part
|
||
|
// The cell properties are woven together as a block for each cell
|
||
|
void ReadCellProperties(
|
||
|
float* cellProperties, const vtkIdType& numCells, const vtkIdType& numPropertiesInCell);
|
||
|
void ReadCellProperties(
|
||
|
double* cellsProperties, const vtkIdType& numCells, const vtkIdType& numPropertiesInCell);
|
||
|
|
||
|
// Description:
|
||
|
// Get the id of the lowest global point this part needs
|
||
|
// Note: Presumes topology has been built already
|
||
|
vtkIdType GetMinGlobalPointId() const;
|
||
|
|
||
|
// Description:
|
||
|
// Get the id of the largest global point this part needs
|
||
|
// Note: Presumes topology has been built already
|
||
|
vtkIdType GetMaxGlobalPointId() const;
|
||
|
|
||
|
protected:
|
||
|
vtkLSDynaPart();
|
||
|
~vtkLSDynaPart() override;
|
||
|
|
||
|
vtkUnstructuredGrid* RemoveDeletedCells();
|
||
|
|
||
|
void BuildUniquePoints();
|
||
|
void BuildCells();
|
||
|
|
||
|
void GetPropertyData(const char* name, const vtkIdType& numComps, const bool& isIdTypeArray,
|
||
|
const bool& isProperty, const bool& isGeometry);
|
||
|
|
||
|
template <typename T>
|
||
|
void AddPointInformation(T* buffer, T* pointData, const vtkIdType& numTuples,
|
||
|
const vtkIdType& numComps, const vtkIdType& currentGlobalPointIndex);
|
||
|
|
||
|
// basic info about the part
|
||
|
LSDynaMetaData::LSDYNA_TYPES Type;
|
||
|
vtkStdString Name;
|
||
|
vtkIdType UserMaterialId;
|
||
|
vtkIdType PartId;
|
||
|
|
||
|
vtkIdType NumberOfCells;
|
||
|
vtkIdType NumberOfPoints;
|
||
|
vtkIdType NumberOfGlobalPoints;
|
||
|
|
||
|
bool DeadCellsAsGhostArray;
|
||
|
bool HasDeadCells;
|
||
|
|
||
|
bool TopologyBuilt;
|
||
|
bool DoubleBased;
|
||
|
|
||
|
vtkUnstructuredGrid* Grid;
|
||
|
vtkUnstructuredGrid* ThresholdGrid;
|
||
|
|
||
|
vtkPoints* Points;
|
||
|
|
||
|
class InternalCells;
|
||
|
InternalCells* Cells;
|
||
|
|
||
|
class InternalCellProperties;
|
||
|
InternalCellProperties* CellProperties;
|
||
|
|
||
|
class InternalPointsUsed;
|
||
|
class DensePointsUsed;
|
||
|
class SparsePointsUsed;
|
||
|
InternalPointsUsed* GlobalPointsUsed;
|
||
|
|
||
|
// used when reading properties
|
||
|
class InternalCurrentPointInfo;
|
||
|
InternalCurrentPointInfo* CurrentPointPropInfo;
|
||
|
|
||
|
private:
|
||
|
vtkLSDynaPart(const vtkLSDynaPart&) = delete;
|
||
|
void operator=(const vtkLSDynaPart&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
#endif // VTKLSDYNAPART
|