Запись содержимого bpy.data.texts в папку с bpy.ops.text.save

Sep 14 2020

Я читаю свои скрипты из папки с:

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: Где определять активный текст?

С уважением, Маму

Ответы

2 HikariTW Sep 14 2020 at 16:32

Вы можете найти текущий активный текстовый объект в 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']

Это изменит текущий активный текстовый объект.

2 batFINGER Sep 14 2020 at 21:22

Без операторов

И чтение, и запись могут выполняться без операторов.

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())