Bpy.data.texts içeriğini bpy.ops.text.save ile klasöre yazma

Sep 14 2020

Komut dosyalarımı bir klasörden okuyorum:

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

Artık komut dosyalarını blender'ın kendisinde kullanabilirim ve burada ve orada bazı şeyleri değiştirebilirim. Bir betiği kullanıcı olarak kaydetmek için Alt + S kullanabilirim . Bu prosedürü komut dosyası haline getirmek için blender, bpy.ops.text.save () ile bir araç ipucu gösterir ancak kaydetmek istediğim metni nasıl tanımlayacağımı bilmiyorum. Sanırım şöyle bir şey olacak:

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

Ancak bpy.data.texts.active aslında mevcut değil.

TL; DR: Aktif metin nerede tanımlanır?

Sevgiler, Mamu

Yanıtlar

2 HikariTW Sep 14 2020 at 16:32

Mevcut aktif metin nesnesini screen.areasmetin düzenleyicide bulabilirsiniz

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

Metin bloğu adınızı bildiğinizi varsayın, ardından bu metin türünü etkin metne atayın:

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

Bu, mevcut aktif metin nesnesini değiştirecektir.

2 batFINGER Sep 14 2020 at 21:22

Operatörsüz

Hem okuma hem de yazma operatörler olmadan yapılabilir.

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

ve yazı

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