Nodes that Iterate
-
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 -
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... -
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 -
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"; \> > } \> \>