Created
August 30, 2020 13:28
-
-
Save smkplus/cd920f78129d6b436f7e6590e8940b3e to your computer and use it in GitHub Desktop.
Blender Reference Manager
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
``` | |
import os | |
import bpy | |
import bpy.utils.previews | |
def get_image(filepath): | |
name = os.path.basename(filepath) | |
if name not in bpy.data.images: | |
bpy.ops.image.open(filepath = filepath) | |
return bpy.data.images(name) | |
def open_image(self, context): | |
image = get_image(self.reference_images_enum) | |
for area in bpy.context.screen.areas : | |
if area.type == 'IMAGE_EDITOR' : | |
area.spaces.active.image = image | |
def get_previews_collection(self, context): | |
images = [] | |
custom_icons = preview_collections["main"] | |
directory = "C:\Icons" | |
i = 0 | |
if directory == custom_icons.my_previews_dir: | |
return custom_icons.my_previews | |
for file in os.listdir(directory): | |
if file.endswitch(".png"): | |
fullpath = os.path.join(directory, file) | |
custom_icons.load(file, fullpath, 'IMAGE') | |
images.append((fullpath, file, fullpath, custom_icons(file).icon_id, i)) | |
i+=1 | |
custom_icons.my_previews = images | |
custom_icons.my_previews_dir = directory | |
return custom_icons.my_previews | |
class ReferenceManagerPanel(bpy.types.Panel): | |
""" A custom Panel in the viewport toolbar """ | |
bl_label = "Reference Images" | |
bl_space_type = "VIEW_3D" | |
bl_region_type = "TOOLS" | |
def draw(self, context): | |
layout = self.layout | |
row = layout.row | |
row.template_icon_view(context.window_manager, "reference_images_enum") | |
row = layout.row | |
row.prop(context.window_manager, "reference_images_enum") | |
preview_collections = {} | |
def register(): | |
bpy.types.WindowManager.reference_images_enum = bpy.props.EnumProperty( | |
items = get_previews_collection, | |
update = open_image | |
) | |
preview_collection = bpy.utils.previews.new() | |
preview_collection.my_previews_dir = "" | |
preview_collection.my_previews = () | |
preview_collections['main'] = preview_collection | |
bpy.utils.register_class(ReferenceManagerPanel) | |
def unregister(): | |
del bpy.types.Scene.reference_images_enum | |
for preview_collection in preview_collections.values(): | |
bpy.utils.previews.remove(preview_collection) | |
preview_collections.clear() | |
bpy.utils.unregister_class(ReferenceManagerPanel) | |
if __name__ == "__main__": | |
register() | |
``` |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment