 |
VTK
9.0.1
|
Go to the documentation of this file.
135 #ifndef vtkCellArray_h
136 #define vtkCellArray_h
138 #include "vtkCommonDataModelModule.h"
145 #include "vtkTypeInt32Array.h"
146 #include "vtkTypeInt64Array.h"
150 #include <initializer_list>
151 #include <type_traits>
174 #define VTK_CELL_ARRAY_V2
228 return this->AllocateExact(sz, sz) ? 1 : 0;
242 return this->AllocateExact(numCells, numCells * maxCellSize);
366 #ifndef __VTK_WRAP__ // The wrappers have issues with some of these templates
377 void SetData(vtkTypeInt32Array* offsets, vtkTypeInt32Array* connectivity);
378 void SetData(vtkTypeInt64Array* offsets, vtkTypeInt64Array* connectivity);
385 #endif // __VTK_WRAP__
482 return this->GetOffsetsArray64();
486 return this->GetOffsetsArray32();
503 return this->GetConnectivityArray64();
507 return this->GetConnectivityArray32();
533 void InitTraversal();
582 VTK_EXPECTS(0 <= cellId && cellId < GetNumberOfCells());
615 return this->InsertNextCell(
static_cast<vtkIdType>(cell.size()), cell.begin());
636 void UpdateCellCount(
int npts);
676 return this->ReplaceCellAtId(cellId,
static_cast<vtkIdType>(cell.size()), cell.begin());
751 unsigned long GetActualMemorySize() const;
759 template <
typename ArrayT>
764 using CellRangeType = decltype(vtk::DataArrayValueRange<1>(std::declval<ArrayType>()));
797 this->Offsets->InsertNextValue(0);
810 template <
typename Functor,
typename... Args>
811 using GetReturnType = decltype(
814 template <
typename Functor,
typename... Args>
815 struct ReturnsVoid : std::is_same<GetReturnType<Functor, Args...>, void>
889 template <
typename Functor,
typename... Args,
890 typename =
typename std::enable_if<ReturnsVoid<Functor, Args...>
::value>
::type>
891 void Visit(Functor&& functor, Args&&... args)
909 template <
typename Functor,
typename... Args,
910 typename =
typename std::enable_if<ReturnsVoid<Functor, Args...>
::value>
::type>
911 void Visit(Functor&& functor, Args&&... args)
const
929 template <
typename Functor,
typename... Args,
930 typename =
typename std::enable_if<!ReturnsVoid<Functor, Args...>
::value>
::type>
931 GetReturnType<Functor, Args...>
Visit(Functor&& functor, Args&&... args)
948 template <
typename Functor,
typename... Args,
949 typename =
typename std::enable_if<!ReturnsVoid<Functor, Args...>
::value>
::type>
950 GetReturnType<Functor, Args...>
Visit(Functor&& functor, Args&&... args)
const
970 #endif // __VTK_WRAP__
1033 VTK_EXPECTS(0 <= loc && loc < GetNumberOfConnectivityEntries());
1130 #ifdef VTK_USE_64BIT_IDS
1133 this->StorageIs64Bit =
true;
1135 #else // VTK_USE_64BIT_IDS
1138 this->StorageIs64Bit =
false;
1140 #endif // VTK_USE_64BIT_IDS
1145 if (this->StorageIs64Bit)
1147 this->Arrays.Int64.~VisitState();
1151 this->Arrays.Int32.~VisitState();
1159 if (!this->StorageIs64Bit)
1164 this->Arrays.Int64.~VisitState();
1166 this->StorageIs64Bit =
false;
1175 if (this->StorageIs64Bit)
1180 this->Arrays.Int32.~VisitState();
1182 this->StorageIs64Bit =
true;
1188 bool Is64Bit()
const {
return this->StorageIs64Bit; }
1193 assert(!this->StorageIs64Bit);
1194 return this->Arrays.Int32;
1199 assert(!this->StorageIs64Bit);
1200 return this->Arrays.Int32;
1206 assert(this->StorageIs64Bit);
1207 return this->Arrays.Int64;
1212 assert(this->StorageIs64Bit);
1213 return this->Arrays.Int64;
1220 bool StorageIs64Bit;
1234 template <
typename ArrayT>
1237 return this->Offsets->GetNumberOfValues() - 1;
1240 template <
typename ArrayT>
1243 return static_cast<vtkIdType>(this->Offsets->GetValue(cellId));
1246 template <
typename ArrayT>
1249 return static_cast<vtkIdType>(this->Offsets->GetValue(cellId + 1));
1252 template <
typename ArrayT>
1255 return this->GetEndOffset(cellId) - this->GetBeginOffset(cellId);
1258 template <
typename ArrayT>
1262 return vtk::DataArrayValueRange<1>(
1263 this->GetConnectivity(), this->GetBeginOffset(cellId), this->GetEndOffset(cellId));
1272 template <
typename CellStateT>
1275 using ValueType =
typename CellStateT::ValueType;
1276 auto* conn = state.GetConnectivity();
1277 auto* offsets = state.GetOffsets();
1279 const vtkIdType cellId = offsets->GetNumberOfValues() - 1;
1281 offsets->InsertNextValue(
static_cast<ValueType
>(conn->GetNumberOfValues() + npts));
1285 conn->InsertNextValue(
static_cast<ValueType
>(pts[i]));
1292 template <
typename CellStateT>
1295 using ValueType =
typename CellStateT::ValueType;
1296 auto* conn = state.GetConnectivity();
1297 auto* offsets = state.GetOffsets();
1299 const vtkIdType cellId = offsets->GetNumberOfValues() - 1;
1301 offsets->InsertNextValue(
static_cast<ValueType
>(conn->GetNumberOfValues() + npts));
1310 template <
typename CellStateT>
1313 using ValueType =
typename CellStateT::ValueType;
1315 auto* offsets = state.GetOffsets();
1316 const ValueType cellBegin = offsets->GetValue(offsets->GetMaxId() - 1);
1317 offsets->SetValue(offsets->GetMaxId(),
static_cast<ValueType
>(cellBegin + npts));
1323 template <
typename CellStateT>
1326 return state.GetCellSize(cellId);
1332 template <
typename CellStateT>
1335 using ValueType =
typename CellStateT::ValueType;
1337 const auto cellPts = state.GetCellRange(cellId);
1342 for (ValueType ptId : cellPts)
1344 *idPtr++ =
static_cast<vtkIdType>(ptId);
1350 template <
typename CellStateT>
1354 using ValueType =
typename CellStateT::ValueType;
1355 using ArrayType =
typename CellStateT::ArrayType;
1357 static constexpr
bool ValueTypeCompat = CellStateT::ValueTypeIsSameAsIdType;
1361 static constexpr
bool value = ValueTypeCompat && ArrayTypeCompat;
1364 template <
typename CellStateT>
1369 const vtkIdType beginOffset = state.GetBeginOffset(cellId);
1370 const vtkIdType endOffset = state.GetEndOffset(cellId);
1371 cellSize = endOffset - beginOffset;
1373 cellPoints =
reinterpret_cast<vtkIdType*
>(state.GetConnectivity()->GetPointer(beginOffset));
1376 template <
typename CellStateT>
1381 using ValueType =
typename CellStateT::ValueType;
1383 const auto cellPts = state.GetCellRange(cellId);
1384 cellSize = cellPts.size();
1390 for (ValueType ptId : cellPts)
1392 *tempPtr++ =
static_cast<vtkIdType>(ptId);
1401 template <
typename CellStateT>
1404 state.GetOffsets()->Reset();
1405 state.GetConnectivity()->Reset();
1406 state.GetOffsets()->InsertNextValue(0);
1421 if (this->TraversalCellId < this->GetNumberOfCells())
1423 this->GetCellAtId(this->TraversalCellId, npts, pts);
1424 ++this->TraversalCellId;
1483 using ValueType =
typename ArrayType64::ValueType;
1488 using ValueType =
typename ArrayType32::ValueType;
1520 #endif // vtkCellArray.h
vtkIdType GetNumberOfConnectivityEntries()
Return the size of the array that would be returned from ExportLegacyFormat().
void AppendLegacyFormat(vtkIdTypeArray *data, vtkIdType ptOffset=0)
Append an array of data with the legacy vtkCellArray layout, e.g.
void Initialize()
Free any memory and reset to an empty state.
void Use32BitStorage()
Initialize internal data structures to use 32- or 64-bit storage.
int GetMaxCellSize()
Returns the size of the largest cell.
void operator()(CellStateT &state, const vtkIdType cellId, vtkIdList *ids)
ArrayType64 * GetConnectivityArray64()
Return the array used to store the point ids that define the cells' connectivity.
void UpdateCellCount(int npts)
Used in conjunction with InsertNextCell(int npts) and InsertCellPoint() to update the number of point...
vtkTypeInt64Array ArrayType64
std::enable_if< CanShareConnPtr< CellStateT >::value, void >::type operator()(CellStateT &state, const vtkIdType cellId, vtkIdType &cellSize, vtkIdType const *&cellPoints, vtkIdList *vtkNotUsed(temp))
vtkIdType GetBeginOffset(vtkIdType cellId) const
void ReplaceCellAtId(vtkIdType cellId, vtkIdList *list)
Replaces the point ids for the specified cell with the supplied list.
bool SetData(vtkDataArray *offsets, vtkDataArray *connectivity)
Sets the internal arrays to the supplied offsets and connectivity arrays.
void SetData(vtkAOSDataArrayTemplate< long long > *offsets, vtkAOSDataArrayTemplate< long long > *connectivity)
Set the internal data arrays to the supplied offsets and connectivity arrays.
vtkTypeBool Allocate(vtkIdType sz, vtkIdType vtkNotUsed(ext)=1000)
Allocate memory.
STL-compatible iterable ranges that provide access to vtkDataArray elements.
ArrayType * GetConnectivity()
vtkSmartPointer< ArrayType > Connectivity
vtkTypeInt32Array ArrayType32
GetReturnType< Functor, Args... > Visit(Functor &&functor, Args &&... args) const
VisitState< ArrayType64 > & GetArrays64()
void ReplaceCellAtId(vtkIdType cellId, vtkIdType cellSize, const vtkIdType *cellPoints)
Replaces the point ids for the specified cell with the supplied list.
Hold a reference to a vtkObjectBase instance.
abstract base class for most VTK objects
vtkIdType InsertNextCell(const std::initializer_list< vtkIdType > &cell)
Overload that allows InsertNextCell({0, 1, 2}) syntax.
std::enable_if<!CanShareConnPtr< CellStateT >::value, void >::type operator()(CellStateT &state, const vtkIdType cellId, vtkIdType &cellSize, vtkIdType const *&cellPoints, vtkIdList *temp)
bool CanConvertToDefaultStorage() const
Check if the existing data can safely be converted to use 32- or 64- bit storage.
void SetData(vtkIdTypeArray *offsets, vtkIdTypeArray *connectivity)
Set the internal data arrays to the supplied offsets and connectivity arrays.
vtkIdType GetCellSize(const vtkIdType cellId) const
Return the size of the cell at cellId.
abstract superclass for arrays of numeric data
static constexpr bool ValueTypeIsSameAsIdType
ArrayType64 * GetOffsetsArray64()
Return the array used to store cell offsets.
vtkIdType GetNumberOfCells() const
Get the number of cells in the array.
vtkIdType GetCellSize(vtkIdType cellId) const
ArrayType32 * GetOffsetsArray32()
Return the array used to store cell offsets.
vtkIdType operator()(CellStateT &state, const vtkIdType npts, const vtkIdType pts[])
CellRangeType GetCellRange(vtkIdType cellId)
VisitState< ArrayType32 > & GetArrays32()
vtkIdType GetNumberOfConnectivityIds() const
Get the size of the connectivity array that stores the point ids.
void GetCellAtId(vtkIdType cellId, vtkIdType &cellSize, vtkIdType const *&cellPoints)
Return the point ids for the cell at cellId.
bool IsValid()
Check that internal storage is consistent and in a valid state.
Encapsulate traversal logic for vtkCellArray.
vtkIdType IsHomogeneous()
Check if all cells have the same number of vertices.
vtkCellArrayIterator * NewIterator()
NewIterator returns a new instance of vtkCellArrayIterator that is initialized to point at the first ...
bool ConvertTo32BitStorage()
Convert internal data structures to use 32- or 64-bit storage.
#define VTK_SIZEHINT(...)
void ShallowCopy(vtkCellArray *ca)
Shallow copy ca into this cell array.
void SetData(vtkTypeInt32Array *offsets, vtkTypeInt32Array *connectivity)
Set the internal data arrays to the supplied offsets and connectivity arrays.
int GetNextCell(vtkIdType &npts, vtkIdType const *&pts)
void Append(vtkCellArray *src, vtkIdType pointOffset=0)
Append cells from src into this.
vtkIdList * GetPointIds()
Return the list of point ids defining the cell.
void ImportLegacyFormat(vtkIdTypeArray *data)
Import an array of data with the legacy vtkCellArray layout, e.g.
bool AllocateEstimate(vtkIdType numCells, vtkIdType maxCellSize)
Pre-allocate memory in internal data structures.
vtkIdType EstimateSize(vtkIdType numCells, int maxPtsPerCell)
Utility routines help manage memory of cell array.
abstract class to specify cell behavior
bool IsStorageShareable() const
void SetData(vtkTypeInt64Array *offsets, vtkTypeInt64Array *connectivity)
Set the internal data arrays to the supplied offsets and connectivity arrays.
vtkIdType InsertNextCell(vtkIdType npts, const vtkIdType *pts)
Create a cell by specifying the number of points and an array of point id's.
void Squeeze()
Reclaim any extra memory while preserving data.
bool AllocateExact(vtkIdType numCells, vtkIdType connectivitySize)
Pre-allocate memory in internal data structures.
bool ConvertToDefaultStorage()
Convert internal data structures to use 32- or 64-bit storage.
void ImportLegacyFormat(const vtkIdType *data, vtkIdType len)
Import an array of data with the legacy vtkCellArray layout, e.g.
a simple class to control print indentation
const VisitState< ArrayType64 > & GetArrays64() const
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
object to represent cell connectivity
Remove all duplicate types from TypeList TList, storing the new list in Result.
vtkIdType GetEndOffset(vtkIdType cellId) const
void UseDefaultStorage()
Initialize internal data structures to use 32- or 64-bit storage.
vtkIdType operator()(CellStateT &state, const vtkIdType npts)
void InsertCellPoint(vtkIdType id)
Used in conjunction with InsertNextCell(npts) to add another point to the list of cells.
void SetTraversalCellId(vtkIdType cellId)
Get/Set the current cellId for traversal.
list of point or cell ids
bool IsStorage64Bit() const
bool ResizeExact(vtkIdType numCells, vtkIdType connectivitySize)
ResizeExact() resizes the internal structures to hold numCells total cell offsets and connectivitySiz...
vtkIdType operator()(CellStateT &state, const vtkIdType cellId)
VisitState< ArrayType64 > Int64
bool ConvertTo64BitStorage()
Convert internal data structures to use 32- or 64-bit storage.
void operator()(CellStateT &state)
vtkNew< vtkIdTypeArray > LegacyData
void Visit(Functor &&functor, Args &&... args)
vtkIdType GetNumberOfOffsets() const
Get the number of elements in the offsets array.
const ArrayType * GetConnectivity() const
void operator()(CellStateT &state, const vtkIdType npts)
void SetData(vtkAOSDataArrayTemplate< long > *offsets, vtkAOSDataArrayTemplate< long > *connectivity)
Set the internal data arrays to the supplied offsets and connectivity arrays.
dynamic, self-adjusting array of vtkIdType
vtkIdType GetSize()
Get the size of the allocated connectivity array.
static vtkCellArray * New()
Standard methods for instantiation, type information, and printing.
void ExportLegacyFormat(vtkIdTypeArray *data)
Fill data with the old-style vtkCellArray data layout, e.g.
virtual void SetNumberOfCells(vtkIdType)
Set the number of cells in the array.
void Visit(Functor &&functor, Args &&... args) const
const ArrayType * GetOffsets() const
vtkTypeList::Create< ArrayType32, ArrayType64 > StorageArrayList
List of possible array types used for storage.
void AppendLegacyFormat(const vtkIdType *data, vtkIdType len, vtkIdType ptOffset=0)
Append an array of data with the legacy vtkCellArray layout, e.g.
vtkIdType InsertNextCell(vtkCell *cell)
Insert a cell object.
const VisitState< ArrayType32 > & GetArrays32() const
decltype(vtk::DataArrayValueRange< 1 >(std::declval< ArrayType >())) CellRangeType
typename vtkTypeList::Unique< vtkTypeList::Create< vtkAOSDataArrayTemplate< int >, vtkAOSDataArrayTemplate< long >, vtkAOSDataArrayTemplate< long long > > >::Result InputArrayList
List of possible ArrayTypes that are compatible with internal storage.
vtkDataArray * GetOffsetsArray()
Return the array used to store cell offsets.
vtkIdType * GetPointer(const vtkIdType i)
Get a pointer to a particular data index.
void DeepCopy(vtkCellArray *ca)
Perform a deep copy (no reference counting) of the given cell array.
bool CanConvertTo64BitStorage() const
Check if the existing data can safely be converted to use 32- or 64- bit storage.
void SetNumberOfIds(const vtkIdType number)
Specify the number of ids for this object to hold.
bool CanConvertTo32BitStorage() const
Check if the existing data can safely be converted to use 32- or 64- bit storage.
void Use64BitStorage()
Initialize internal data structures to use 32- or 64-bit storage.
bool AllocateCopy(vtkCellArray *other)
Pre-allocate memory in internal data structures to match the used size of the input vtkCellArray.
vtkIdType TraversalCellId
ArrayType32 * GetConnectivityArray32()
Return the array used to store the point ids that define the cells' connectivity.
typename ArrayType::ValueType ValueType
void SetData(vtkAOSDataArrayTemplate< int > *offsets, vtkAOSDataArrayTemplate< int > *connectivity)
Set the internal data arrays to the supplied offsets and connectivity arrays.
void PrintDebug(ostream &os)
vtkIdType GetNumberOfIds()
Return the number of id's in the list.
vtkDataArray * GetConnectivityArray()
Return the array used to store the point ids that define the cells' connectivity.
void ReverseCellAtId(vtkIdType cellId)
Reverses the order of the point ids for the specified cell.
VisitState< ArrayType32 > Int32
GetReturnType< Functor, Args... > Visit(Functor &&functor, Args &&... args)
vtkIdType GetNumberOfCells() const
void GetCell(vtkIdType loc, vtkIdType &npts, const vtkIdType *&pts)
Internal method used to retrieve a cell given a legacy offset location.
void Reset()
Reset to an empty state but retain previously allocated memory.
bool ConvertToSmallestStorage()
Convert internal data structures to use 32- or 64-bit storage.
vtkSmartPointer< ArrayType > Offsets
vtkNew< vtkIdList > TempCell
vtkIdType GetTraversalCellId()
Get/Set the current cellId for traversal.