[Bf-extensions-cvs] [d54fb366] master: BlenderKit: search by collection/ desginer/designCollection

Vilem Duha noreply at git.blender.org
Sat Aug 7 12:55:15 CEST 2021


Commit: d54fb366442e38c9a718ac55be08e0708de9afab
Author: Vilem Duha
Date:   Sat Aug 7 12:54:25 2021 +0200
Branches: master
https://developer.blender.org/rBAd54fb366442e38c9a718ac55be08e0708de9afab

BlenderKit: search by collection/ desginer/designCollection

also fix fetching ratings for validators.

===================================================================

M	blenderkit/search.py
M	blenderkit/ui_panels.py

===================================================================

diff --git a/blenderkit/search.py b/blenderkit/search.py
index ac03080c..dfb57cf2 100644
--- a/blenderkit/search.py
+++ b/blenderkit/search.py
@@ -448,7 +448,7 @@ def search_timer():
                 headers = utils.get_headers(api_key)
                 if utils.profile_is_validator():
                     for r in rdata['results']:
-                        if ratings_utils.get_rating_local(asset_data['id']) is None:
+                        if ratings_utils.get_rating_local(r['id']) is None:
                             rating_thread = threading.Thread(target=ratings_utils.get_rating, args=([r['id'], headers]),
                                                              daemon=True)
                             rating_thread.start()
