SMTK
@SMTK_VERSION@
Simulation Modeling Tool Kit

A base class for objects which can provide renderable geometry. More...
#include <Geometry.h>
Public Types  
using  GenerationNumber = size_t 
An integral type to hold monotonically increasing generation numbers (a.k.a. More...  
using  BoundingBox = std::array< double, 6 > 
A bounding box is represented as an array of 6 numbers, ordered xmin, xmax, ymin, ymax, zmin, zmax.  
using  Visitor = std::function< bool(const resource::PersistentObject::Ptr &, GenerationNumber)> 
The signature of functions used to visit all objects with tessellation data.  
using  Specification = std::tuple< smtk::resource::ResourcePtr, const smtk::geometry::Backend & > 
The data needed to request a geometry provider (a resource and backend). More...  
using  UniquePtr = std::unique_ptr< smtk::geometry::Geometry > 
The return type of the geometryprovider generator class. More...  
Public Member Functions  
smtkTypeMacroBase (Geometry)  
virtual const Backend &  backend () const =0 
Every provider must indicate the backend for which it is specialized.  
virtual ResourcePtr  resource () const =0 
Every provider must indicate the resource it provides geometry for.  
GenerationNumber  lastModified () const 
Indication of when the geometry has last been updated. More...  
virtual GenerationNumber  generationNumber (const resource::PersistentObject::Ptr &) const =0 
Query methods. More...  
virtual void  bounds (const resource::PersistentObject::Ptr &, BoundingBox &bds) const =0 
Populate the bounds (bds) with the given object's bounds.  
virtual bool  readLockRequired () const 
Return true if the resource owning this geometryProvider must be readlocked before rendering prep. More...  
virtual void  visit (Visitor fn) const =0 
Visit each persistent object that has renderable geometry.  
virtual void  markModified (const resource::PersistentObject::Ptr &obj)=0 
Modfication methods. More...  
virtual bool  erase (const smtk::common::UUID &uid)=0 
Inform the geometry provider that an object is about to be or has been deleted. More...  
Static Public Attributes  
static constexpr GenerationNumber  Invalid = std::numeric_limits<GenerationNumber>::lowest() 
A special generation number that marks an object as having no geometric representation.  
static constexpr GenerationNumber  Initial = std::numeric_limits<GenerationNumber>::lowest() + 1 
The lowest valid generation number (which may be used as the initial value).  
Protected Attributes  
std::atomic< GenerationNumber >  m_lastModified 
A base class for objects which can provide renderable geometry.
Resources which have renderable data should provide access to that data by returning a concrete instance of this class. Subclasses present in other libraries (which have additional dependencies on e.g., VTK, VTKm) provide the API by which the geometry is exchanged. However, this base class provides related functionality independent of any rendering that all renderable objects must share in common.
Resources register a Generator with their resource index as the input and a subclass of Geometry as the output. Then, applications or scripts can ask the resource for a geometry provider and query component/resource geometric bounds. They can also mark components and resources as "dirty" (indicating that any cached geometry or bounds information should be discarded). Each resource produces a single instance of some subclass of this class. The geometry instance for a resource should be capable of providing geometry for the entire resource and/or any of its components as needed.
Producing renderable geometry can be computationally expensive, so this class provides a generation number associated with the geometry. So long as the generation number is unchanged, so is the geometry. Classes (such as vtkModelMultiBlockSource) need only compare the generation number to the value they obtained when last querying the geometryProvider; if it is the same, then no changes have occurred and the prior geometry can be used (saving the expense of recomputing it).
Similarly, it is best for objects to cache bounds. These may even be available without resorting to discretizing the model geometry, so this class also provides a method for obtaining bounds as a 6tuple (xmin, xmax, ymin, ymax, zmin, zmax).
using smtk::geometry::Geometry::GenerationNumber = size_t 
An integral type to hold monotonically increasing generation numbers (a.k.a.
generation numbers, sequence numbers, version numbers, timestamps) used to indicate when the tessellation has changed.
Note that 0 is reserved; no object should have generation number 0.
using smtk::geometry::Geometry::Specification = std::tuple<smtk::resource::ResourcePtr, const smtk::geometry::Backend&> 
The data needed to request a geometry provider (a resource and backend).
The "using" statements below this class declaration reference this to make registering geometry providers simpler and less errorprone;
using smtk::geometry::Geometry::UniquePtr = std::unique_ptr<smtk::geometry::Geometry> 
The return type of the geometryprovider generator class.
Geometry providers are unique pointers to ensure that copies of cached geometry are not copied accidentally.

pure virtual 
Inform the geometry provider that an object is about to be or has been deleted.
This is different from markModified(), which simply removes any cached geometry; this method tells the geometry provider never to ask for the geometry of the given uid again.
Implemented in smtk::geometry::Cache< smtk::extension::vtk::geometry::Geometry >.

pure virtual 
Query methods.
These methods are invoked by consumers of geometry. Return a monotonically increasing number that changes whenever the object's geometry changes.

inline 
Indication of when the geometry has last been updated.
This may be used by consumers to determine whether any object's renderable geometry has been updated.
Consumers are responsible for remembering the previously returned value. Whenever this method returns a larger number, at least one object has been updated.
Providers are responsible for updating m_lastModified.

pure virtual 
Modfication methods.
These methods are typically invoked by operations that create or modify objects with renderable geometry. There is no requirement that these methods be used by subclasses (there may be alternate methods) Mark the object's geometry as modified. Calling this should increment the generation number and recompute any tessellation the next time the object is queried. This is a way for applications to "force refresh" a tessellation.

inlinevirtual 
Return true if the resource owning this geometryProvider must be readlocked before rendering prep.
The default is to return true (i.e., conservatively assume zerocopying is performed).