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

    Trouble Adding an Object to an in-exclude-list

    Scheduled Pinned Locked Moved PYTHON Development
    11 Posts 0 Posters 1.3k 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

      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

      On 20/06/2011 at 14:34, xxxxxxxx wrote:

      So as the title says I can't seem to add objects to a an InExcludeData list. Specifically to a tracer object 'Trace Link' list but for simplicities sake I'm testing with an Object Selection list.  I've worked through the CG Rebel P4D 102 tutorial which gets me tantalizingly close, but I can't seem to seal the deal.

      http://cgrebel.com/2011/01/p4d102-selected-objects/

      I'm a novice to the C4DSDK and know just enough Python to be a little dangerous so I'm figuring things out as I go.  This is the code I've got currently, which yields no errors but doesn't do what I want it to do.  It's stripped down to it's bare bones, just working with two selected objects, the top an Object Selection object and the bottom just a Cube:

      import c4d
      from c4d import documents
        
      def main() :
      	doc = c4d.documents.GetActiveDocument()
      	
      	selected = doc.GetActiveObjects(0)
      	
      	obj_list = selected[0][c4d.SELECTIONOBJECT_LIST]
      	
      	obj = selected[1]
        
      	obj_list.InsertObject(obj,0)
      	
      	c4d.EventAdd()
        
      if __name__=='__main__':
      	main()
      
      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 20/06/2011 at 15:41, xxxxxxxx wrote:

        I can't test it right now.
        But maybe theese 2 links can help you.

        1. Python Tag Example, More about getting data from a InExclude
        2. An example where I used an InExclude Data, about adding objects to inexclude

        cheers

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

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          On 21/06/2011 at 08:36, xxxxxxxx wrote:

          That second example is the one that I essentially reverse engineered to get where I am now.  It gets me close but it seems that I can't fully manipulate an existing InExcludeList.  I can accurately look at the list but I can't add anything to it.  In that second example objects are added to the list before the list is added to the scene.  Here is a more complete set of code that I hopefully can make do what I want:

          import c4d
          from c4d import documents
            
          doc = c4d.documents.GetActiveDocument()                 # Establishes variable for the document (the project) itself
          selected_object = op.GetClone()                         # Gets copy of currently selected object
            
          def dupe() :
              '''Duplicates currently selected object and returns duplicated objects name'''
              # Add line to check if it is a cloner object
              selected_object[c4d.ID_BASELIST_NAME] += '.copy'
              doc.InsertObject(selected_object)                   # Duplicates currently selected object
              c4d.EventAdd()                                      # Refresh the managers to show the new object
            
          def addTracer() :
              '''Adds a tracer object with the currently selected object as its focus'''
              tracer = c4d.BaseObject(1018655)                    # Allocate a new Tracer object
              doc.SetActiveObject(tracer, 1)                      # Adds new Tracer object to current selection
              obj_list = tracer[c4d.MGTRACEROBJECT_OBJECTLIST]    # Assigns InExcludeData list in tracer object to variable
              obj_list.InsertObject(selected_object,0)            # Inserts the cloned object into the tracer list
              doc.InsertObject(tracer)                            # Insert the object into the documents object list
              c4d.EventAdd()                                      # Refresh the managers to show the new object
                      
              
          def main() :
              dupe()
              addTracer()
            
          if __name__ == "__main__":
              main()
            
          
          

          It seems like I need to 'complete' that InsertObject() method somehow.  The problem is semantic, I wish it gave me some kind of error.  I've been trying to do variations in the console and haven't been able to add or remove anything from an InExcludeData list that was already established.  I can however make all of the other methods in that class work for me. 
          < ="utf-8">

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

            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

            On 21/06/2011 at 09:12, xxxxxxxx wrote:

            Try this:

            import c4d  
            from c4d import gui, documents  
              
            def main() :  
              
              tracer = c4d.BaseObject(1018655)                  #Create a tracer in memory                     
              obj_list = tracer[c4d.MGTRACEROBJECT_OBJECTLIST]  #Get the object list attribute and assign to a variable    
              doc.InsertObject(tracer)                          #Insert the tracer to the OM from memory   
              
              targetobj = doc.SearchObject("Cube")               #The object to be moved into the tracer's object list   
              obj_list.InsertObject(targetobj,0)                 #Insert the object into the list in memory only  
              tracer[c4d.MGTRACEROBJECT_OBJECTLIST,0] = obj_list #Update the changes made to the list from memory    
              
              c4d.EventAdd()              
              
            if __name__ == "__main__":  
              main()
            

            -ScottA

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

              THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

              On 21/06/2011 at 09:34, xxxxxxxx wrote:

                 
                 
                     tracer[c4d.MGTRACEROBJECT_OBJECTLIST,0] = obj_list #Update the changes made to the list from memory  
              
              Ah, did not spot that issue. You have to set the obj_list back again to the tracerobject.  
              But,delete the ",0" at the end. I don't know why it does work, but it is unnecessary.  
                
              Cheers,  
              
              1 Reply Last reply Reply Quote 0
              • H Offline
                Helper
                last edited by

                THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                On 21/06/2011 at 12:02, xxxxxxxx wrote:

                Very cool, Scott that solution worked like a charm.

                Thank you very much Scott and Nux, you've both been a huge help.

                One thing though Nux, I'm not sure what you mean in the previous post, if I pull that ", 0" at the end it throws an error looking for the flag, which makes sense relative to the SDK.

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

                  THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                  On 21/06/2011 at 13:25, xxxxxxxx wrote:

                  Don't understand you right, I think.
                  What solution works ?

                  tracer[c4d.MGTRACEROBJECT_OBJECTLIST,0]
                  

                  or

                  tracer[c4d.MGTRACEROBJECT_OBJECTLIST]
                  

                  ?
                  Actually the last one should only work.

                  Cheers

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

                    THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                    On 22/06/2011 at 08:21, xxxxxxxx wrote:

                    Ah y'know what?  I misread your post, I was looking at the '0' in the line above.  You are correct.  Thanks again to both of you, not only for this reply but for a bunch of the other ones I've read on this forum.  Your efforts are very much appreciated.

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

                      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                      On 04/09/2012 at 09:07, xxxxxxxx wrote:

                      I know that this is an old thread, but I thought I'd ask my question here because it's the same topic.

                      I'm using the above-mentioned technique to add an effector to a cloner object's effector list. While it now appears on the list, it is deactivated. How do I access that little checkbox within the cloner's effector list that activates or deactivates the effector?

                      Thanks,
                      Luke

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

                        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                        On 04/09/2012 at 11:58, xxxxxxxx wrote:

                        Originally posted by xxxxxxxx

                        I'm using the above-mentioned technique to add an effector to a cloner object's effector list. While it now appears on the list, it is deactivated. How do I access that little checkbox within the cloner's effector list that activates or deactivates the effector?

                        It's not well documented but you can activate/deactivate an object in an in-/exclude list when inserting it by calling:

                        list.InsertObject(effector, 1)
                        

                        As you can see, just pass 1 as second parameter instead of 0.

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

                          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                          On 04/09/2012 at 12:15, xxxxxxxx wrote:

                          Originally posted by xxxxxxxx

                          It's not well documented but you can activate/deactivate an object in an in-/exclude list when inserting it by calling:

                          list.InsertObject(effector, 1)
                          

                          As you can see, just pass 1 as second parameter instead of 0.

                          Fantastic. Thanks!

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