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

Log in to reply