Iterate recursively & replace [SOLVED]

On 29/05/2015 at 13:07, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   R15 
Platform:   Windows  ;   
Language(s) :     C++  ;   PYTHON  ;

    Hi everybody,

I tried to write a method that is able to replace objects on the fly, respecting hierarchy.
Turned out, it's not that easy - thanks to recursion. ;)

Anybody has an idea and a solution to this problem?:

Working code example, minified. Problem is basically, that the method behaves abnormally when there's a single object on top without hierarchy:

void ConvertObjects(BaseObject* srcObj)   
        while (srcObj)   
               if (srcObj->GetDown())   
               if (srcObj->GetType() == Olight)   
                        BaseObject* myObj = BaseObject::Alloc(Ocone);   
                        // Do other stuff here   
                        doc->InsertObject(myObj, srcObj->GetUp(), srcObj->GetPred());   
                        BaseObject* child = srcObj->GetDown();   
                        if (child)   
                        srcObj = doc->GetFirstObject();   
               srcObj = srcObj->GetNext();   

edit: In Py, this works just fine:

import c4d   
from c4d import gui   
def ConvertObjects(srcObj) :   
    while srcObj:   
        if srcObj.GetDown() :   
        if srcObj.GetType() == c4d.Olight:   
            myObj = c4d.BaseObject(c4d.Ocone)   
            doc.InsertObject(myObj, srcObj.GetUp(), srcObj.GetPred())   
            child = srcObj.GetDown()   
            if child:   
            srcObj = doc.GetFirstObject()   
        srcObj = srcObj.GetNext()   
def main() :   
    doc = c4d.documents.GetActiveDocument()   
    if doc:   
if __name__=='__main__':   

edit #2:
I just noticed that in Python, it raises an error ("Object is not alive"). Where's my mistake?

On 29/05/2015 at 14:41, xxxxxxxx wrote:

Nevermind, figured it out. Just forgot to update the srcObj assignemtn to reference the newly created object. :)

On 08/06/2015 at 08:18, xxxxxxxx wrote:


Since you indicate you solved your problem, and it's been over a week since the last post, I'm tagging this topic as solved.

Joey Gaspe
SDK Support Engineer