Create Global Matrix port
-
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; \>I use the constans of the file: gvoperator.h
But nothing happens. Is this the correct way?Thanks for your help.
Cheers, Shawni
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
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 \> } \> } \>cheers,
Matthias -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
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