Setting the FontData for a Text Object



  • Hello,
    I am trying to set the Font for a Text Objectt.

    I've been following the code from this forum topic: SetFont not working

    This example uses MoText, however, and I would like to use the Text Object. I'm unable to access its FontData via PRIM_TEXT_FONT:

    import c4d
    
    def main(doc):
        textObject = c4d.BaseObject(c4d.Osplinetext)
        doc.InsertObject(textObject)
        print textObject[c4d.PRIM_TEXT_FONT]
        #prints None
        c4d.EventAdd()
    
    if __name__=='__main__':
        main(doc)
    

    If I change the Font manually and then print Text[c4d.PRIM_TEXT_FONT] from the Command Line it does print the Font Data, but I don't know how to change this Font in Python.

    Can anyone explain how to get/set the FontData with a Text Object? Thank you!



  • For whatever reason, the default Text Object has no FontData in Text[c4d.PRIM_TEXT_FONT]. By creating a FontData instance, I was able to set the Font.

    import c4d
    
    def main(doc):
        textObject = c4d.BaseObject(c4d.Osplinetext)
        doc.InsertObject(textObject)
    
        fontData = c4d.FontData()
        
        bc = c4d.BaseContainer()
        bc.SetString(500, 'Arial')
        bc.SetString(501, '11')
        bc.SetInt32(502, 400)
        bc.SetInt32(503, 0)
        bc.SetString(509, 'Arial')
        bc.SetString(508, 'ArialMT')
        fontData.SetFont(bc)
        
        textObject[c4d.PRIM_TEXT_FONT] = fontData
        textObject[c4d.ID_BASELIST_NAME] = bc[500]
        textObject[c4d.PRIM_TEXT_TEXT] = bc[500]
        c4d.EventAdd()
    
    if __name__=='__main__':
        main(doc)
    


  • For whatever reason, the default Text Object has no FontData in Text[c4d.PRIM_TEXT_FONT]. By creating a FontData instance, I was able to set the Font.

    import c4d
    
    def main(doc):
        textObject = c4d.BaseObject(c4d.Osplinetext)
        doc.InsertObject(textObject)
    
        fontData = c4d.FontData()
        
        bc = c4d.BaseContainer()
        bc.SetString(500, 'Arial')
        bc.SetString(501, '11')
        bc.SetInt32(502, 400)
        bc.SetInt32(503, 0)
        bc.SetString(509, 'Arial')
        bc.SetString(508, 'ArialMT')
        fontData.SetFont(bc)
        
        textObject[c4d.PRIM_TEXT_FONT] = fontData
        textObject[c4d.ID_BASELIST_NAME] = bc[500]
        textObject[c4d.PRIM_TEXT_TEXT] = bc[500]
        c4d.EventAdd()
    
    if __name__=='__main__':
        main(doc)
    

Log in to reply