Fontchooser



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

    On 08/09/2011 at 02:14, xxxxxxxx wrote:

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

    ---------
    hello,

    I'm using the Fontchooser (FONT ID {} ) in a res file of my plugin. And now I like to read the font name which the user choosen (to print out in an xml file). How can I do this.
    I know in the last versions it doesn't works with the FontData class !

    thanks
    Marky



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

    On 12/09/2011 at 05:54, xxxxxxxx wrote:

    With R13 you can now access the font container. The GeClipMap class provides font access functions (I know not the first place to look for).

    Here is a small example how to initialize and read out a font description. MY_FONT is just a FONT description in the resource files. I initialize with the "Arial" font as example. If not found it will use the default system font instead.

      
    Bool LookAtCamera::Init(GeListNode *node)  
    {  
      BaseContainer *data=((BaseList2D* )node)->GetDataInstance();  
      if (!data) return FALSE;  
      
      GeData d(FONTCHOOSER_DATA, DEFAULTVALUE);  
      FontData* fd = (FontData* )d.GetCustomDataType(FONTCHOOSER_DATA);  
      if (!fd) return FALSE;  
      
      BaseContainer bc;  
      GeClipMap::EnumerateFonts(&bc, GE_CM_FONTSORT_FLAT);  
      
      LONG i=0;  
      
      while (TRUE)  
      {  
          LONG id = bc.GetIndexId(i++);  
          if (id==NOTOK) break;  
      
          BaseContainer *fbc = bc.GetContainerInstance(id);  
      
          if (fbc)  
          {  
              String name;  
              if (!GeClipMap::GetFontName(fbc, GE_FONT_NAME_DISPLAY, &name)) return FALSE;  
      
              if (name.Compare("Arial") == 0)  
              {  
                  fd->SetFont(fbc);  
                  if (!data->SetData(MY_FONT,d)->GetType()) return FALSE;  
      
                  return TRUE;  
              }  
          }  
      }  
      
      BaseContainer bc2;  
      if (!GeClipMap::GetDefaultFont(GE_FONT_DEFAULT_SYSTEM, &bc2)) return FALSE;  
      
      fd->SetFont(&bc2);  
      if (!data->SetData(MY_FONT,d)->GetType()) return FALSE;  
      
      return TRUE;  
    }  
      
    EXECUTIONRESULT LookAtCamera::Execute(BaseTag *tag, BaseDocument *doc, BaseObject *op, BaseThread *bt, LONG priority, EXECUTIONFLAGS flags)  
    {  
      GeData d;  
      if (tag->GetParameter(DescLevel(MY_FONT),d,DESCFLAGS_GET_0))  
      {  
          FontData *fd = (FontData* )d.GetCustomDataType(FONTCHOOSER_DATA);  
          if (fd)  
          {  
              BaseContainer bc = fd->GetFont();  
              String name;  
              if (GeClipMap::GetFontName(&bc, GE_FONT_NAME_DISPLAY, &name))  
                  GePrint(name);  
          }  
      }  
      return EXECUTIONRESULT_OK;  
    }  
    

    EDIT: corrected the initialization code

    cheers,
    Matthias



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

    On 13/09/2011 at 02:24, xxxxxxxx wrote:

    hello Matthias,
     
    thanks for this example. But unfortunately I get always a DA_NIL value for the GeData
    in my Init() function.
    Do you know why ?
     
    regards
    Marky



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

    On 13/09/2011 at 03:58, xxxxxxxx wrote:

    Indeed there is a problem. I will look into it.

    cheers,
    Matthias



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

    On 13/09/2011 at 04:43, xxxxxxxx wrote:

    Ok, I corrected the Init() routine. As example I intialize it with the "Arial" font. If not found it will use the default system font instead.

    cheers,
    Matthias



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

    On 13/09/2011 at 05:41, xxxxxxxx wrote:

    fine, that's working now.
    My last question, how can I set a font in a osplinetext object?

    BaseObject* text = BaseObject::Alloc(Osplinetext);
    GeData data;
    BaseContainer *bc = text->GetDataInstance();
    data.SetString(op->GetDataInstance()->GetString(TXT_ID_PAINTSPLINETEXT_TEXT,""));
    bc->SetParameter( DescLevel(PRIM_TEXT_TEXT), data);
    bc->SetParameter( DescLevel(PRIM_TEXT_FONT), ?????

    regards
    Marky



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

    On 13/09/2011 at 06:41, xxxxxxxx wrote:

    You set it the same as I did in the Init() routine just with the PRIM_TEXT_FONT parameter ID.

    cheers,
    Matthias



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

    On 13/09/2011 at 07:13, xxxxxxxx wrote:

    super, it works. thanks a lot


Log in to reply