2015-05-11 14:29:12 +00:00
|
|
|
# This sample script demonstrates how to place a custom icon on a button or
|
|
|
|
# menu entry.
|
|
|
|
#
|
|
|
|
# IMPORTANT NOTE: if you run this sample, there will be no icon in the button
|
|
|
|
# You need to replace the image path with a real existing one.
|
2015-05-12 07:17:31 +00:00
|
|
|
# For distributable scripts, it is recommended to place the icons inside the
|
2015-05-11 14:29:12 +00:00
|
|
|
# addon folder and access it relative to the py script file for portability
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# Other use cases for UI-previews:
|
|
|
|
# - provide a fixed list of previews to select from
|
|
|
|
# - provide a dynamic list of preview (eg. calculated from reading a directory)
|
|
|
|
#
|
|
|
|
# For the above use cases, see the template 'ui_previews_dynamic_enum.py"
|
|
|
|
|
|
|
|
|
|
|
|
import os
|
|
|
|
import bpy
|
|
|
|
|
|
|
|
|
|
|
|
class PreviewsExamplePanel(bpy.types.Panel):
|
|
|
|
"""Creates a Panel in the Object properties window"""
|
|
|
|
bl_label = "Previews Example Panel"
|
|
|
|
bl_idname = "OBJECT_PT_previews"
|
|
|
|
bl_space_type = 'PROPERTIES'
|
|
|
|
bl_region_type = 'WINDOW'
|
|
|
|
bl_context = "object"
|
|
|
|
|
|
|
|
def draw(self, context):
|
|
|
|
layout = self.layout
|
|
|
|
pcoll = preview_collections["main"]
|
|
|
|
|
|
|
|
row = layout.row()
|
|
|
|
my_icon = pcoll.get("my_icon")
|
|
|
|
row.operator("render.render", icon_value=my_icon.icon_id)
|
|
|
|
|
|
|
|
# my_icon.icon_id can be used in any UI function that accepts
|
|
|
|
# icon_value # try also setting text=""
|
|
|
|
# to get an icon only operator button
|
|
|
|
|
|
|
|
|
|
|
|
# We can store multiple preview collections here,
|
|
|
|
# however in this example we only store "main"
|
|
|
|
preview_collections = {}
|
|
|
|
|
|
|
|
|
|
|
|
def register():
|
|
|
|
|
|
|
|
# Note that preview collections returned by bpy.utils.previews
|
|
|
|
# are regular py objects - you can use them to store custom data.
|
|
|
|
import bpy.utils.previews
|
|
|
|
pcoll = bpy.utils.previews.new()
|
|
|
|
|
|
|
|
# path to the folder where the icon is
|
|
|
|
# the path is calculated relative to this py file inside the addon folder
|
|
|
|
my_icons_dir = os.path.join(os.path.dirname(__file__), "icons")
|
|
|
|
|
|
|
|
# load a preview thumbnail of a file and store in the previews collection
|
|
|
|
pcoll.load(
|
|
|
|
# identifier
|
|
|
|
"my_icon",
|
|
|
|
# path to image
|
|
|
|
os.path.join(my_icons_dir, "icon-image.png"),
|
|
|
|
# file type to generate preview from. others are: MOVIE, FONT, BLEND
|
|
|
|
'IMAGE')
|
|
|
|
|
|
|
|
preview_collections["main"] = pcoll
|
|
|
|
|
|
|
|
bpy.utils.register_class(PreviewsExamplePanel)
|
|
|
|
|
|
|
|
|
|
|
|
def unregister():
|
|
|
|
|
|
|
|
for pcoll in preview_collections.values():
|
|
|
|
bpy.utils.previews.remove(pcoll)
|
|
|
|
preview_collections.clear()
|
|
|
|
|
|
|
|
bpy.utils.unregister_class(PreviewsExamplePanel)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
register()
|