MDL SDK API nvidia_logo_transpbg.gif Up
mi::neuraylib::IAttribute_set Class Referenceabstract

The attribute set comprises all attributes attached to a database element. More...

#include <iattribute_set.h>

Inheritance diagram for mi::neuraylib::IAttribute_set:

Public Member Functions

virtual IDatacreate_attribute (const char *name, const char *type)=0
 Creates a new attribute name of the type type. More...
 
template<class T>
T * create_attribute (const char *name, const char *type)
 Creates a new attribute name of the type type. More...
 
template<class T>
T * create_attribute (const char *name)
 Creates a new attribute name of the type T. More...
 
virtual bool destroy_attribute (const char *name)=0
 Destroys the attribute name. More...
 
virtual const IDataaccess_attribute (const char *name) const =0
 Returns a const pointer to the attribute name. More...
 
template<class T>
const T * access_attribute (const char *name) const
 Returns a const pointer to the attribute name. More...
 
virtual IDataedit_attribute (const char *name)=0
 Returns a mutable pointer to the attribute name. More...
 
template<class T>
T * edit_attribute (const char *name)
 Returns a mutable pointer to the attribute name. More...
 
virtual bool is_attribute (const char *name) const =0
 Indicates existence of an attribute. More...
 
virtual const char * get_attribute_type_name (const char *name) const =0
 Returns the type of an attribute. More...
 
virtual Sint32 set_attribute_propagation (const char *name, Propagation_type value)=0
 Sets the propagation type of the attribute name. More...
 
virtual Propagation_type get_attribute_propagation (const char *name) const =0
 Returns the propagation type of the attribute name. More...
 
virtual const char * enumerate_attributes (Sint32 index) const =0
 Returns the name of the attribute indicated by index. More...
 
- Public Member Functions inherited from mi::base::IInterface
virtual Uint32 retain () const =0
 Increments the reference count. More...
 
virtual Uint32 release () const =0
 Decrements the reference count. More...
 
virtual const IInterfaceget_interface (const Uuid &interface_id) const =0
 Acquires a const interface from another. More...
 
template<class T>
const T * get_interface () const
 Acquires a const interface from another. More...
 
virtual IInterfaceget_interface (const Uuid &interface_id)=0
 Acquires a mutable interface from another. More...
 
template<class T>
T * get_interface ()
 Acquires a mutable interface from another. More...
 
virtual Uuid get_iid () const =0
 Returns the interface ID of the most derived interface. More...
 

Additional Inherited Members

- Public Types inherited from mi::base::Interface_declare< 0x1bcb8d48, ... >
typedef Interface_declare< id1, ... > Self
 Own type. More...
 
typedef Uuid_t< id1, ... > IID
 Declares the interface ID (IID) of this interface. More...
 
- Public Types inherited from mi::base::IInterface
typedef Uuid_t<0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0> IID
 Declares the interface ID (IID) of this interface. More...
 
- Static Public Member Functions inherited from mi::base::Interface_declare< 0x1bcb8d48, ... >
static bool compare_iid (const Uuid &iid)
 Compares the interface ID iid against the interface ID of this interface and of its ancestors. More...
 
- Static Public Member Functions inherited from mi::base::IInterface
static bool compare_iid (const Uuid &iid)
 Compares the interface ID iid against the interface ID of this interface. More...
 

Detailed Description

The attribute set comprises all attributes attached to a database element.

Attributes are pieces of information that can be attached to any database element. Basically, an attribute set is a map from attribute names (strings) to attribute values (instances of mi::IData).

Attributes can be inherited in the scene graph. For details, see mi::neuraylib::Propagation_type.

Note
Setting an attribute value is done by value (or deep copy) and not by reference. This is relevant for types that usually follow reference semantics, for example, arrays or structures. Note that references to other DB elements (see mi::IRef) are still stored as reference.

Member Function Documentation

 access_attribute() [1/2]

template<class T>
const T * mi::neuraylib::IAttribute_set::access_attribute ( const char *  name) const
inline

