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

    could not find port value?

    Scheduled Pinned Locked Moved PYTHON Development
    7 Posts 0 Posters 674 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 30/05/2013 at 08:15, xxxxxxxx wrote:

      I have this little piece of code inside of a python node in xpresso:

      def main() :
          global Output1
          global Output2
        
          def selection(minimum, maximum) :
              x=0
              while x < Input1:
                  if x >= minimum and x <= maximum:
                      Output1 = x
                      Output2 = 1
                  else: 
                      Output1 = x
                      Output2 = 0
                  x += 1
      	
          selection(3,10)
      

      I get the error "Could not find port value for 'Output1' in node 'python'.
      it seems like it should work. If I print output 1 and 2 to console I get the correct value but its like its not feeding the info to the next node. Is it because its being iterated on each frame?

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

        On 30/05/2013 at 09:55, xxxxxxxx wrote:

        1. when Input1 is smaller then zero the output ports will never be written. always return a 
        default value if you could not compute a proper value.
        2. are you sure that output 1 and 2 have the correct port type ?

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

          On 30/05/2013 at 10:11, xxxxxxxx wrote:

          1. The input currently is at 30, and has always been >= zero when testing
          2. I tried interger and float for Output1, same thing?
          If I take away everything and just say Output = 5, for example, it works as expected, but not inside the loop.
          Seems like it should work no problemConfused

          I saw someone used this code when having a similar issue but wasn't able to get it to work for me:

          exec CODE in globals(), locals()
          
          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            On 30/05/2013 at 10:25, xxxxxxxx wrote:

            1. you still exceed cut the values at some point. placing such loose ends in your code is not good.
            2. might also be a scope problem, try something like that.

            def main() :
                global Output1
                global Output2
              
                def selection(minimum, maximum) :
                    a, b, x = c4d.NOTOK , c4d.NOTOK, 0
                    while x < Input1:
                        if x >= minimum and x <= maximum:
                            a = x
                            b = 1
                        else: 
                            a = x
                            b = 0
                        x +=1
                    return a, b
              
                Output1, Output2 = selection(3,10)
            
            1 Reply Last reply Reply Quote 0
            • H Offline
              Helper
              last edited by

              On 30/05/2013 at 11:44, xxxxxxxx wrote:

              Thanks for the help LD, that did stop the error. However it only returns the value of the last number in the iteration. Trying to get it to set either a value of 1 or 0 to every object per frame. I tried messing with it to make it work but no luck. I have it working with without the python node, but thought code would be much easier/cleaner way to do it. Guess i'll just do without the py node for now, but thanks anyway.

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

                On 30/05/2013 at 13:03, xxxxxxxx wrote:

                Originally posted by xxxxxxxx

                Thanks for the help LD, that did stop the error. However it only returns the value of the last number in the iteration. Trying to get it to set either a value of 1 or 0 to every object per frame. I tried messing with it to make it work but no luck. I have it working with without the python node, but thought code would be much easier/cleaner way to do it. Guess i'll just do without the py node for now, but thanks anyway.

                I am not sure if I do understand correctly what you are trying to do, but Xpresso does neither
                support arrays nor can scripting nodes (coffee / python) work as an iterator on its own. There
                are three ways to work your way around that.

                1. Make your python node compute a step in a loop. As an example xpresso setup for your
                object problem (you just need an iterator node, in that case the object list node) :

                |--- Loop called n times per pass -------------------------------->
                ObjectListNode.instance >> input0.PythonNode.result >> result.SomeNode

                in the same xpresso setup /group :

                |--- Only called once per pass   -------------->
                SomeNode.out >> in.SomeNode.out >>  in.SomeNode

                2. You can also use a link port to cheat your way around the no array restriction of xpresso.
                simply pass a linkable object derived from BaseList2D which does allow you store data in
                a array like fashion. A PointObject (spline, PolygonObject) is a good candidate for that.

                3. Simply keep everything inside the python node and do not use output ports. Or in other
                words do all the computing inside the python node.

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

                  On 30/05/2013 at 13:23, xxxxxxxx wrote:

                  That must be the hang up, I didn't know you couldn't use the python node as an iterator in Xpresso. Good to know. Also some nice work around options you've given too! The Xpresso setup was pretty easy anyway, just thought it would be a simple python node exercise I could try. I'll give these options a look, the first one seems the most doable for my level. Thanks again for all your help! You rock!

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