On 29/04/2015 at 11:20, xxxxxxxx wrote:
User Information:
Cinema 4D Version: R16
Platform: Windows ; Mac OSX ;
Language(s) : C++ ; XPRESSO ;
---------
I have this code I wrote in Python that links up two nodes...
newObj = c4d.BaseObject(c4d.Onull)
newObj.SetName("Offset Null")
offsetXpressoTag = newObj.MakeTag(c4d.Texpresso)
doc.InsertObject(newObj)
jntCnstTag = op.MakeTag(TCNST_TAG)
jntCnstTag[c4d.ID_CA_CONSTRAINT_TAG_PSR] = True # set a PSR constraint
masterNode = offsetXpressoTag.GetNodeMaster()
cnstObjectNode = masterNode.CreateNode(masterNode.GetRoot(), c4d.ID_OPERATOR_OBJECT)
nullObjectNode = masterNode.CreateNode(masterNode.GetRoot(), c4d.ID_OPERATOR_OBJECT)
cnstObjectNode[c4d.GV_OBJECT_OBJECT_ID] = jntCnstTag
nullObjectNode[c4d.GV_OBJECT_OBJECT_ID] = newObj
sourcePort = nullObjectNode.AddPort(c4d.GV_PORT_OUTPUT, c4d.ID_BASEOBJECT_GLOBAL_POSITION)
targetPort = cnstObjectNode.AddPort(c4d.GV_PORT_INPUT, c4d.ID_CA_CONSTRAINT_TAG_PSR_P_OFFSET)
sourcePort.Connect(targetPort)
sourcePort = nullObjectNode.AddPort(c4d.GV_PORT_OUTPUT, c4d.ID_BASEOBJECT_GLOBAL_ROTATION)
targetPort = cnstObjectNode.AddPort(c4d.GV_PORT_INPUT, c4d.ID_CA_CONSTRAINT_TAG_PSR_R_OFFSET)
sourcePort.Connect(targetPort)
...as a test of functionality, and it works great, I have this same snippet in C++ after going through the docs and the forum for a bit, but the ports never get added and I can't make any connections:
BaseObject* controller = doc->SearchObject(command->sourceComponent); //Get the controller
BaseTag* sourceCnstTag = controller->MakeTag(TCNST_TAG);
sourceCnstTag->SetParameter(DescID(ID_CA_CONSTRAINT_TAG_PSR), GeData(true), DESCFLAGS_SET_0);
sourceCnstTag->SetParameter(DescID(TCNST_TAG_TARGET), GeData(targetJnt), DESCFLAGS_SET_0);
sourceCnstTag->SetParameter(DescID(ID_CA_CONSTRAINT_TAG_PSR_MAINTAIN), GeData(true), DESCFLAGS_SET_0);
BaseObject* offsetNull = BaseObject::Alloc(Onull);
offsetNull->SetName(controller->GetName() + "_mocap_offset");
doc->InsertObject(offsetNull, nullptr, nullptr);
XPressoTag* offsetXpressoTag = (XPressoTag* )offsetNull->MakeTag(Texpresso);
GvNodeMaster* masterNode = offsetXpressoTag->GetNodeMaster();
GvNode* cnstObjectNode = masterNode->CreateNode(masterNode->GetRoot(), ID_OPERATOR_OBJECT);
cnstObjectNode->SetParameter(DescID(GV_OBJECT_OBJECT_ID), GeData(sourceCnstTag), DESCFLAGS_SET_0);
GvNode* nullObjectNode = masterNode->CreateNode(masterNode->GetRoot(), ID_OPERATOR_OBJECT);
nullObjectNode->SetParameter(DescID(GV_OBJECT_OBJECT_ID), GeData(offsetNull), DESCFLAGS_SET_0);
GvPort* sourcePort = nullObjectNode->AddPort(GV_PORT_OUTPUT, ID_BASEOBJECT_GLOBAL_POSITION, GV_PORT_FLAG_IS_VISIBLE, TRUE);
GvPort* targetPort = cnstObjectNode->AddPort(GV_PORT_INPUT, ID_CA_CONSTRAINT_TAG_PSR_P_OFFSET, GV_PORT_FLAG_IS_VISIBLE, TRUE);
cnstObjectNode->AddConnection(nullObjectNode, sourcePort, cnstObjectNode, targetPort);
sourcePort = nullObjectNode->AddPort(GV_PORT_OUTPUT, ID_BASEOBJECT_GLOBAL_ROTATION, GV_PORT_FLAG_IS_VISIBLE, TRUE);
targetPort = cnstObjectNode->AddPort(GV_PORT_INPUT, ID_CA_CONSTRAINT_TAG_PSR_R_OFFSET, GV_PORT_FLAG_IS_VISIBLE, TRUE);
cnstObjectNode->AddConnection(nullObjectNode, sourcePort, cnstObjectNode, targetPort);