Hello @JohnTerenece,
thank you for reaching out to us. Unfortunately, our answer is mostly the same as it was for the previous topic on this plugin of yours.
You are using the MoData tags in a way not intended by us. It is not supported by our SDK to implement a custom MoGraph generator and you are therefore not intended to populate and manage your own MoData tags. There is nothing preventing you from doing it anyways, this however will then be out of scope of support as declared in our
Forum Guidelines under "Scope of Support".
We cannot debug your code for you, especially when the employed techniques are a violation of point one listed here. This is also outlined in "Scope of Support".
You are also misusing the maxon API. Specifically, the error system, as you cannot just step over all errors which are returned. Which is what you do when you store them in some fields attached to your plugin implementation; never to be used or looked at again. Which can introduce all sorts of problems. The cases I saw do look unlikely to go wrong, but this is still a fundamental misuse of our API. See the end of my posting for details.
Finally, about your question. I would look at your CheckDirty(), since this is the likely culprit for your problems. But we cannot debug that for you. When you can show us that something is not being flagged as dirty what was flagged before, we will be glad to provide a context for that. Please also note that example code should be condensed as also outlined in our Forum Guidelines.
I understand that this is not the support you did hope for, but these limitations of scope of support must be enforced by us to a certain degree, as it would otherwise become a boundless task.
Thank you for your understanding,
Ferdinand
maxon::Result Example
What you do:
void EffectorTestClass::CheckDirty(BaseObject *op, BaseDocument *doc)
{
// ...
if (op->GetDown() != nullptr)
// This could fail and you just step over it.
resultBaseObject = objArray.Append(op->GetDown());
// ...
flags = data->GetFlags(doc, object);
if ((flags & 1) == 1)
{
// This could fail and you just step over it.
resultBaseObject = objArray.Append(object);
}
// ...
}
What you should do:
void EffectorTestClass::CheckDirty(BaseObject *op, BaseDocument *doc)
{
// An error scope handler that brings the classic and maxon API together.
iferr_scope_handler
{
// you could also write to one of the loggers here, e.g.
ApplicationOutput("Error in CheckDirty() @", err);
return false;
}
// ...
if (op->GetDown() != nullptr)
objArray.Append(op->GetDown()) iferr_return;
// ...
flags = data->GetFlags(doc, object);
if ((flags & 1) == 1)
{
objArray.Append(object) iferr_return;
}
// ...
}