Returns a const pointer to the attribute name.

This templated member function is a wrapper of the non-template variant for the user's convenience. It eliminates the need to call mi::base::IInterface::get_interface(const Uuid &) on the returned pointer, since the return type already is a pointer to the type T specified as template parameter.

Template Parameters
TThe interface type of the attribute.
Parameters
nameThe name of the attribute. In addition, you can also access parts of array or structure attributes directly. For an array element add the index in square brackets to the attribute name. For a structure member add a dot and the name of the structure member to the attribute name.
Returns
A pointer to the attribute, or NULL if there is no attribute with the name name or if T does not match the attribute's type.

 access_attribute() [2/2]

virtual const IData * mi::neuraylib::IAttribute_set::access_attribute ( const char *  name) const
pure virtual

Returns a const pointer to the attribute name.

Parameters
nameThe name of the attribute. In addition, you can also access parts of array or structure attributes directly. For an array element add the index in square brackets to the attribute name. For a structure member add a dot and the name of the structure member to the attribute name.
Returns
A pointer to the attribute, or NULL if there is no attribute with the name name.

 create_attribute() [1/3]

template<class T>
T * mi::neuraylib::IAttribute_set::create_attribute ( const char *  name)
inline

Creates a new attribute name of the type T.

See Types for a list of supported attribute types.

Note that there are two versions of this templated member function, one that takes only one argument (the attribute name), and another one that takes two arguments (the attribute name and the type name). The version with one argument can only be used to create a subset of supported attribute types: it supports only those types where the type name can be deduced from the template parameter, i.e., it does not support arrays and structures. The version with two arguments can be used to create attributes of any supported type (but requires the type name as parameter, which is redundant for many types). Attempts to use the version with one argument with a template parameter where the type name can not be deduced results in compiler errors.

This templated member function is a wrapper of the non-template variant for the user's convenience. It eliminates the need to call mi::base::IInterface::get_interface(const Uuid &) on the returned pointer, since the return type already is a pointer to the type T specified as template parameter.

Template Parameters
TThe interface type of the attribute.
Parameters
nameThe name of the attribute. The name must not contain "[", "]", or "."
Returns
A pointer to the created attribute, or NULL in case of failure. Reasons for failure are:
  • name or type is invalid,
  • there is already an attribute with the name name, or
  • name is the name of a reserved attribute and T does not match the required type(s) of such an attribute.

 create_attribute() [2/3]

template<class T>
T * mi::neuraylib::IAttribute_set::create_attribute ( const char *  name,
const char *  type 
)
inline

Creates a new attribute name of the type type.

See Types for a list of supported attribute types.

Note that there are two versions of this templated member function, one that takes only one argument (the attribute name), and another one that takes two arguments (the attribute name and the type name). The version with one argument can only be used to create a subset of supported attribute types: it supports only those types where the type name can be deduced from the template parameter, i.e., it does not support arrays and structures. The version with two arguments can be used to create attributes of any supported type (but requires the type name as parameter, which for redundant for many types). Attempts to use the version with one argument with a template parameter where the type name can not be deduced results in compiler errors.

This templated member function is a wrapper of the non-template variant for the user's convenience. It eliminates the need to call mi::base::IInterface::get_interface(const Uuid &) on the returned pointer, since the return type already is a pointer to the type T specified as template parameter.

Template Parameters
TThe interface type of the attribute.
Parameters
nameThe name of the attribute. The name must not contain "[", "]", or "."
typeThe type of the attribute. See Types for a list of supported attribute types.
Returns
A pointer to the created attribute, or NULL in case of failure. Reasons for failure are:
  • name or type is invalid,
  • there is already an attribute with the name name,
  • name is the name of a reserved attribute and type does not match the required type(s) of such an attribute, or
  • T does not match type.

 create_attribute() [3/3]

virtual IData * mi::neuraylib::IAttribute_set::create_attribute ( const char *  name,
const char *  type 
)
pure virtual

Creates a new attribute name of the type type.

