Menulis konten bpy.data.texts ke folder dengan bpy.ops.text.save

Sep 14 2020

Saya membaca skrip saya dari folder dengan:

import bpy
import pathlib
for file in pathlib.Path("C:\\awesome\\scripts\\folder").iterdir():
    bpy.ops.text.open(filepath = str(file))

Sekarang saya dapat menggunakan skrip dalam blender itu sendiri dan dapat mengubah beberapa hal di sana-sini. Untuk menyimpan naskah sebagai pengguna saya dapat menggunakan Alt + S . Untuk membuat skrip prosedur ini, blender menampilkan tooltip dengan bpy.ops.text.save () tetapi saya tidak tahu bagaimana menentukan teks mana yang ingin saya simpan. Saya kira itu akan menjadi seperti:

import bpy
for text in bpy.data.texts:
    bpy.data.texts.active = text
    bpy.ops.text.save()

Tetapi bpy.data.texts.active sebenarnya tidak tersedia.

TL; DR: Di mana harus mendefinisikan teks aktif?

Hebat, Mamu

Jawaban

2 HikariTW Sep 14 2020 at 16:32

Anda dapat menemukan objek teks aktif saat ini di screen.areaseditor teks

area = next(area for area in context.screen.areas if area.type == 'TEXT_EDITOR')
text_obj = area.spaces.active.text

Asumsikan bahwa Anda mengetahui nama blok teks Anda, lalu tetapkan jenis teks tersebut ke teks aktif:

area.spaces.active.text = bpy.data.texts['Text.001']

Ini akan mengubah objek teks aktif saat ini.

2 batFINGER Sep 14 2020 at 21:22

Tanpa Operator

Baik membaca dan menulis dapat dilakukan tanpa operator.

import bpy
import pathlib
for file in pathlib.Path("somefolder").iterdir():
    text = bpy.data.texts.load(str(file))

dan menulis

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