port->SetData



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

    On 11/11/2002 at 19:10, xxxxxxxx wrote:

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

    ---------
    Tring to figure out how to use the GvPort->SetData command without crashing C4D. I want to pass a BaseLink and or our own custom datatypes.
    Regards,
    darf - bhodiNUT



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

    On 12/11/2002 at 00:09, xxxxxxxx wrote:

    Sorry, I am still investigating this and the corresponding GetData() issue. Will report back as soon as I hear anything.



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

    On 12/11/2002 at 10:39, xxxxxxxx wrote:

    First, I guess this cannot be repeated too often:
    > GV disclaimer: The GV API (everything in c4d_gv) is currently unsupported and might change in the future.
    In other words, don't rely on the current GV or TP system to be either predictable, stable or consistent. I know I've told you this privately, but it deserved to be said in public as well.
    That being said, I found some more information about allocating Dynamic Data within Xpresso. From studying the functions in c4d_graphview.h some things can be learned. To use GetData() you must first call GvAllocDynamicData(), then you can use data.data as d. (I couldn't get this to work though.) For GeData-Gv conversion, see the GvSetDataInContainer() implementation.



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

    On 12/11/2002 at 10:46, xxxxxxxx wrote:

    Quote: Originally posted by Mikael Sterner on 12  November 2002
    >
    > * * *
    >
    > That being said, I found some more information about allocating Dynamic Data within Xpresso. From studying the functions in c4d_graphview.h some things can be learned. To use GetData() you must first call GvAllocDynamicData(), then you can use data.data as d. (I couldn't get this to work though.) For GeData-Gv conversion, see the GvSetDataInContainer() implementation.
    >
    > * * *
    OK, where is the GvSetDataInContainer() implementation?

    Thanks, darf



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

    On 12/11/2002 at 11:38, xxxxxxxx wrote:

    Quote: Originally posted by darf on 12  November 2002
    >
    > * * *
    >
    > OK, where is the GvSetDataInContainer() implementation?
    In other news: find-in-files useful for finding stuff in files... ;-)

        
        
        //c4d_graphview.h  
          
        inline Bool GvSetDataInContainer(const void* const data, GvValueID value_id, BaseContainer &bc, LONG container_id, LONG cpu_id = 0)  
        {  
         CUSTOMDATATYPEPLUGIN* pl = FindCustomDataTypePlugin(value_id); if (!pl) return FALSE;  
         GeData ge_data; CallCustomDataType(pl,ConvertGvToGeData)(data,cpu_id,ge_data);  
         bc.SetData(container_id,ge_data);  
         return TRUE;  
        }
    

    I.e. it calls a function pointer function in the CUSTOMDATATYPEPLUGIN. I don't really know what value_id to use here for BaseLink. Perhaps something interesting can be found if browsig the Registry for e.g. C4DPL_CUSTOMDATATYPE items. (Haven't tried myself, don't have the time at the moment.)



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

    On 13/11/2002 at 01:27, xxxxxxxx wrote:

    Breakthrough. Here are functions for getting and setting arbitrary value types:
    >

    \>     
    \>     
    \>     GeData GvGetPortGeData(GvNode* node, GvPort* port, GvRun* run)  
    \>     > {   
    \>     >   if (!node || !port) return GeData();
    \>     
    \>     
    \>     
    \>     
    \>       GvDataInfo* info = GvGetWorld()->GetDataTypeInfo(port->GetValueType());  
    \>     >   if (!info) return GeData();
    \>     
    \>     
    \>     
    \>     
    \>       GvDynamicData data;  
    \>     >   GvAllocDynamicData(node, data, info);
    \>     
    \>     
    \>     
    \>     
    \>       if (!port->GetData(data.data, data.info->value_handler->value_id, run)) return GeData();
    \>     
    \>     
    \>     
    \>     
    \>       CUSTOMDATATYPEPLUGIN* pl =   
    \>     >     FindCustomDataTypePlugin(data.info->value_handler->value_id);   
    \>     >   if (!pl) return GeData();
    \>     
    \>     
    \>     
    \>     
    \>       GeData ge_data;   
    \>     >   if (!CallCustomDataType(pl, ConvertGvToGeData)(data.data, 0, ge_data)) return GeData();
    \>     
    \>     
    \>     
    \>     
    \>       return ge_data;  
    \>     > }
    \>     
    \>     
    \>     
    \>     
    \>     Bool GvSetPortGeData(const GeData& ge_data, GvNode* node, GvPort* port, GvRun* run)  
    \>     > {   
    \>     >   if (!node || !port || !run) return FALSE;
    \>     
    \>     
    \>     
    \>     
    \>       GvDataInfo* info = GvGetWorld()->GetDataTypeInfo(port->GetValueType());  
    \>     >   if (!info) return FALSE;
    \>     
    \>     
    \>     
    \>     
    \>       GvDynamicData data;  
    \>     >   GvAllocDynamicData(node, data, info);
    \>     
    \>     
    \>     
    \>     
    \>       CUSTOMDATATYPEPLUGIN* pl =   
    \>     >     FindCustomDataTypePlugin(data.info->value_handler->value_id);   
    \>     >   if (!pl) return FALSE;
    \>     
    \>     
    \>     
    \>     
    \>       if (!CallCustomDataType(pl, ConvertGeDataToGv)(ge_data, data.data, 0)) return FALSE;
    \>     
    \>     
    \>     
    \>     
    \>       if (!port->SetData(data.data, data.info->value_handler->value_id, run)) return FALSE;
    \>     
    \>     
    \>     
    \>     
    \>       return TRUE;  
    \>     > }
    \> 
    \> 
    

    Usage for the former function:
    >

    \>     
    \>     
    \>     GvValue* vlink = NULL;  
    \>     >   
    \>     > vlink = ports.in_values[GVTEST_LINK_INDEX];
    \>     
    \>     
    \>     
    \>     
    \>     GvPort* linkport = vlink->GetPort();  
    \>     > GeData linkdata = GvGetPortGeData(bn, linkport, run);
    \>     
    \>     
    \>     
    \>     
    \>     BaseLink* test = linkdata.GetBaseLink();  
    \>     > if (test && test->GetLink(bn->GetNodeMaster()->GetDocument()))  
    \>     >  GePrint(test->GetLink(bn->GetNodeMaster()->GetDocument())->GetName());
    \> 
    \> 
    

    Usage for the latter function:
    >

    \>     
    \>     
    \>     BaseDocument* doc = bn->GetNodeMaster()->GetDocument();  
    \>     > if (!doc) return FALSE;
    \>     
    \>     
    \>     
    \>     
    \>     BaseObject* obj = doc->GetFirstObject();  
    \>     > if (!obj) return FALSE;
    \>     
    \>     
    \>     
    \>     
    \>     AutoAlloc<BaseLink> bl;  
    \>     > bl->SetLink(obj);
    \>     
    \>     
    \>     
    \>     
    \>     return GvSetPortGeData(GeData(bl), bn, port, run);
    \> 
    \> 
    


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

    On 13/11/2002 at 08:32, xxxxxxxx wrote:

    Quote: Originally posted by Mikael Sterner on 12  November 2002
    >
    > * * *
    >
    > In other news: find-in-files useful for finding stuff in files... ;-)
    >
    >

    \> 
    \> 
    

    >
    > * * *

    !@#$ My apologies, DOH!!!
    darf


Log in to reply