Solved Jiggle modifier not cached


When I need the polygons of some object, I usually use the JOIN command to build a fresh cache, apply all the modifiers and include all the children. Works really good.

But I have a setup now, of a Plane with a Bend and a Jiggle to give some physics to the animation.
When I apply the Join command to this plane, I get the Bend deformation but never the Jiggle.
Is there anything different with the Jiggle to force it's deformation into the cache?
I see there's an Enable Cache in it, but from the docs I think it's not what I'm looking for, and of course I tried it and made no difference for me.

This is how I join the object...

	bool MakePolygon( BaseDocument* doc, BaseObject* src, PolygonObject* dst )
		auto clonedSource = static_cast<BaseObject*>( src->GetClone( COPYFLAGS_0, nullptr ) );
		CHECK_RETURN_FALSE( clonedSource != nullptr );
		// ignore object transform
		clonedSource->SetMg( Matrix() );
		// The JOIN command will make editable, appy all modifiers, and join into a single polygon
		ModelingCommandData joinCommand;
		joinCommand.op = clonedSource;
		joinCommand.doc = doc;			// cannot be null, wil not create object
		joinCommand.flags = MODELINGCOMMANDFLAGS_0;
		auto success = SendModelingCommand( MCOMMAND_CURRENTSTATETOOBJECT, joinCommand );
		if( !success || joinCommand.result == nullptr )
			BaseObject::Free( clonedSource );
			return false;
		auto result = false;
		PolygonObject* joinedPolygon = static_cast<PolygonObject*>( joinCommand.result->GetIndex(0) );
		if( joinedPolygon->IsInstanceOf( Opolygon ) )
			joinedPolygon->CopyTo( dst, COPYFLAGS_0, nullptr );
			result = true;
		BaseObject::Free( clonedSource );
		PolygonObject::Free( joinedPolygon );
		return result;

@rsodre Passing the deform cache to the command bakewd the Jiggle deformation to my polygon.

if( src->GetDeformCache() != nullptr )
	src = src->GetDeformCache();

Does this sounds ok?

Using MCOMMAND_CURRENTSTATETOOBJECT instead of MCOMMAND_JOIN seems to have the same effect. What's the difference of using each one?


Regarding the question yes, using GetDeformCache is the way to go.

Using one object, there's not too much difference between MCOMMAND_CURRENTSTATETOOBJECT and MCOMMAND_JOIN as the MCOMMAND_JOIN is calling a MCOMMAND_CURRENTSTATETOOBJECT for each object.

The obvious part is that the Join command will create one object while the other will return a hierarchy. (if there are children)


MAXON SDK Specialist

MAXON Registered Developer