Bpy.data.texts içeriğini bpy.ops.text.save ile klasöre yazma
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
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.
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())