THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 24/03/2010 at 12:12, xxxxxxxx wrote:
User Information:
Cinema 4D Version: 11
Platform: Mac OSX ;
Language(s) : C++ ;
---------
I have a tag plugin with a MessageData class in it. I use that MessageData to send a message to my tag which triggers the reading of data off of a queue (queue not related to the c4d api, so I know I can't get support for that part of the code).
In the MessageData I have a while loop that searches the OM for all instances of my tag. When each tag is found, the message is sent, then the process is repeated, through the entire OM. However, this isn't ideal, since when the tags are "messaged" one at a time, the first found tag empties the queue, leaving no data for subsequent tags.
Is there a way to send a message to all instances of my tag plugin in such a way that they all get a chance to receive the data in the queue before it gets emptied?
Here's the function I'm using to iterate the OM and send the message (Gets called in the CoreMessage member of the MessageData class, activating code in the tag's Message member).
Bool FindMyTags(BaseObject *fo) //recursive function, iterates through the complete object hierarchy
{
while(fo)
{
BaseTag *mytag = fo->GetTag(ID_MYPLUGINID, 0);
if(tag)
{
mytag->Message(ID_MESSAGEID);
}
FindMyTags(fo->GetDown()); //recursion
fo = fo->GetNext();
}
}
then it gets called in CoreMessages like so:
FindMyTags(doc->GetFirstObject());
thanks in advance for any insight:)
-kvb