Getting NodeData from xPresso Tag

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 22/06/2011 at 07:28, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   12 
Platform:   Windows  ;   
Language(s) :     C++  ;  XPRESSO  ;

---------
Hi folks!

We are currently working on a non commercial plugin for c4d with our project group at university.
My task is to retrieve data that is stored in the nodes in a xPresso Tag.

So for example, there are two objects and some XPresso math functions between them like Invert, Matrix to Vektor, Booleans etc. Just some XPresso nodes.

Its working pretty well so far, i iterate through the objects get some names and stuff but im totally confused when it comes to getting the data that is stored in a node. I think it should be possible to get the data stored in a node object? If there is a "RangeMapper" node i should be possible to retrieve the settings of the "RangeMapper"?

Perhaps someone has an idea - i do not require complete code or something, just some tips please that would be nice enough! 🙂

Greetings!

*edit*
I also need to get the node Type, if i use this for example:

  
const String nodeType = actualChildNode->GetTypeName();  

I only get the String back which contains the name of the node Object in the XPresso graphviewer window. So if rename the RangeMapper to RangeMapper123 i will get "RagenMapper123" obviously thats not the type of the node object. 😕

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 22/06/2011 at 16:39, xxxxxxxx wrote:

Here's an example that might help.
It just creates a constant node. Then sets the output port value. Then it prints that value to the console.
At the bottom is also how to get the  type of node it is:

  GvNode* xconst = nm->CreateNode(nm->GetRoot(), ID_OPERATOR_CONST, NULL, 100, 100); // Creates a constant node  
  xconst->SetParameter(DescID(GV_CONST_VALUE), GeData(5), DESCFLAGS_SET_0);         // Sets the output port's value to 5  
  GeData d;  // Create a variable to store what we get using GetParameter next   
  xconst->GetParameter(DescID(GV_CONST_VALUE), d, DESCFLAGS_GET_0); // Get the value stored in the constant node's output port  
  Real outportvalue = d.GetReal(); // Result from GetParameter is type GeData which can't be printed. So this gets the actual value and assigns it to a variable    
  GePrint(RealToString(outportvalue)); // Now that we have a Real data type. We can print the actual result that's in the node's output port   
    
  xconst->SetName("My Constant Node");   
  String name = xconst->GetName();  
  GePrint(name);                     // Results in the name of the node labeled  "My Constant Node"            
  
  LONG ID = xconst->GetOperatorID();  
  GePrint(LongToString(ID));         // Results in 400001120 which is the numeric value of ID_OPERATOR_CONST  
                                   // Found in the c4d_graphview_def.h file  
    
  LONG type = xconst->GetType();   
  GePrint(LongToString(type));      // Results in 1001101 which is the numeric value for ID_GV_NODEDATA 

-ScottA

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 23/06/2011 at 04:09, xxxxxxxx wrote:

Hi, thank you for your fast reply. So i will try to use GetParameter to retrieve some data from the RangeMapper etc 🙂 Perhaps its ok. I will answer here if i got something new.#

*edit*

I tryed to use the getParameter but i think that does not work for us. At least i dont understand how to use it i think. The parameters for the function are a bit hard for me to understand.

I also searched in the documentation but cannot get any more information.

Anyone another idea?

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 27/06/2011 at 06:25, xxxxxxxx wrote:

Here is a small example how to browse through an XPresso tag.

  
#include "c4d.h"  
#include "c4d_symbols.h"  
  
#include "c4d_graphview.h"  
  
#include "C:\Program Files\MAXON\RC R12.048 42839\resource\modules\gv\expressiontag\res\description\gvbool.h"  
  
  
class MenuTest : public CommandData  
{  
  public:  
      virtual Bool Execute(BaseDocument *doc);  
};  
  
// recursive iteration  
void StepThroughNodes(GvNode *node)  
{  
  while (node)  
  {  
      // prints the title of the node  
      GePrint(node->GetTitle());  
  
      if (node->GetOperatorID() == ID_OPERATOR_BOOL)  
      {  
          // node is a Boole node  
  
          GeData d;  
  
          // get the value of the Boole node's Function parameter  
          if (node->GetParameter(DescLevel(GV_BOOL_FUNCTION_ID), d, DESCFLAGS_GET_0))  
          {  
              LONG bool_funtion = d.GetLong();  
  
              GePrint(LongToString(bool_funtion));  
  
              //bool_function is one of these:  
              //GV_AND_NODE_FUNCTION;   
              //GV_OR_NODE_FUNCTION;  
              //GV_XOR_NODE_FUNCTION;  
              //GV_NAND_NODE_FUNCTION;  
              //GV_NOR_NODE_FUNCTION;  
              //GV_NXOR_NODE_FUNCTION;  
          }  
      }  
  
      StepThroughNodes(node->GetDown());  
  
      node = node->GetNext();  
  }  
}  
  
Bool MenuTest::Execute(BaseDocument *doc)  
{  
  // get an active object  
  BaseObject *op = doc->GetActiveObject();  
  if (!op) return FALSE;  
  
  // get the first XPresso tag  
  XPressoTag *tag = (XPressoTag* )op->GetTag(Texpresso, 0);  
  if (!tag) return FALSE;  
  
  // get the node node master of the tag to access its data  
  GvNodeMaster *master = tag->GetNodeMaster();  
  if (!master) return FALSE;  
  
  // iterates through all nodes in the XPresso tag  
  StepThroughNodes(master->GetRoot());  
  
  return TRUE;  
}  
  
  
Bool RegisterMenuTest(void)  
{  
  // be sure to use a unique ID obtained from www.plugincafe.com  
  return RegisterCommandPlugin(1000956,GeLoadString(IDS_MENUTEST),0,AutoBitmap("icon.tif"),String("C++ SDK Menu Test Plugin"),gNew MenuTest);  
}  

What data do you want to read, the values of the ports or the values of the nodes' parameters?

cheers,
Matthias

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 20/09/2011 at 05:18, xxxxxxxx wrote:

Hey Matthias,
thanks for your answer. Sorry for my late reply, our project team was on vacation.
Your code is nice to understand thanks.

We want to read all the data a node contains. So we need whats at the inport, at the outport and also what type the node is. So i think your code helps us a lot. Now i can discover of which type a node is. Thanks for this! 🙂
I will try to find out how to get the data regarding your example. I think this will help. Thanks again!

cheers,
Oukie