Skip to content
Snippets Groups Projects
system_blend_info.py 5.67 KiB
Newer Older
  • Learn to ignore specific revisions
  • # SPDX-License-Identifier: GPL-2.0-or-later
    # Copyright 2010 Mariano Hidalgo
    
    
    # Show Information About the Blend.
    
    
    bl_info = {
    
    Luca Bonavita's avatar
    Luca Bonavita committed
        "name": "Scene Information",
    
        "author": "uselessdreamer",
    
        "version": (0, 3, 1),
        "blender": (2, 80, 0),
    
        "location": "Properties > Scene > Blend Info Panel",
    
        "description": "Show information about the .blend",
        "warning": "",
    
        "doc_url": "{BLENDER_MANUAL_URL}/addons/system/blend_info.html",
    
    
    import bpy
    
    
    def quantity_string(quantity, text_single, text_plural, text_none=None):
        sep = " "
    
        if not text_none:
            text_none = text_plural
    
        if quantity == 0:
            string = str(quantity) + sep + text_none
    
        if quantity == 1:
            string = str(quantity) + sep + text_single
    
        if quantity >= 2:
            string = str(quantity) + sep + text_plural
    
        if quantity < 0:
            return None
    
        return string
    
    
    class OBJECT_PT_blendinfo(bpy.types.Panel):
        bl_label = "Blend Info"
        bl_space_type = "PROPERTIES"
        bl_region_type = "WINDOW"
        bl_context = "scene"
    
        bl_options = {'DEFAULT_CLOSED'}
    
    
        def draw(self, context):
            ob_cols = []
            db_cols = []
    
            objects = bpy.data.objects
    
            layout = self.layout
    
            # OBJECTS
    
            l_row = layout.row()
            num = len(bpy.data.objects)
    
            l_row.label(text=quantity_string(num, "Object", "Objects")
                + " in the scene:",
                icon='OBJECT_DATA')
    
    
            l_row = layout.row()
            ob_cols.append(l_row.column())
            ob_cols.append(l_row.column())
    
            row = ob_cols[0].row()
            meshes = [o for o in objects.values() if o.type == 'MESH']
            num = len(meshes)
            row.label(text=quantity_string(num, "Mesh", "Meshes"),
    
                icon='MESH_DATA')
    
    
            row = ob_cols[1].row()
            curves = [o for o in objects.values() if o.type == 'CURVE']
            num = len(curves)
            row.label(text=quantity_string(num, "Curve", "Curves"),
    
                icon='CURVE_DATA')
    
    
            row = ob_cols[0].row()
            cameras = [o for o in objects.values() if o.type == 'CAMERA']
            num = len(cameras)
            row.label(text=quantity_string(num, "Camera", "Cameras"),
    
                icon='CAMERA_DATA')
    
            lamps = [o for o in objects.values() if o.type == 'LIGHT']
    
            num = len(lamps)
            row.label(text=quantity_string(num, "Lamp", "Lamps"),
    
                icon='LIGHT_DATA')
    
    
            row = ob_cols[0].row()
            armatures = [o for o in objects.values() if o.type == 'ARMATURE']
            num = len(armatures)
            row.label(text=quantity_string(num, "Armature", "Armatures"),
    
                icon='ARMATURE_DATA')
    
    
            row = ob_cols[1].row()
            lattices = [o for o in objects.values() if o.type == 'LATTICE']
            num = len(lattices)
            row.label(text=quantity_string(num, "Lattice", "Lattices"),
    
                icon='LATTICE_DATA')
    
    
            row = ob_cols[0].row()
            empties = [o for o in objects.values() if o.type == 'EMPTY']
            num = len(empties)
            row.label(text=quantity_string(num, "Empty", "Empties"),
    
                icon='EMPTY_DATA')
    
            row = ob_cols[1].row()
            empties = [o for o in objects.values() if o.type == 'SPEAKER']
            num = len(empties)
            row.label(text=quantity_string(num, "Speaker", "Speakers"),
                icon='OUTLINER_OB_SPEAKER')
    
    
    Campbell Barton's avatar
    Campbell Barton committed
            layout.separator()
    
            # DATABLOCKS
    
            l_row = layout.row()
            num = len(bpy.data.objects)
            l_row.label(text="Datablocks in the scene:")
    
            l_row = layout.row()
            db_cols.append(l_row.column())
            db_cols.append(l_row.column())
    
            row = db_cols[0].row()
            num = len(bpy.data.meshes)
            row.label(text=quantity_string(num, "Mesh", "Meshes"),
    
                icon='MESH_DATA')
    
    
            row = db_cols[1].row()
            num = len(bpy.data.curves)
            row.label(text=quantity_string(num, "Curve", "Curves"),
    
                icon='CURVE_DATA')
    
    
            row = db_cols[0].row()
            num = len(bpy.data.cameras)
            row.label(text=quantity_string(num, "Camera", "Cameras"),
    
                icon='CAMERA_DATA')
    
            num = len(bpy.data.lights)
    
            row.label(text=quantity_string(num, "Lamp", "Lamps"),
    
                icon='LIGHT_DATA')
    
    
            row = db_cols[0].row()
            num = len(bpy.data.armatures)
            row.label(text=quantity_string(num, "Armature", "Armatures"),
    
                icon='ARMATURE_DATA')
    
    
            row = db_cols[1].row()
            num = len(bpy.data.lattices)
            row.label(text=quantity_string(num, "Lattice", "Lattices"),
    
                icon='LATTICE_DATA')
    
    
            row = db_cols[0].row()
            num = len(bpy.data.materials)
            row.label(text=quantity_string(num, "Material", "Materials"),
    
                icon='MATERIAL_DATA')
    
    
            row = db_cols[1].row()
            num = len(bpy.data.worlds)
            row.label(text=quantity_string(num, "World", "Worlds"),
    
                icon='WORLD_DATA')
    
    
            row = db_cols[0].row()
            num = len(bpy.data.textures)
            row.label(text=quantity_string(num, "Texture", "Textures"),
    
                icon='TEXTURE_DATA')
    
    
            row = db_cols[1].row()
            num = len(bpy.data.images)
            row.label(text=quantity_string(num, "Image", "Images"),
    
                icon='IMAGE_DATA')
    
    
            row = db_cols[0].row()
            num = len(bpy.data.texts)
            row.label(text=quantity_string(num, "Text", "Texts"),
    
                icon='TEXT')
    
    # Register
    classes = [
        OBJECT_PT_blendinfo
    ]
    
        from bpy.utils import register_class
        for cls in classes:
            register_class(cls)
    
        from bpy.utils import unregister_class
        for cls in reversed(classes):
            unregister_class(cls)
    
    
    if __name__ == "__main__":
        register()