6
$\begingroup$

I want to change multiple text objects at once.

Is there a way to copy the settings to all selected text objects?

$\endgroup$
5
  • $\begingroup$ possible duplicate of How do I copy a property from an active object to selected objects? $\endgroup$ Commented Mar 4, 2015 at 21:27
  • 1
    $\begingroup$ @RayMairlot that doesn't work on all properties also $\endgroup$
    – Chebhou
    Commented Mar 4, 2015 at 21:29
  • $\begingroup$ @AttackingHobo do you have specific properties to copy ? $\endgroup$
    – Chebhou
    Commented Mar 4, 2015 at 21:33
  • 2
    $\begingroup$ @RayMairlot That does not work for text properties. $\endgroup$ Commented Mar 4, 2015 at 22:30
  • $\begingroup$ @Chebhou Everything on the text tab. Geometry, Font, and Paragraph mainly. $\endgroup$ Commented Mar 4, 2015 at 22:32

3 Answers 3

6
$\begingroup$

This script will enable you to copy the text object properties from active to selected :

  • run the script once to register

  • you will find it in: 3D View -> object ->copy text properties

  • or hit space and type 'copy text '

enter image description here


import bpy
from bpy.types import Operator  # for defining new operator
from bpy.props import *   # for operator parameters

S = scene   = bpy.context.scene
C = context = bpy.context

def text_prop_copier():

        if context.active_object.type != 'FONT':
            return False

        active = bpy.data.curves[context.active_object.name]

        for ob in context.selected_objects:
            if ob.type == 'FONT':
                text = bpy.data.curves[ob.name]

                # collect names of writeable properties
                properties = [p.identifier for p in active.bl_rna.properties if not p.is_readonly]

                # copy those properties (prop != 'body') will skip from setting body property same as active object this changes all other properties but text content

                for prop in properties:
                    if (not prop.startswith('texspace') ) and (prop != 'name') and (prop != 'body') :
                        print(prop, 'copied')
                        setattr(text, prop, getattr(active, prop))

        return True

class   tex_prop_cop(Operator):  

        """copy active text object properties to selected"""        
        bl_idname = "fonts.prop_copy"   
        bl_label = "copy text properties"           
        bl_options = {'REGISTER', 'UNDO'}       


        def invoke(self, context, event):   
                if text_prop_copier():
                    self.report({'INFO'},"properties copied")
                return {'FINISHED'}


def addObject(self, context):
    self.layout.operator(
        tex_prop_cop.bl_idname,
        text = tex_prop_cop.bl_label,
        icon = 'PLUGIN')

def register():
    bpy.utils.register_class(tex_prop_cop)
    bpy.types.VIEW3D_MT_object.append(addObject)
    print("register done")

def unregister():
    bpy.utils.unregister_class(tex_prop_cop)
    bpy.types.VIEW3D_MT_object.remove(addObject)
    print("unregister done")

if __name__ == "__main__":
    register()
$\endgroup$
6
  • $\begingroup$ seems to be broken on 2.77? Get key error from selected object? $\endgroup$
    – 3pointedit
    Commented Mar 24, 2016 at 15:02
  • $\begingroup$ WOW, It's such a useful script! but it doesn't works in 2.77!!!!! Can anybody help with this? $\endgroup$
    – LDCO
    Commented Sep 8, 2016 at 21:36
  • $\begingroup$ Or should I open a new question for asking improving this script to work on newest Blender? $\endgroup$
    – LDCO
    Commented Sep 8, 2016 at 21:38
  • $\begingroup$ @Chebhou Is there a way to make this script work in 2.77a? $\endgroup$
    – LDCO
    Commented Sep 9, 2016 at 16:14
  • 1
    $\begingroup$ @Chebho Sorry, but no... now it's like this - if one of the text is a duplicate of another - one of them just disparate. if it's two new made textes - nothing changes (it rights although that "properties copied..." . Maybe we should open a new thread and ask for help? It's a really useful feature... $\endgroup$
    – LDCO
    Commented Sep 11, 2016 at 1:44
3
$\begingroup$

The only way I know of and that I use, is to copy the text objects with Alt+D. This will copy all settings between them, however the text itself is copied as well:

Linked Text GIF

You can link the font with Ctrl+L > Fonts without linking the actual text:

Link Fonts Command

Sadly it is currently not possible to copy other settings on text objects as they are not meshes.

The standard RMB > Copy to Selected is grayed out and can not be used.

$\endgroup$
2
  • 1
    $\begingroup$ Thanks for trying, but this doesn't help me. I need to copy everything from the Geometry, Font, and Paragraph. $\endgroup$ Commented Mar 4, 2015 at 22:52
  • $\begingroup$ No problem, however I'm afraid you will need to use a script to do the other two. Blender does not have a way to do that AFAIK. $\endgroup$
    – J Sargent
    Commented Mar 5, 2015 at 1:37
1
$\begingroup$

In Blender 2.9 you can select all the text objects you want to change the font on, selecting the font object that you want to copy the font from last. Then simply choose Object > Link/Transfer data > Link Fonts to Text here's what that looks like: link font from one or more text objects to another

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .