Blender脚本:如何写入文本对象

8
我使用Blender 2.6并添加了一个文本对象。
bpy.ops.object.text_add(location=(x,y,z))

我希望你只需要设置文本内容,但是不知道如何做。在Python控制台中,我发现可以使用以下代码:

bpy.data.texts['Text.001'].write("my text")

我有些困惑,不知道如何引用最后创建的对象来执行某些操作。在教程中,有primitive_MESHTYPE_add快捷方式,但它并不返回已创建的对象。你能告诉我如何使用Text.new()吗?


猜想我对以下代码感到满意: bpy.ops.object.text_add(enter_editmode=True, location = (x,y,z)) bpy.ops.font.delete() bpy.ops.font.text_insert(text="mytext") - groovehunter
2个回答

15
bpy.ops.object.text_add()
ob=bpy.context.object
ob.data.body = "my text"

我会使用ob = bpy.data.objects['Text'],以确保您选择的是文本对象而不是其他任何对象。另一个重要的事情是,通过这种方法,您可以通过分配ob.data.PROP_NAME来编辑文本的任何其他属性(例如字体、大小、粗体/斜体等)- 所有属性的参考可以在此处找到:https://docs.blender.org/api/2.79/bpy.types.TextCurve.html。此外,这应该在对象模式下完成。 - Bruno Silvano

10

如果您打算创建大量文本对象,我建议使用低级别的代码而不是bpy.ops,以提高代码执行速度:

import bpy

myFontCurve = bpy.data.curves.new(type="FONT",name="myFontCurve")
myFontOb = bpy.data.objects.new("myFontOb",myFontCurve)
myFontOb.data.body = "my text"
bpy.context.scene.objects.link(myFontOb)
bpy.context.scene.update()

2
Blender 2.8+ 更新:bpy.context.collection.objects.link(myFontOb) - Blake Miller
但是如果您有一些额外的逻辑并想将其转换为网格与一些修饰符混合?像这样? "txt = bpy.ops.object.text_add(enter_editmode=False, align='WORLD', location=(0, 0, 0), scale=(2, 2, 2))", "bpy.context.scene.objects.get(txt)", "txt.data.body = 'Number 5'", "bpy.ops.font.open(filepath='C:\\WINDOWS\\Fonts\\Poppins-Bold.otf')", "bpy.ops.object.modifier_add(type='SOLIDIFY')", "bpy.context.object.modifiers['Solidify'].thickness = 0.5", "bpy.ops.object.modifier_add(type='REMESH')", - Patrik Grinsvall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接