Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Recent
    • Tags
    • Users
    • Login

    Getting NodeData from xPresso Tag

    Scheduled Pinned Locked Moved SDK Help
    5 Posts 0 Posters 442 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      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. 😕

      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        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

        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          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?

          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            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

            1 Reply Last reply Reply Quote 0
            • H Offline
              Helper
              last edited by

              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

              1 Reply Last reply Reply Quote 0
              • First post
                Last post