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:
authorVilém Duha <vilda.novak@gmail.com>2020-01-21 18:09:26 +0300
committerVilém Duha <vilda.novak@gmail.com>2020-01-28 15:45:43 +0300
commit11491c5be04d5052632265e0fba7275db2f088e4 (patch)
treebf5c2c49f893033551211fa099e41c19eeebdac9 /blenderkit
parent8e3757177ce98f760583b858435e940700ce8ed2 (diff)
BlenderKit: search in header option in prefs
tips on start option in prefs total_megapixels autotag wip fix bugs in queries active area is usually the largest 3d view and only that one draws reports e.t.c. fix registration crash when registering/unregistering several times (menu remove) vs_rejected icon verification status
Diffstat (limited to 'blenderkit')
-rw-r--r--blenderkit/__init__.py15
-rw-r--r--blenderkit/asset_inspector.py11
-rw-r--r--blenderkit/search.py36
-rw-r--r--blenderkit/thumbnails/vs_rejected.pngbin0 -> 2114 bytes
-rw-r--r--blenderkit/ui.py62
-rw-r--r--blenderkit/ui_panels.py35
6 files changed, 105 insertions, 54 deletions
diff --git a/blenderkit/__init__.py b/blenderkit/__init__.py
index adb8e797..f8b31fec 100644
--- a/blenderkit/__init__.py
+++ b/blenderkit/__init__.py
@@ -1367,6 +1367,18 @@ class BlenderKitAddonPreferences(AddonPreferences):
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",
@@ -1473,6 +1485,9 @@ class BlenderKitAddonPreferences(AddonPreferences):
# 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")
+
# registration
diff --git a/blenderkit/asset_inspector.py b/blenderkit/asset_inspector.py
index 74f814ca..14224b21 100644
--- a/blenderkit/asset_inspector.py
+++ b/blenderkit/asset_inspector.py
@@ -85,6 +85,7 @@ def check_render_engine(props, obs):
mattype = None
materials = []
shaders = []
+ textures = []
props.uv = False
for ob in obs: # TODO , this is duplicated here for other engines, otherwise this should be more clever.
@@ -115,19 +116,21 @@ def check_render_engine(props, obs):
shaders.append(n.type)
if n.type == 'TEX_IMAGE':
mattype = 'image based'
- if n.image is not None:
+ props.is_procedural = False
+ if n.image not in textures:
+ textures.append(n.image)
+ props.texture_count += 1
+ props.total_megapixels += (n.image.size[0] * n.image.size[1])
maxres = max(n.image.size[0], n.image.size[1])
-
props.texture_resolution_max = max(props.texture_resolution_max, maxres)
-
minres = min(n.image.size[0], n.image.size[1])
-
if props.texture_resolution_min == 0:
props.texture_resolution_min = minres
else:
props.texture_resolution_min = min(props.texture_resolution_min, minres)
+
# if mattype == None:
# mattype = 'procedural'
# tags['material type'] = mattype
diff --git a/blenderkit/search.py b/blenderkit/search.py
index 2c2b2dea..96c1e63e 100644
--- a/blenderkit/search.py
+++ b/blenderkit/search.py
@@ -24,12 +24,13 @@ if "bpy" in locals():
utils = reload(utils)
categories = reload(categories)
ui = reload(ui)
+ colors = reload(colors)
bkit_oauth = reload(bkit_oauth)
version_checker = reload(version_checker)
tasks_queue = reload(tasks_queue)
rerequests = reload(rerequests)
else:
- from blenderkit import paths, utils, categories, ui, bkit_oauth, version_checker, tasks_queue, rerequests
+ from blenderkit import paths, utils, categories, ui, colors, bkit_oauth, version_checker, tasks_queue, rerequests
import blenderkit
from bpy.app.handlers import persistent
@@ -81,6 +82,15 @@ thumb_full_download_threads = {}
reports = ''
+rtips = ['Click or drag model or material in scene to link/append ',
+ "Please rate responsively and plentifully. This helps us distribute rewards to the authors.",
+ "Click on brushes to link them into scene.",
+ "All materials and brushes are free.",
+ "Locked models are available if you subscribe to Full plan.",
+ "Login to upload your own models, materials or brushes.",
+ "Use 'A' key to search assets by same author.",
+ "Use 'W' key to open Authors webpage.", ]
+
def refresh_token_timer():
''' this timer gets run every time the token needs refresh. It refreshes tokens and also categories.'''
utils.p('refresh timer')
@@ -127,6 +137,10 @@ def timer_update(): # TODO might get moved to handle all blenderkit stuff.
first_time = False
if preferences.show_on_start:
search()
+ if preferences.tips_on_start:
+ ui.get_largest_3dview()
+ ui.update_ui_size(ui.active_area, ui.active_region)
+ ui.add_report(text='BlenderKit Tip:' + random.choice(rtips), timeout=12, color=colors.GREEN)
global search_threads
# don't do anything while dragging - this could switch asset type during drag, and make results list length different,
@@ -496,14 +510,7 @@ def generate_tooltip(mdata):
def get_random_tip(mdata):
t = ''
- rtips = ['Click or drag model or material in scene to link/append ',
- "Click on brushes to link them into scene.",
- "All materials are free.",
- "All brushes are free.",
- "Locked models are available if you subscribe to Full plan.",
- "Login to upload your own models, materials or brushes.",
- "Use 'A' key to search assets by same author.",
- "Use 'W' key to open Authors webpage.", ]
+
tip = 'Tip: ' + random.choice(rtips)
t = writeblock(t, tip)
return t
@@ -743,9 +750,10 @@ class Searcher(threading.Thread):
requeststring = '?query=' + query['keywords'].lower() + '+'
#
for i, q in enumerate(query):
- requeststring += q + ':' + str(query[q]).lower()
- if i < len(query) - 1:
- requeststring += '+'
+ if q != 'keywords':
+ requeststring += q + ':' + str(query[q]).lower()
+ if i < len(query) - 1:
+ requeststring += '+'
# result ordering: _score - relevance, score - BlenderKit score
#first condition assumes no keywords and no category, thus an empty search that is triggered on start.
@@ -794,7 +802,7 @@ class Searcher(threading.Thread):
if p['parameterType'] == 'mode':
mode = p['value']
if query['asset_type'] != 'brush' or (
- query.get('brushType') != None and query['brushType']) == mode:
+ query.get('mode') != None and query['mode']) == mode:
nresults.append(d)
rdata['results'] = nresults
@@ -1025,7 +1033,7 @@ def build_query_brush():
query = {
"asset_type": 'brush',
- "brushType": brush_type
+ "mode": brush_type
}
build_query_common(query, props)
diff --git a/blenderkit/thumbnails/vs_rejected.png b/blenderkit/thumbnails/vs_rejected.png
new file mode 100644
index 00000000..6ff663cf
--- /dev/null
+++ b/blenderkit/thumbnails/vs_rejected.png
Binary files differ
diff --git a/blenderkit/ui.py b/blenderkit/ui.py
index 5def630f..be4bd451 100644
--- a/blenderkit/ui.py
+++ b/blenderkit/ui.py
@@ -50,6 +50,11 @@ import os
handler_2d = None
handler_3d = None
+active_area = None
+active_area = None
+active_window = None
+active_region = None
+
reports = []
mappingdict = {
@@ -67,7 +72,7 @@ verification_icons = {
'uploading': 'vs_uploading.png',
'on_hold': 'vs_on_hold.png',
'validated': None,
- 'rejected': 'vs_on_hold.png'
+ 'rejected': 'vs_rejected.png'
}
@@ -133,7 +138,8 @@ class Report():
pass;
def draw(self, x, y):
- ui_bgl.draw_text(self.text, x, y + 8, 16, self.draw_color)
+ if bpy.context.area == active_area:
+ ui_bgl.draw_text(self.text, x, y + 8, 16, self.draw_color)
def get_asset_under_mouse(mousex, mousey):
@@ -1174,6 +1180,10 @@ def get_largest_3dview():
for r in a.regions:
if r.type == 'WINDOW':
region = r
+ global active_area, active_window, active_region
+ active_window = maxw
+ active_area = maxa
+ active_region = region
return maxw, maxa, region
@@ -1419,7 +1429,7 @@ class AssetBarOperator(bpy.types.Operator):
ui_props.tooltip = asset_data['tooltip']
- #bpy.ops.wm.call_menu(name='OBJECT_MT_blenderkit_asset_menu')
+ # bpy.ops.wm.call_menu(name='OBJECT_MT_blenderkit_asset_menu')
else:
ui_props.draw_tooltip = False
@@ -1700,30 +1710,38 @@ class AssetBarOperator(bpy.types.Operator):
if sr is None:
bpy.context.scene['search results'] = []
- if context.area.type == 'VIEW_3D':
- # the arguments we pass the the callback
- args = (self, context)
- self.window = context.window
- self.area = context.area
- self.scene = bpy.context.scene
- self.has_quad_views = len(bpy.context.area.spaces[0].region_quadviews) > 0
+ if context.area.type != 'VIEW_3D':
+ self.report({'WARNING'}, "View3D not found, cannot run operator")
+ return {'CANCELLED'}
- for r in self.area.regions:
- if r.type == 'WINDOW':
- self.region = r
+ # the arguments we pass the the callback
+ args = (self, context)
- update_ui_size(self.area, self.region)
+ self.window = context.window
+ self.area = context.area
+ self.scene = bpy.context.scene
- self._handle_2d = bpy.types.SpaceView3D.draw_handler_add(draw_callback_2d, args, 'WINDOW', 'POST_PIXEL')
- self._handle_3d = bpy.types.SpaceView3D.draw_handler_add(draw_callback_3d, args, 'WINDOW', 'POST_VIEW')
- context.window_manager.modal_handler_add(self)
- ui_props.assetbar_on = True
- return {'RUNNING_MODAL'}
- else:
- self.report({'WARNING'}, "View3D not found, cannot run operator")
- return {'CANCELLED'}
+ self.has_quad_views = len(bpy.context.area.spaces[0].region_quadviews) > 0
+
+ for r in self.area.regions:
+ if r.type == 'WINDOW':
+ self.region = r
+
+ global active_window, active_area, active_region
+ active_window = self.window
+ active_area = self.area
+ active_region = self.region
+
+ update_ui_size(self.area, self.region)
+
+ self._handle_2d = bpy.types.SpaceView3D.draw_handler_add(draw_callback_2d, args, 'WINDOW', 'POST_PIXEL')
+ self._handle_3d = bpy.types.SpaceView3D.draw_handler_add(draw_callback_3d, args, 'WINDOW', 'POST_VIEW')
+
+ context.window_manager.modal_handler_add(self)
+ ui_props.assetbar_on = True
+ return {'RUNNING_MODAL'}
def execute(self, context):
return {'RUNNING_MODAL'}
diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py
index 09911d99..ede93587 100644
--- a/blenderkit/ui_panels.py
+++ b/blenderkit/ui_panels.py
@@ -813,6 +813,10 @@ class OBJECT_MT_blenderkit_asset_menu(bpy.types.Menu):
# validation by admin
if profile['user']['exmenu']:
layout.label(text='Validation tools:')
+ if asset_data['verificationStatus'] != 'uploaded':
+ op = layout.operator('object.blenderkit_change_status', text='set Uploaded')
+ op.asset_id = asset_data['id']
+ op.state = 'uploaded'
if asset_data['verificationStatus'] != 'validated':
op = layout.operator('object.blenderkit_change_status', text='Validate')
op.asset_id = asset_data['id']
@@ -998,21 +1002,23 @@ class VIEW3D_PT_blenderkit_downloads(Panel):
def header_search_draw(self, context):
'''Top bar menu in 3d view'''
- layout = self.layout
- s = bpy.context.scene
- ui_props = s.blenderkitUI
- if ui_props.asset_type == 'MODEL':
- props = s.blenderkit_models
- if ui_props.asset_type == 'MATERIAL':
- props = s.blenderkit_mat
- if ui_props.asset_type == 'BRUSH':
- props = s.blenderkit_brush
+ preferences = bpy.context.preferences.addons['blenderkit'].preferences
+ if preferences.search_in_header:
+ layout = self.layout
+ s = bpy.context.scene
+ ui_props = s.blenderkitUI
+ if ui_props.asset_type == 'MODEL':
+ props = s.blenderkit_models
+ if ui_props.asset_type == 'MATERIAL':
+ props = s.blenderkit_mat
+ if ui_props.asset_type == 'BRUSH':
+ props = s.blenderkit_brush
- if context.space_data.show_region_tool_header == True:
- layout.separator_spacer()
- layout.prop(ui_props, "asset_type", text='', icon='URL')
- layout.prop(props, "search_keywords", text="", icon='VIEWZOOM')
- draw_assetbar_show_hide(layout, props)
+ if context.space_data.show_region_tool_header == True:
+ layout.separator_spacer()
+ layout.prop(ui_props, "asset_type", text='', icon='URL')
+ layout.prop(props, "search_keywords", text="", icon='VIEWZOOM')
+ draw_assetbar_show_hide(layout, props)
# We can store multiple preview collections here,
@@ -1040,3 +1046,4 @@ def register_ui_panels():
def unregister_ui_panels():
for c in classess:
bpy.utils.unregister_class(c)
+ bpy.types.VIEW3D_MT_editor_menus.remove(header_search_draw) \ No newline at end of file