work
save startup blend for animation tab & whatnot
This commit is contained in:
@@ -19,8 +19,8 @@
|
||||
|
||||
bl_info = {
|
||||
"name": "BlenderKit Online Asset Library",
|
||||
"author": "Vilem Duha, Petr Dlouhy, A. Gajdosik",
|
||||
"version": (3, 18, 1, 251219), # X.Y.Z.yymmdd
|
||||
"author": "Vilem Duha, Petr Dlouhy, A. Gajdosik, Michal Hons",
|
||||
"version": (3, 19, 1, 260402), # X.Y.Z.yymmdd
|
||||
"blender": (3, 0, 0),
|
||||
"location": "View3D > Properties > BlenderKit",
|
||||
"description": "Boost your workflow with drag&drop assets from the community driven library.",
|
||||
@@ -28,7 +28,7 @@ bl_info = {
|
||||
"tracker_url": "https://github.com/BlenderKit/blenderkit/issues",
|
||||
"category": "3D View",
|
||||
}
|
||||
VERSION = (3, 18, 1, 251219)
|
||||
VERSION = (3, 19, 1, 260402)
|
||||
|
||||
import logging
|
||||
import random
|
||||
@@ -96,6 +96,7 @@ if "bpy" in locals():
|
||||
ui = reload(ui)
|
||||
ui_bgl = reload(ui_bgl)
|
||||
ui_panels = reload(ui_panels)
|
||||
keymap_utils = reload(keymap_utils)
|
||||
upload = reload(upload)
|
||||
upload_bg = reload(upload_bg)
|
||||
utils = reload(utils)
|
||||
@@ -152,6 +153,7 @@ else:
|
||||
from . import ui
|
||||
from . import ui_bgl
|
||||
from . import ui_panels
|
||||
from . import keymap_utils
|
||||
from . import upload
|
||||
from . import upload_bg
|
||||
from . import utils
|
||||
@@ -273,7 +275,7 @@ if bpy.app.version >= (4, 5, 0):
|
||||
EXTRA_PATH_OPTIONS = {"options": {"PATH_SUPPORTS_BLEND_RELATIVE"}}
|
||||
|
||||
|
||||
def udate_down_up(self, context):
|
||||
def update_down_up(self, context):
|
||||
"""Perform a search if results are empty."""
|
||||
props = bpy.context.window_manager.blenderkitUI
|
||||
if search.get_search_results() is None and props.down_up == "SEARCH":
|
||||
@@ -308,6 +310,19 @@ def asset_type_callback(self, context):
|
||||
|
||||
if bpy.app.version >= (4, 2, 0):
|
||||
items.append(("ADDON", "Add-ons", "Find add-ons", "PLUGIN", 7))
|
||||
addon = bpy.context.preferences.addons.get(__package__)
|
||||
if addon is not None:
|
||||
preferences = addon.preferences
|
||||
if preferences.experimental_features and preferences.author_tab:
|
||||
items.append(
|
||||
(
|
||||
"AUTHOR",
|
||||
"Authors",
|
||||
"Find authors",
|
||||
pcoll["asset_type_author"].icon_id,
|
||||
8,
|
||||
),
|
||||
)
|
||||
else:
|
||||
items = [
|
||||
("MODEL", "Model", "Upload a model", "OBJECT_DATAMODE", 0),
|
||||
@@ -330,6 +345,8 @@ def asset_type_callback(self, context):
|
||||
if bpy.app.version >= (4, 2, 0):
|
||||
items.append(("ADDON", "Add-on", "Upload an addon", "PLUGIN", 7))
|
||||
|
||||
# Author is search-only, no upload entry needed
|
||||
|
||||
return items
|
||||
|
||||
|
||||
@@ -337,6 +354,10 @@ def run_drag_drop_update(self, context):
|
||||
if self.drag_init_button:
|
||||
ui_props = bpy.context.window_manager.blenderkitUI
|
||||
|
||||
if ui_props.dragging:
|
||||
self.drag_init_button = False
|
||||
return
|
||||
|
||||
bpy.ops.view3d.close_popup_button("INVOKE_DEFAULT")
|
||||
bpy.ops.view3d.asset_drag_drop(
|
||||
"INVOKE_DEFAULT",
|
||||
@@ -356,7 +377,7 @@ class BlenderKitUIProps(PropertyGroup):
|
||||
),
|
||||
description="BlenderKit",
|
||||
default="SEARCH",
|
||||
update=udate_down_up,
|
||||
update=update_down_up,
|
||||
)
|
||||
asset_type: EnumProperty(
|
||||
name=" ",
|
||||
@@ -505,11 +526,11 @@ class BlenderKitUIProps(PropertyGroup):
|
||||
|
||||
ui_scale = 1
|
||||
|
||||
thumb_size_def = 96
|
||||
thumb_size_def = 128
|
||||
margin_def = 0
|
||||
|
||||
thumb_size: IntProperty(
|
||||
name="Thumbnail Size", default=thumb_size_def, min=-1, max=256
|
||||
name="Thumbnail Size", default=thumb_size_def, min=48, max=256
|
||||
)
|
||||
|
||||
margin: IntProperty(name="Margin", default=margin_def, min=-1, max=256)
|
||||
@@ -552,7 +573,6 @@ class BlenderKitUIProps(PropertyGroup):
|
||||
description="Click or drag into scene for download.\nUse mouse wheel during drag to rotate the asset. Cancel the drag by pressing 'Esc'.",
|
||||
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)
|
||||
|
||||
@@ -622,6 +642,32 @@ class BlenderKitUIProps(PropertyGroup):
|
||||
name="Upload HDR", type=bpy.types.Image, description="Pick an image to upload"
|
||||
)
|
||||
|
||||
hdr_use_custom_thumbnail_tone: BoolProperty(
|
||||
name="Use Custom Thumbnail Tone",
|
||||
description="Use custom exposure and gamma for HDR thumbnail conversion",
|
||||
default=False,
|
||||
)
|
||||
|
||||
hdr_thumbnail_exposure: FloatProperty(
|
||||
name="Thumbnail Exposure",
|
||||
description="Exposure offset used only for HDR thumbnail conversion",
|
||||
default=0.0,
|
||||
min=-5.0,
|
||||
max=5.0,
|
||||
soft_min=-2.0,
|
||||
soft_max=2.0,
|
||||
)
|
||||
|
||||
hdr_thumbnail_gamma: FloatProperty(
|
||||
name="Thumbnail Gamma",
|
||||
description="Gamma used only for HDR thumbnail conversion",
|
||||
default=1.0,
|
||||
min=0.2,
|
||||
max=3.0,
|
||||
soft_min=0.7,
|
||||
soft_max=1.6,
|
||||
)
|
||||
|
||||
nodegroup_upload: PointerProperty(
|
||||
name="Upload Tool",
|
||||
type=bpy.types.GeometryNodeTree,
|
||||
@@ -785,7 +831,7 @@ def update_free(self, context):
|
||||
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",
|
||||
"Part of subscription is sent to authors based on usage by paying users.\n",
|
||||
)
|
||||
|
||||
|
||||
@@ -868,6 +914,21 @@ class BlenderKitCommonUploadProps(object):
|
||||
description="License. Please read our help for choosing the right licenses",
|
||||
)
|
||||
|
||||
# verification mainly to retrigger processing
|
||||
verification_status: EnumProperty(
|
||||
name="Verification status",
|
||||
description="Verification status of the asset, set by moderators",
|
||||
items=(
|
||||
("UPLOADING", "Uploading", "uploading"),
|
||||
("UPLOADED", "Uploaded", "uploaded"),
|
||||
("VALIDATED", "Validated", "validated"),
|
||||
("ON_HOLD", "On Hold", "on_hold"),
|
||||
("REJECTED", "Rejected", "rejected"),
|
||||
("DELETED", "Deleted", "deleted"),
|
||||
),
|
||||
default="UPLOADING",
|
||||
)
|
||||
|
||||
is_private: EnumProperty(
|
||||
name="Thumbnail Style",
|
||||
items=(("PRIVATE", "Private", ""), ("PUBLIC", "Public", "")),
|
||||
@@ -1187,13 +1248,17 @@ class BlenderKitAddonSearchProps(PropertyGroup, BlenderKitCommonSearchProps):
|
||||
description="Show only addons that are already installed in Blender",
|
||||
default=False,
|
||||
update=lambda self, context: (
|
||||
search.refresh_search()
|
||||
search.search_update(self, context)
|
||||
if context.window_manager.blenderkitUI.asset_type == "ADDON"
|
||||
else None
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
class BlenderKitAuthorSearchProps(PropertyGroup, BlenderKitCommonSearchProps):
|
||||
pass
|
||||
|
||||
|
||||
class BlenderKitHDRUploadProps(PropertyGroup, BlenderKitCommonUploadProps):
|
||||
texture_resolution_max: IntProperty(
|
||||
name="Texture Resolution Max",
|
||||
@@ -1207,6 +1272,15 @@ class BlenderKitHDRUploadProps(PropertyGroup, BlenderKitCommonUploadProps):
|
||||
|
||||
|
||||
class BlenderKitBrushUploadProps(PropertyGroup, BlenderKitCommonUploadProps):
|
||||
thumbnail: StringProperty(
|
||||
name="Thumbnail",
|
||||
description="Thumbnail path - at least 1024x1024 .jpg or .png",
|
||||
subtype="FILE_PATH",
|
||||
default="",
|
||||
update=autothumb.update_upload_brush_preview,
|
||||
**EXTRA_PATH_OPTIONS,
|
||||
)
|
||||
|
||||
mode: EnumProperty(
|
||||
name="Mode",
|
||||
items=(
|
||||
@@ -1526,6 +1600,13 @@ class BlenderKitModelUploadProps(PropertyGroup, BlenderKitCommonUploadProps):
|
||||
update=autothumb.update_upload_model_preview,
|
||||
)
|
||||
|
||||
is_generating_wire_thumbnail: BoolProperty(
|
||||
name="Generating Wire Thumbnail",
|
||||
description="True when background process is running",
|
||||
default=False,
|
||||
update=autothumb.update_wire_thumbnail_preview,
|
||||
)
|
||||
|
||||
has_autotags: BoolProperty(
|
||||
name="Has Autotagging Done",
|
||||
description="True when autotagging done",
|
||||
@@ -1546,6 +1627,26 @@ class BlenderKitModelUploadProps(PropertyGroup, BlenderKitCommonUploadProps):
|
||||
default=False,
|
||||
)
|
||||
|
||||
wire_thumbnail: StringProperty(
|
||||
name="Wireframe Thumbnail",
|
||||
description="Wireframe thumbnail (JPG or PNG, preferred size is 1024x1024 or higher)",
|
||||
subtype="FILE_PATH",
|
||||
default="",
|
||||
update=autothumb.update_wire_thumbnail_preview,
|
||||
**EXTRA_PATH_OPTIONS,
|
||||
)
|
||||
wire_thumbnail_will_upload_on_website: BoolProperty(
|
||||
name="I will upload wireframe thumbnail on website",
|
||||
description="True if the wireframe thumbnail will upload on the website\n please read upload tutorial for more information",
|
||||
default=False,
|
||||
)
|
||||
|
||||
wire_thumbnail_generating_state: StringProperty(
|
||||
name="Wire Thumbnail Generating State",
|
||||
description="bg process reports for wireframe thumbnail generation",
|
||||
default="Please add wireframe thumbnail (jpg or png, at least 1024x1024)",
|
||||
)
|
||||
|
||||
|
||||
class BlenderKitSceneUploadProps(PropertyGroup, BlenderKitCommonUploadProps):
|
||||
style: EnumProperty(
|
||||
@@ -1923,6 +2024,14 @@ class BlenderKitHDRSearchProps(PropertyGroup, BlenderKitCommonSearchProps):
|
||||
)
|
||||
|
||||
|
||||
def our_keymap_draw(self, context):
|
||||
try:
|
||||
keymap_utils.draw_keymap(self, context)
|
||||
except Exception:
|
||||
bk_logger.exception("Failed to draw keymap in preferences")
|
||||
return
|
||||
|
||||
|
||||
class BlenderKitSceneSearchProps(PropertyGroup, BlenderKitCommonSearchProps):
|
||||
search_style: EnumProperty(
|
||||
name="Style",
|
||||
@@ -2090,6 +2199,12 @@ class BlenderKitAddonPreferences(AddonPreferences):
|
||||
default=True,
|
||||
)
|
||||
|
||||
assetbar_follows_cursor: BoolProperty(
|
||||
name="Assetbar follows active viewport",
|
||||
description="Make the assetbar follow the cursor across the screen",
|
||||
default=False,
|
||||
)
|
||||
|
||||
global_dir: StringProperty(
|
||||
name="Global Directory",
|
||||
description="Global storage for your assets, will use subdirectories for the contents. Client will place its files in subdirectory 'client'",
|
||||
@@ -2151,6 +2266,13 @@ class BlenderKitAddonPreferences(AddonPreferences):
|
||||
update=update_unpack,
|
||||
)
|
||||
|
||||
write_asset_metadata: BoolProperty(
|
||||
name="Write Asset Metadata",
|
||||
description="Write BlenderKit metadata into downloaded files so tags, description, and preview show in other scenes",
|
||||
default=True,
|
||||
update=utils.save_prefs,
|
||||
)
|
||||
|
||||
# resolution download/import settings
|
||||
resolution: EnumProperty(
|
||||
name="Max resolution",
|
||||
@@ -2317,6 +2439,13 @@ In this case you should also set path to your system CA bundle containing proxy'
|
||||
update=utils.save_prefs,
|
||||
)
|
||||
|
||||
thumbnail_disable_subdivision: BoolProperty(
|
||||
name="Disable Subdivision for Thumbnails Rendering (For assets upload)",
|
||||
description="By default this is off. Disable this for wireframe thumbnails to render faster",
|
||||
default=False,
|
||||
update=utils.save_prefs,
|
||||
)
|
||||
|
||||
maximized_assetbar_rows: IntProperty(
|
||||
name="Maximized Assetbar Rows",
|
||||
description="Maximum rows of assetbar in the 3D view when expanded",
|
||||
@@ -2334,8 +2463,8 @@ In this case you should also set path to your system CA bundle containing proxy'
|
||||
|
||||
thumb_size: IntProperty(
|
||||
name="Assetbar Thumbnail Size",
|
||||
default=96,
|
||||
min=-1,
|
||||
default=128,
|
||||
min=48, # must newer be zero
|
||||
max=256,
|
||||
update=utils.save_prefs,
|
||||
description="Size of thumbnails of the assetbar in 3D view",
|
||||
@@ -2352,7 +2481,21 @@ In this case you should also set path to your system CA bundle containing proxy'
|
||||
|
||||
experimental_features: BoolProperty(
|
||||
name="Enable experimental features",
|
||||
description="Enable experimental features of BlenderKit. Note: There are no experimental features in this version.",
|
||||
description="Enable experimental features of BlenderKit, such as the Authors tab",
|
||||
default=False,
|
||||
update=utils.save_prefs,
|
||||
)
|
||||
|
||||
author_tab: BoolProperty(
|
||||
name="Show Authors tab",
|
||||
description="Show Authors tab in the assetbar. This tab allows you to see all assets of a specific author and is also used for showing your profile and assets",
|
||||
default=False,
|
||||
update=utils.save_prefs,
|
||||
)
|
||||
|
||||
author_asset_type_picker: BoolProperty(
|
||||
name="Author asset type picker",
|
||||
description="Enable the Authors tab in the asset type picker. When disabled, clicking an author searches in the current tab",
|
||||
default=False,
|
||||
update=utils.save_prefs,
|
||||
)
|
||||
@@ -2458,22 +2601,45 @@ In this case you should also set path to your system CA bundle containing proxy'
|
||||
options={"SKIP_SAVE"},
|
||||
)
|
||||
|
||||
enable_wire_thumbnail_upload: BoolProperty(
|
||||
name="Enable wire thumbnail upload",
|
||||
description="If enabled, wireframe thumbnails will be uploaded.",
|
||||
default=False,
|
||||
# do not save prefs here, it's experimental
|
||||
options={"SKIP_SAVE"},
|
||||
)
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
login_box = layout.box()
|
||||
login_box.label(text="Login Options")
|
||||
if self.api_key.strip() == "":
|
||||
ui_panels.draw_login_buttons(layout)
|
||||
layout.label(
|
||||
ui_panels.draw_login_buttons(login_box)
|
||||
login_box.label(
|
||||
text="Sign up to bookmark your favorite assets. Get 200 MiB of private storage in Free Plan."
|
||||
)
|
||||
else:
|
||||
layout.operator("wm.blenderkit_logout", text="Logout", icon="URL")
|
||||
layout.prop(self, "api_key", text="Your API Key")
|
||||
layout.prop(self, "keep_preferences")
|
||||
community_row = layout.row()
|
||||
login_box.operator("wm.blenderkit_logout", text="Logout", icon="URL")
|
||||
login_box.prop(self, "api_key", text="Your API Key")
|
||||
login_box.prop(self, "keep_preferences")
|
||||
community_row = login_box.row()
|
||||
community_row.prop(self, "experimental_features")
|
||||
community_row.operator("wm.blenderkit_join_discord", icon="URL")
|
||||
|
||||
if utils.profile_is_validator():
|
||||
layout.prop(self, "categories_fix")
|
||||
validator_box = layout.box()
|
||||
validator_box.label(text="Validator Settings")
|
||||
validator_box.prop(self, "categories_fix")
|
||||
|
||||
# REPORT PATHS
|
||||
report_settings = layout.box()
|
||||
report_settings.label(text="Report a Bug")
|
||||
report_settings.label(
|
||||
text="Create an issue report with version information to help us resolve the issue faster.",
|
||||
)
|
||||
report_settings.operator(
|
||||
"wm.blenderkit_report_bug", text="Submit Full Bug Report", icon="ERROR"
|
||||
)
|
||||
|
||||
# FILE PATHS
|
||||
locations_settings = layout.box()
|
||||
@@ -2484,6 +2650,7 @@ In this case you should also set path to your system CA bundle containing proxy'
|
||||
if self.directory_behaviour in ("BOTH", "LOCAL"):
|
||||
locations_settings.prop(self, "project_subdir")
|
||||
locations_settings.prop(self, "unpack_files")
|
||||
locations_settings.prop(self, "write_asset_metadata")
|
||||
|
||||
# GUI SETTINGS
|
||||
gui_settings = layout.box()
|
||||
@@ -2498,6 +2665,7 @@ In this case you should also set path to your system CA bundle containing proxy'
|
||||
gui_settings.prop(self, "show_VIEW3D_MT_blenderkit_model_properties")
|
||||
gui_settings.prop(self, "tips_on_start")
|
||||
gui_settings.prop(self, "announcements_on_start")
|
||||
gui_settings.prop(self, "assetbar_follows_cursor")
|
||||
gui_settings.prop(self, "use_clipboard_scan")
|
||||
|
||||
# NETWORKING SETTINGS
|
||||
@@ -2516,16 +2684,11 @@ In this case you should also set path to your system CA bundle containing proxy'
|
||||
# UPDATER SETTINGS
|
||||
addon_updater_ops.update_settings_ui(self, context)
|
||||
|
||||
# EXPERIMENTAL SETTINGS
|
||||
# only if experimental features enabled
|
||||
if self.experimental_features:
|
||||
experimental_settings = layout.box()
|
||||
experimental_settings.alignment = "EXPAND"
|
||||
experimental_settings.label(text="Experimental settings")
|
||||
experimental_settings.prop(self, "ignore_env_for_thumbnails")
|
||||
|
||||
# RUNTIME INFO
|
||||
globdir_op = layout.operator(
|
||||
directory_box = layout.box()
|
||||
directory_box.label(text="Directories and Paths")
|
||||
|
||||
globdir_op = directory_box.operator(
|
||||
"wm.blenderkit_open_global_directory",
|
||||
text=f"Global directory: {self.global_dir}",
|
||||
icon="FILE_FOLDER",
|
||||
@@ -2533,7 +2696,7 @@ In this case you should also set path to your system CA bundle containing proxy'
|
||||
globdir_op.directory = self.global_dir
|
||||
|
||||
clientlog_path = client_lib.get_client_log_path()
|
||||
clientlog_op = layout.operator(
|
||||
clientlog_op = directory_box.operator(
|
||||
"wm.blenderkit_open_client_log",
|
||||
text=f"Client log: {clientlog_path}",
|
||||
icon="FILE_FOLDER",
|
||||
@@ -2541,7 +2704,7 @@ In this case you should also set path to your system CA bundle containing proxy'
|
||||
clientlog_op.directory = clientlog_path
|
||||
|
||||
addondir = path.dirname(__file__)
|
||||
addondir_op = layout.operator(
|
||||
addondir_op = directory_box.operator(
|
||||
"wm.blenderkit_open_addon_directory",
|
||||
text=f"Installed at: {addondir}",
|
||||
icon="FILE_FOLDER",
|
||||
@@ -2549,13 +2712,27 @@ In this case you should also set path to your system CA bundle containing proxy'
|
||||
addondir_op.directory = addondir
|
||||
|
||||
tempdir = paths.get_temp_dir()
|
||||
tempdir_op = layout.operator(
|
||||
tempdir_op = directory_box.operator(
|
||||
"wm.blenderkit_open_temp_directory",
|
||||
text=f"Temp directory: {tempdir}",
|
||||
icon="FILE_FOLDER",
|
||||
)
|
||||
tempdir_op.directory = tempdir
|
||||
|
||||
# try to draw also custom keymaps
|
||||
our_keymap_draw(self, context)
|
||||
|
||||
# EXPERIMENTAL SETTINGS
|
||||
# only if experimental features enabled
|
||||
if self.experimental_features:
|
||||
experimental_settings = layout.box()
|
||||
experimental_settings.alignment = "EXPAND"
|
||||
experimental_settings.label(text="Experimental settings")
|
||||
experimental_settings.prop(self, "author_tab")
|
||||
experimental_settings.prop(self, "author_asset_type_picker")
|
||||
experimental_settings.prop(self, "ignore_env_for_thumbnails")
|
||||
# experimental_settings.prop(self, "enable_wire_thumbnail_upload")
|
||||
|
||||
|
||||
# registration
|
||||
classes = (
|
||||
@@ -2574,6 +2751,7 @@ classes = (
|
||||
BlenderKitGeoToolSearchProps,
|
||||
BlenderKitNodeGroupUploadProps,
|
||||
BlenderKitAddonSearchProps,
|
||||
BlenderKitAuthorSearchProps,
|
||||
)
|
||||
|
||||
|
||||
@@ -2582,6 +2760,9 @@ def register():
|
||||
global_vars.VERSION = VERSION
|
||||
bpy.utils.register_class(BlenderKitAddonPreferences)
|
||||
|
||||
# Drop any downloads that might have been left running if the add-on was re-enabled mid-transfer.
|
||||
download.cancel_running_downloads("addon register")
|
||||
|
||||
addon_updater_ops.register({"version": VERSION})
|
||||
for cls in classes:
|
||||
bpy.utils.register_class(cls)
|
||||
@@ -2643,9 +2824,13 @@ def register():
|
||||
bpy.types.WindowManager.blenderkit_addon = PointerProperty(
|
||||
type=BlenderKitAddonSearchProps
|
||||
)
|
||||
bpy.types.WindowManager.blenderkit_author = PointerProperty(
|
||||
type=BlenderKitAuthorSearchProps
|
||||
)
|
||||
if bpy.app.factory_startup is False:
|
||||
user_preferences = bpy.context.preferences.addons[__package__].preferences
|
||||
global_vars.PREFS = utils.get_preferences_as_dict()
|
||||
paths.ensure_asset_library_path(user_preferences.global_dir)
|
||||
client_lib.reorder_ports(user_preferences.client_port)
|
||||
timer.update_trusted_CA_certs(user_preferences.trusted_ca_certs)
|
||||
|
||||
@@ -2694,6 +2879,8 @@ def register():
|
||||
|
||||
def unregister():
|
||||
bk_logger.info("Unregistering BlenderKit add-on")
|
||||
# Stop any in-flight downloads to avoid leaving stale UI state when disabling the add-on.
|
||||
download.cancel_running_downloads("addon unregister")
|
||||
timer.unregister_timers()
|
||||
ui_panels.unregister_ui_panels()
|
||||
ui.unregister_ui()
|
||||
@@ -2726,6 +2913,8 @@ def unregister():
|
||||
del bpy.types.WindowManager.blenderkit_brush
|
||||
del bpy.types.WindowManager.blenderkit_mat
|
||||
del bpy.types.WindowManager.blenderkit_nodegroup
|
||||
del bpy.types.WindowManager.blenderkit_addon
|
||||
del bpy.types.WindowManager.blenderkit_author
|
||||
|
||||
del bpy.types.Scene.blenderkit
|
||||
del bpy.types.Object.blenderkit
|
||||
|
||||
Reference in New Issue
Block a user