Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware 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

    Limit On the Number Of Takes

    Cinema 4D SDK
    c++ r20 sdk
    2
    4
    779
    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.
    • J
      JohnTerenece
      last edited by Manuel

      Hi.

      I am running into an issue when creating a large number of takes where Cinema is crashing on me, and this problem seems unrelated to the actual creation of the takes.

      Using my code I try to create a large number of takes, around 1400, with parameters overridden for objects in the scene, at some point during the creation process Cinema will crash. I recreated the case inside of CInema without my code by creating a take with one overridden object and then copy and pasting it, when I get to around 1400 takes in the document Cinema crashes on me.

      Is this just a limitation of Cinema when it comes to takes and that it can't handle that many inside of one document? Having multiple documents with a thousand takes in them open at the same time does not cause Cinema to crash.

      Any help would be greatly appreciated.

      John Terenece

      1 Reply Last reply Reply Quote 0
      • J
        JohnTerenece
        last edited by

        Just to clarify, I know that adding more objects and such to a document in Cinema will make it use up more memory and cause it to lag when it gets bad enough. My issue is that Cinema is running fine with a certain number of takes and then I add one more and it immediately crashes.

        1 Reply Last reply Reply Quote 0
        • ManuelM
          Manuel
          last edited by

          hi,

          I could reproduce the issue on R20 for 1380 takes.With the release S26, the number is a bit higher, but it still crashes. I've opened a bug report for that.

          One workaround would be to create takes that will act as group, i was able to go over that ceiling. The time get higher and higher for creating those takes. I stopped at 10 groups of 1000 takes.

          from typing import Optional
          import c4d
          
          def main():
              # create a sphere and insert it in the document.
              sphere = c4d.BaseObject(c4d.Osphere)
              doc.InsertObject(sphere, None, None)
              c4d.EventAdd()
          
          
              if not sphere.CheckType(c4d.Osphere):
                  raise TypeError("The objects is not a sphere.")
          
              # Stores a copy of this object to use later in the autotake as initial state comparison
              undoObject = sphere.GetClone(c4d.COPYFLAGS_0)
          
              # Changes the radius of the sphere in scene
              originalSize = 100
              sphere[c4d.PRIM_SPHERE_RAD] = originalSize - 1
          
          
          
              takeData = doc.GetTakeData()
              if takeData is None:
                  raise RuntimeError("Failed to retrieve the take data.")
              # Checks if there is some TakeData and the current mode is set to auto Take
              if takeData and takeData.GetTakeMode() == c4d.TAKE_MODE_AUTO:
                  # Add a new group take
                  for i in range(0, 4):
                      # Adds a new Take that will group other takes
                      groupTake = takeData.AddTake("this is a new take {}".format(i), None, None)
                      for j in range(0, 1000):
                          newTake = takeData.AddTake("this is a new take {}".format(j), groupTake, None)
                          sphere[c4d.PRIM_SPHERE_RAD] = originalSize + j
                          if newTake is None:
                              raise RuntimeError("Failed to add a new take.")
                          newTake.AutoTake(takeData, sphere, undoObject)
              sphere[c4d.PRIM_SPHERE_RAD] = originalSize
          
              # Pushes an update event to Cinema 4D
              c4d.EventAdd()
          
          
          if __name__ == '__main__':
              main()
          

          cheers,
          Manuel

          MAXON SDK Specialist

          MAXON Registered Developer

          J 1 Reply Last reply Reply Quote 0
          • J
            JohnTerenece @Manuel
            last edited by

            @m_magalhaes

            Thanks for the response.

            Might be able to use your idea as potential solution.

            John Terenece

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