Skip to content
Snippets Groups Projects
io_import_BrushSet.py 4.61 KiB
Newer Older
  • Learn to ignore specific revisions
  • # SPDX-License-Identifier: GPL-2.0-or-later
    
    CansecoGPC's avatar
    CansecoGPC committed
    
    #---------------------------------------------#
    # todo
    #---------------------------------------------#
    '''
    - add file selection for single and multiple files
    - option to enable/disable fake users
    '''
    
    #---------------------------------------------#
    import bpy
    import os
    from bpy.props import *
    
    # addon description
    bl_info = {
        "name": "Import BrushSet",
        "author": "Daniel Grauer (kromar), CansecoGPC",
        "version": (1, 2, 2),
        "blender": (2, 80, 0),
        "location": "File > Import > BrushSet",
        "description": "Imports all image files from a folder.",
        "warning": '',    # used for warning icon and text in addons panel
        "doc_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/Scripts/Import-Export/BrushSet",
        "tracker_url": "https://developer.blender.org/maniphest/task/edit/form/2/",
        "category": "Import-Export",
    }
    
    #---------------------------------------------#
    
    # extension filter (alternative use mimetypes)
    # TODO: rewrite so it tries to load image and if it fails we know its not a format blender can load
    ext_list = ['.bmp',
                '.png',
                '.jpg',
                '.jp2',
                '.rgb',
                '.dds',
                '.hdr',
                '.exr',
                '.dpx',
                '.cin',
                '.tga',
                '.tif'];
    
    #---------------------------------------------#
    
    fakeUser = False
    
    def LoadBrushSet(filepath, filename):
        for file in os.listdir(filepath):
            path = (filepath + file)
    
            # get folder name
            (f1, f2) = os.path.split(filepath)
            (f3, foldername) = os.path.split(f1)
    
            # filter files by extensions (filter images)
            if any(file.lower().endswith(ext) for ext in ext_list):
                print("file: ", file)
                # create new texture
                texture = bpy.data.textures.new(file, 'IMAGE')
                texture.use_fake_user = fakeUser
                print("texture: ", texture)
    
                # now we need to load the image into data
                image = bpy.data.images.load(path)
                image.use_fake_user = fakeUser
                # image.source = 'FILE' #default is FILE so can remove this
                # image.filepath = path
                print("image: ", image, " ", path)
                print("texturename: ", texture.name)
    
                # and assign the image to the texture
                bpy.data.textures[texture.name].image = image
    
    
        print("Brush Set imported!")
    
    #---------------------------------------------#
    
    class BrushSetImporter(bpy.types.Operator):
        '''Load Brush Set'''
        bl_idname = "import_image.brushset"
        bl_label = "Import BrushSet"
    
        filename: StringProperty(name = "File Name",
                                  description = "filepath",
                                  default = "",
                                  maxlen = 1024,
                                  options = {'ANIMATABLE'},
                                  subtype = 'NONE')
    
        filepath: StringProperty(name = "File Name",
                                  description = "filepath",
                                  default = "",
                                  maxlen = 1024,
                                  options = {'ANIMATABLE'},
                                  subtype = 'NONE')
    
        def execute(self, context):
            LoadBrushSet(self.properties.filepath, self.properties.filename)
            return {'FINISHED'}
    
        def invoke(self, context, event):
            wm = context.window_manager
            wm.fileselect_add(self)
            return {'RUNNING_MODAL'}
    
    #---------------------------------------------#
    
    def menu_func(self, context):
        # clear the default name for import
        import_name = ""
    
        self.layout.operator(BrushSetImporter.bl_idname, text = "Brush Set").filename = import_name
    
    
    #---------------------------------------------#
    # GUI
    #---------------------------------------------#
    
    '''
    class Brush_set_UI(bpy.types.Panel):
    
        bl_space_type ='USER_PREFERENCES'
        bl_label = 'Brush_Path'
        bl_region_type = 'WINDOW'
        bl_options = {'HIDE_HEADER'}
    
        def draw(self, context):
    
            scn = context.scene
            layout = self.layout
            column = layout.column(align=True)
            column.label(text='Brush Directory:')
            column.prop(scn,'filepath')
    '''
    
    #---------------------------------------------#
    
    classes = (
        BrushSetImporter,
    )
    
    
    def register():
        from bpy.utils import register_class
        for cls in classes:
            register_class(cls)
        bpy.types.TOPBAR_MT_file_import.append(menu_func)
    
    
    def unregister():
        from bpy.utils import unregister_class
        for cls in reversed(classes):
            unregister_class(cls)
        bpy.types.TOPBAR_MT_file_import.remove(menu_func)
    
    
    if __name__ == "__main__":
        register()