Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware 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

    Converting COFFEE to Python

    Cinema 4D SDK
    python r20
    2
    3
    1.4k
    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
      bnash
      last edited by

      I'm trying to convert some C.O.F.F.E.E. script over to Python. What am I doing wrong here?

      import c4d
      #Welcome to the world of Python
      
      
      def main():
          global XA, YA, YB, ZB, alpha, K
          
          X_A = Input1
          Z_A = Input2
          Z_B = Input3
          Y_B = Input4
          alpha = Input5
         
          
          Z_A2 = Z_A * Z_A
          Z_B2 = Z_B * Z_B
          Y_B2 = Y_B * Y_B
          YA = X_A*sin(alpha) 
          YA2 = YA * YA
          XA = X_A * cos(alpha)
         
          R2 = Z_B2 + Y_B2
          K = Z_A*Z_B
          K2 = K * K
          YB = (K * YA + Z_A * sqrt(YA2 * R2 + Z_A2 * R2-K2))/(YA2 + Z_A2)
          ZB = (K - YA * YB) / Z_A
      

      Here's what I'm trying to replicate:

      main()
      {
          var Z_B,Y_B,X_A,Z_A,Z_B2,Y_B2,Z_A2,YA2,alpha,K,K2,R2;
      
          X_A=Input1;
          Z_A=Input2;
          Z_B=Input3;
          Y_B=Input4;
          alpha=Input5;
          
      // non riesco a trovare una tabella con tutte le funzioni
      // compatibili in COFFEE. Trovato nell'SDK.
      // es. 2^3 ---> pow(2,3) 
      // quando si eleva a potenza di 2 o 3 è più veloce la doppia
      // o tripla moltiplicazione
         Z_A2=Z_A*Z_A;Z_B2=Z_B*Z_B;
         Y_B2=Y_B*Y_B;
         YA=X_A*sin(alpha); YA2=YA*YA;
         XA=X_A*cos(alpha);
         
         R2=Z_B2+Y_B2;
         K=Z_A*Z_B;K2=K*K;
         YB=(K*YA+Z_A*sqrt(YA2*R2+Z_A2*R2-K2))/(YA2+Z_A2);
         ZB=(K-YA*YB)/Z_A;
      
      }
      
      1 Reply Last reply Reply Quote 0
      • M
        m_adam
        last edited by

        Hi @bnash, first of all, welcome in the plugincafe community.

        Regarding your issue, I would suggest you read Python Console Manual since the python console is the place to go when something unexpected happens in python, as it will print you all the python errors message.
        Looking at your code it seems that you are in an Xpresso tag (please include the context for your next post) if it's true, then I suggest you read Python Xpresso Node Manual.

        So regarding your issue, while with the previous information you should be able now to know what's wrong.
        All mathematical function that you use are not know from python, for that you have to import the math module.
        If you are new to python, modules are libraries of classes, functions in order to organize your code.

        So it will give us something like

        import c4d
        # Import the math module, so we can use the function defined inside the math module
        import math
        
        
        def main():
            global XA, YA, YB, ZB, alpha, K
            
            X_A = Input1
            Z_A = Input2
            Z_B = Input3
            Y_B = Input4
            alpha = Input5
           
            
            Z_A2 = Z_A * Z_A
            Z_B2 = Z_B * Z_B
            Y_B2 = Y_B * Y_B
            YA = X_A* math.sin(alpha) 
            YA2 = YA * YA
            XA = X_A * math.cos(alpha)
           
            R2 = Z_B2 + Y_B2
            K = Z_A*Z_B
            K2 = K * K
            YB = (K * YA + Z_A * math.sqrt(YA2 * R2 + Z_A2 * R2-K2))/(YA2 + Z_A2)
            ZB = (K - YA * YB) / Z_A
        

        Beside of that, you may be interested in the Tips to switch from C.O.F.F.E.E to Python page from the python documentation, to converts your code.

        Finally, I've set up your topic correctly using the Q&A New Functionality, don't worry since it's your first topic, but please do it for the next one.

        If you have any questions, please let me know.
        Cheers,
        Maxime.

        MAXON SDK Specialist

        Development Blog, MAXON Registered Developer

        1 Reply Last reply Reply Quote 1
        • M
          m_adam
          last edited by

          Any news?
          I turned your topic as solved, but feel free to ask questions, or bump it again if you need it.

          Cheers,
          Maxime.

          MAXON SDK Specialist

          Development Blog, MAXON Registered Developer

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