GetAndCheckHierarchyClone + dynamics
-
Hi,
I'm developing generator plugin over child polygon objects.
It works good with GetAndCheckHierarchyClone + CurrentStateToObjectCommand which might have regular deformers underneath.
But it doesn't work with children with applied dynamics to them.If it GetDeformCache() + GetCache() - maybe there's an example exist?
-
I found it's because of OBJECT_INPUT flag. Single OBJECT_GENERATOR flag is allowing children to have dynamics...
However original objects are observable in the viewport for a fraction of the second every frame update.
Also Make Editable and Current State to Object applied to the generator contains generated + original objects in the null.How to get same experience as built-in generators, where no source objects are visible, and children dynamics is supported?
-
Hi @baca, you are right you should remove the OBJECT_INPUT but this imply you need to handle them correctly.
I'm not able to reproduce the delay you mention here my code
def GetVirtualObjects(self, op, hierarchyhelp): orig = op.GetDown() if orig is None: return None dirty = False trans = c4d.AliasTrans() if not trans or not trans.Init(op.GetDocument()): return False dic = op.GetAndCheckHierarchyClone(hierarchyhelp, orig, c4d.HIERARCHYCLONEFLAGS_ASPOLY, True, trans) trans.Translate(True) if not dic["dirty"]: return dic["clone"] if not dic["clone"]: return None main = None clone = dic["clone"] if clone.CheckType(c4d.Onull): main = clone else: main = c4d.BaseObject(c4d.Onull) clone.InsertUnder(main) orig.Touch() return main
Cheers,
Maxime. -
Hi @m_adam ,
Adding Touch() is removing visibility of original object, but dynamics stop to work on children after that
BTW, your code throw error:
in GetVirtualObjects hierarchy_clone = op.GetAndCheckHierarchyClone(hierarchyhelp, orig, c4d.HIERARCHYCLONEFLAGS_ASPOLY, True, trans) TypeError: an integer is required
Scene file test_generator.c4d
Generator plugin test_generator.zip -
Hi @baca unfortunately I did not found time to work on your issue, and I doubt you can fix this lag as dynamics are hardcoded to be executed after Gnerator as demonstrated here (Cinema 4D priorities).
While you could use ObjectData.AddToExecution to have the ObjectData.Execute method called after the dynamics execution, you will still have a lag, because the mesh generation should be done in the GetVirtualObject, so you will always have a 1 Scene Execution Pass difference.
So I'm afraid I don't have a good solution for you.
Cheers,
Maxime. -
Hello @baca,
when there are no further questions, we will consider this topic as solved by Wednesday, December the 1st.
Thank you for your understanding,
Cheers Ferdinand -
@ferdinand Thanks, no issues so far.