Cortex  10.0.0-a4
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
IECore::Primitive Class Referenceabstract

#include <Primitive.h>

+ Inheritance diagram for IECore::Primitive:

Public Member Functions

 IE_CORE_DECLAREABSTRACTOBJECT (Primitive, VisibleRenderable)
 
template<typename T >
T * variableData (const std::string &name, PrimitiveVariable::Interpolation requiredInterpolation=PrimitiveVariable::Invalid)
 
template<typename T >
const T * variableData (const std::string &name, PrimitiveVariable::Interpolation requiredInterpolation=PrimitiveVariable::Invalid) const
 
template<typename T >
T::Ptr expandedVariableData (const std::string &name, PrimitiveVariable::Interpolation requiredInterpolation=PrimitiveVariable::Invalid) const
 
bool isPrimitiveVariableValid (const PrimitiveVariable &pv) const
 Returns true if the given primitive variable has the correct size for its interpolation type.
 
bool arePrimitiveVariablesValid () const
 Returns true if all primitive variables have the correct size for their interpolation type.
 
PrimitiveVariable::Interpolation inferInterpolation (size_t numElements) const
 
PrimitiveVariable::Interpolation inferInterpolation (const Data *data) const
 
Imath::Box3f bound () const override
 
virtual size_t variableSize (PrimitiveVariable::Interpolation interpolation) const =0
 
virtual void topologyHash (MurmurHash &h) const =0
 Hash representing the topology only.
 
- Public Member Functions inherited from IECore::VisibleRenderable
 IE_CORE_DECLAREABSTRACTOBJECT (VisibleRenderable, Renderable)
 
- Public Member Functions inherited from IECore::Renderable
 IE_CORE_DECLAREABSTRACTOBJECT (Renderable, BlindDataHolder)
 
virtual void render (Renderer *renderer) const =0
 Render the object held by this instance via the given renderer.
 
- Public Member Functions inherited from IECore::BlindDataHolder
 BlindDataHolder (CompoundDataPtr data)
 
 IE_CORE_DECLAREOBJECT (BlindDataHolder, Object)
 
CompoundDatablindData ()
 Return the blind data for modification.
 
const CompoundDatablindData () const
 
- Public Member Functions inherited from IECore::Object
 IE_CORE_DECLARERUNTIMETYPED (Object, RunTimeTyped)
 
ObjectPtr copy () const
 
void copyFrom (const Object *other)
 
void save (IndexedIOPtr ioInterface, const IndexedIO::EntryID &name) const
 
virtual bool isEqualTo (const Object *other) const =0
 
virtual bool isNotEqualTo (const Object *other) const
 
bool operator== (const Object &other) const
 Calls isEqualTo() for people who prefer to use the operator syntax.
 
bool operator!= (const Object &other) const
 Calls isNotEqualTo() for people who prefer to use the operator syntax.
 
size_t memoryUsage () const
 Returns the number of bytes this instance occupies in memory.
 
MurmurHash hash () const
 
virtual void hash (MurmurHash &h) const =0
 
- Public Member Functions inherited from IECore::RunTimeTyped
 IE_CORE_DECLAREMEMBERPTR (RunTimeTyped)
 
virtual TypeId typeId () const
 
virtual const char * typeName () const
 
virtual bool isInstanceOf (TypeId typeId) const
 
virtual bool isInstanceOf (const char *typeName) const
 
- Public Member Functions inherited from IECore::RefCounted
 IE_CORE_DECLAREMEMBERPTR (RefCounted)
 
void addRef () const
 Add a reference to the current object.
 
void removeRef () const
 Remove a reference from the current object.
 
RefCount refCount () const
 Returns the current reference count.
 

Static Public Member Functions

static PrimitiveVariableMap loadPrimitiveVariables (const IndexedIO *ioInterface, const IndexedIO::EntryID &name, const IndexedIO::EntryIDList &primVarNames)
 