@@ -1491,7 +1491,8 @@ class SearchOperator(Operator):
 
     own: BoolProperty(name="own assets only",
                       description="Find all own assets",
-                      default=False)
+                      default=False,
+                      options={'SKIP_SAVE'})
 
     category: StringProperty(
         name="category",
diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py
index 67f42148..056c3f19 100644
--- a/blenderkit/ui_panels.py
+++ b/blenderkit/ui_panels.py
@@ -870,6 +870,7 @@ class VIEW3D_PT_blenderkit_advanced_material_search(Panel):
             row.prop(props, "search_file_size_max", text='Max')
         layout.prop(props, "quality_limit", slider=True)
 
+
 class VIEW3D_PT_blenderkit_categories(Panel):
     bl_category = "BlenderKit"
     bl_idname = "VIEW3D_PT_blenderkit_categories"
@@ -891,6 +892,7 @@ class VIEW3D_PT_blenderkit_categories(Panel):
     def draw(self, context):
         draw_panel_categories(self, context)
 
+
 def draw_scene_import_settings(self, context):
     wm = bpy.context.window_manager
     props = wm.blenderkit_scene
@@ -945,7 +947,7 @@ class VIEW3D_PT_blenderkit_import_settings(Panel):
 
             row.prop(props, 'append_method', expand=True, icon_only=False)
         if ui_props.asset_type == 'SCENE':
-            draw_scene_import_settings(self,context)
+            draw_scene_import_settings(self, context)
 
         if ui_props.asset_type == 'HDR':
             props = wm.blenderkit_HDR
@@ -1149,35 +1151,35 @@ class BlenderKitWelcomeOperator(bpy.types.Operator):
             print('running search no')
             ui_props = bpy.context.scene.blenderkitUI
             random_searches = [
-                ('MATERIAL','ice'),
-                ('MODEL','car'),
-                ('MODEL','vase'),
-                ('MODEL','grass'),
-                ('MODEL','plant'),
-                ('MODEL','man'),
-                ('MATERIAL','metal'),
-                ('MATERIAL','wood'),
-                ('MATERIAL','floor'),
-                ('MATERIAL','bricks'),
+                ('MATERIAL', 'ice'),
+                ('MODEL', 'car'),
+                ('MODEL', 'vase'),
+                ('MODEL', 'grass'),
+                ('MODEL', 'plant'),
+                ('MODEL', 'man'),
+                ('MATERIAL', 'metal'),
+                ('MATERIAL', 'wood'),
+                ('MATERIAL', 'floor'),
+                ('MATERIAL', 'bricks'),
             ]
             random_search = random.choice(random_searches)
             ui_props.asset_type = random_search[0]
 
-            bpy.context.window_manager.blenderkit_mat.search_keywords = ''#random_search[1]
-            bpy.context.window_manager.blenderkit_mat.search_keywords = '+is_free:true+score_gte:1000+order:-created'#random_search[1]
+            bpy.context.window_manager.blenderkit_mat.search_keywords = ''  # random_search[1]
+            bpy.context.window_manager.blenderkit_mat.search_keywords = '+is_free:true+score_gte:1000+order:-created'  # random_search[1]
             # search.search()
         return {'FINISHED'}
 
     def invoke(self, context, event):
         wm = bpy.context.window_manager
         img = utils.get_thumbnail('intro.jpg')
-        utils.img_to_preview(img, copy_original = True)
+        utils.img_to_preview(img, copy_original=True)
         self.img = img
         w, a, r = utils.get_largest_area(area_type='VIEW_3D')
         if a is not None:
             a.spaces.active.show_region_ui = True
 
-        return wm.invoke_props_dialog(self, width = 500)
+        return wm.invoke_props_dialog(self, width=500)
 
 
 def draw_asset_context_menu(layout, context, asset_data, from_panel=False):
@@ -1396,8 +1398,8 @@ class OBJECT_MT_blenderkit_asset_menu(bpy.types.Menu):
 
 def numeric_to_str(s):
     if s:
-        if s<1:
-            s = str(round(s,1))
+        if s < 1:
+            s = str(round(s, 1))
         else:
             s = str(round(s))
     else:
@@ -1405,14 +1407,32 @@ def numeric_to_str(s):
     return s
 
 
-def push_op_left(layout, strength =3):
+def push_op_left(layout, strength=3):
     for a in range(0, strength):
         layout.label(text='')
 
 
-def label_or_url(layout, text='', tooltip='', url='', icon_value=None, icon=None):
+def label_or_url_or_operator(layout, text='', tooltip='', url='', operator=None, operator_kwargs={}, icon_value=None,
+                             icon=None):
     '''automatically switch between different layout options for linking or tooltips'''
     layout.emboss = 'NONE'
+
+    if operator is not None:
+        if icon:
+            op = layout.operator(operator, text=text, icon=icon)
+        elif icon_value:
+            op = layout.operator(operator, text=text, icon_value=icon_value)
+        else:
+            op = layout.operator(operator, text=text)
+        for kwarg in operator_kwargs.keys():
+            if type(operator_kwargs[kwarg]) == str:
+                quoatation = "'"
+            else:
+                quoatation = ""
+            exec(f"op.{kwarg} = {quoatation}{operator_kwargs[kwarg]}{quoatation}")
+        push_op_left(layout, strength=2)
+
+        return
     if url != '':
         if icon:
             op = layout.operator('wm.blenderkit_url', text=text, icon=icon)
@@ -1422,7 +1442,7 @@ def label_or_url(layout, text='', tooltip='', url='', icon_value=None, icon=None
             op = layout.operator('wm.blenderkit_url', text=text)
         op.url = url
         op.tooltip = tooltip
-        push_op_left(layout, strength = 5)
+        push_op_left(layout, strength=5)
 
         return
     if tooltip != '':
@@ -1435,7 +1455,7 @@ def label_or_url(layout, text='', tooltip='', url='', icon_value=None, icon=None
         op.tooltip = tooltip
 
         # these are here to move the text to left, since operators can only center text by default
-        push_op_left(layout, strength = 3)
+        push_op_left(layout, strength=3)
         return
     if icon:
         layout.label(text=text, icon=icon)
@@ -1460,7 +1480,8 @@ class AssetPopupCard(bpy.types.Operator, ratings_utils.RatingsProperties):
         # layout = layout.column()
         draw_asset_context_menu(layout, context, self.asset_data, from_panel=False)
 
-    def draw_property(self, layout, left, right, icon=None, icon_value=None, url='', tooltip=''):
+    def draw_property(self, layout, left, right, icon=None, icon_value=None, url='', tooltip='', operator=None,
+                      operator_kwargs={}):
         right = str(right)
         row = layout.row()
         split = row.split(factor=0.35)
@@ -1471,7 +1492,8 @@ class AssetPopupCard(bpy.types.Operator, ratings_utils.RatingsProperties):
         # split for questionmark:
         if url != '':
             split = split.split(factor=0.6)
-        label_or_url(split, text=right, tooltip=tooltip, url=url, icon_value=icon_value, icon=icon)
+        label_or_url_or_operator(split, text=right, tooltip=tooltip, url=url, operator=operator,
+                                 operator_kwargs=operator_kwargs, icon_value=icon_value, icon=icon)
         # additional questionmark icon where it's important?
         if url != '':
             split = split.split()
@@ -1479,7 +1501,7 @@ class AssetPopupCard(bpy.types.Operator, ratings_utils.RatingsProperties):
             op.url = url
             op.tooltip = tooltip
 
-    def draw_asset_parameter(self, layout, key='', pretext=''):
+    def draw_asset_parameter(self, layout, key='', pretext='', do_search=False):
         parameter = utils.get_param(self.asset_data, key)
         if parameter == None:
             return
@@ -1487,7 +1509,15 @@ class AssetPopupCard(bpy.types.Operator, ratings_utils.RatingsProperties):
             parameter = f"{parameter:,d}"
         elif type(parameter) == float:
             parameter = f"{parameter:,.1f}"
-        self.draw_property(layout, pretext, parameter)
+        if do_search:
+            kwargs = {
+                'esc': True,
+                'keywords': f'+{key}:{parameter}',
+                'tooltip': f'search by {parameter}',
+            }
+            self.draw_property(layout, pretext, parameter, operator='view3d.blenderkit_search', operator_kwargs=kwargs)
+        else:
+            self.draw_property(layout, pretext, parameter)
 
     def draw_description(self, layout, width=250):
         if len(self.asset_data['description']) > 0:
@@ -1495,7 +1525,7 @@ class AssetPopupCard(bpy.types.Operator, ratings_utils.RatingsProperties):
             box.scale_y = 0.4
             box.label(text='Description')
             box.separator()
-            link_more = utils.label_multiline(box, self.asset_data['description'], width=width, max_lines = 10)
+            link_more = utils.label_multiline(box, self.asset_data['description'], width=width, max_lines=10)
             if link_more:
                 row = box.row()
                 row.scale_y = 2
@@ -1588,9 +1618,10 @@ class AssetPopupCard(bpy.types.Operator, ratings_utils.RatingsProperties):
                 resolutions = resolutions.replace('_', '.')
                 self.draw_property(box, 'Generated', resolutions)
 
-        self.draw_asset_parameter(box, key='designer', pretext='Designer')
-        self.draw_asset_parameter(box, key='manufacturer', pretext='Manufacturer')  # TODO make them clickable!
-        self.draw_asset_parameter(box, key='designCollection', pretext='Collection')
+        self.draw_asset_parameter(box, key='designer', pretext='De

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list