Range Mapper Node GetInPort [SOLVED]

On 20/08/2015 at 06:57, xxxxxxxx wrote:

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

---------
Hi,

I'm creating an XPresso file with a Range Mapper Node.
However, getting the Input Inport gives me problems.

GvPort* rangemapperInputInPort = rangeMapperNode->GetInPort(0);

This doesn't give me the Inport.
Yet:

GvPort* rangeMapperOutputOutPort = rangeMapperNode->GetOutPort(0);

gives me the Outport.

How should I get the input port??

Thanks in advance for your help and time!

On 21/08/2015 at 04:44, xxxxxxxx wrote:

Hi Casimir,

I quickly tested this using a Python script and it simply worked as expected. Nothing special needed. As Python in the end makes use of the C++ API, I have no reason to believe it's not working in C++.
Can you perhaps provide me with some more code, to check what is going on on your side?

On 21/08/2015 at 04:54, xxxxxxxx wrote:

Hi Andreas,

Here is some more code:

  
XPressoTag* footGoalXPressoTag;  
  if (doFrontSide)  
  {  
      if (doLeftGoalSide)  
      {  
          footGoalXPressoTag = static_cast<XPressoTag*>(frontLeftFootGoal->MakeTag(Texpresso, NULL));  
          if (!footGoalXPressoTag) return false;  
          if (doLeftSide)  
          {  
              footGoalXPressoTag->SetName("Left_Front_Left_Foot_Goal_XPresso_Tag");  
          }  
          else  
          {  
              footGoalXPressoTag->SetName("Right_Front_Left_Foot_Goal_XPresso_Tag");  
          }  
      }  
      else  
      {  
          footGoalXPressoTag = static_cast<XPressoTag*>(frontRightFootGoal->MakeTag(Texpresso, NULL));  
          if (!footGoalXPressoTag) return false;  
          if (doLeftSide)  
          {  
              footGoalXPressoTag->SetName("Left_Front_Right_Foot_Goal_XPresso_Tag");  
          }  
          else  
          {  
              footGoalXPressoTag->SetName("Right_Front_Right_Foot_Goal_XPresso_Tag");  
          }  
      }  
  }  
  else  
  {  
      if (doLeftGoalSide)  
      {  
          footGoalXPressoTag = static_cast<XPressoTag*>(backLeftFootGoal->MakeTag(Texpresso, NULL));  
          if (!footGoalXPressoTag) return false;  
          if (doLeftSide)  
          {  
              footGoalXPressoTag->SetName("Left_Back_Left_Foot_Goal_XPresso_Tag");  
          }  
          else  
          {  
              footGoalXPressoTag->SetName("Right_Back_Left_Foot_Goal_XPresso_Tag");  
          }  
      }  
      else  
      {  
          footGoalXPressoTag = static_cast<XPressoTag*>(backRightFootGoal->MakeTag(Texpresso, NULL));  
          if (!footGoalXPressoTag) return false;  
          if (doLeftSide)  
          {  
              footGoalXPressoTag->SetName("Left_Back_Right_Foot_Goal_XPresso_Tag");  
          }  
          else  
          {  
              footGoalXPressoTag->SetName("Right_Back_Right_Foot_Goal_XPresso_Tag");  
          }  
      }  
  }  
  GeData footGoalXPressoData;  
  if (footGoalXPressoTag->GetParameter(DescLevel(EXPRESSION_PRIORITY), footGoalXPressoData, DESCFLAGS_GET_0))  
  {  
      PriorityData* pd = (PriorityData* )footGoalXPressoData.GetCustomDataType(CUSTOMGUI_PRIORITY_DATA);  
      if (pd)  
      {  
          pd->SetPriorityValue(PRIORITYVALUE_MODE, CYCLE_GENERATORS);  
          pd->SetPriorityValue(PRIORITYVALUE_PRIORITY, GeData(4));  
      }  
      footGoalXPressoTag->SetParameter(DescLevel(EXPRESSION_PRIORITY), footGoalXPressoData, DESCFLAGS_SET_0);  
  }  
  GvNodeMaster* footGoalNodeMaster = footGoalXPressoTag->GetNodeMaster();  
  if (footGoalNodeMaster)  
  {  
      // Create the Range Mapper Node  
      GvNode* rangeMapperNode = footGoalNodeMaster->CreateNode(footGoalNodeMaster->GetRoot(), ID_OPERATOR_RANGEMAPPER, nullptr, 130, 0);  
      if (!rangeMapperNode) return false;  
      rangeMapperNode->SetParameter(GV_RANGEMAPPER_CLAMP_UPPER, GeData(true), DESCFLAGS_SET_0);  
      rangeMapperNode->SetParameter(GV_RANGEMAPPER_CLAMP_LOWER, GeData(true), DESCFLAGS_SET_0);  
      GvPort* rangeMapperInputInPort = rangeMapperNode->GetPort(GV_RANGEMAPPER_INPUT_USER); // Doesn't work, regardless if I use GetPort or GetInPort  
      if (rangeMapperInputInPort) return false;  
      GvPort* rangeMapperOutputOutPort = rangeMapperNode->GetOutPort(GV_RANGEMAPPER_OUTPUT_USER);  
      if (!rangeMapperOutputOutPort) return false;  
      GvPort* rangeMapperInputUpperInPort = rangeMapperNode->AddPort(GV_PORT_INPUT, GV_RANGEMAPPER_RANGE12);  
      if (!rangeMapperInputUpperInPort) return false;  
      GvPort* rangeMapperOutputUpperInPort = rangeMapperNode->AddPort(GV_PORT_INPUT, GV_RANGEMAPPER_RANGE22);  
      if (!rangeMapperOutputUpperInPort) return false;  
      GvPort* rangeMapperInputLowerInPort = rangeMapperNode->AddPort(GV_PORT_INPUT, GV_RANGEMAPPER_RANGE11);  
      if (!rangeMapperInputLowerInPort) return false;  
      GvPort* rangeMapperOutputLowerInPort = rangeMapperNode->AddPort(GV_PORT_INPUT, GV_RANGEMAPPER_RANGE21);  
      if (!rangeMapperOutputLowerInPort) return false;  

I hope this helps finding the problem.
Thanks for your help and time!!

On 21/08/2015 at 08:48, xxxxxxxx wrote:

Hi Casimir,

pssst, I won't tell anybody, but please have a look at the error check after GetPort().

On 21/08/2015 at 08:58, xxxxxxxx wrote:

Hi Andreas,

Hahahaha, like you said in that post with Dan, I also have my moments :D

You can mark this thread as junk :D

On 21/08/2015 at 09:07, xxxxxxxx wrote:

No problem :slightly_smiling_face:
Unfortunately we are out of [JUNK] tags, so it is simply solved.
And I guess, we all have these kind of moments.