Storage of data



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

    On 04/01/2005 at 10:24, xxxxxxxx wrote:

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

    ---------
    Hello,
    i have problems storing persistent data (like member variables) in my from ObjectData derived class:

      
    class C4DNode_NodeData: public ObjectData  
    {  
    INSTANCEOF(C4DNode_NodeData,ObjectData)  
    private:  
         String teststring;  
    public:  
         virtual Bool Init(GeListNode *node);  
         virtual Bool GetDDescription(GeListNode *node, Description *description,LONG &flags;);  
         void SetString(String _g);  
    };  
      
    ...  
    //the following functions are in the same order in that they are called  
      
    Bool C4DNode_NodeData::Init(GeListNode *node)  
    {     teststring = "initvalue";  
         return TRUE;  
    }  
      
    void C4DNode_NodeData::SetString(String _g)  
    {     teststring = "newvalue";  
    }  
      
    Bool C4DNode_NodeData::GetDDescription(GeListNode *node, Description *description,LONG &flags;)  
    {     ...  
         GePrint(teststring); //here is teststring "initvalue", not "newvalue"  
         ...  
    }  
      
    

    I tried the same with a BaseContainer, but the function SetString() doesn't change the value. But if i change an existing container of my description in SetString() with ...->SetLong(TESTID, 1) the value is changed in my object. What's wrong? Is there a better way to store member variables?

    Thanks for any help,
    Torsten



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

    On 07/01/2005 at 02:56, xxxxxxxx wrote:

    Problem solved (in an unusual way).
    I change my member variables by sending a message.

      
    ...  
    void C4DNode_NodeData::SetString(String _g)  
    {     String gtemp = "newvalue";  
         ((PluginObject* )this)->Message(UWM_MYOWNMESSAGE, &gtemp;);  
    }  
      
    Bool C4DNode_NodeData::Message(GeListNode *node, LONG type, void *t_data)  
    {       
         if(type == UWM_MYOWNMESSAGE)                 
         {     String* gtemp = (String* )t_data;  
              g = gtemp->SubStr(0,gtemp->GetLength()); //found no better way to get String from String*   
         }  
         return TRUE;  
    }      
    ...  
    

    Torsten


Log in to reply