Parameters
nameThe name of the attribute. The name must not contain "[", "]", or "."
typeThe type of the attribute. See Types for a list of supported attribute types.
Returns
A pointer to the created attribute, or NULL in case of failure. Reasons for failure are:
  • name or type is invalid,
  • there is already an attribute with the name name, or
  • name is the name of a reserved attribute and type does not match the required type(s) of such an attribute.

 destroy_attribute()

virtual bool mi::neuraylib::IAttribute_set::destroy_attribute ( const char *  name)
pure virtual

Destroys the attribute name.

Parameters
nameThe name of the attribute to destroy.
Returns
Returns true if the attribute has been successfully destroyed, and false otherwise (there is no attribute with the name name).

 edit_attribute() [1/2]

template<class T>
T * mi::neuraylib::IAttribute_set::edit_attribute ( const char *  name)
inline

Returns a mutable pointer to the attribute name.

This templated member function is a wrapper of the non-template variant for the user's convenience. It eliminates the need to call mi::base::IInterface::get_interface(const Uuid &) on the returned pointer, since the return type already is a pointer to the type T specified as template parameter.

Template Parameters
TThe interface type of the attribute.
Parameters
nameThe name of the attribute. In addition, you can also access parts of array or structure attributes directly. For an array element add the index in square brackets to the attribute name. For a structure member add a dot and the name of the structure member to the attribute name.
Returns
A pointer to the attribute, or NULL if there is no attribute with the name name or if T does not match the attribute's type.

 edit_attribute() [2/2]

virtual IData * mi::neuraylib::IAttribute_set::edit_attribute ( const char *  name)
pure virtual

Returns a mutable pointer to the attribute name.

Parameters
nameThe name of the attribute. In addition, you can also access parts of array or structure attributes directly. For an array element add the index in square brackets to the attribute name. For a structure member add a dot and the name of the structure member to the attribute name.
Returns
A pointer to the attribute, or NULL if there is no attribute with the name name.

 enumerate_attributes()

virtual const char * mi::neuraylib::IAttribute_set::enumerate_attributes ( Sint32  index) const
pure virtual

Returns the name of the attribute indicated by index.

Parameters
indexThe index of the attribute.
Returns
The name of the attribute indicated by index, or NULL if index is out of bounds.

 get_attribute_propagation()

virtual Propagation_type mi::neuraylib::IAttribute_set::get_attribute_propagation ( const char *  name) const
pure virtual

Returns the propagation type of the attribute name.

Note
This method always returns PROPAGATION_STANDARD in case of errors.

 get_attribute_type_name()

virtual const char * mi::neuraylib::IAttribute_set::get_attribute_type_name ( const char *  name) const
pure virtual

Returns the type of an attribute.

See Types for a list of supported attribute types.

Parameters
nameThe name of the attribute. In addition, you can also query parts of array or structure attributes directly. For an array element add the index in square brackets to the attribute name. For a structure member add a dot and the name of the structure member to the attribute name.
Returns
The type name of the attribute (or part thereof), or NULL if there is no attribute with the name name.
Note
The return value of this method is only valid until the next call of this method or any non-const methods on this instance.

 is_attribute()

virtual bool mi::neuraylib::IAttribute_set::is_attribute ( const char *  name) const
pure virtual

Indicates existence of an attribute.

Parameters
nameThe name of the attribute. In addition, you can also checks for parts of array or structure attributes directly. For an array element add the index in square brackets to the attribute name. For a structure member add a dot and the name of the structure member to the attribute name.
Returns
true if the attribute set contains this attribute (and the attribute contains the requested array element or struct member), false otherwise

 set_attribute_propagation()

virtual Sint32 mi::neuraylib::IAttribute_set::set_attribute_propagation ( const char *  name,
Propagation_type  value 
)
pure virtual

Sets the propagation type of the attribute name.

Returns
  • 0: Success.
  • -1: Invalid parameters (NULL pointer or invalid enum value).
  • -2: There is no attribute with name name.