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

    Access the Object List Xpresso Node for Python Iteration

    Cinema 4D SDK
    python r21
    4
    10
    1.5k
    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.
    • B
      bentraje
      last edited by

      Hi,

      Is there a way to access Object List Xpresso Node for Python Iteration?
      I have trouble finding information in the documentation. It does not have a c4d.InstanceData compared with the c4d.InExcludeData

      You can see an illustration of the problem here:
      https://www.dropbox.com/s/s2zfd45ofz4rcpd/c4d193_access_object_list_node_for_iteration.jpg?dl=0

      Is there a way around this?

      Thank you

      1 Reply Last reply Reply Quote 0
      • ferdinandF
        ferdinand
        last edited by ferdinand

        Hi,

        first of all: you are passing the node, not the Iteration List parameter in your expresso graph. So you have to access that parameter in your Python node (obj_list[ID_OF_THE_ITERATIONLIST_PARAMETER]). Secondly, I am not one hundred percent sure, but the data type of the of the Iteration List parameter should be InExcludeData . This type (unfortunately) does not implement __iter__(), so you cannot treat it like an iterator. See the docs on how to access entries on that data type.

        Cheers
        zipit

        MAXON SDK Specialist
        developers.maxon.net

        1 Reply Last reply Reply Quote 1
        • B
          bentraje
          last edited by

          @zipit

          Thanks for the response.

          Unfortunately, it's not an InExcludeData. The port does not connect (i.e it grays out rather than a green line).

          I debugged with the type(obj_list) and interestingly it is a c4d.BaseObject.
          It performs iteration even without a for loop in the code.

          Is there a way to force the output to be in a list?

          My previous code is in InExcludeData but it uses a selection object, which makes it hard to navigate to the actual selection list to be used for animation.

          You can see the sample file here:

          Thank you for looking at my problem:
          https://www.dropbox.com/s/ia73prlw9mr00ik/c4d193_access_object_list_node_for_iteration.c4d?dl=0

          1 Reply Last reply Reply Quote 0
          • ferdinandF
            ferdinand
            last edited by ferdinand

            Hi,

            I should have opened Cinema for my initial answer. The Object List node returns an object from its Iteration List parameter on the Instance port (and your Python node is called multiple times, once for each object in the list). So you have to either fashion your Python node in such way, that it is working on single nodes or add an IncluedeExcludeData user-data element to your graph and pass that element.

            Cheers
            zipit

            MAXON SDK Specialist
            developers.maxon.net

            1 Reply Last reply Reply Quote 1
            • B
              bentraje
              last edited by

              @zipit

              Thanks for the response.

              RE: So you have to either fashion your Python node in such way, that it is working on single nodes
              I'm not sure I understand. Are you suggesting not to use Object List node and just use individual nodes plugged into a Python node? If so, I have done that before and it clutters the node editor. I would prefer just to use the Object List and access it as a list for for loop.

              RE: add an IncluedeExcludeData user-data element to your graph and pass that element.
              Sorry. I don't understand. The Object List returns an Instance Data (or maybe a BaseObject), which does not connect to a incluedeExcludeData user-data element correct me if I'm wrong.

              1 Reply Last reply Reply Quote 0
              • W
                wuzelwazel
                last edited by

                The ObjectList is already effectively an iterator over the contained objects. On each frame to evaluate the 'instance' port will provide the 1st, then 2nd, then 3rd, etc. object to the downstream node.

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

                  Hello,

                  As @wuzelwazel said, the ObjectList is an iterator. It will execute your python node for every object of its list.

                  You can add a UserData to your Python node (as to any object) and use that as your objects list entry to manage yourself the iteration and forget the ObjectList node.

                  Did i miss something here ?

                  Cheers,
                  Manuel

                  MAXON SDK Specialist

                  MAXON Registered Developer

                  1 Reply Last reply Reply Quote 0
                  • B
                    bentraje
                    last edited by

                    @wuzelwazel and @m_magalhaes

                    Thanks for the response. I understand that the ObjectList is an iterator.
                    But I want to perform my own iteration with the for loop.

                    I want it to be read in the Python node as a list (i.e. before the iteration).
                    This is in the previous post but it still applies (i.e. prints an object rather than a list)
                    https://www.dropbox.com/s/ia73prlw9mr00ik/c4d193_access_object_list_node_for_iteration.c4d?dl=0

                    RE: You can add a UserData to your Python node (as to any object) and use that as your objects list entry to manage yourself the iteration and forget the ObjectList node.
                    I'm not sure I understand. My python is an expresso node. And not a python tag or object. So I can't necessarily add a userdata.

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

                      hello,

                      Does using the object list iterator is mandatory or not ?

                      @bentraje said in Access the Object List Xpresso Node for Python Iteration:

                      I'm not sure I understand. My python is an expresso node. And not a python tag or object. So I can't necessarily add a userdata.

                      you can add userdata to xpresso node, juste like any object.

                      7e5bc576-2075-4efc-890e-f2246aa4fe94-image.png

                      you can see in this file that i can use UserData to create my own iterator python_userdata.c4d

                      cheers,
                      Manuel

                      MAXON SDK Specialist

                      MAXON Registered Developer

                      1 Reply Last reply Reply Quote 1
                      • B
                        bentraje
                        last edited by

                        @m_magalhaes

                        RE: Does using the object list iterator is mandatory or not ?
                        For this one, it kinda is since the whole code base rest on the for loop section.

                        RE: you can see in this file that i can use UserData
                        Thanks for the clarification. I see what you mean now. It works on my use case.

                        Have a great day ahead!

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