diff --git a/io_import_BrushSet.py b/io_import_BrushSet.py new file mode 100644 index 0000000000000000000000000000000000000000..0c788fcba7285ef229e88e73f44229985ad8a934 --- /dev/null +++ b/io_import_BrushSet.py @@ -0,0 +1,181 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# <pep8-80 compliant> + +#---------------------------------------------# +# 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()