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

    Nodes that Iterate

    SDK Help
    0
    4
    830
    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
      Helper
      last edited by

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

      On 13/11/2002 at 08:52, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   8.012 
      Platform:   Windows  ; Mac  ;  Mac OSX  ; 
      Language(s) :     C++  ;  XPRESSO  ;

      ---------
      Is there an example of a node that iterates through several indices while requesting the appropriate indexed data from a node wired to a iteration node's in port?
      Thanks!
      darf - bhodiNUT

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

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

        On 13/11/2002 at 09:14, xxxxxxxx wrote:

        Parsing message: ............................ [PARSE FAILED!]
        Could you clarify what you mean? An example? (The answer is of course "no" by definition, since there are no GV examples at all, but if I understand what you mean I might be able to help... 🙂

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

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

          On 13/11/2002 at 12:05, xxxxxxxx wrote:

          Well, I am trying to create a node that cycles through a loop executing for each index. Seems like those ITERATE enumerations running around in the headers would elude to an iterate functionality within the nodes. Is there a possibility of an example sometime?  😉
          Best Regards,
          darf - bhodiNUT

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

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

            On 13/11/2002 at 13:36, xxxxxxxx wrote:

            Here's an example that outputs seven iterated vectors. It's a bit useless at the moment, since not very many nodes expect an iterated stream of vectors alone, but it should show the main principle.
            >

            \>     
            \>     
            \>     // gviteratortest.cpp  
            \>     >   
            \>     > #include "c4d.h"  
            \>     > #include "c4d_operatordata.h"
            \>     
            \>     
            \>     
            \>     
            \>     const GvOperatorID GVTESTITERATOR_ID = 1010815;  
            \>     > static LONG input_ids[] = { 0 };
            \>     
            \>     
            \>     
            \>     
            \>     class GvTestIterator : public GvOperatorData  
            \>     > {  
            \>     > private:  
            \>     >   GvCalcTable* table;  
            \>     >   GvValuesInfo ports;
            \>     
            \>     
            \>     
            \>     
            \>       Bool cached[MAX_THREADS];  
            \>     >   Vector cache[MAX_THREADS];
            \>     
            \>     
            \>     
            \>     
            \>     public:  
            \>     >   GvTestIterator(void) : table(NULL) {}
            \>     
            \>     
            \>     
            \>     
            \>       Bool InitCalculation(GvNode *bn, GvCalc *c, GvRun *r)  
            \>     >   {  
            \>     >     for (LONG i = 0; i < MAX_THREADS; ++i)  
            \>     >     {  
            \>     >       cached[i] = FALSE;  
            \>     >       cache[i] = Vector();  
            \>     >     }
            \>     
            \>     
            \>     
            \>     
            \>         return (c && c->master) &&  
            \>     >            (table = c->master->AllocCalculationTable(c->cpu_count, TRUE, 16, TRUE)) &&  
            \>     >            (GvBuildValuesTable(bn, ports, c, r, input_ids));  
            \>     >   }
            \>     
            \>     
            \>     
            \>     
            \>       void FreeCalculation(GvNode *bn, GvCalc *c)  
            \>     >   {  
            \>     >     if (table && c && c->master)  
            \>     >     {  
            \>     >       c->master->FreeCalculationTable(table);  
            \>     >       table = NULL;  
            \>     >     }  
            \>     >     GvFreeValuesTable(bn, ports);  
            \>     >   }
            \>     
            \>     
            \>     
            \>     
            \>       Bool AddToCalculationTable(GvNode *bn, GvRun *r)  
            \>     >   {  
            \>     >     return (r) &&  
            \>     >            (r->AddNodeToCalculationTable(bn));  
            \>     >   }
            \>     
            \>     
            \>     
            \>     
            \>       Bool Calculate(GvNode *bn, GvPort *port, GvRun *r, GvCalc *c)  
            \>     >   {   
            \>     >     if (port && (r->GetCpuID() < MAX_THREADS) && cached[r->GetCpuID()])  
            \>     >     {  
            \>     >       port->SetVector(cache[r->GetCpuID()], r);  
            \>     >     }  
            \>     >     else  
            \>     >     {  
            \>     >       GvPort* itport = bn->GetOutPort(0);  
            \>     >         
            \>     >       const LONG N = 7;  
            \>     >       for (LONG i = 0; i < N; ++i)  
            \>     >       {  
            \>     >         cache[r->GetCpuID()] = Vector(i, 2*i, 3*i);  
            \>     >         cached[r->GetCpuID()] = TRUE;
            \>     
            \>     
            \>     
            \>     
            \>             r->SetCalculationTable(table);  
            \>     >         itport->SetRecalculate(r, TRUE);   
            \>     >         r->CalculateTable(c);  
            \>     >       }  
            \>     >         
            \>     >       r->SetCalculationTable(table);  
            \>     >       itport->SetRecalculate(r,TRUE);  
            \>     >       table->ResetTable(r);  
            \>     >     }  
            \>     >       
            \>     >     return TRUE;  
            \>     >   }
            \>     
            \>     
            \>     
            \>     
            \>       static NodeData* Alloc(void) { return gNew GvTestIterator; }  
            \>     > };
            \>     
            \>     
            \>     
            \>     
            \>     Bool RegisterGvTestIterator()  
            \>     > {  
            \>     >   return GvRegisterOperatorPlugin(  
            \>     >     GVTESTITERATOR_ID, "Gv Test Iterator", 0,   
            \>     >     GvTestIterator::Alloc, "GVtestiterator", 0,   
            \>     >     ID_GV_OPCLASS_TYPE_GENERAL, ID_GV_OPGROUP_TYPE_GENERAL, 0, NULL);  
            \>     > }
            \> 
            \> 
            

            >
            >

            \>     
            \>     
            \>     // GVtestiterator.res  
            \>     >   
            \>     > CONTAINER GVtestiterator  
            \>     > {  
            \>     >   NAME GVtestiterator;  
            \>     >   INCLUDE GVbase;  
            \>     >     
            \>     >   GROUP ID_GVPROPERTIES  
            \>     >   {  
            \>     >  VECTOR GVTEST_POINTITERATOR {OUTPORT; STATICPORT; CREATEPORT; ITERATOR;}  
            \>     >   }  
            \>     > }
            \> 
            \> 
            

            >
            >

            \>     
            \>     
            \>     // GVtestiterator.h  
            \>     >   
            \>     > #ifndef _GVtestiterator_H_  
            \>     > #define _GVtestiterator_H_
            \>     
            \>     
            \>     
            \>     
            \>     enum  
            \>     > {  
            \>     >  GVTEST_POINTITERATOR = 1010060  
            \>     > };
            \>     
            \>     
            \>     
            \>     
            \>     #endif
            \> 
            \> 
            

            >
            >

            \>     
            \>     
            \>     // GVtestiterator.str  
            \>     >   
            \>     > STRINGTABLE GVtestiterator  
            \>     > {  
            \>     >   GVtestiterator "GV Test Iterator";
            \>     
            \>     
            \>     
            \>     
            \>       GVTEST_POINTITERATOR "Point iterator";  
            \>     > }
            \> 
            \> 
            
            1 Reply Last reply Reply Quote 0
            • First post
              Last post