Le fichier source du script Blender, qui était initialement limité en fonctionnalités et de petite taille, ne grossit-il pas avec l'ajout de fonctionnalités? Dans un tel cas, divisons-le en plusieurs fichiers source. Cela dit, certaines personnes peuvent ne pas savoir comment diviser un script Blender, alors voici un résumé de la façon de diviser un script Blender.
Voici un exemple de fichier source avant de fractionner le fichier. C'est juste un exemple, donc je ne pense pas vraiment au contenu de la source.
all_in_one.py
import bpy
bl_info = {
# ...
}
class Operator_1(bpy.types.Operator):
bl_idname = "uv.operator_1"
bl_label = "Operator 1"
file_name = "hoge.blend"
def execute(self, context):
return{'FINISHED'}
class Operator_2(bpy.types.Operator):
bl_idname = "uv.operator_2"
bl_label = "Operator 2"
def execute(self, context):
self.report({'INFO'}, Operator_1.file_name)
return{'FINISHED'}
def menu_func(self, context):
self.layout.separator()
self.layout.menu(Operator_1.bl_idname)
self.layout.menu(Operator_2.bl_idname)
def register():
bpy.utils.register_module(__name__)
bpy.types.VIEW3D_MT_uv_map.append(menu_func)
def unregister():
bpy.utils.unregister_module(__name__)
bpy.types.VIEW3D_MT_uv_map.remove(menu_func)
if __name__ == "__main__":
register()
Indique un fichier dans lequel le fichier est divisé pour chaque classe. Cet exemple nécessite que tous les fichiers se trouvent dans le même répertoire. De plus, le nom de fichier qui décrit le processus lors du premier chargement du script doit être «__init __. Py». Il existe un processus pour lire le premier fichier fractionné de «__init __. Py», mais à part cela, il n'y a pas de différence particulière par rapport au cas sans fractionnement. L'explication de cette partie, à vrai dire, est la même que celle du package Python, elle est donc très familière à ceux qui connaissent Python.
op1.py
import bpy
class Operator_1(bpy.types.Operator):
bl_idname = "uv.operator_1"
bl_label = "Operator 1"
file_name = "hoge.blend"
def execute(self, context):
return{'FINISHED'}
op2.py
import bpy
from . import op1
class Operator_2(bpy.types.Operator):
bl_idname = "uv.operator_2"
bl_label = "Operator 2"
def execute(self, context):
self.report({'INFO'}, op1.Operator_1.file_name)
return{'FINISHED'}
__init__.py
bl_info = {
# ...
}
if "bpy" in locals():
import imp
imp.reload(op1)
imp.reload(op2)
else:
from . import op1
from . import op2
import bpy
def menu_func(self, context):
self.layout.separator()
self.layout.menu(op1.Operator_1.bl_idname)
self.layout.menu(op2.Operator_2.bl_idname)
def register():
bpy.utils.register_module(__name__)
bpy.types.VIEW3D_MT_uv_map.append(menu_func)
def unregister():
bpy.utils.unregister_module(__name__)
bpy.types.VIEW3D_MT_uv_map.remove(menu_func)
if __name__ == "__main__":
register()
Je vous ai montré comment diviser un fichier avec un script Blender. Si vous pensez que Blender traite la fonctionnalité d'un script comme un package, c'est la même chose que la création d'un package Python. Par conséquent, il n'a peut-être pas été nécessaire d'écrire un article, mais j'espère que cela sera utile pour ceux qui créent des scripts Blender.
Recommended Posts