Enzo
Loading...
Searching...
No Matches
enzo::geo::Primitive Class Referenceabstract

Base class for all primitive types in the engine. More...

#include <Primitive.h>

Inheritance diagram for enzo::geo::Primitive:
enzo::geo::Camera enzo::geo::Mesh

Classes

struct  PointOffsets
 

Public Member Functions

 Primitive (std::string_view path="/prim")
 
 Primitive (const Primitive &other)
 
Primitiveoperator= (const Primitive &rhs)
 
virtual PrimType getType () const =0
 
virtual std::shared_ptr< Primitiveclone () const =0
 
virtual TransformClass transformType () const =0
 
virtual void applyTransform (const Matrix4 &mat, TransformClass transformClass)=0
 
void applyTransform (const Transform &transform, TransformClass transformClass)
 
virtual bool canMerge () const
 
virtual void merge (std::shared_ptr< Primitive > other)
 
void incrementVersion ()
 
virtual bool hasPoints () const
 
Offset getNumPoints () const
 
virtual PointOffsets getPoints ()
 
virtual bool isValidPoint (Offset offset) const
 
virtual void deletePoints (const std::vector< Offset > &pointOffsets)
 
virtual void defragment ()
 Compacts storage, removing entries marked invalid so offsets are contiguous again.
 
attr::AttributeHandle< intT > addIntAttribute (attr::AttributeOwner owner, std::string name, bool intrinsic=false)
 
attr::AttributeHandleBool addBoolAttribute (attr::AttributeOwner owner, std::string name, bool intrinsic=false, bool isPrivate=false)
 
attr::AttributeHandle< Vector3 > addVector3Attribute (attr::AttributeOwner owner, std::string name, bool intrinsic=false)
 
attr::AttributeHandle< Matrix4 > addMatrix4Attribute (attr::AttributeOwner owner, std::string name, bool intrinsic=false)
 
std::shared_ptr< attr::AttributegetAttribByName (attr::AttributeOwner owner, std::string name, bool includeIntrinsics=false)
 
std::shared_ptr< const attr::AttributegetAttribByName (attr::AttributeOwner owner, std::string name, bool includeIntrinsics=false) const
 Const counterpart of getAttribByName.
 
const size_t getNumAttributes (const attr::AttributeOwner owner) const
 
std::weak_ptr< const attr::AttributegetAttributeByIndex (attr::AttributeOwner owner, unsigned int index) const
 
bool attributeExists (attr::AttributeOwner owner, std::string name)
 
attr::AttributeHandleBool createGroup (attr::AttributeOwner owner, std::string name)
 Creates a group on the given owner.
 
void addToGroup (attr::AttributeOwner owner, const std::string &name, const std::vector< Offset > &offsets)
 Marks the given offsets as members of the group.
 
std::shared_ptr< attr::AttributegetGroupByName (attr::AttributeOwner owner, const std::string &name) const
 Looks up a group by name.
 
size_t getNumGroups (attr::AttributeOwner owner) const
 Returns how many groups live on the given owner.
 
std::weak_ptr< const attr::AttributegetGroupByIndex (attr::AttributeOwner owner, unsigned int index) const
 Returns the group at the given index in the owner's group store.
 
attr::AttributeHandleBool createPointGroup (std::string name)
 Creates a point group.
 
attr::AttributeHandleBool createPrimitiveGroup (std::string name)
 Creates a primitive group.
 
void addToPointGroup (const std::string &name, const std::vector< Offset > &offsets)
 Marks the given offsets as members of the point group.
 
void addToPrimitiveGroup (const std::string &name, const std::vector< Offset > &offsets)
 Marks the given offsets as members of the primitive group.
 
String getPath () const
 
void setPath (const String &path)
 

Protected Member Functions

virtual attr::attribVector & getAttributeStore (const attr::AttributeOwner &owner)
 
virtual const attr::attribVector & getAttributeStore (const attr::AttributeOwner &owner) const
 
virtual attr::attribVector & getGroupStore (const attr::AttributeOwner &owner)
 
virtual const attr::attribVector & getGroupStore (const attr::AttributeOwner &owner) const
 
attr::attribVector deepCopyAttributes (attr::attribVector source)
 
size_t getElementCount (const attr::AttributeOwner &owner) const
 Returns the number of elements in the given owner's store.
 

Protected Attributes

std::string path_ = "/prim"
 
attr::attribVector pointAttributes_
 
attr::attribVector primitiveAttributes_
 
attr::attribVector pointGroups_
 
attr::attribVector primitiveGroups_
 

Detailed Description

Base class for all primitive types in the engine.

A Primitive is the unit of geometry exchanged between nodes. It holds primitive-level attributes (one value per object) and provides the attribute management API shared by all primitive types.

Point attributes are stored on the base class since many primitive types have points. Use hasPoints() to check before accessing them.

Subclasses (e.g. Mesh) add their own attribute owners and geometry.

Member Function Documentation

◆ createGroup()

attr::AttributeHandleBool enzo::geo::Primitive::createGroup ( attr::AttributeOwner owner,
std::string name )

Creates a group on the given owner.

Groups are boolean flags that mark elements as members. A group and a regular attribute can share a name without colliding.

Returns
Handle to the new group.

◆ createPointGroup()

attr::AttributeHandleBool enzo::geo::Primitive::createPointGroup ( std::string name)
inline

Creates a point group.

Returns
Handle to the new group.

◆ createPrimitiveGroup()

attr::AttributeHandleBool enzo::geo::Primitive::createPrimitiveGroup ( std::string name)
inline

Creates a primitive group.

Returns
Handle to the new group.

◆ defragment()

virtual void enzo::geo::Primitive::defragment ( )
inlinevirtual

Compacts storage, removing entries marked invalid so offsets are contiguous again.

Reimplemented in enzo::geo::Mesh.

◆ getAttribByName()

std::shared_ptr< const attr::Attribute > enzo::geo::Primitive::getAttribByName ( attr::AttributeOwner owner,
std::string name,
bool includeIntrinsics = false ) const

Const counterpart of getAttribByName.

Returns a read only shared pointer so the caller cannot mutate the attribute through a const Primitive.

◆ getElementCount()

size_t enzo::geo::Primitive::getElementCount ( const attr::AttributeOwner & owner) const
protected

Returns the number of elements in the given owner's store.

Returns
The element count.

◆ getGroupByName()

std::shared_ptr< attr::Attribute > enzo::geo::Primitive::getGroupByName ( attr::AttributeOwner owner,
const std::string & name ) const

Looks up a group by name.

Returns
The matching group, or nullptr if no such group exists.

The documentation for this class was generated from the following files: