Object Generator Plugin With Dynamic Objects



  • Hello Plugincafe :)

    I have a simple task but unfortunately, I can't find the solution in docs.

    I have an object generator plugin which generates a cube object with a rigid body tag onto it.
    When I'm playing the animation, no dynamics takes place.

    class testPlugin(c4d.plugins.ObjectData):
    
        def GetVirtualObjects(self, op, hh):
    
            cube = c4d.BaseObject(c4d.Ocube) #Cube
            tag = cube.MakeTag(180000102) #Rigid body tag
            
            #This Crashes C4D.
            #op.GetDocument().ExecutePasses(c4d.threading.GeGetCurrentThread(), True, True, True, c4d.BUILDFLAGS_INTERNALRENDERER)
    
            return cube
    

    I also tried to create a virtual document and then return the clone but the result is the same. no animation takes place.

    I guess I'm using ExecutePasses() in a wrong way.

    Would like to get more info about this.



  • it is worth mentioning that it would be better if this code will return an error message instead of crashing c4d. 😁

    op.GetDocument().ExecutePasses(c4d.threading.GeGetCurrentThread(), True, True, True, c4d.BUILDFLAGS_INTERNALRENDERER)
    


  • Hello,

    GetVirtualObjects() is called when the scene is updated. ExecutePasses() updates the scene. So you want to update the scene while the scene is updated. That's bad.

    Also, you create a virtual cube and add a tag to that cube. But you do not add the cube to any document. So updating any document would have no effect on that cube.

    Typically, one does not add a simulation tag to a virtual object. Such a tag is typically added to the generator that create the virtual objects e.g. you add a simulation tag to a MoGraph cloner to animate it virtual child objects.

    best wishes,
    Sebastian


Log in to reply