# SPDX-License-Identifier: GPL-2.0-or-later #---------------------------------------------# # 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()