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
    • Recent
    • Tags
    • Users
    • Login

    Insert Nulls Sequentially, Problem [SOLVED]

    Scheduled Pinned Locked Moved PYTHON Development
    7 Posts 0 Posters 609 Views
    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 Offline
      Helper
      last edited by

      On 25/06/2015 at 02:18, xxxxxxxx wrote:

      Hi Community,

      i just started with python (i'm a total n00b and no mathematical genius ;)) and i have a logical problem with my script. maybe someone can help me out _<_img src="http://www.c4dcafe.com/ipb/uploads/emoticons/default_smile.gif" border="0" alt=":)" title=":)" /_>_

      insert_light **creates a null_object with a light as a child. The null gets named Light.1, Light.2, Light.3...
      insert_scene **creates a null_object with a cube as a child. The null gets named Scene.1, Scene.2, Scene.3...

      the problem with my script is, that insert_light() and insert_scene() create Nulls like

      Light.1 
      Scene.2
      Light.3
      Scene.4

      But I want it like

      Light.1
      Scene.1
      Light.2
      Scene.2
      How can i rename the nulls with the same child sequentially and not all nulls? Can anyone help me with this?
      Thanks! Martin
       
      --------------------------------------------------------------------------

      import c4d
      from c4d import gui
      #Welcome to the world of Python

      def insert_light() :
          
           doc.InsertObject(c4d.BaseObject(c4d.Onull))
           doc.InsertObject(c4d.BaseObject(c4d.Olight))
                
           parent = doc.SearchObject("Null")
           child = doc.SearchObject("Light")
           child.InsertUnder(parent)
           
           ObjCount = doc.GetObjects()
           
           OTypCount = 0
           
           for i in ObjCount:
               if child.GetType() == 5102 and i.GetType() == 5140:
                  OTypCount = OTypCount + 1
                  parent.SetName("Light."+ str(OTypCount))
           
           c4d.EventAdd()       
           
      def insert_scene() :
          
           doc.InsertObject(c4d.BaseObject(c4d.Onull))
           doc.InsertObject(c4d.BaseObject(c4d.Ocube))
                
           parent = doc.SearchObject("Null")
           child = doc.SearchObject("Cube")
           child.InsertUnder(parent)
           
           ObjCount = doc.GetObjects()
           
           OTypCount = 0
           
           for i in ObjCount:
               if child.GetType() == 5159 and i.GetType() == 5140:
                  OTypCount = OTypCount + 1
                  parent.SetName("Scene."+ str(OTypCount))
           
           c4d.EventAdd()  
           
      if __name__=='__main__':
          insert_light()
          insert_scene()

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

        On 25/06/2015 at 03:09, xxxxxxxx wrote:

        this is a logic error, in these 2 lines:
        if child.GetType() == 5102 and i.GetType() == 5140:
        if child.GetType() == 5159 and i.GetType() == 5140:

        you are checking child every time "which is always true" .

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

          On 25/06/2015 at 03:30, xxxxxxxx wrote:

          Like this?:

          import c4d   
          from c4d import gui   
          #Welcome to the world of Python   
            
          def insert_lights_and_objects(numberOfLights) :   
                    
              for i in xrange(numberOfLights) :   
                  # Create the null and the light. Set the names   
                  lightNull = c4d.BaseObject(c4d.Onull)   
                  lightNull.SetName("Light." + str(i+1))   
                  lightObj = c4d.BaseObject(c4d.Olight)   
                  lightObj.SetName("Light." + str(i+1))   
                  # Insert into scene   
                  doc.InsertObject(lightNull)   
                  lightObj.InsertUnder(lightNull)   
            
                  # Create the null and the cube. Set names   
                  objectNull = c4d.BaseObject(c4d.Onull)   
                  objectNull.SetName("Scene." + str(i+1))   
                  cubeObj = c4d.BaseObject(c4d.Ocube)   
                  cubeObj.SetName("Scene." + str(i+1))   
                  # Insert into scene   
                  doc.InsertObject(objectNull)   
                  cubeObj.InsertUnder(objectNull)   
            
              c4d.EventAdd()   
                 
          if __name__=='__main__':   
              insert_lights_and_objects(5)
          
          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            On 25/06/2015 at 03:38, xxxxxxxx wrote:

            Oops. Didn't see your post Mohamed 🙂

            -b

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

              On 25/06/2015 at 03:50, xxxxxxxx wrote:

              Hi Mohamed and bonsak, thanks for your replies!!

              @yes, but i don't know how to solve this 🙂

              @bonsak
              thanks for your script, but it is not exactly what i want.
              everytime your script gets executed, you get the same names according to the given range number.
              what i want is that the script checks how many Scene-nulls or Light-nulls are already there in the objectmanager und changes the names of newly created nulls "incrementally" according to the count of nulls of the same "kind". mh, confusing i know 😉 just like c4d does it if you create new objects of the same kind

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

                On 25/06/2015 at 08:31, xxxxxxxx wrote:

                change this:
                if child.GetType() == 5102 and i.GetType() == 5140:
                to:
                if i.GetDown() and i.GetType() == 5140:
                    if i.GetDown().GetType() == 5102:

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

                  On 25/06/2015 at 09:13, xxxxxxxx wrote:

                  It works!!! Thank you so much 🙂

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