DataDescriptionObjectInterface Manual
maxon::DataDescriptionObjectInterface is an interface that can be used as a base for custom interfaces. It allows to add data descriptions to the reference object.
The maxon::DataDescriptionObjectInterface defines the maxon::DataDescriptionObjectInterface::GetObjectDescription() function. This function can be used to access the description from the given object. The needed argument can be constructed with maxon::CreateDataDictionaryReferenceObject() .
// This example creates a new object of a custom type. GetObjectDescription() is used to // get the data description of that instance. The attributes are printed to the console.// create new object
// get description data maxon::DataDescription description;
// list all attributes const auto attributes = description.GetEntries() iferr_return ; for ( const auto & attribute : attributes) { const maxon::InternedId ID = attribute. Get (maxon::DESCRIPTION::BASE::IDENTIFIER) iferr_return ; const maxon::Id dataType = attribute. Get (maxon::DESCRIPTION::DATA::BASE::DATATYPE) iferr_return ; const maxon::Data defaultData = attribute. Get ( maxon::DESCRIPTION::DATA::BASE::DEFAULTVALUE ) iferr_return ; DiagnosticOutput ( "Attribute \"@\", of type @. Default value: @" , ID, dataType, defaultData); }
Another function is maxon::DataDescriptionObjectInterface::GetObjectName() , which returns the name of the objects (maxon::OBJECT::BASE::NAME) for the given language.
A custom interface can be based on maxon::DataDescriptionObjectInterface . The resulting reference object will store a data description. The default implementation of maxon::DataDescriptionObjectInterface is maxon::DataDescriptionObjectClass.
A custom implementation can re-implement maxon::DataDescriptionObjectInterface::GetObjectDescription() to modify the returned description.
// This example shows an implementation of an interface based on DataDescriptionObjectInterface. // It implements GetObjectDescription() to edit the returned DataDescription.// implementation of DescriptionElementInterface class DescriptionElementImpl : public maxon::Component <DescriptionElementImpl, DescriptionElementInterface> { // use the default implementation "DataDescriptionObjectClass" MAXON_COMPONENT ( NORMAL , maxon::DataDescriptionObjectClass); public : MAXON_METHOD void SetAttributeCount( maxon::Int count) { _count = count; } MAXON_METHOD maxon::Result<maxon::DataDescription> GetObjectDescription( const maxon::Id & category, const maxon::LanguageRef& language, const maxon::DataDictionaryObjectRef& objectData) const { iferr_scope ;
// load default description maxon::DataDescription description = super.GetObjectDescription(category, language, objectData) iferr_return ;
// check category if (category == maxon::DATADESCRIPTION_CATEGORY_DATA ) { // add dynamic attributes of the type "maxon::String" for ( maxon::Int i = 0; i < _count; ++i) { // generate dynamic ID const maxon::String number = maxon::String::IntToString(i); const maxon::String identifier( "net.maxonexample.class.descriptionElement.dynamic_" _s + number); maxon::InternedId dynamicID; dynamicID. Init (identifier) iferr_return ; const maxon::Id stringDataType = maxon::GetDataType<maxon::String>()->GetId();
// set attribute settings maxon::DataDictionary dynamicAttribute; dynamicAttribute.Set(maxon::DESCRIPTION::BASE::IDENTIFIER, dynamicID) iferr_return ; dynamicAttribute.Set(maxon::DESCRIPTION::DATA::BASE::DATATYPE, stringDataType) iferr_return ; dynamicAttribute.Set( maxon::DESCRIPTION::DATA::BASE::DEFAULTVALUE , "Hello World" _s) iferr_return ;
// add new attribute description.SetEntry(dynamicAttribute) iferr_return ; } } return description; } private : maxon::Int _count = 0; };