Запись содержимого bpy.data.texts в папку с bpy.ops.text.save
Я читаю свои скрипты из папки с:
import bpy
import pathlib
for file in pathlib.Path("C:\\awesome\\scripts\\folder").iterdir():
bpy.ops.text.open(filepath = str(file))
Теперь я могу использовать скрипты в самом блендере и могу кое-что изменить здесь и там. Чтобы сохранить скрипт как пользователь я могу использовать Alt + S . Для создания сценария этой процедуры блендер показывает всплывающую подсказку с bpy.ops.text.save (), но я не знаю, как определить, какой текст я хочу сохранить. Думаю, это будет что-то вроде:
import bpy
for text in bpy.data.texts:
bpy.data.texts.active = text
bpy.ops.text.save()
Но bpy.data.texts.active на самом деле недоступен.
TL; DR: Где определять активный текст?
С уважением, Маму
Ответы
Вы можете найти текущий активный текстовый объект в screen.areasтекстовом редакторе
area = next(area for area in context.screen.areas if area.type == 'TEXT_EDITOR')
text_obj = area.spaces.active.text
Предположим, что вы знаете свое имя текстового блока, затем назначьте этот тип текста активному тексту:
area.spaces.active.text = bpy.data.texts['Text.001']
Это изменит текущий активный текстовый объект.
Без операторов
И чтение, и запись могут выполняться без операторов.
import bpy
import pathlib
for file in pathlib.Path("somefolder").iterdir():
text = bpy.data.texts.load(str(file))
и письмо
import bpy
from pathlib import Path
for text in bpy.data.texts:
# internal
if text.is_in_memory:
continue
path = Path(bpy.path.abspath(text.filepath))
if path.exists():
path.write_text(text.as_string())