Creating a Vector attribute in GetDDescription()



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

    On 07/06/2011 at 08:42, xxxxxxxx wrote:

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

    ---------
    Howdy,

    My tag has Add and Delete buttons, so I need to create vector attributes in GetDDescription() according to how many the user has added.

    My code looks like this:

    BaseContainer subgroup2 = GetCustomDataTypeDefault(DTYPE_GROUP);
    subgroup2.SetLong(DESC_COLUMNS, 1);
    if(!description->SetParameter(DescLevel(OFFSET_GROUP+i, DTYPE_GROUP, 0), subgroup2, DescLevel(ID_TARGET_GROUP))) return TRUE;
    		
    BaseContainer bc4 = GetCustomDataTypeDefault(DTYPE_VECTOR);
    bc4.SetLong(DESC_CUSTOMGUI,CUSTOMGUI_VECTOR);
    bc4.SetString(DESC_NAME, GeLoadString(IDS_OFFSET)+"."+LongToString(i));
    bc4.SetLong(DESC_UNIT, DESC_UNIT_DEGREE);
    bc4.SetReal(DESC_STEP,Rad(1.0));
    if (!description->SetParameter(DescLevel(OFFSET+i, DTYPE_VECTOR, 0), bc4, DescLevel(OFFSET_GROUP+i))) return TRUE;
    

    This is within a loop and it does create the vector attributes needed with each click of the Add button, but the up/down arrows of each value field aren't working. I can change the values by typing them in, but I can't use the up/down arrows to change the values. 😠

    Is there something missing in the above code thats causing the up/down arrows to not work?

    Adios,
    Cactus Dan



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

    On 08/06/2011 at 08:29, xxxxxxxx wrote:

    Looks like the step setting has to be set separatly for each sub-channel of the vector. I will try to put a working example together, having some problems to get it to work properly too.

    cheers,
    Matthias



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

    On 08/06/2011 at 10:42, xxxxxxxx wrote:

    Howdy,

    Thanks for looking into it, Matthias. 😉

    Adios,
    Cactus Dan



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

    On 15/06/2011 at 02:42, xxxxxxxx wrote:

    The solution is to use SetVector instead of SetReal to set the step size and minimum/maximum values.

    Example:

      
    Bool LookAtCamera::GetDDescription(GeListNode *node, Description *description, DESCFLAGS_DESC &flags)  
    {  
      if (!description->LoadDescription(1001165)) return FALSE;  
      const DescID *singleid = description->GetSingleDescID();  
      
      LONG MY_VECTOR = 6000;  
      DescID cid = DescLevel(MY_VECTOR, DTYPE_VECTOR, 0);  
      
      if (!singleid || cid.IsPartOf(*singleid, NULL)) // important to check for speedup c4d!  
      {  
          BaseContainer v = GetCustomDataTypeDefault(DTYPE_VECTOR);  
      
          v.SetLong(DESC_CUSTOMGUI, CUSTOMGUI_VECTOR);  
          v.SetString(DESC_NAME, "My Vector");  
      
          // use SetVector, not SetReal  
          v.SetVector(DESC_MIN, Vector(0.0));  
          v.SetVector(DESC_MAX, Rad(360.0));  
          v.SetVector(DESC_STEP, Rad(1.0));  
      
          v.SetLong(DESC_UNIT, DESC_UNIT_DEGREE);  
          v.SetVector(DESC_DEFAULT, Vector(0.0));  
      
          if (!description->SetParameter(cid, v, DescLevel(ID_TAGPROPERTIES))) return TRUE;  
      }  
      
      flags |= DESCFLAGS_DESC_LOADED;  
      
      return TRUE;  
    }  
    

    cheers,
    Matthias



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

    On 15/06/2011 at 13:19, xxxxxxxx wrote:

    Howdy,

    Thanks, Matthias. 😉

    Adios,
    Cactus Dan



  • On 30/05/2016 at 22:29, xxxxxxxx wrote:

    Thanks! :)


Log in to reply