Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    Generator plugin

    SDK Help
    0
    3
    373
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Helper
      last edited by

      On 05/09/2017 at 07:55, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   18 
      Platform:   Windows  ;   
      Language(s) :     C++  ;

      ---------
      Hi All,

      I'm currently writing a c4d c++ object generator plugin, the plugin depends on the modification of
       other objects in the same scene, so when other objects updates the plugin should have an indicator
       that one or more dependent objects got updated so I can update the generated object in GetVirtualObject function.

      Problem is, when I check other object's dirty status using the following code:

      BaseObject::IsDirty(DIRTYFLAGS_MATRIX | DIRTYFLAGS_DATA | DIRTYFLAGS_CACHE)
      
      
        
      
      
      
      the code always returns false if the modified object is ABOVE the generator object in 
      
      
      ObjectManager panel! although, the same code returns true if the object is modified 
      
      
      but if it is BELOW the object generator node in ObjectManager panel!
      
      
        
      
      
      
      Can anyone please explain what is happening here? also, is there any better way to inform the 
      
      
      main object generator node that other objects were modified ?
      
      
        
      
      
      
      Also, note that none of the modified objects are children of the generator plugin
      
      
      the generator node just needs to update it's data when one of other objects update.
      
      
        
      
      
      
      Thanks in advance.
      
      1 Reply Last reply Reply Quote 0
      • H
        Helper
        last edited by

        On 06/09/2017 at 06:16, xxxxxxxx wrote:

        Hi Mohamed, thanks for writing us.

        With reference to your support request, please consider that the way generators are designed to make use of input objects to compute the generated geometry officially sees input geometries as "children" of the generator. Any other approach aiming to produce a generator update based on objects, that are not generator's children, should make properly use of a SceneHookData-derived plugin responsible to track the changes of the input objects and consequently change the dirty status of the specific generator.
        This approach should be considered an hack to how Cinema generator are supposed to run and could have, if not properly designed, performance impacts on scene regeneration.

        Best, Riccardo

        Cheers,

        1 Reply Last reply Reply Quote 0
        • H
          Helper
          last edited by

          On 06/09/2017 at 09:10, xxxxxxxx wrote:

          Hi Riccardo,

          Thanks for your reply. I actually found a way of doing this by storing the value that is returned from 
          calling BaseObject::GetDirty() for each object I need to check it's dirty status and then recheck the
          GetDirty function again in the main generator GetVirtualObjects function and compare both values and if they are different then I store the new value and mark object as dirty.

          Hope this helps other devs and thanks again.

          1 Reply Last reply Reply Quote 0
          • First post
            Last post