Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'blenderkit/__init__.py')
-rw-r--r--blenderkit/__init__.py1977
1 files changed, 0 insertions, 1977 deletions
diff --git a/blenderkit/__init__.py b/blenderkit/__init__.py
deleted file mode 100644
index 22afd2a1..00000000
--- a/blenderkit/__init__.py
+++ /dev/null
@@ -1,1977 +0,0 @@
-# ##### 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 #####
-
-bl_info = {
- "name": "BlenderKit Online Asset Library",
- "author": "Vilem Duha, Petr Dlouhy",
- "version": (3, 0, 0),
- "blender": (2, 93, 0),
- "location": "View3D > Properties > BlenderKit",
- "description": "Online BlenderKit library (materials, models, brushes and more). Connects to the internet.",
- "warning": "",
- "doc_url": "{BLENDER_MANUAL_URL}/addons/3d_view/blenderkit.html",
- "category": "3D View",
-}
-
-if "bpy" in locals():
- from importlib import reload
-
- # alphabetically sorted all add-on modules since reload only happens from __init__.
- # modules with _bg are used for background computations in separate blender instance and that's why they don't need reload.
-
- append_link = reload(append_link)
- asset_bar_op = reload(asset_bar_op)
- asset_inspector = reload(asset_inspector)
- autothumb = reload(autothumb)
- bg_blender = reload(bg_blender)
- bkit_oauth = reload(bkit_oauth)
- categories = reload(categories)
- colors = reload(colors)
- download = reload(download)
- icons = reload(icons)
- image_utils = reload(image_utils)
- oauth = reload(oauth)
- overrides = reload(overrides)
- paths = reload(paths)
- ratings = reload(ratings)
- ratings_utils = reload(ratings_utils)
- comments_utils = reload(comments_utils)
- resolutions = reload(resolutions)
- search = reload(search)
- tasks_queue = reload(tasks_queue)
- ui = reload(ui)
- ui_bgl = reload(ui_bgl)
- ui_panels = reload(ui_panels)
- upload = reload(upload)
- upload_bg = reload(upload_bg)
- utils = reload(utils)
- reports = reload(reports)
-
- bl_ui_widget = reload(bl_ui_widget)
- bl_ui_label = reload(bl_ui_label)
- bl_ui_button = reload(bl_ui_button)
- bl_ui_image = reload(bl_ui_image)
- # bl_ui_checkbox = reload(bl_ui_checkbox)
- # bl_ui_slider = reload(bl_ui_slider)
- # bl_ui_up_down = reload(bl_ui_up_down)
- bl_ui_drag_panel = reload(bl_ui_drag_panel)
- bl_ui_draw_op = reload(bl_ui_draw_op)
- # bl_ui_textbox = reload(bl_ui_textbox)
-
-else:
- from blenderkit import append_link
- from blenderkit import asset_bar_op
- from blenderkit import asset_inspector
- from blenderkit import autothumb
- from blenderkit import bg_blender
- from blenderkit import bkit_oauth
- from blenderkit import categories
- from blenderkit import colors
- from blenderkit import download
- from blenderkit import icons
- from blenderkit import image_utils
- from blenderkit import oauth
- from blenderkit import overrides
- from blenderkit import paths
- from blenderkit import ratings
- from blenderkit import ratings_utils
- from blenderkit import comments_utils
- from blenderkit import resolutions
- from blenderkit import search
- from blenderkit import tasks_queue
- from blenderkit import ui
- from blenderkit import ui_bgl
- from blenderkit import ui_panels
- from blenderkit import upload
- from blenderkit import upload_bg
- from blenderkit import utils
- from blenderkit import reports
-
- from blenderkit.bl_ui_widgets import bl_ui_widget
- from blenderkit.bl_ui_widgets import bl_ui_label
- from blenderkit.bl_ui_widgets import bl_ui_button
- from blenderkit.bl_ui_widgets import bl_ui_image
- # from blenderkit.bl_ui_widgets import bl_ui_checkbox
- # from blenderkit.bl_ui_widgets import bl_ui_slider
- # from blenderkit.bl_ui_widgets import bl_ui_up_down
- from blenderkit.bl_ui_widgets import bl_ui_draw_op
- from blenderkit.bl_ui_widgets import bl_ui_drag_panel
- # from blenderkit.bl_ui_widgets import bl_ui_textbox
-
-import os
-import math
-import time
-import logging
-import bpy
-import pathlib
-
-log = logging.getLogger(__name__)
-
-from bpy.app.handlers import persistent
-import bpy.utils.previews
-import mathutils
-from mathutils import Vector
-from bpy.props import (
- IntProperty,
- FloatProperty,
- FloatVectorProperty,
- StringProperty,
- EnumProperty,
- BoolProperty,
- PointerProperty,
-)
-from bpy.types import (
- Operator,
- Panel,
- AddonPreferences,
- PropertyGroup,
-)
-
-
-# logging.basicConfig(filename = 'blenderkit.log', level = logging.INFO,
-# format = ' %(asctime)s:%(filename)s:%(funcName)s:%(lineno)d:%(message)s')
-
-
-@persistent
-def scene_load(context):
- ui_props = bpy.context.window_manager.blenderkitUI
- ui_props.assetbar_on = False
- ui_props.turn_off = False
- preferences = bpy.context.preferences.addons['blenderkit'].preferences
- preferences.login_attempt = False
-
-
-@bpy.app.handlers.persistent
-def check_timers_timer():
- ''' checks if all timers are registered regularly. Prevents possible bugs from stopping the addon.'''
- if not bpy.app.background:
- if not bpy.app.timers.is_registered(search.search_timer):
- bpy.app.timers.register(search.search_timer)
- if not bpy.app.timers.is_registered(download.download_timer):
- bpy.app.timers.register(download.download_timer)
- if not (bpy.app.timers.is_registered(tasks_queue.queue_worker)):
- bpy.app.timers.register(tasks_queue.queue_worker)
- if not bpy.app.timers.is_registered(bg_blender.bg_update):
- bpy.app.timers.register(bg_blender.bg_update)
- return 5.0
-
-
-conditions = (
- ('UNSPECIFIED', 'Unspecified', ""),
- ('NEW', 'New', 'Shiny new item'),
- ('USED', 'Used', 'Casually used item'),
- ('OLD', 'Old', 'Old item'),
- ('DESOLATE', 'Desolate', 'Desolate item - dusty & rusty'),
-)
-model_styles = (
- ('REALISTIC', 'Realistic', "Photo realistic model"),
- ('PAINTERLY', 'Painterly', 'Hand painted with visible strokes'),
- ('LOWPOLY', 'Lowpoly', "Lowpoly art -don't mix up with polycount!"),
- ('ANIME', 'Anime', 'Anime style'),
- ('2D_VECTOR', '2D Vector', '2D vector'),
- ('3D_GRAPHICS', '3D Graphics', '3D graphics'),
- ('OTHER', 'Other', 'Other styles'),
-)
-search_model_styles = (
- ('REALISTIC', 'Realistic', "Photo realistic model"),
- ('PAINTERLY', 'Painterly', 'Hand painted with visible strokes'),
- ('LOWPOLY', 'Lowpoly', "Lowpoly art -don't mix up with polycount!"),
- ('ANIME', 'Anime', 'Anime style'),
- ('2D_VECTOR', '2D Vector', '2D vector'),
- ('3D_GRAPHICS', '3D Graphics', '3D graphics'),
- ('OTHER', 'Other', 'Other Style'),
- ('ANY', 'Any', 'Any Style'),
-)
-material_styles = (
- ('REALISTIC', 'Realistic', "Photo realistic model"),
- ('NPR', 'Non photorealistic', 'Hand painted with visible strokes'),
- ('OTHER', 'Other', 'Other style'),
-)
-search_material_styles = (
- ('REALISTIC', 'Realistic', "Photo realistic model"),
- ('NPR', 'Non photorealistic', 'Hand painted with visible strokes'),
- ('ANY', 'Any', 'Any'),
-)
-engines = (
- ('CYCLES', 'Cycles', 'Blender Cycles'),
- ('EEVEE', 'Eevee', 'Blender eevee renderer'),
- ('OCTANE', 'Octane', 'Octane render enginge'),
- ('ARNOLD', 'Arnold', 'Arnold render engine'),
- ('V-RAY', 'V-Ray', 'V-Ray renderer'),
- ('UNREAL', 'Unreal', 'Unreal engine'),
- ('UNITY', 'Unity', 'Unity engine'),
- ('GODOT', 'Godot', 'Godot engine'),
- ('3D-PRINT', '3D printer', 'object can be 3D printed'),
- ('OTHER', 'Other', 'any other engine'),
- ('NONE', 'None', 'no more engine block'),
-)
-pbr_types = (
- ('METALLIC', 'Metallic-Roughness', 'Metallic/Roughness PBR material type'),
- ('SPECULAR', 'Specular Glossy', ''),
-)
-
-mesh_poly_types = (
- ('QUAD', 'quad', ''),
- ('QUAD_DOMINANT', 'quad_dominant', ''),
- ('TRI_DOMINANT', 'tri_dominant', ''),
- ('TRI', 'tri', ''),
- ('NGON', 'ngon_dominant', ''),
- ('OTHER', 'other', ''),
-)
-
-
-
-
-
-
-
-def udate_down_up(self, context):
- """Perform a search if results are empty."""
- s = context.scene
- wm = bpy.context.window_manager
- props = bpy.context.window_manager.blenderkitUI
- if wm.get('search results') == None and props.down_up == 'SEARCH':
- search.search()
-
-
-def switch_search_results(self, context):
- s = bpy.context.scene
- wm = bpy.context.window_manager
- props = bpy.context.window_manager.blenderkitUI
- if props.asset_type == 'MODEL':
- wm['search results'] = wm.get('bkit model search')
- wm['search results orig'] = wm.get('bkit model search orig')
- elif props.asset_type == 'SCENE':
- wm['search results'] = wm.get('bkit scene search')
- wm['search results orig'] = wm.get('bkit scene search orig')
- elif props.asset_type == 'HDR':
- wm['search results'] = wm.get('bkit hdr search')
- wm['search results orig'] = wm.get('bkit hdr search orig')
- elif props.asset_type == 'MATERIAL':
- wm['search results'] = wm.get('bkit material search')
- wm['search results orig'] = wm.get('bkit material search orig')
- elif props.asset_type == 'TEXTURE':
- wm['search results'] = wm.get('bkit texture search')
- wm['search results orig'] = wm.get('bkit texture search orig')
- elif props.asset_type == 'BRUSH':
- wm['search results'] = wm.get('bkit brush search')
- wm['search results orig'] = wm.get('bkit brush search orig')
- if not (context.sculpt_object or context.image_paint_object):
- reports.add_report(
- 'Switch to paint or sculpt mode to search in BlenderKit brushes.')
- # if wm['search results'] == None:
- # wm['search results'] = []
- # if wm['search results orig'] == None:
- # wm['search results orig'] = {'count': 0, 'results': []}
-
- search.load_previews()
- if wm['search results'] == None and props.down_up == 'SEARCH':
- search.search()
-
-
-def asset_type_callback(self, context):
- '''
- Returns
- items for Enum property, depending on the down_up property - BlenderKit is either in search or in upload mode.
-
- '''
- user_preferences = bpy.context.preferences.addons['blenderkit'].preferences
-
- if self.down_up == 'SEARCH':
- items = (
- ('MODEL', 'Models', 'Find models', 'OBJECT_DATAMODE', 0),
- ('MATERIAL', 'Materials', 'Find materials', 'MATERIAL', 2),
- # ('TEXTURE', 'Texture', 'Browse textures', 'TEXTURE', 3),
- ('SCENE', 'Scenes', 'Find scenes', 'SCENE_DATA', 3),
- ('HDR', 'HDRs', 'Find HDRs', 'WORLD', 4),
- ('BRUSH', 'Brushes', 'Find brushes', 'BRUSH_DATA', 5)
- )
- else:
- items = (
- ('MODEL', 'Model', 'Upload a model', 'OBJECT_DATAMODE', 0),
- # ('SCENE', 'SCENE', 'Browse scenes', 'SCENE_DATA', 1),
- ('MATERIAL', 'Material', 'Upload a material', 'MATERIAL', 2),
- # ('TEXTURE', 'Texture', 'Browse textures', 'TEXTURE', 3),
- ('SCENE', 'Scene', 'Upload a scene', 'SCENE_DATA', 3),
- ('HDR', 'HDR', 'Upload a HDR', 'WORLD', 4),
- ('BRUSH', 'Brush', 'Upload a brush', 'BRUSH_DATA', 5)
- )
-
- return items
-
-
-def run_drag_drop_update(self, context):
- if self.drag_init_button:
- ui_props = bpy.context.window_manager.blenderkitUI
- # ctx = utils.get_fake_context(bpy.context)
-
- bpy.ops.view3d.close_popup_button('INVOKE_DEFAULT')
- bpy.ops.view3d.asset_drag_drop('INVOKE_DEFAULT', asset_search_index=ui_props.active_index + ui_props.scroll_offset)
-
- self.drag_init_button = False
-
-
-class BlenderKitUIProps(PropertyGroup):
-
- down_up: EnumProperty(
- name="Download vs Upload",
- items=(
- ('SEARCH', 'Search', 'Activate searching', 'VIEWZOOM', 0),
- ('UPLOAD', 'Upload', 'Activate uploading', 'COPYDOWN', 1),
- # ('RATING', 'Rating', 'Activate rating', 'SOLO_ON', 2)
- ),
- description="BlenderKit",
- default="SEARCH",
- update=udate_down_up
- )
- asset_type: EnumProperty(
- name=" ",
- items=asset_type_callback,
- description="",
- default=None,
- update=switch_search_results
- )
-
- asset_type_fold: BoolProperty(name="Expand asset types", default=False)
- # these aren't actually used ( by now, seems to better use globals in UI module:
- draw_tooltip: BoolProperty(name="Draw Tooltip", default=False)
- addon_update: BoolProperty(name="Should Update Addon", default=False)
- tooltip: StringProperty(
- name="Tooltip",
- description="asset preview info",
- default="")
-
- ui_scale = 1
-
- thumb_size_def = 96
- margin_def = 0
-
- thumb_size: IntProperty(name="Thumbnail Size", default=thumb_size_def, min=-1, max=256)
-
- margin: IntProperty(name="Margin", default=margin_def, min=-1, max=256)
- highlight_margin: IntProperty(name="Highlight Margin", default=int(margin_def / 2), min=-10, max=256)
-
- bar_height: IntProperty(name="Bar Height", default=thumb_size_def + 2 * margin_def, min=-1, max=2048)
- bar_x_offset: IntProperty(name="Bar X Offset", default=40, min=0, max=5000)
- bar_y_offset: IntProperty(name="Bar Y Offset", default=80, min=0, max=5000)
-
- bar_x: IntProperty(name="Bar X", default=100, min=0, max=5000)
- bar_y: IntProperty(name="Bar Y", default=100, min=50, max=5000)
- bar_end: IntProperty(name="Bar End", default=100, min=0, max=5000)
- bar_width: IntProperty(name="Bar Width", default=100, min=0, max=5000)
-
- wcount: IntProperty(name="Width Count", default=10, min=0, max=5000)
- hcount: IntProperty(name="Rows", default=5, min=0, max=5000)
-
- reports_y: IntProperty(name="Reports Y", default=5, min=0, max=5000)
- reports_x: IntProperty(name="Reports X", default=5, min=0, max=5000)
-
- assetbar_on: BoolProperty(name="Assetbar On", default=False)
- turn_off: BoolProperty(name="Turn Off", default=False)
-
- mouse_x: IntProperty(name="Mouse X", default=0)
- mouse_y: IntProperty(name="Mouse Y", default=0)
-
- active_index: IntProperty(name="Active Index", default=-3)
- scroll_offset: IntProperty(name="Scroll Offset", default=0)
- drawoffset: IntProperty(name="Draw Offset", default=0)
-
- dragging: BoolProperty(name="Dragging", default=False)
- drag_init: BoolProperty(name="Drag Initialisation", default=False)
- drag_init_button: BoolProperty(name="Drag Initialisation from button",
- default=False,
- description="Click or drag into scene for download",
- update = run_drag_drop_update)
- drag_length: IntProperty(name="Drag length", default=0)
- draw_drag_image: BoolProperty(name="Draw Drag Image", default=False)
- draw_snapped_bounds: BoolProperty(name="Draw Snapped Bounds", default=False)
-
- snapped_location: FloatVectorProperty(name="Snapped Location", default=(0, 0, 0))
- snapped_bbox_min: FloatVectorProperty(name="Snapped Bbox Min", default=(0, 0, 0))
- snapped_bbox_max: FloatVectorProperty(name="Snapped Bbox Max", default=(0, 0, 0))
- snapped_normal: FloatVectorProperty(name="Snapped Normal", default=(0, 0, 0))
-
- snapped_rotation: FloatVectorProperty(name="Snapped Rotation", default=(0, 0, 0), subtype='QUATERNION')
-
- has_hit: BoolProperty(name="has_hit", default=False)
- thumbnail_image = StringProperty(
- name="Thumbnail Image",
- description="",
- default=paths.get_addon_thumbnail_path('thumbnail_notready.jpg'))
-
- #### rating UI props
- rating_ui_scale = ui_scale
-
- rating_button_on: BoolProperty(name="Rating Button On", default=True)
- rating_menu_on: BoolProperty(name="Rating Menu On", default=False)
- rating_on: BoolProperty(name="Rating on", default=True)
-
- rating_button_width: IntProperty(name="Rating Button Width", default=50 * ui_scale)
- rating_button_height: IntProperty(name="Rating Button Height", default=50 * ui_scale)
-
- rating_x: IntProperty(name="Rating UI X", default=10)
- rating_y: IntProperty(name="Rating UI Y", default=10)
-
- rating_ui_width: IntProperty(name="Rating UI Width", default=rating_ui_scale * 600)
- rating_ui_height: IntProperty(name="Rating UI Heightt", default=rating_ui_scale * 256)
-
- quality_stars_x: IntProperty(name="Rating UI Stars X", default=rating_ui_scale * 90)
- quality_stars_y: IntProperty(name="Rating UI Stars Y", default=rating_ui_scale * 190)
-
- star_size: IntProperty(name="Star Size", default=rating_ui_scale * 50)
-
- workhours_bar_slider_size: IntProperty(name="Workhours Bar Slider Size", default=rating_ui_scale * 30)
-
- workhours_bar_x: IntProperty(name="Workhours Bar X", default=rating_ui_scale * (100 - 15))
- workhours_bar_y: IntProperty(name="Workhours Bar Y", default=rating_ui_scale * (45 - 15))
-
- workhours_bar_x_max: IntProperty(name="Workhours Bar X Max", default=rating_ui_scale * (480 - 15))
-
- dragging_rating: BoolProperty(name="Dragging Rating", default=False)
- dragging_rating_quality: BoolProperty(name="Dragging Rating Quality", default=False)
- dragging_rating_work_hours: BoolProperty(name="Dragging Rating Work Hours", default=False)
- last_rating_time: FloatProperty(name="Last Rating Time", default=0.0)
-
- hdr_upload_image: PointerProperty(name='Upload HDR',
- type=bpy.types.Image,
- description='Pick an image to upload')
-
- # StringProperty(
- # name="Upload HDR",
- # description="Active HDR image to upload",
- # default="")
-
-
-def search_procedural_update(self, context):
- if self.search_procedural in ('PROCEDURAL', 'BOTH'):
- self.search_texture_resolution = False
- search.search_update(self, context)
-
-
-class BlenderKitCommonSearchProps(object):
- # STATES
- is_searching: BoolProperty(name="Searching", description="search is currently running (internal)", default=False)
- is_downloading: BoolProperty(name="Downloading", description="download is currently running (internal)",
- default=False)
- search_done: BoolProperty(name="Search Completed", description="at least one search did run (internal)",
- default=False)
- own_only: BoolProperty(name="My Assets Only", description="Search only for your assets",
- default=False, update=search.search_update)
- use_filters: BoolProperty(name="Filters are on", description="some filters are used",
- default=False)
-
- search_error: BoolProperty(name="Search Error", description="last search had an error", default=False)
- report: StringProperty(
- name="Report",
- description="errors and messages",
- default="")
-
- # TEXTURE RESOLUTION
- search_texture_resolution: BoolProperty(name="Texture Resolution",
- description="Limit texture resolutions",
- default=False,
- update=search.search_update,
- )
- search_texture_resolution_min: IntProperty(name="Min Texture Resolution",
- description="Minimum texture resolution",
- default=256,
- min=0,
- max=32768,
- update=search.search_update,
- )
-
- search_texture_resolution_max: IntProperty(name="Max Texture Resolution",
- description="Maximum texture resolution",
- default=4096,
- min=0,
- max=32768,
- update=search.search_update,
- )
-
- # file_size
- search_file_size: BoolProperty(name="File Size",
- description="Limit file sizes",
- default=False,
- update=search.search_update,
- )
- search_file_size_min: IntProperty(name="Min File Size",
- description="Minimum file size",
- default=0,
- min=0,
- max=2000,
- update=search.search_update,
- )
-
- search_file_size_max: IntProperty(name="Max File Size",
- description="Maximum file size",
- default=500,
- min=0,
- max=2000,
- update=search.search_update,
- )
-
- search_procedural: EnumProperty(
- items=(
- ('BOTH', 'Both', ''),
- ('PROCEDURAL', 'Procedural', ''),
- ('TEXTURE_BASED', 'Texture based', ''),
-
- ),
- default='BOTH',
- description='Search only procedural/texture based assets',
- update=search_procedural_update
- )
-
- search_verification_status: EnumProperty(
- name="Verification status",
- description="Search by verification status",
- items=
- (
- ('ALL', 'All', 'All'),
- ('UPLOADING', 'Uploading', 'Uploading'),
- ('UPLOADED', 'Uploaded', 'Uploaded'),
- ('READY', 'Ready for V.', 'Ready for validation (deprecated since 2.8)'),
- ('VALIDATED', 'Validated', 'Validated'),
- ('ON_HOLD', 'On Hold', 'On Hold'),
- ('REJECTED', 'Rejected', 'Rejected'),
- ('DELETED', 'Deleted', 'Deleted'),
- ),
- default='ALL',
- update=search.search_update,
- )
-
- # resolution download/import settings
- resolution: EnumProperty(
- name="Max resolution",
- description="Cap texture sizes in the file to this resolution",
- items=
- (
- # ('256', '256x256', ''),
- ('512', '512x512', ''),
- ('1024', '1024x1024', ''),
- ('2048', '2048x2048', ''),
- ('4096', '4096x4096', ''),
- ('8192', '8192x8192', ''),
- ('ORIGINAL', 'ORIGINAL FILE', ''),
-
- ),
- default='1024',
- )
- free_only: BoolProperty(name="Free first", description="Show free models first",
- default=False, update=search.search_update)
-
- unpack_files: BoolProperty(name="Unpack Files",
- description="Unpack files after download",
- default=True
- )
-
- unrated_only: BoolProperty(name="Unrated only", description="Show only unrated models",
- default=False, update=search.search_update)
- quality_limit: IntProperty(name="Quality limit",
- description = 'Only show assets with a higher quality',
- default=0, min=0, max=10, update=search.search_update)
-
-
-
-def name_update(self, context):
- ''' checks for name change, because it decides if whole asset has to be re-uploaded. Name is stored in the blend file
- and that's the reason.'''
- utils.name_update(self)
-
-
-def update_free(self, context):
- if self.is_free == 'FULL':
- self.is_free = 'FREE'
- ui_panels.ui_message(title="All BlenderKit materials are free",
- message="Any material uploaded to BlenderKit is free." \
- " However, it can still earn money for the author," \
- " based on our fair share system. " \
- "Part of subscription is sent to artists based on usage by paying users.\n")
-
-# common_upload_props = [
-# {
-# 'identifier':'id',
-# 'name':"Asset Version Id",
-# 'type':'StringProperty',
-# 'description':'Unique name of the asset version(hidden)',
-# 'default':''
-# }
-# {
-# 'identifier':'id',
-# 'name':"Asset Version Id",
-# 'type':'StringProperty',
-# 'description':'Unique name of the asset version(hidden)',
-# 'default':''
-# }
-# ]
-
-
-
-
-class BlenderKitCommonUploadProps(object):
- # for p in common_upload_props:
- # exec(f"{p['identifier']}: {p['type']}(name='{p['name']}',description='{p['description']}',default='{p['default']}')")
-
- id: StringProperty(
- name="Asset Version Id",
- description="Unique name of the asset version(hidden)",
- default="")
- asset_base_id: StringProperty(
- name="Asset Base Id",
- description="Unique name of the asset (hidden)",
- default="")
- name: StringProperty(
- name="Name",
- description="Main name of the asset",
- default="",
- update=name_update
- )
- # this is to store name for purpose of checking if name has changed.
- name_old: StringProperty(
- name="Old Name",
- description="Old name of the asset",
- default="",
- )
-
- description: StringProperty(
- name="Description",
- description="Description of the asset",
- default="")
- tags: StringProperty(
- name="Tags",
- description="List of tags, separated by commas (optional)",
- default="",
- update=utils.update_tags
- )
-
- name_changed: BoolProperty(name="Name Changed",
- description="Name has changed, the asset has to be re-uploaded with all data",
- default=False)
-
- pbr: BoolProperty(name="Pure PBR Compatible",
- description="Is compatible with PBR standard. This means only image textures are used with no"
- " procedurals and no color correction, only principled shader is used",
- default=False)
-
- pbr_type: EnumProperty(
- name="PBR Type",
- items=pbr_types,
- description="PBR type",
- default="METALLIC",
- )
- license: EnumProperty(
- items=upload.licenses,
- default='royalty_free',
- description='License. Please read our help for choosing the right licenses',
- )
-
- is_private: EnumProperty(
- name="Thumbnail Style",
- items=(
- ('PRIVATE', 'Private', ""),
- ('PUBLIC', 'Public', "")
- ),
- description="Public assets go into the validation process. \n"
- "Validated assets are visible to all users.\n"
- "Private assets are limited by your plan quota\n"
- "State",
- default="PUBLIC",
- )
-
- is_procedural: BoolProperty(name="Procedural",
- description="Asset is procedural - has no texture",
- default=True
- )
- node_count: IntProperty(name="Node count", description="Total nodes in the asset", default=0)
- texture_count: IntProperty(name="Texture count", description="Total texture count in asset", default=0)
- total_megapixels: IntProperty(name="Megapixels", description="Total megapixels of texture", default=0)
-
- # is_private: BoolProperty(name="Asset is Private",
- # description="If not marked private, your asset will go into the validation process automatically\n"
- # "Private assets are limited by quota",
- # default=False)
-
- is_free: EnumProperty(
- name="Thumbnail Style",
- items=(
- ('FULL', 'Full', "Your asset will be only available for subscribers"),
- ('FREE', 'Free', "You consent you want to release this asset as free for everyone")
- ),
- description="Assets can be in Free or in Full plan. Also free assets generate credits",
- default="FULL",
- )
-
- uploading: BoolProperty(name="Uploading",
- description="True when background process is running",
- default=False,
- update=autothumb.update_upload_material_preview)
- upload_state: StringProperty(
- name="State Of Upload",
- description="bg process reports for upload",
- default='')
-
- has_thumbnail: BoolProperty(name="Has Thumbnail", description="True when thumbnail was checked and loaded",
- default=False)
-
- thumbnail_generating_state: StringProperty(
- name="Thumbnail Generating State",
- description="bg process reports for thumbnail generation",
- default='Please add thumbnail(jpg or png, at least 512x512)')
-
- report: StringProperty(
- name="Missing Upload Properties",
- description="used to write down what's missing",
- default='')
-
- category: EnumProperty(
- name="Category",
- description="main category to put into",
- items=categories.get_category_enums,
- update=categories.update_category_enums
- )
- subcategory: EnumProperty(
- name="Subcategory",
- description="Subcategory to put into",
- items=categories.get_subcategory_enums,
- update=categories.update_subcategory_enums
- )
- subcategory1: EnumProperty(
- name="Subcategory lvl2",
- description="Subcategory to put into",
- items=categories.get_subcategory1_enums
- )
-
-
-class BlenderKitRatingProps(PropertyGroup):
- rating_quality: IntProperty(name="Quality",
- description="quality of the material",
- default=0,
- min=-1, max=10,
- update=ratings_utils.update_ratings_quality)
-
- # the following enum is only to ease interaction - enums support 'drag over' and enable to draw the stars easily.
- rating_quality_ui: EnumProperty(name='rating_quality_ui',
- items=ratings_utils.stars_enum_callback,
- description='Rating stars 0 - 10',
- default=None,
- update=ratings_utils.update_quality_ui,
- )
-
- rating_work_hours: FloatProperty(name="Work Hours",
- description="How many hours did this work take?",
- default=0.00,
- min=0.0, max=150, update=ratings_utils.update_ratings_work_hours
- )
-
- # rating_complexity: IntProperty(name="Complexity",
- # description="Complexity is a number estimating how much work was spent on the asset.aaa",
- # default=0, min=0, max=10)
- # rating_virtual_price: FloatProperty(name="Virtual Price",
- # description="How much would you pay for this object if buing it?",
- # default=0, min=0, max=10000)
- rating_problems: StringProperty(
- name="Problems",
- description="Problems found/ why did you take points down - this will be available for the author"
- " As short as possible",
- default="",
- )
- rating_compliments: StringProperty(
- name="Compliments",
- description="Comliments - let the author know you like his work! "
- " As short as possible",
- default="",
- )
-
-
-class BlenderKitMaterialSearchProps(PropertyGroup, BlenderKitCommonSearchProps):
- search_keywords: StringProperty(
- name="Search",
- description="Search for these keywords",
- default="",
- update=search.search_update
- )
- search_style: EnumProperty(
- name="Style",
- items=search_material_styles,
- description="Style of material",
- default="ANY",
- update=search.search_update,
- )
- search_style_other: StringProperty(
- name="Style Other",
- description="Style not in the list",
- default="",
- update=search.search_update,
- )
- search_engine: EnumProperty(
- name='Engine',
- items=engines,
- default='NONE',
- description='Output engine',
- update=search.search_update,
- )
- search_engine_other: StringProperty(
- name="Engine",
- description="engine not specified by addon",
- default="",
- update=search.search_update,
- )
- append_method: EnumProperty(
- name="Import Method",
- items=(
- ('LINK', 'Link', "Link Material - will be in external file and can't be directly edited"),
- ('APPEND', 'Append', 'Append if you need to edit the material'),
- ),
- description="Appended materials are editable in your scene. Linked assets are saved in original files, "
- "aren't editable directly, but also don't increase your file size",
- default="APPEND"
- )
- automap: BoolProperty(name="Auto-Map",
- description="reset object texture space and also add automatically a cube mapped UV "
- "to the object. \n this allows most materials to apply instantly to any mesh",
- default=True)
-
-
-class BlenderKitMaterialUploadProps(PropertyGroup, BlenderKitCommonUploadProps):
- style: EnumProperty(
- name="Style",
- items=material_styles,
- description="Style of material",
- default="REALISTIC",
- )
- style_other: StringProperty(
- name="Style Other",
- description="Style not in the list",
- default="",
- )
- engine: EnumProperty(
- name='Engine',
- items=engines,
- default='CYCLES',
- description='Output engine',
- )
- engine_other: StringProperty(
- name="Engine Other",
- description="engine not specified by addon",
- default="",
- )
-
- shaders: StringProperty(
- name="Shaders Used",
- description="shaders used in asset, autofilled",
- default="",
- )
-
- is_free: EnumProperty(
- name="Thumbnail Style",
- items=(
- ('FULL', 'Full', "Your asset will be only available for subscribers."),
- ('FREE', 'Free', "You consent you want to release this asset as free for everyone.")
- ),
- description="Assets can be in Free or in Full plan. Also free assets generate credits. \n"
- "All BlenderKit materials are free",
- default="FREE",
- update=update_free
- )
-
-
-
- uv: BoolProperty(name="Needs UV", description="needs an UV set", default=False)
- # printable_3d : BoolProperty( name = "3d printable", description = "can be 3d printed", default = False)
- animated: BoolProperty(name="Animated", description="is animated", default=False)
- texture_resolution_min: IntProperty(name="Texture Resolution Min", description="texture resolution minimum",
- default=0)
- texture_resolution_max: IntProperty(name="Texture Resolution Max", description="texture resolution maximum",
- default=0)
-
- texture_size_meters: FloatProperty(name="Texture Size in Meters", description="Size of texture in real world units",
- default=1.0, min=0)
-
- thumbnail_scale: FloatProperty(name="Thumbnail Object Size",
- description="Size of material preview object in meters."
- "Change for materials that look better at sizes different than 1m",
- default=1, min=0.00001, max=10)
- thumbnail_background: BoolProperty(name="Thumbnail Background (for Glass only)",
- description="For refractive materials, you might need a background.\n"
- "Don't use for other types of materials.\n"
- "Transparent background is preferred",
- default=False)
- thumbnail_background_lightness: FloatProperty(name="Thumbnail Background Lightness",
- description="Set to make your material stand out with enough contrast",
- default=.9,
- min=0.00001, max=1)
- thumbnail_samples: IntProperty(name="Cycles Samples",
- description="Cycles samples", default=100,
- min=5, max=5000)
- thumbnail_denoising: BoolProperty(name="Use Denoising",
- description="Use denoising", default=True)
- adaptive_subdivision: BoolProperty(name="Adaptive Subdivide",
- description="Use adaptive displacement subdivision", default=False)
-
- thumbnail_resolution: EnumProperty(
- name="Resolution",
- items=autothumb.thumbnail_resolutions,
- description="Thumbnail resolution",
- default="1024",
- )
-
- thumbnail_generator_type: EnumProperty(
- name="Thumbnail Style",
- items=(
- ('BALL', 'Ball', ""),
- ('BALL_COMPLEX', 'Ball complex', 'Complex ball to highlight edgewear or material thickness'),
- ('FLUID', 'Fluid', 'Fluid'),
- ('CLOTH', 'Cloth', 'Cloth'),
- ('HAIR', 'Hair', 'Hair ')
- ),
- description="Style of asset",
- default="BALL",
- )
-
- thumbnail: StringProperty(
- name="Thumbnail",
- description="Thumbnail path - 512x512 .jpg image, rendered with cycles.\n"
- "Only standard BlenderKit previews will be accepted.\n"
- "Only exception are special effects like fire or similar",
- subtype='FILE_PATH',
- default="",
- update=autothumb.update_upload_material_preview)
-
- is_generating_thumbnail: BoolProperty(name="Generating Thumbnail",
- description="True when background process is running", default=False,
- update=autothumb.update_upload_material_preview)
-
-
-class BlenderKitTextureUploadProps(PropertyGroup, BlenderKitCommonUploadProps):
- style: EnumProperty(
- name="Style",
- items=material_styles,
- description="Style of texture",
- default="REALISTIC",
- )
- style_other: StringProperty(
- name="Style Other",
- description="Style not in the list",
- default="",
- )
-
- pbr: BoolProperty(name="PBR Compatible", description="Is compatible with PBR standard", default=False)
-
- # printable_3d : BoolProperty( name = "3d printable", description = "can be 3d printed", default = False)
- animated: BoolProperty(name="Animated", description="is animated", default=False)
- resolution: IntProperty(name="Texture Resolution", description="texture resolution", default=0)
-
-
-class BlenderKitBrushSearchProps(PropertyGroup, BlenderKitCommonSearchProps):
- search_keywords: StringProperty(
- name="Search",
- description="Search for these keywords",
- default="",
- update=search.search_update
- )
-
-
-class BlenderKitHDRUploadProps(PropertyGroup, BlenderKitCommonUploadProps):
- texture_resolution_max: IntProperty(name="Texture Resolution Max", description="texture resolution maximum",
- default=0)
- evs_cap: IntProperty(name="EV cap", description="EVs dynamic range",
- default=0)
- true_hdr: BoolProperty(name="Real HDR", description="Image has High dynamic range.",default=False)
-
-
-class BlenderKitBrushUploadProps(PropertyGroup, BlenderKitCommonUploadProps):
- mode: EnumProperty(
- name="Mode",
- items=(
- ("IMAGE", "Texture paint", "Texture brush"),
- ("SCULPT", "Sculpt", "Sculpt brush"),
- ("VERTEX", "Vertex paint", "Vertex paint brush"),
- ("WEIGHT", "Weight paint", "Weight paint brush"),
- ),
- description="Mode where the brush works",
- default="SCULPT",
- )
-
-
-# upload properties
-class BlenderKitModelUploadProps(PropertyGroup, BlenderKitCommonUploadProps):
- style: EnumProperty(
- name="Style",
- items=model_styles,
- description="Style of asset",
- default="REALISTIC",
- )
- style_other: StringProperty(
- name="Style Other",
- description="Style not in the list",
- default="",
- )
- engine: EnumProperty(
- name='Engine',
- items=engines,
- default='CYCLES',
- description='Output engine',
- )
-
- production_level: EnumProperty(
- name='Production Level',
- items=(
- ('FINISHED', 'Finished', 'Render or animation ready asset'),
- ('TEMPLATE', 'Template', 'Asset intended to help in creation of something else'),
- ),
- default='FINISHED',
- description='Production state of the asset. \n'
- 'Templates should be tools to finish certain tasks, like a thumbnailer scene, \n '
- 'finished mesh topology as start for modelling or others',
- )
-
- engine_other: StringProperty(
- name="Engine",
- description="engine not specified by addon",
- default="",
- )
-
- engine1: EnumProperty(
- name='2nd Engine',
- items=engines,
- default='NONE',
- description='Output engine',
- )
- engine2: EnumProperty(
- name='3rd Engine',
- items=engines,
- default='NONE',
- description='Output engine',
- )
- engine3: EnumProperty(
- name='4th Engine',
- items=engines,
- default='NONE',
- description='Output engine',
- )
-
- manufacturer: StringProperty(
- name="Manufacturer",
- description="Manufacturer, company making a design piece or product. Not you",
- default="",
- )
-
- designer: StringProperty(
- name="Designer",
- description="Author of the original design piece depicted. Usually not you",
- default="",
- )
-
- design_collection: StringProperty(
- name="Design Collection",
- description="Fill if this piece is part of a real world design collection",
- default="",
- )
-
- design_variant: StringProperty(
- name="Variant",
- description="Colour or material variant of the product",
- default="",
- )
-
- thumbnail: StringProperty(
- name="Thumbnail",
- description="Thumbnail path - 512x512 .jpg\n"
- "Rendered with cycles",
-
- subtype='FILE_PATH',
- default="",
- update=autothumb.update_upload_model_preview)
-
- thumbnail_background_lightness: FloatProperty(name="Thumbnail Background Lightness",
- description="set to make your material stand out", default=1.0,
- min=0.01, max=10)
-
- thumbnail_angle: EnumProperty(
- name='Thumbnail Angle',
- items=autothumb.thumbnail_angles,
- default='DEFAULT',
- description='thumbnailer angle',
- )
-
- thumbnail_snap_to: EnumProperty(
- name='Model Snaps To:',
- items=autothumb.thumbnail_snap,
- default='GROUND',
- description='typical placing of the interior. Leave on ground for most objects that respect gravity :)',
- )
-
- thumbnail_resolution: EnumProperty(
- name="Resolution",
- items=autothumb.thumbnail_resolutions,
- description="Thumbnail resolution",
- default="1024",
- )
-
- thumbnail_samples: IntProperty(name="Cycles Samples",
- description="cycles samples setting", default=100,
- min=5, max=5000)
- thumbnail_denoising: BoolProperty(name="Use Denoising",
- description="Use denoising", default=True)
-
- use_design_year: BoolProperty(name="Use Design Year",
- description="When this thing came into world for the first time\n"
- " e.g. for dinosaur, you set -240 million years ;) ",
- default=False)
- design_year: IntProperty(name="Design Year", description="when was this item designed", default=1960)
- # use_age : BoolProperty( name = "use item age", description = "use item age", default = False)
- condition: EnumProperty(
- items=conditions,
- default='UNSPECIFIED',
- description='age of the object',
- )
-
- adult: BoolProperty(name="Adult Content", description="adult content", default=False)
-
- work_hours: FloatProperty(name="Work Hours", description="How long did it take you to finish the asset?",
- default=0.0, min=0.0, max=8760)
-
- modifiers: StringProperty(
- name="Modifiers Used",
- description="if you need specific modifiers, autofilled",
- default="",
- )
-
- materials: StringProperty(
- name="Material Names",
- description="names of materials in the file, autofilled",
- default="",
- )
- shaders: StringProperty(
- name="Shaders Used",
- description="shaders used in asset, autofilled",
- default="",
- )
-
- dimensions: FloatVectorProperty(
- name="Dimensions",
- description="dimensions of the whole asset hierarchy",
- default=(0, 0, 0),
- )
- bbox_min: FloatVectorProperty(
- name="Bbox Min",
- description="dimensions of the whole asset hierarchy",
- default=(-.25, -.25, 0),
- )
- bbox_max: FloatVectorProperty(
- name="Bbox Max",
- description="dimensions of the whole asset hierarchy",
- default=(.25, .25, .5),
- )
-
- texture_resolution_min: IntProperty(name="Texture Resolution Min",
- description="texture resolution min, autofilled", default=0)
- texture_resolution_max: IntProperty(name="Texture Resolution Max",
- description="texture resolution max, autofilled", default=0)
-
- pbr: BoolProperty(name="PBR Compatible", description="Is compatible with PBR standard", default=False)
-
- uv: BoolProperty(name="Has UV", description="has an UV set", default=False)
- # printable_3d : BoolProperty( name = "3d printable", description = "can be 3d printed", default = False)
- animated: BoolProperty(name="Animated", description="is animated", default=False)
- face_count: IntProperty(name="Face count", description="face count, autofilled", default=0)
- face_count_render: IntProperty(name="Render Face Count", description="render face count, autofilled", default=0)
-
- object_count: IntProperty(name="Number of Objects", description="how many objects are in the asset, autofilled",
- default=0)
- mesh_poly_type: EnumProperty(
- name='Dominant Poly Type',
- items=mesh_poly_types,
- default='OTHER',
- description='',
- )
-
- manifold: BoolProperty(name="Manifold", description="asset is manifold, autofilled", default=False)
-
- rig: BoolProperty(name="Rig", description="asset is rigged, autofilled", default=False)
- simulation: BoolProperty(name="Simulation", description="asset uses simulation, autofilled", default=False)
- '''
- filepath : StringProperty(
- name="Filepath",
- description="file path",
- default="",
- )
- '''
-
- # THUMBNAIL STATES
- is_generating_thumbnail: BoolProperty(name="Generating Thumbnail",
- description="True when background process is running", default=False,
- update=autothumb.update_upload_model_preview)
-
- has_autotags: BoolProperty(name="Has Autotagging Done", description="True when autotagging done", default=False)
-
-
-class BlenderKitSceneUploadProps(PropertyGroup, BlenderKitCommonUploadProps):
- style: EnumProperty(
- name="Style",
- items=model_styles,
- description="Style of asset",
- default="REALISTIC",
- )
- style_other: StringProperty(
- name="Style Other",
- description="Style not in the list",
- default="",
- )
- engine: EnumProperty(
- name='Engine',
- items=engines,
- default='CYCLES',
- description='Output engine',
- )
-
- production_level: EnumProperty(
- name='Production Level',
- items=(
- ('FINISHED', 'Finished', 'Render or animation ready asset'),
- ('TEMPLATE', 'Template', 'Asset intended to help in creation of something else'),
- ),
- default='FINISHED',
- description='Production state of the asset, \n also template should be actually finished, \n'
- 'just the nature of it can be a template, like a thumbnailer scene, \n '
- 'finished mesh topology as start for modelling or similar',
- )
-
- engine_other: StringProperty(
- name="Engine",
- description="engine not specified by addon",
- default="",
- )
-
- engine1: EnumProperty(
- name='2nd Engine',
- items=engines,
- default='NONE',
- description='Output engine',
- )
- engine2: EnumProperty(
- name='3rd Engine',
- items=engines,
- default='NONE',
- description='Output engine',
- )
- engine3: EnumProperty(
- name='4th Engine',
- items=engines,
- default='NONE',
- description='Output engine',
- )
-
- thumbnail: StringProperty(
- name="Thumbnail",
- description="Thumbnail path - 512x512 .jpg\n"
- "Rendered with cycles",
- subtype='FILE_PATH',
- default="",
- update=autothumb.update_upload_scene_preview)
-
- use_design_year: BoolProperty(name="Use Design Year",
- description="When this thing came into world for the first time\n"
- " e.g. for dinosaur, you set -240 million years ;) ",
- default=False)
- design_year: IntProperty(name="Design Year", description="when was this item designed", default=1960)
- # use_age : BoolProperty( name = "use item age", description = "use item age", default = False)
- condition: EnumProperty(
- items=conditions,
- default='UNSPECIFIED',
- description='age of the object',
- )
-
- adult: BoolProperty(name="Adult Content", description="adult content", default=False)
-
- work_hours: FloatProperty(name="Work Hours", description="How long did it take you to finish the asset?",
- default=0.0, min=0.0, max=8760)
-
- modifiers: StringProperty(
- name="Modifiers Used",
- description="if you need specific modifiers, autofilled",
- default="",
- )
-
- materials: StringProperty(
- name="Material Names",
- description="names of materials in the file, autofilled",
- default="",
- )
- shaders: StringProperty(
- name="Shaders Used",
- description="shaders used in asset, autofilled",
- default="",
- )
-
- dimensions: FloatVectorProperty(
- name="Dimensions",
- description="dimensions of the whole asset hierarchy",
- default=(0, 0, 0),
- )
- bbox_min: FloatVectorProperty(
- name="Dimensions",
- description="dimensions of the whole asset hierarchy",
- default=(-.25, -.25, 0),
- )
- bbox_max: FloatVectorProperty(
- name="Dimensions",
- description="dimensions of the whole asset hierarchy",
- default=(.25, .25, .5),
- )
-
- texture_resolution_min: IntProperty(name="Texture Resolution Min",
- description="texture resolution min, autofilled", default=0)
- texture_resolution_max: IntProperty(name="Texture Resolution Max",
- description="texture resolution max, autofilled", default=0)
-
- pbr: BoolProperty(name="PBR Compatible", description="Is compatible with PBR standard", default=False)
-
- uv: BoolProperty(name="Has UV", description="has an UV set", default=False)
- # printable_3d : BoolProperty( name = "3d printable", description = "can be 3d printed", default = False)
- animated: BoolProperty(name="Animated", description="is animated", default=False)
- face_count: IntProperty(name="Face Count", description="face count, autofilled", default=0)
- face_count_render: IntProperty(name="Render Face Count", description="render face count, autofilled", default=0)
-
- object_count: IntProperty(name="Number of Objects", description="how many objects are in the asset, autofilled",
- default=0)
- mesh_poly_type: EnumProperty(
- name='Dominant Poly Type',
- items=mesh_poly_types,
- default='OTHER',
- description='',
- )
-
- rig: BoolProperty(name="Rig", description="asset is rigged, autofilled", default=False)
- simulation: BoolProperty(name="Simulation", description="asset uses simulation, autofilled", default=False)
-
- # THUMBNAIL STATES
- is_generating_thumbnail: BoolProperty(name="Generating Thumbnail",
- description="True when background process is running", default=False,
- update=autothumb.update_upload_model_preview)
-
- has_autotags: BoolProperty(name="Has Autotagging Done", description="True when autotagging done", default=False)
-
-
-class BlenderKitModelSearchProps(PropertyGroup, BlenderKitCommonSearchProps):
- search_keywords: StringProperty(
- name="Search",
- description="Search for these keywords",
- default="",
- update=search.search_update
- )
- search_style: EnumProperty(
- name="Style",
- items=search_model_styles,
- description="Keywords defining style (realistic, painted, polygonal, other)",
- default="ANY",
- update=search.search_update
- )
- search_style_other: StringProperty(
- name="Style",
- description="Search style - other",
- default="",
- update=search.search_update
- )
- search_engine: EnumProperty(
- items=engines,
- default='CYCLES',
- description='Output engine',
- update=search.search_update
- )
- search_engine_other: StringProperty(
- name="Engine",
- description="Engine not specified by addon",
- default="",
- update=search.search_update
- )
-
- # CONDITION
- search_condition: EnumProperty(
- items=conditions,
- default='UNSPECIFIED',
- description='Condition of the object',
- update=search.search_update
- )
-
- search_adult: BoolProperty(
- name="Adult Content",
- description="You're adult and agree with searching adult content",
- default=False,
- update=search.search_update
- )
-
- # DESIGN YEAR
- search_design_year: BoolProperty(name="Sesigned in Year",
- description="When the object was approximately designed. \n"
- "Useful for search of historical or future objects",
- default=False,
- update=search.search_update,
- )
-
- search_design_year_min: IntProperty(name="Minimum Design Year",
- description="Minimum design year",
- default=1950, min=-100000000, max=1000000000,
- update=search.search_update,
- )
-
- search_design_year_max: IntProperty(name="Maximum Design Year",
- description="Maximum design year",
- default=2017,
- min=0,
- max=10000000,
- update=search.search_update,
- )
-
- # POLYCOUNT
- search_polycount: BoolProperty(name="Use Polycount",
- description="Limit polycount",
- default=False,
- update=search.search_update, )
-
- search_polycount_min: IntProperty(name="Min Polycount",
- description="Minimum poly count",
- default=0,
- min=0,
- max=100000000,
- update=search.search_update, )
-
- search_polycount_max: IntProperty(name="Max Polycount",
- description="Maximum poly count",
- default=100000000,
- min=0,
- max=100000000,
- update=search.search_update,
- )
-
- append_method: EnumProperty(
- name="Import Method",
- items=(
- ('LINK_COLLECTION', 'Link', 'Link Collection'),
- ('APPEND_OBJECTS', 'Append', 'Append as Objects'),
- ),
- description="Appended objects are editable in your scene. Linked assets are saved in original files, "
- "aren't editable but also don't increase your file size",
- default="APPEND_OBJECTS"
- )
- append_link: EnumProperty(
- name="How to Attach",
- items=(
- ('LINK', 'Link', ''),
- ('APPEND', 'Append', ''),
- ),
- description="choose if the assets will be linked or appended",
- default="LINK"
- )
- import_as: EnumProperty(
- name="Import as",
- items=(
- ('GROUP', 'group', ''),
- ('INDIVIDUAL', 'objects', ''),
-
- ),
- description="choose if the assets will be linked or appended",
- default="GROUP"
- )
- randomize_rotation: BoolProperty(name='Randomize Rotation',
- description="randomize rotation at placement",
- default=False)
- randomize_rotation_amount: FloatProperty(name="Randomization Max Angle",
- description="maximum angle for random rotation",
- default=math.pi / 36,
- min=0,
- max=2 * math.pi,
- subtype='ANGLE')
- offset_rotation_amount: FloatProperty(name="Offset Rotation",
- description="offset rotation, hidden prop",
- default=0,
- min=0,
- max=360,
- subtype='ANGLE')
- offset_rotation_step: FloatProperty(name="Offset Rotation Step",
- description="offset rotation, hidden prop",
- default=math.pi / 2,
- min=0,
- max=180,
- subtype='ANGLE')
-
- perpendicular_snap: BoolProperty(name='Perpendicular snap',
- description="Limit snapping that is close to perpendicular angles to be perpendicular",
- default=True)
-
- perpendicular_snap_threshold: FloatProperty(name="Threshold",
- description="Limit perpendicular snap to be below these values",
- default=.25,
- min=0,
- max=.5,
- )
-
-
-class BlenderKitHDRSearchProps(PropertyGroup, BlenderKitCommonSearchProps):
- search_keywords: StringProperty(
- name="Search",
- description="Search for these keywords",
- default="",
- update=search.search_update
- )
-
- true_hdr: BoolProperty(
- name='Real HDRs only',
- description='Search only for real HDRs, this means images that have a range higher than 0-1 in their pixels.',
- default=True,
- update=search.search_update
- )
-
-
-class BlenderKitSceneSearchProps(PropertyGroup, BlenderKitCommonSearchProps):
- search_keywords: StringProperty(
- name="Search",
- description="Search for these keywords",
- default="",
- update=search.search_update
- )
- search_style: EnumProperty(
- name="Style",
- items=search_model_styles,
- description="Restrict search for style",
- default="ANY",
- update=search.search_update
- )
- search_style_other: StringProperty(
- name="Style",
- description="Search style - other",
- default="",
- update=search.search_update
- )
- search_engine: EnumProperty(
- items=engines,
- default='CYCLES',
- description='Output engine',
- update=search.search_update
- )
- search_engine_other: StringProperty(
- name="Engine",
- description="Engine not specified by addon",
- default="",
- update=search.search_update
- )
- append_link: EnumProperty(
- name="Append or link",
- items=(
- ('LINK', 'Link', ''),
- ('APPEND', 'Append', ''),
- ),
- description="choose if the scene will be linked or appended",
- default="APPEND"
- )
- switch_after_append: BoolProperty(
- name='Switch to scene after download',
- default=True
- )
-
-
-def fix_subdir(self, context):
- '''Fixes project subdicrectory settings if people input invalid path.'''
-
- # pp = pathlib.PurePath(self.project_subdir)
- pp = self.project_subdir[:]
- pp = pp.replace('\\', '')
- pp = pp.replace('/', '')
- pp = pp.replace(':', '')
- pp = '//' + pp
- if self.project_subdir != pp:
- self.project_subdir = pp
-
- ui_panels.ui_message(title="Fixed to relative path",
- message="This path should be always realative.\n" \
- " It's a directory BlenderKit creates where your .blend is \n " \
- "and uses it for storing assets.")
-
-
-class BlenderKitAddonPreferences(AddonPreferences):
- # this must match the addon name, use '__package__'
- # when defining this in a submodule of a python package.
- bl_idname = __name__
-
- default_global_dict = paths.default_global_dict()
-
- enable_oauth = True
-
- api_key: StringProperty(
- name="BlenderKit API Key",
- description="Your blenderkit API Key. Get it from your page on the website",
- default="",
- subtype="PASSWORD",
- update=utils.save_prefs
- )
-
- api_key_refresh: StringProperty(
- name="BlenderKit refresh API Key",
- description="API key used to refresh the token regularly",
- default="",
- subtype="PASSWORD",
- )
-
- api_key_timeout: IntProperty(
- name='api key timeout',
- description='time where the api key will need to be refreshed',
- default=0,
- )
-
- api_key_life: IntProperty(
- name='api key life time',
- description='maximum lifetime of the api key, in seconds',
- default=0,
- )
-
- refresh_in_progress: BoolProperty(
- name="Api key refresh in progress",
- description="Api key is currently being refreshed. Don't refresh it again",
- default=False
- )
-
- login_attempt: BoolProperty(
- name="Login/Signup attempt",
- description="When this is on, BlenderKit is trying to connect and login",
- default=False
- )
-
- show_on_start: BoolProperty(
- name="Show assetbar when starting blender",
- description="Show assetbar when starting blender",
- default=False
- )
-
- tips_on_start: BoolProperty(
- name="Show tips when starting blender",
- description="Show tips when starting blender",
- default=True
- )
-
- search_in_header: BoolProperty(
- name="Show BlenderKit search in 3D view header",
- description="Show BlenderKit search in 3D view header",
- default=True
- )
-
- global_dir: StringProperty(
- name="Global Files Directory",
- description="Global storage for your assets, will use subdirectories for the contents",
- subtype='DIR_PATH',
- default=default_global_dict,
- update=utils.save_prefs
- )
-
- project_subdir: StringProperty(
- name="Project Assets Subdirectory",
- description="where data will be stored for individual projects",
- # subtype='DIR_PATH',
- default="//assets",
- update=fix_subdir
- )
-
- directory_behaviour: EnumProperty(
- name="Use Directories",
- items=(
- ('BOTH', 'Global and subdir',
- 'store files both in global lib and subdirectory of current project. '
- 'Warning - each file can be many times on your harddrive, but helps you keep your projects in one piece'),
- ('GLOBAL', 'Global',
- "store downloaded files only in global directory. \n "
- "This can bring problems when moving your projects, \n"
- "since assets won't be in subdirectory of current project"),
- ('LOCAL', 'Local',
- 'store downloaded files only in local directory.\n'
- ' This can use more bandwidth when you reuse assets in different projects. ')
-
- ),
- description="Which directories will be used for storing downloaded data",
- default="BOTH",
- )
- thumbnail_use_gpu: BoolProperty(
- name="Use GPU for Thumbnails Rendering (For assets upload)",
- description="By default this is off so you can continue your work without any lag",
- default=False
- )
-
- panel_behaviour: EnumProperty(
- name="Panels Locations",
- items=(
- ('BOTH', 'Both Types',
- ''),
- ('UNIFIED', 'Unified 3D View Panel',
- ""),
- ('LOCAL', 'Relative to Data',
- '')
-
- ),
- description="Which directories will be used for storing downloaded data",
- default="UNIFIED",
- )
-
- max_assetbar_rows: IntProperty(name="Max Assetbar Rows",
- description="max rows of assetbar in the 3D view",
- default=1,
- min=1,
- max=20)
-
- thumb_size: IntProperty(name="Assetbar thumbnail Size", default=96, min=-1, max=256)
-
- #counts usages so it can encourage user after some time to do things.
- asset_counter: IntProperty(name="Usage Counter",
- description="Counts usages so it asks for registration only after reaching a limit",
- default=0,
- min=0,
- max=20000)
-
- notifications_counter: IntProperty(
- name='Notifications Counter',
- description='count users notifications',
- default=0,
- )
- # this is now made obsolete by the new popup upon registration -ensures the user knows about the first search.
- # first_run: BoolProperty(
- # name="First run",
- # description="Detects if addon was already registered/run.",
- # default=True,
- # update=utils.save_prefs
- # )
-
- use_timers: BoolProperty(
- name="Use timers",
- description="Use timers for BlenderKit. Usefull for debugging since timers seem to be unstable",
- default=True,
- update=utils.save_prefs
- )
-
- # single_timer: BoolProperty(
- # name="Use timers",
- # description="Use timers for BlenderKit. Usefull for debugging since timers seem to be unstable",
- # default=True,
- # update=utils.save_prefs
- # )
-
- experimental_features: BoolProperty(
- name="Enable experimental features",
- description="Enable all experimental features of BlenderKit. Use at your own risk",
- default=False,
- update=utils.save_prefs
- )
-
- categories_fix: BoolProperty(
- name="Enable category fixing mode",
- description="Enable category fixing mode",
- default=False,
- update=utils.save_prefs
- )
-
- # allow_proximity : BoolProperty(
- # name="allow proximity data reports",
- # description="This sends anonymized proximity data \n \
- # and allows us to make relations between database objects \n \
- # without user interaction",
- # default=False
- # )
-
- def draw(self, context):
- layout = self.layout
- layout.prop(self, "show_on_start")
-
- if self.api_key.strip() == '':
- if self.enable_oauth:
- ui_panels.draw_login_buttons(layout)
- else:
- op = layout.operator("wm.url_open", text="Register online and get your API Key",
- icon='QUESTION')
- op.url = paths.BLENDERKIT_SIGNUP_URL
- else:
- if self.enable_oauth:
- layout.operator("wm.blenderkit_logout", text="Logout",
- icon='URL')
-
- # if not self.enable_oauth:
- layout.prop(self, "api_key", text='Your API Key')
- # layout.label(text='After you paste API Key, categories are downloaded, so blender will freeze for a few seconds.')
- layout.prop(self, "global_dir")
- layout.prop(self, "project_subdir")
- # layout.prop(self, "temp_dir")
- layout.prop(self, "directory_behaviour")
- # layout.prop(self, "allow_proximity")
- # layout.prop(self, "panel_behaviour")
- layout.prop(self, "thumb_size")
- layout.prop(self, "max_assetbar_rows")
- layout.prop(self, "tips_on_start")
- layout.prop(self, "search_in_header")
- layout.prop(self, "thumbnail_use_gpu")
-
- if bpy.context.preferences.view.show_developer_ui:
- layout.prop(self, "use_timers")
- layout.prop(self, "experimental_features")
- layout.prop(self, "categories_fix")
-
-
-# # @bpy.app.handlers.persistent
-# def blenderkit_timer():
-#
-#
-# if not user_preferences.use_timers:
-# search.search_timer()
-# download.download_timer()
-# tasks_queue.queue_worker()
-# bg_blender.bg_update()
-# registration
-classes = (
-
- BlenderKitAddonPreferences,
- BlenderKitUIProps,
-
- BlenderKitModelSearchProps,
- BlenderKitModelUploadProps,
-
- BlenderKitSceneSearchProps,
- BlenderKitSceneUploadProps,
-
- BlenderKitHDRSearchProps,
- BlenderKitHDRUploadProps,
-
- BlenderKitMaterialUploadProps,
- BlenderKitMaterialSearchProps,
-
- BlenderKitTextureUploadProps,
-
- BlenderKitBrushSearchProps,
- BlenderKitBrushUploadProps,
-
- BlenderKitRatingProps,
-)
-
-
-
-def register():
- for cls in classes:
- bpy.utils.register_class(cls)
-
- bpy.types.WindowManager.blenderkitUI = PointerProperty(
- type=BlenderKitUIProps)
-
- # MODELS
- bpy.types.WindowManager.blenderkit_models = PointerProperty(
- type=BlenderKitModelSearchProps)
- bpy.types.Object.blenderkit = PointerProperty( # for uploads, not now...
- type=BlenderKitModelUploadProps)
- bpy.types.Object.bkit_ratings = PointerProperty( # for uploads, not now...
- type=BlenderKitRatingProps)
-
- # SCENES
- bpy.types.WindowManager.blenderkit_scene = PointerProperty(
- type=BlenderKitSceneSearchProps)
- bpy.types.Scene.blenderkit = PointerProperty( # for uploads, not now...
- type=BlenderKitSceneUploadProps)
- bpy.types.Scene.bkit_ratings = PointerProperty( # for uploads, not now...
- type=BlenderKitRatingProps)
-
- # HDRs
- bpy.types.WindowManager.blenderkit_HDR = PointerProperty(
- type=BlenderKitHDRSearchProps)
- bpy.types.Image.blenderkit = PointerProperty( # for uploads, not now...
- type=BlenderKitHDRUploadProps)
- bpy.types.Image.bkit_ratings = PointerProperty( # for uploads, not now...
- type=BlenderKitRatingProps)
-
- # MATERIALS
- bpy.types.WindowManager.blenderkit_mat = PointerProperty(
- type=BlenderKitMaterialSearchProps)
- bpy.types.Material.blenderkit = PointerProperty( # for uploads, not now...
- type=BlenderKitMaterialUploadProps)
- bpy.types.Material.bkit_ratings = PointerProperty( # for uploads, not now...
- type=BlenderKitRatingProps)
-
- # BRUSHES
- bpy.types.WindowManager.blenderkit_brush = PointerProperty(
- type=BlenderKitBrushSearchProps)
- bpy.types.Brush.blenderkit = PointerProperty( # for uploads, not now...
- type=BlenderKitBrushUploadProps)
- bpy.types.Brush.bkit_ratings = PointerProperty( # for uploads, not now...
- type=BlenderKitRatingProps)
-
- search.register_search()
- asset_inspector.register_asset_inspector()
- download.register_download()
- upload.register_upload()
- ratings.register_ratings()
- autothumb.register_thumbnailer()
- ui.register_ui()
- icons.register_icons()
- ui_panels.register_ui_panels()
- bg_blender.register()
- utils.load_prefs()
- overrides.register_overrides()
- bkit_oauth.register()
- tasks_queue.register()
- asset_bar_op.register()
-
- user_preferences = bpy.context.preferences.addons['blenderkit'].preferences
- if user_preferences.use_timers and not bpy.app.background:
- bpy.app.timers.register(check_timers_timer, persistent=True)
-
- bpy.app.handlers.load_post.append(scene_load)
- # detect if the user just enabled the addon in preferences, thus enable to run
- for w in bpy.context.window_manager.windows:
- for a in w.screen.areas:
- if a.type == 'PREFERENCES':
- tasks_queue.add_task((bpy.ops.wm.blenderkit_welcome, ('INVOKE_DEFAULT',)), fake_context=True,
- fake_context_area='PREFERENCES')
- #save preferences after manually enabling the addon
- tasks_queue.add_task((bpy.ops.wm.save_userpref, ()), fake_context=False,)
-
-
-def unregister():
- if bpy.app.timers.is_registered(check_timers_timer):
- bpy.app.timers.unregister(check_timers_timer)
- ui_panels.unregister_ui_panels()
- ui.unregister_ui()
-
- icons.unregister_icons()
- search.unregister_search()
- asset_inspector.unregister_asset_inspector()
- download.unregister_download()
- upload.unregister_upload()
- ratings.unregister_ratings()
- autothumb.unregister_thumbnailer()
- bg_blender.unregister()
- overrides.unregister_overrides()
- bkit_oauth.unregister()
- tasks_queue.unregister()
- asset_bar_op.unregister()
-
- del bpy.types.WindowManager.blenderkit_models
- del bpy.types.WindowManager.blenderkit_scene
- del bpy.types.WindowManager.blenderkit_HDR
- del bpy.types.WindowManager.blenderkit_brush
- del bpy.types.WindowManager.blenderkit_mat
-
- del bpy.types.Scene.blenderkit
- del bpy.types.Object.blenderkit
- del bpy.types.Image.blenderkit
- del bpy.types.Material.blenderkit
- del bpy.types.Brush.blenderkit
-
- for cls in classes:
- bpy.utils.unregister_class(cls)
-
- bpy.app.handlers.load_post.remove(scene_load)