- Static Public Member Functions inherited from IECore::Object
static void registerType (TypeId typeId, const std::string &typeName, CreatorFn creator, void *data=nullptr)
 Register a new Object-derived type with the system. The specified void* data is passed into the creator function.
 
static bool isType (TypeId typeId)
 Returns true if typeId is a valid registered Object type.
 
static bool isType (const std::string &typeName)
 Returns true if typeName is a valid registered Object type.
 
static bool isAbstractType (TypeId typeId)
 
static bool isAbstractType (const std::string &typeName)
 As above but taking a type name.
 
static ObjectPtr create (TypeId typeId)
 
static ObjectPtr create (const std::string &typeName)
 
static ObjectPtr load (ConstIndexedIOPtr ioInterface, const IndexedIO::EntryID &name)
 
- Static Public Member Functions inherited from IECore::RunTimeTyped
static TypeId staticTypeId ()
 Returns the TypeId for this class, without needing an instance.
 
static const char * staticTypeName ()
 Returns the type name for this class, without needing an instance.
 
static TypeId baseTypeId ()
 
static const char * baseTypeName ()
 
static bool inheritsFrom (TypeId typeId)
 Returns true if this class inherits from the specified type.
 
static bool inheritsFrom (const char *typeName)
 Returns true if this class inherits from the specified type.
 
static bool inheritsFrom (TypeId type, TypeId baseType)
 Returns true if type inherits from baseType.
 
static bool inheritsFrom (const char *typeName, const char *baseTypeName)
 Returns true if typeName inherits from baseTypeName.
 
static TypeId baseTypeId (TypeId typeId)
 Returns the base type of the given type, or InvalidTypeId if no such base exists.
 
static const std::vector< TypeId > & baseTypeIds (TypeId typeId)
 
static const std::set< TypeId > & derivedTypeIds (TypeId typeId)
 
static TypeId typeIdFromTypeName (const char *typeName)
 
static const char * typeNameFromTypeId (TypeId typeId)
 
static void registerType (TypeId derivedTypeId, const char *derivedTypeName, TypeId baseTypeId)
 Allows external modules to register their own type ids.
 

Public Attributes

PrimitiveVariableMap variables
 Variables a stored as a public map for easy manipulation.
 

Additional Inherited Members

- Public Types inherited from IECore::Object
typedef ObjectPtr(* CreatorFn) (void *data)
 
- Public Types inherited from IECore::RunTimeTyped
typedef RefCounted BaseClass
 A typedef for the class this class derives from. All RunTimeTyped classes define this typedef.
 
- Public Types inherited from IECore::RefCounted
typedef size_t RefCount
 
- Protected Types inherited from IECore::RunTimeTyped
typedef std::map< TypeId, TypeIdBaseTypeRegistryMap
 
typedef std::map< TypeId, std::vector< TypeId > > BaseTypesRegistryMap
 
typedef std::map< TypeId, std::set< TypeId > > DerivedTypesRegistryMap
 
typedef tbb::spin_rw_mutex Mutex
 
typedef std::map< TypeId, std::string > TypeIdsToTypeNamesMap
 
typedef std::map< std::string, TypeIdTypeNamesToTypeIdsMap
 
- Protected Member Functions inherited from IECore::Object
virtual void copyFrom (const Object *other, CopyContext *context)=0
 
 IE_CORE_DECLAREPTR (LoadContext)
 
virtual void save (SaveContext *context) const =0
 
virtual void load (LoadContextPtr context)=0
 
virtual void memoryUsage (MemoryAccumulator &accumulator) const =0
 
- Static Protected Member Functions inherited from IECore::RunTimeTyped
static BaseTypeRegistryMap & baseTypeRegistry ()
 
static DerivedTypesRegistryMap & derivedTypesRegistry ()
 
static BaseTypesRegistryMap & completeBaseTypesRegistry ()
 
static DerivedTypesRegistryMap & completeDerivedTypesRegistry ()
 
static void derivedTypeIdsWalk (TypeId typeId, std::set< TypeId > &)
 
