[SOLVED]Generator GetSettingsInstance

On 06/12/2017 at 14:54, xxxxxxxx wrote:

User Information:
Cinema 4D Version:    
Platform:      
Language(s) :

---------
I'm currently doing a generator. In GetVirtualObjects I create another document in memory, and I would like to get/set data from this tempo doc.
So I used

BaseObject* MainObjectData::GetVirtualObjects(BaseObject* op, HierarchyHelp* hh)
{
	BaseObject* objDown = op->GetDown();
	if (!objDown)
		return nullptr;
  
	objDown = static_cast<BaseObject*>(objDown->GetClone(COPYFLAGS_0, nullptr));
  
	BaseDocument* copyDoc = BaseDocument::Alloc();
	if (!copyDoc)
		return nullptr;
  
	BaseObject* nullMaster = BaseObject::Alloc(Onull);
	if (!nullMaster)
		return nullptr;
  
	copyDoc->InsertObject(nullMaster, nullptr, nullptr);
	objDown->InsertUnder(nullMaster);
  
	// I know doc point to the same object of nullmaster
	// But in my plugin I get informations from another function and use GetDocument, So I do it in my example.
	BaseDocument* doc = objDown->GetDocument();
	if (!doc)
		return nullptr;
  
	// Always return me nullptr why?
	BaseContainer* bc = doc->GetSettingsInstance(DOCUMENTSETTINGS_GENERAL);
	if (!bc)
		return nullptr;
  
	BaseObject::Free(nullMaster);
	BaseDocument::Free(copyDoc);
  
	BaseObject* cube = BaseObject::Alloc(Ocube);
	return cube;
}

it's return a nullptr.

This also fails

	BaseContainer* bc = doc->GetDataInstance();
	if (!bc)
		return nullptr;
	bc = bc->GetContainerInstance(DOCUMENTSETTINGS_GENERAL);
	if (!bc)
		return nullptr;

While for different type it's work fine

 doc->GetSettingsInstance(DOCUMENTSETTINGS_DOCUMENT);

Thanks in advance

On 07/12/2017 at 02:13, xxxxxxxx wrote:

Hi,

this actually has nothing to do with the use inside of a ObjectData plugin.
DOCUMENTSETTINGS_GENERAL simply can not be retrieved via GetSettingsInstance(), but only via BaseDocument::GetData().
In the BaseDocument manual this gets mentioned. We'll add this information to the API references, too (by the way, the BaseDocument::GetData() link in the manual currently links to BaseList2D::GetData(), this will be fixed as well).

On 07/12/2017 at 03:13, xxxxxxxx wrote:

Not sure to understand the pattern decision made behind of this (a function that could fail if a specific parameter is given, while parameter are from the same enum)
But it's work !

Thanks.