Solved 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