static TypeIdsToTypeNamesMap & typeIdsToTypeNames ()
 
static TypeNamesToTypeIdsMap & typeNamesToTypeIds ()
 
- Static Protected Attributes inherited from IECore::RunTimeTyped
static Mutex g_baseTypeIdsMutex
 
static Mutex g_derivedTypeIdsMutex
 

Detailed Description

The Primitive class defines an abstract base for Renderable primitives. Primitives are expected to be objects which are visible in final rendered images rather than Renderables which just change some part of the renderer state (such as an attribute). Primitives may hold "primitive variables" which are simply values which vary over the surface of the Primitive and can be used by the renderer to define various aspects of its appearance.

Todo:
Validation of variableSizes before rendering.

Member Function Documentation

Imath::Box3f IECore::Primitive::bound ( ) const
overridevirtual

Implemented to return a box containing all the points in the variable "P" if it exists.

Implements IECore::VisibleRenderable.

Reimplemented in IECore::SpherePrimitive.

template<typename T >
T::Ptr IECore::Primitive::expandedVariableData ( const std::string &  name,
PrimitiveVariable::Interpolation  requiredInterpolation = PrimitiveVariable::Invalid 
) const

Use expandedVariableData() to find a named variable, expand indices if they exist, and cast to the requested data type. If the variable is not indexed, a direct copy will be returned. Note that the PrimitiveVariable itself remains unchanged. If requiredInterpolation is specified and does not match the interpolation of the variable, or if the type does not match the data, then nullptr is returned.

Todo:
: Provide accessors that return an iterator range for the data, providing transparent access to the indexed data without actually copying and expanding.
PrimitiveVariable::Interpolation IECore::Primitive::inferInterpolation ( size_t  numElements) const

Guesses a suitable interpolation type for a PrimitiveVariable containing the specified number of data elements. Returns PrimitiveVariable::Invalid if no such interpolation exists. Note that for a given size multiple interpolation types may well be valid, so this method may not always give the desired results. In the case of multiple suitable types, interpolations are given the following priority (highest first) :

Constant Uniform Vertex Varying FaceVarying

PrimitiveVariable::Interpolation IECore::Primitive::inferInterpolation ( const Data data) const

Convenience function which finds the size of data and calls the above method.

static PrimitiveVariableMap IECore::Primitive::loadPrimitiveVariables ( const IndexedIO ioInterface,
const IndexedIO::EntryID name,
const IndexedIO::EntryIDList &  primVarNames 
)
static

Utility function that can be used in place of Object::load() to load only the primitive variables from a Primitive object stored in a IndexedIO file. The function tries to load the requested primitive variables and will ignore the ones that do not exist in the file.

Parameters
ioInterfaceFile handle where the Primitive is stored.
nameName of the entry where the Primitive is stored under the file location.
primVarNamesList of primitive variable names that will be attempted to be loaded.
template<typename T >
T* IECore::Primitive::variableData ( const std::string &  name,
PrimitiveVariable::Interpolation  requiredInterpolation = PrimitiveVariable::Invalid 
)

Use variableData() to find a named variable and cast to the requested data type. If requiredInterpolation is specified and does not match the interpolation of the variable, or if the type does not match the data, then nullptr is returned. These methods throw if the PrimitiveVariable is indexed, as the returned data would not be sufficient for manipulating the PrimitiveVariable. To access indexed variables, either call expandedVariableData and take ownership of the copied data, or get them directly from the PrimitiveVariableMap to manipulate them in-place.

virtual size_t IECore::Primitive::variableSize ( PrimitiveVariable::Interpolation  interpolation) const
pure virtual

Returns the number of values a piece of data must provide for the given interpolation type. Must be implemented in all derived classes.

Implemented in IECore::MeshPrimitive, IECore::PatchMeshPrimitive, IECore::SpherePrimitive, IECore::NURBSPrimitive, IECore::PointsPrimitive, IECore::CurvesPrimitive, and IECore::DiskPrimitive.


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