Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 23/09/2009 at 00:03, xxxxxxxx wrote:
User Information: Cinema 4D Version: 11.5 Platform: Language(s) :
--------- Hi,
I want to create a global matrix port on an object node. Currently thats my code:
> \> DescID cubeid = DescID(DescLevel(GV_OBJECT_OPERATOR_GLOBAL_OUT)); \> portID = GvCall(ot->GetOperatorData(), GetMainID)(ot, GV_PORT_OUTPUT, cubeid); \> if(portID==NOTOK) return FALSE; \> \> Bool ok = ot->AddPortIsOK(GV_PORT_INPUT, portID); \> if(ok==FALSE) return FALSE; \>
\> DescID cubeid = DescID(DescLevel(GV_OBJECT_OPERATOR_GLOBAL_OUT)); \> portID = GvCall(ot->GetOperatorData(), GetMainID)(ot, GV_PORT_OUTPUT, cubeid); \> if(portID==NOTOK) return FALSE; \> \> Bool ok = ot->AddPortIsOK(GV_PORT_INPUT, portID); \> if(ok==FALSE) return FALSE; \>
I use the constans of the file: gvoperator.h But nothing happens. Is this the correct way?
Thanks for your help.
Cheers, Shawni
On 29/09/2009 at 02:53, xxxxxxxx wrote:
You just pass the port ID to AddPortIsOK and AddPort.
Example:
> \> if (node->AddPortIsOK(GV_PORT_INPUT, GV_OBJECT_OPERATOR_GLOBAL_IN)) \> { \> GvPort \*port = NULL; \> port = node->AddPort(GV_PORT_INPUT, GV_OBJECT_OPERATOR_GLOBAL_IN, GV_PORT_FLAG_IS_VISIBLE, TRUE); \> \> if (port) \> { \> //do something \> } \> } \>
\> if (node->AddPortIsOK(GV_PORT_INPUT, GV_OBJECT_OPERATOR_GLOBAL_IN)) \> { \> GvPort \*port = NULL; \> port = node->AddPort(GV_PORT_INPUT, GV_OBJECT_OPERATOR_GLOBAL_IN, GV_PORT_FLAG_IS_VISIBLE, TRUE); \> \> if (port) \> { \> //do something \> } \> } \>
cheers, Matthias
On 29/09/2009 at 03:46, xxxxxxxx wrote:
Hi Matthias,
yes, this works fine (I tested yesterday). The problem is, that AddPort just takes a LONG value so a real DescID element is not possible ( to create a Position.X port). So I tried to merge these cases. GvCall just returns 0 on a global matrix, but works fine when I just pass a DescID element which points to a Subchannel Port (like Vector.x)
> <code> > #define GvCall(op,fnc) (((GvOperatorData* )op)->*((OPERATORPLUGIN* )C4DOS.Bl->RetrieveTableX((NodeData* )op,1))->fnc) > //I found this definition on plugincafe > /* .code.*/ > > DescID passedID = PyObject2DescID(id, ok); //convert my list [id, id, id] to a DescID element > > switch(io) > { > case GV_PORT_INPUT: > { > LONG portID = GvCall(ot->GetOperatorData(), GetMainID)(ot, GV_PORT_INPUT, passedID); > if(portID==0) { // is not 0 if I pass a Vector.x Port DescID [POSITION, POSITION_X] > portID = passedID[0].id; //otherwise just pass the ID, it might work > } > > Bool ok = ot->AddPortIsOK(GV_PORT_INPUT, portID); > if(ok==FALSE) return None; > > GvPort *port = ot->AddPort(GV_PORT_INPUT, portID, (GvPortFlags)flag, message); > /*..*/ > break; > } > </code>
Just subports like ports of the Math Node doesnt work yet, but this is another problem I have to check. This is just a "stupid" workaround, but it seems to work. Do you think thats still ok?
Cheers, Sebastian