__author__ = 'thoth'
import bpy
#http://blender.stackexchange.com/questions/52966/what-workflow-should-we-use-to-create-a-text-object-that-requires-characters-fro
#http://www.fonts101.com/search/greek
from math import *
def construct_glyph(code_point, font, prefix, body = None):
if body is None:
body = chr(code_point)
name = prefix + chr(code_point)
curve = bpy.data.curves.new(name, 'FONT')
curve.body = body
curve.font = font
curve.font_italic = font
curve.font_bold = font
curve.font_bold_italic = font
obj = bpy.data.objects.get(name)
if obj is None:
obj = bpy.data.objects.new(name, curve)
else:
obj.data = curve
try:
bpy.context.scene.objects.link(obj)
except:
pass
obj.layers = [j == 19 for j in range(len(obj.layers))]
b = code_point % 16
a = floor(code_point / 16)
obj.location = (a, -b, -8)
def construct_font_objects(font, prefix, start, end, bodies = None):
for code_point in range(start, end+1):
if bodies is None:
body = None
else:
body = bodies[code_point-start]
construct_glyph(code_point, font, prefix, body)
def mission1():
f1 = bpy.data.fonts[0]
f2 = bpy.data.fonts['StandardGreekItalic']
construct_font_objects(f1, "my_font_", 32, 126) # english ASCII
construct_font_objects(f2, "my_font_", 0x390, 0x3af,
"@ABGDEZHQIKLMNXO"
+"PR?STUFCYW??\u00ae\u0161\u00bb\u2026")
construct_font_objects(f2, "my_font_", 0x390, 0x3c9,
"@ABGDEZHQIKLMNXO"
+"PR?STUFCYW??\u00ae\u0161\u00bb\u2026"
+"@abgdezhqiklmnxo"
+"pr?stufcyw")
def mission2():
name = "demo"
curve = bpy.data.curves.get(name)
if curve is None:
curve = bpy.data.curves.new(name, 'FONT')
curve.body = "psi = '\u03a8'? xi='\u039e'"
curve.body = "Greeks call it ελληνικά, right?"
# \u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac
curve.family = "my_font_"
curve.size = 2
# as of 2.77 this technique seems to not work well for unicode code points
obj = bpy.data.objects.get(name)
if obj is None:
obj = bpy.data.objects.new(name, curve)
else:
obj.data = curve
obj.dupli_type = 'VERTS'
try:
bpy.context.scene.objects.link(obj)
except:
pass
def mission3():
str = "ελληνικά"
out = ""
for i in str:
out += "\\u%04x"%ord(i)
print(out)
#
#
#
mission1()
mission2()
|
Blender python API quick-start
Syntax highlighting by Pygments.