VTK  9.6.20260606
vtkDataObjectMeshCache.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
3
4#ifndef vtkDataObjectMeshCache_h
5#define vtkDataObjectMeshCache_h
6
7#include "vtkCommonCacheModule.h" // Export macro
8
9#include "vtkObject.h"
10#include "vtkSetGet.h" // for Set/Get macros
11#include "vtkSmartPointer.h" // for smart pointer
12#include "vtkWeakPointer.h" // for weak pointer
13
14#include <set> // for set
15#include <string> // for string
16
17VTK_ABI_NAMESPACE_BEGIN
18
19class vtkAlgorithm;
20class vtkDataObject;
21class vtkDataSet;
23
73class VTKCOMMONCACHE_EXPORT vtkDataObjectMeshCache : public vtkObject
74{
75public:
78 void PrintSelf(ostream& os, vtkIndent indent) override;
79
86 struct Status
87 {
91 bool OriginalDataDefined = false;
95 bool ConsumerDefined = false;
100 bool CacheDefined = false;
108 bool ConsumerUnmodified = false;
113
117 bool enabled()
118 {
119 return this->OriginalDataDefined && this->ConsumerDefined && this->CacheDefined &&
120 this->ConsumerUnmodified && this->OriginalMeshUnmodified && this->AttributesIdsExists;
121 }
122
127 bool operator==(const Status& other) const
128 {
129 return other.OriginalDataDefined == this->OriginalDataDefined &&
130 other.ConsumerDefined == this->ConsumerDefined &&
131 other.CacheDefined == this->CacheDefined &&
132 other.OriginalMeshUnmodified == this->OriginalMeshUnmodified &&
133 other.ConsumerUnmodified == this->ConsumerUnmodified &&
134 other.AttributesIdsExists == this->AttributesIdsExists;
135 }
136
141 bool operator!=(const Status& other) const { return !(*this == other); }
142
146 void PrintSelf(ostream& os, vtkIndent indent);
147 };
148
153
158 void SetConsumer(vtkAlgorithm* consumer);
159
170
178
182 void AddOriginalIds(int attribute, const std::string& name);
183
188 void RemoveOriginalIds(int attribute);
189
195
202 void ForwardAttribute(int attribute);
203
216
220 static std::string GetDefaultIdsName();
221
228
235
246
252 static std::map<unsigned int, vtkMTimeType> GetDataObjectMeshMTimes(vtkDataObject* object);
253
260
267
269
276 void AddPreservedCachedArray(const std::string& arrayName);
278 std::set<std::string> GetPreservedCachedArrays();
280
285 void UpdateCache(vtkDataObject* newObject);
286
292
296 bool IsSupportedData(vtkDataObject* dataobject) const;
297
298protected:
300 ~vtkDataObjectMeshCache() override = default;
307 void ForwardAttributes(vtkDataSet* input, vtkDataSet* cache, vtkDataSet* output, int attribute,
308 const std::string& name);
312
313private:
315 void operator=(const vtkDataObjectMeshCache&) = delete;
316
320 vtkDataObject* GetOriginalDataObject() const;
321
325 vtkMTimeType GetOriginalMeshTime() const;
326
330 std::set<vtkMTimeType> GetOriginalMeshTimes() const;
331
338 vtkIdType GetNumberOfDataSets(vtkDataObject* dataobject) const;
339
346 bool CacheHasRequestedIds() const;
347
351 void ClearAttributes(vtkDataObject*);
352
357 bool HasConsumerNoInputPort() const;
358
360
364 vtkWeakPointer<vtkDataSet> OriginalDataSet;
365 vtkWeakPointer<vtkCompositeDataSet> OriginalCompositeDataSet;
367
369
372 std::map<int, std::string> OriginalIdsName;
373 std::set<int> PreservedInputAttributes;
374 std::set<std::string> PreservedCachedArrays;
376
378
382 vtkMTimeType CachedConsumerTime = 0;
383 std::map<unsigned int, vtkMTimeType> CachedOriginalLeavesTime;
385};
386
387VTK_ABI_NAMESPACE_END
388#endif
abstract superclass for composite (multi-block or AMR) datasets
~vtkDataObjectMeshCache() override=default
void ForwardAttribute(int attribute)
Add attribute in the forward list.
void PreservedInputAllAttributes()
Original Ids.
std::set< std::string > GetPreservedCachedArrays()
Keep cached arrayName array when copying cache to output.
static vtkMTimeType GetDataObjectMeshMTime(vtkDataObject *object)
Return the mesh MTime for the given dataobject, as used for the Cache.
void ClearPreservedInputAttributes()
Original Ids.
void CopyCacheToDataObject(vtkDataObject *output)
Fill given dataset with cached data.
void RemoveOriginalIds(int attribute)
Remove ids array name for attribute type.
static void CreateTemporaryOriginalIdsArrays(vtkDataObject *object)
Add an ids array on underlying PointData and CellData.
void ForwardAttributesToDataSet(vtkDataSet *input, vtkDataSet *cache, vtkDataSet *output)
Forward dataset attributes from OriginalDataObject to output.
void ForwardAttributes(vtkDataSet *input, vtkDataSet *cache, vtkDataSet *output, int attribute, const std::string &name)
Forward dataset attributes from OriginalDataObject to output.
void UpdateCache(vtkDataObject *newObject)
Set given dataset as the new Cache.
vtkDataObjectMeshCache()=default
void AddPreservedCachedArray(const std::string &arrayName)
Keep cached arrayName array when copying cache to output.
static void CleanupTemporaryOriginalIds(vtkDataObject *object)
Cleanup the temporary array, as we do not want it to exists outside of this filter.
void SetOriginalDataObject(vtkDataObject *original)
Set the original dataobject.
void InvalidateCache()
Invalidate cache.
void ForwardAttributesToComposite(vtkCompositeDataSet *input, vtkCompositeDataSet *output)
Forward dataset attributes from OriginalDataObject to output.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void ClearOriginalIds()
Clear all original ids.
void AddPreservedInputAttributes(int)
Preserve input attribute, i.e.
void AddOriginalIds(int attribute, const std::string &name)
Original Ids.
static std::string GetDefaultIdsName()
Return a default name for original ids.
static vtkDataObjectMeshCache * New()
std::set< int > GetPreservedInputAttributes()
Original Ids.
void SetConsumer(vtkAlgorithm *consumer)
Set the consumer of this cache.
void ClearPreservedCachedArray()
Keep cached arrayName array when copying cache to output.
Status GetStatus() const
Compute and returns the current cache status.
static std::map< unsigned int, vtkMTimeType > GetDataObjectMeshMTimes(vtkDataObject *object)
Return a map of MeshMTime stored by composite flat index.
bool IsSupportedData(vtkDataObject *dataobject) const
Return true if dataobject is of a supported type.
general representation of visualization data
abstract class to specify dataset behavior
Definition vtkDataSet.h:166
a simple class to control print indentation
Definition vtkIndent.h:108
Hold a reference to a vtkObjectBase instance.
a weak reference to a vtkObject.
Structure to handle the current cache status.
bool OriginalMeshUnmodified
True if OriginalDataSet mesh was not modified since last cache update.
void PrintSelf(ostream &os, vtkIndent indent)
Print members.
bool OriginalDataDefined
True if OriginalDataObject is set.
bool operator==(const Status &other) const
Return true if and only if every members are equals.
bool CacheDefined
True if Cache with initialized.
bool ConsumerDefined
True if Consumer is set.
bool operator!=(const Status &other) const
Return true if both object are not equals.
bool ConsumerUnmodified
True if Consumer was not modified since last cache update.
bool AttributesIdsExists
True if attributes ids exists.
bool enabled()
Return true if the cache can safely and meaningfully be used.
int vtkIdType
Definition vtkType.h:363
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:318
#define vtkAlgorithm