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 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