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:
authorPeter Kim <pk15950@gmail.com>2021-07-24 12:10:55 +0300
committerPeter Kim <pk15950@gmail.com>2021-07-24 12:10:55 +0300
commitfcf49e7cff1ab47cce9cbeeee1cf814e60fe62ad (patch)
treece4cf53697e35c3eb0096b0427387012bd4ccae0
parent64e3de5361a42b005dcc2238de17973437fb3409 (diff)
parent89ce3f1e1ca9f715b790cb3901001782d27bebea (diff)
Merge branch 'master' into xr-controller-support
-rw-r--r--blenderkit/__init__.py8
-rw-r--r--blenderkit/asset_bar_op.py2
-rw-r--r--blenderkit/icons.py2
-rw-r--r--blenderkit/paths.py2
-rw-r--r--blenderkit/ratings_utils.py4
-rw-r--r--blenderkit/search.py35
-rw-r--r--blenderkit/thumbnails/filter.pngbin0 -> 525 bytes
-rw-r--r--blenderkit/thumbnails/filter_active.pngbin0 -> 525 bytes
-rw-r--r--blenderkit/ui.py2
-rw-r--r--blenderkit/ui_panels.py35
-rw-r--r--blenderkit/upload.py1
-rw-r--r--blenderkit/utils.py38
-rw-r--r--mesh_snap_utilities_line/__init__.py2
-rw-r--r--mesh_snap_utilities_line/snap_context_l/mesh_drawing.py10
14 files changed, 112 insertions, 29 deletions
diff --git a/blenderkit/__init__.py b/blenderkit/__init__.py
index 7b22279d..37e91a0a 100644
--- a/blenderkit/__init__.py
+++ b/blenderkit/__init__.py
@@ -459,8 +459,8 @@ class BlenderKitCommonSearchProps(object):
default=False)
own_only: BoolProperty(name="My Assets Only", description="Search only for your assets",
default=False, update=search.search_update)
- search_advanced: BoolProperty(name="Advanced Search Options", description="use advanced search properties",
- 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(
@@ -569,6 +569,10 @@ class BlenderKitCommonSearchProps(object):
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):
diff --git a/blenderkit/asset_bar_op.py b/blenderkit/asset_bar_op.py
index 9c12b0f2..19f51682 100644
--- a/blenderkit/asset_bar_op.py
+++ b/blenderkit/asset_bar_op.py
@@ -605,7 +605,7 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
self.scroll_offset = min(self.scroll_offset, len(sr) - (self.wcount * self.hcount))
self.scroll_offset = max(self.scroll_offset, 0)
self.update_images()
- if len(sr) - self.scroll_offset < (self.wcount * self.hcount) + 10:
+ if len(sr) - self.scroll_offset < (self.wcount * self.hcount) + 15:
self.search_more()
def search_by_author(self, asset_index):
diff --git a/blenderkit/icons.py b/blenderkit/icons.py
index b8b86cba..09a1ba19 100644
--- a/blenderkit/icons.py
+++ b/blenderkit/icons.py
@@ -31,6 +31,8 @@ icons_read = {
'dumbbell.png': 'dumbbell',
'cc0.png': 'cc0',
'royalty_free.png': 'royalty_free',
+ 'filter.png': 'filter',
+ 'filter_active.png': 'filter_active',
}
verification_icons = {
diff --git a/blenderkit/paths.py b/blenderkit/paths.py
index b9847be2..e074d966 100644
--- a/blenderkit/paths.py
+++ b/blenderkit/paths.py
@@ -97,6 +97,8 @@ def get_categories_filepath():
return os.path.join(tempdir, 'categories.json')
dirs_exist_dict = {}#cache these results since this is used very often
+# this causes the function to fail if user deletes the directory while blender is running,
+# but comes back when blender is restarted.
def get_temp_dir(subdir=None):
user_preferences = bpy.context.preferences.addons['blenderkit'].preferences
diff --git a/blenderkit/ratings_utils.py b/blenderkit/ratings_utils.py
index 37c1c971..67a79139 100644
--- a/blenderkit/ratings_utils.py
+++ b/blenderkit/ratings_utils.py
@@ -70,8 +70,8 @@ def send_rating_to_thread_work_hours(url, ratings, headers):
def store_rating_local_empty(asset_id):
context = bpy.context
- context.window_manager['asset ratings'] = context.window_manager.get('asset ratings', {})
- context.window_manager['asset ratings'][asset_id] = context.window_manager['asset ratings'].get(asset_id, {})
+ ar = context.window_manager['asset ratings']
+ ar[asset_id] = ar.get(asset_id, {})
def store_rating_local(asset_id, type='quality', value=0):
diff --git a/blenderkit/search.py b/blenderkit/search.py
index d8344aca..940375fa 100644
--- a/blenderkit/search.py
+++ b/blenderkit/search.py
@@ -1081,6 +1081,9 @@ def build_query_common(query, props):
query_common["files_size_gte"] = props.search_file_size_min * 1024 * 1024
query_common["files_size_lte"] = props.search_file_size_max * 1024 * 1024
+ if props.quality_limit > 0:
+ query["quality_gte"] = props.quality_limit
+
query.update(query_common)
@@ -1103,9 +1106,9 @@ def build_query_model():
# if props.free_only:
# query["is_free"] = True
- # if props.search_advanced:
if props.search_condition != 'UNSPECIFIED':
query["condition"] = props.search_condition
+
if props.search_design_year:
query["designYear_gte"] = props.search_design_year_min
query["designYear_lte"] = props.search_design_year_max
@@ -1383,7 +1386,7 @@ def search(category='', get_next=False, author_id=''):
# utils.p('searching')
props.is_searching = True
- page_size = min(40, ui_props.wcount * user_preferences.max_assetbar_rows)
+ page_size = min(30, ui_props.wcount * user_preferences.max_assetbar_rows)
params = {
'scene_uuid': bpy.context.scene.get('uuid', None),
@@ -1402,10 +1405,30 @@ def search(category='', get_next=False, author_id=''):
props.report = 'BlenderKit searching....'
+def update_filters():
+ sprops = utils.get_search_props()
+ ui_props = bpy.context.scene.blenderkitUI
+ fcommon = sprops.own_only or \
+ sprops.search_texture_resolution or\
+ sprops.search_file_size or \
+ sprops.search_procedural != 'BOTH' or \
+ sprops.free_only or \
+ sprops.quality_limit>0
+
+ if ui_props.asset_type =='MODEL':
+ sprops.use_filters = fcommon or \
+ sprops.search_style != 'ANY' or \
+ sprops.search_condition != 'UNSPECIFIED' or \
+ sprops.search_design_year or \
+ sprops.search_polycount
+ elif ui_props.asset_type == 'MATERIAL':
+ sprops.use_filters = fcommon
+
def search_update(self, context):
utils.p('search updater')
# if self.search_keywords != '':
+ update_filters()
ui_props = bpy.context.scene.blenderkitUI
if ui_props.down_up != 'SEARCH':
ui_props.down_up = 'SEARCH'
@@ -1458,6 +1481,12 @@ class SearchOperator(Operator):
bl_description = "Search online for assets"
bl_options = {'REGISTER', 'UNDO', 'INTERNAL'}
+ esc: BoolProperty(name="Escape window",
+ description="Escape window right after start",
+ default=False,
+ options={'SKIP_SAVE'}
+ )
+
own: BoolProperty(name="own assets only",
description="Find all own assets",
default=False)
@@ -1506,6 +1535,8 @@ class SearchOperator(Operator):
def execute(self, context):
# TODO ; this should all get transferred to properties of the search operator, so sprops don't have to be fetched here at all.
+ if self.esc:
+ bpy.ops.view3d.close_popup_button('INVOKE_DEFAULT')
sprops = utils.get_search_props()
if self.author_id != '':
sprops.search_keywords = ''
diff --git a/blenderkit/thumbnails/filter.png b/blenderkit/thumbnails/filter.png
new file mode 100644
index 00000000..e128c35e
--- /dev/null
+++ b/blenderkit/thumbnails/filter.png
Binary files differ
diff --git a/blenderkit/thumbnails/filter_active.png b/blenderkit/thumbnails/filter_active.png
new file mode 100644
index 00000000..de4fb3be
--- /dev/null
+++ b/blenderkit/thumbnails/filter_active.png
Binary files differ
diff --git a/blenderkit/ui.py b/blenderkit/ui.py
index 5b4160c5..f402de51 100644
--- a/blenderkit/ui.py
+++ b/blenderkit/ui.py
@@ -1298,7 +1298,7 @@ class AssetBarOperator(bpy.types.Operator):
# If there aren't any results, we need no interaction(yet)
if sr is None:
return {'PASS_THROUGH'}
- if len(sr) - ui_props.scrolloffset < (ui_props.wcount * user_preferences.max_assetbar_rows) + 10:
+ if len(sr) - ui_props.scrolloffset < (ui_props.wcount * user_preferences.max_assetbar_rows) + 15:
self.search_more()
if event.type == 'WHEELUPMOUSE' or event.type == 'WHEELDOWNMOUSE' or event.type == 'TRACKPADPAN':
diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py
index 292d8359..c763ba9e 100644
--- a/blenderkit/ui_panels.py
+++ b/blenderkit/ui_panels.py
@@ -819,6 +819,7 @@ class VIEW3D_PT_blenderkit_advanced_model_search(Panel):
# AGE
layout.prop(props, "search_condition", text='Condition') # , text ='condition of object new/old e.t.c.')
+ layout.prop(props, "quality_limit", slider=True) # , text ='condition of object new/old e.t.c.')
# layout.prop(props, "search_procedural", expand=True)
# ADULT
@@ -867,7 +868,7 @@ class VIEW3D_PT_blenderkit_advanced_material_search(Panel):
row = layout.row(align=True)
row.prop(props, "search_file_size_min", text='Min')
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"
@@ -1206,6 +1207,7 @@ def draw_asset_context_menu(layout, context, asset_data, from_panel=False):
op.author_id = author_id
op = layout.operator('view3d.blenderkit_search', text='Search Similar')
+ op.esc = True
op.tooltip = 'Search for similar assets in the library'
# build search string from description and tags:
op.keywords = asset_data['name']
@@ -1399,7 +1401,7 @@ def numeric_to_str(s):
return s
-def push_op_left(layout, strength =5):
+def push_op_left(layout, strength =3):
for a in range(0, strength):
layout.label(text='')
@@ -1416,7 +1418,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)
+ push_op_left(layout, strength = 5)
return
if tooltip != '':
@@ -1427,8 +1429,9 @@ def label_or_url(layout, text='', tooltip='', url='', icon_value=None, icon=None
else:
op = layout.operator('wm.blenderkit_tooltip', text=text)
op.tooltip = tooltip
+
# these are here to move the text to left, since operators can only center text by default
- push_op_left(layout)
+ push_op_left(layout, strength = 3)
return
if icon:
layout.label(text=text, icon=icon)
@@ -1664,6 +1667,16 @@ class AssetPopupCard(bpy.types.Operator, ratings_utils.RatingsProperties):
date = self.asset_data['created'][:10]
date = f"{date[8:10]}. {date[5:7]}. {date[:4]}"
self.draw_property(box, 'Created', date)
+ if utils.asset_from_newer_blender_version(self.asset_data):
+ # row = box.row()
+ box.alert=True
+ self.draw_property(box,
+ 'Blender version',
+ self.asset_data['sourceAppVersion'],
+ # icon='ERROR',
+ tooltip='Asset is from a newer Blender version and might work incorrectly in your scene',
+ )
+ box.alert = False
box.separator()
def draw_author_area(self, context, layout, width=330):
@@ -1721,6 +1734,7 @@ class AssetPopupCard(bpy.types.Operator, ratings_utils.RatingsProperties):
op.url = url
op = button_row.operator('view3d.blenderkit_search', text="Find Assets By Author")
+ op.esc = True
op.keywords = ''
op.author_id = self.asset_data['author']['id']
@@ -2202,10 +2216,19 @@ def header_search_draw(self, context):
layout.prop(props, "search_keywords", text="", icon='VIEWZOOM')
draw_assetbar_show_hide(layout, props)
layout.popover(panel="VIEW3D_PT_blenderkit_categories", text="", icon = 'OUTLINER')
+
+ pcoll = icons.icon_collections["main"]
+
+ if props.use_filters:
+ icon_id = pcoll['filter_active'].icon_id
+ else:
+ icon_id = pcoll['filter'].icon_id
+
if ui_props.asset_type=='MODEL':
- layout.popover(panel="VIEW3D_PT_blenderkit_advanced_model_search", text="", icon = 'FILTER')
+ layout.popover(panel="VIEW3D_PT_blenderkit_advanced_model_search", text="", icon_value = icon_id)
+
elif ui_props.asset_type=='MATERIAL':
- layout.popover(panel="VIEW3D_PT_blenderkit_advanced_material_search", text="", icon = 'FILTER')
+ layout.popover(panel="VIEW3D_PT_blenderkit_advanced_material_search", text="", icon_value = icon_id)
def ui_message(title, message):
diff --git a/blenderkit/upload.py b/blenderkit/upload.py
index d4570bf3..887ffe57 100644
--- a/blenderkit/upload.py
+++ b/blenderkit/upload.py
@@ -63,6 +63,7 @@ def get_app_version():
return '%i.%i.%i' % (ver[0], ver[1], ver[2])
+
def add_version(data):
app_version = get_app_version()
addon_version = version_checker.get_addon_version()
diff --git a/blenderkit/utils.py b/blenderkit/utils.py
index d5bdd84b..c16bc017 100644
--- a/blenderkit/utils.py
+++ b/blenderkit/utils.py
@@ -39,7 +39,9 @@ NORMAL_PRIORITY_CLASS = 0x00000020
REALTIME_PRIORITY_CLASS = 0x00000100
supported_material_click = ('MESH', 'CURVE', 'META', 'FONT', 'SURFACE', 'VOLUME', 'GPENCIL')
-supported_material_drag = ('MESH', 'CURVE', 'META', 'FONT','SURFACE', 'VOLUME', 'GPENCIL')
+supported_material_drag = ('MESH', 'CURVE', 'META', 'FONT', 'SURFACE', 'VOLUME', 'GPENCIL')
+
+
# supported_material_drag = ('MESH')
@@ -185,8 +187,8 @@ def get_search_props():
return props
-def get_active_asset_by_type(asset_type = 'model'):
- asset_type =asset_type.lower()
+def get_active_asset_by_type(asset_type='model'):
+ asset_type = asset_type.lower()
if asset_type == 'model':
if bpy.context.view_layer.objects.active is not None:
ob = get_active_model()
@@ -206,6 +208,7 @@ def get_active_asset_by_type(asset_type = 'model'):
return b
return None
+
def get_active_asset():
scene = bpy.context.scene
ui_props = scene.blenderkitUI
@@ -341,8 +344,8 @@ def get_hidden_texture(name, force_reload=False):
return t
-def img_to_preview(img, copy_original = False):
- if bpy.app.version[0]>=3:
+def img_to_preview(img, copy_original=False):
+ if bpy.app.version[0] >= 3:
img.preview_ensure()
if not copy_original:
return;
@@ -352,6 +355,7 @@ def img_to_preview(img, copy_original = False):
# img.preview.icon_size = (img.size[0], img.size[1])
# img.preview.icon_pixels_float = img.pixels[:]
+
def get_hidden_image(tpath, bdata_name, force_reload=False, colorspace='sRGB'):
if bdata_name[0] == '.':
hidden_name = bdata_name
@@ -709,11 +713,13 @@ def name_update(props):
# Here we actually rename assets datablocks, but don't do that with HDR's and possibly with others
asset.name = fname
+
def fmt_length(prop):
prop = str(round(prop, 2))
return prop
-def get_param(asset_data, parameter_name, default = None):
+
+def get_param(asset_data, parameter_name, default=None):
if not asset_data.get('parameters'):
# this can appear in older version files.
return default
@@ -793,6 +799,7 @@ def profile_is_validator():
return True
return False
+
def user_is_owner(asset_data=None):
'''Checks if the current logged in user is owner of the asset'''
profile = bpy.context.window_manager.get('bkit profile')
@@ -802,6 +809,15 @@ def user_is_owner(asset_data=None):
return True
return False
+
+def asset_from_newer_blender_version(asset_data):
+ bver = bpy.app.version
+ aver = asset_data['sourceAppVersion'].split('.')
+ print(aver,bver)
+ bver_f = bver[0] + bver[1] * .01 + bver[2] * .0001
+ aver_f = int(aver[0]) + int(aver[1]) * .01 + int(aver[2]) * .0001
+ return aver_f>bver_f
+
def guard_from_crash():
'''
Blender tends to crash when trying to run some functions
@@ -861,10 +877,11 @@ def get_fake_context(context, area_type='VIEW_3D'):
# print(w,a,r)
return C_dict
+
# def is_url(text):
-def label_multiline(layout, text='', icon='NONE', width=-1, max_lines = 10):
+def label_multiline(layout, text='', icon='NONE', width=-1, max_lines=10):
'''
draw a ui label, but try to split it in multiple lines.
@@ -882,7 +899,7 @@ def label_multiline(layout, text='', icon='NONE', width=-1, max_lines = 10):
'''
if text.strip() == '':
return
- text = text.replace('\r\n','\n')
+ text = text.replace('\r\n', '\n')
lines = text.split('\n')
if width > 0:
threshold = int(width / 5.5)
@@ -891,7 +908,7 @@ def label_multiline(layout, text='', icon='NONE', width=-1, max_lines = 10):
li = 0
for l in lines:
# if is_url(l):
- li+=1
+ li += 1
while len(l) > threshold:
i = l.rfind(' ', 0, threshold)
if i < 1:
@@ -907,10 +924,9 @@ def label_multiline(layout, text='', icon='NONE', width=-1, max_lines = 10):
break;
layout.label(text=l, icon=icon)
icon = 'NONE'
- if li>max_lines:
+ if li > max_lines:
return True
-
def trace():
traceback.print_stack()
diff --git a/mesh_snap_utilities_line/__init__.py b/mesh_snap_utilities_line/__init__.py
index c22c5b02..98f88e76 100644
--- a/mesh_snap_utilities_line/__init__.py
+++ b/mesh_snap_utilities_line/__init__.py
@@ -21,7 +21,7 @@
bl_info = {
"name": "Snap_Utilities_Line",
"author": "Germano Cavalcante",
- "version": (6, 9, 22),
+ "version": (6, 9, 23),
"blender": (2, 93, 0),
"location": "View3D > TOOLS > Line Tool",
"description": "Extends Blender Snap controls",
diff --git a/mesh_snap_utilities_line/snap_context_l/mesh_drawing.py b/mesh_snap_utilities_line/snap_context_l/mesh_drawing.py
index 219d7311..d05becec 100644
--- a/mesh_snap_utilities_line/snap_context_l/mesh_drawing.py
+++ b/mesh_snap_utilities_line/snap_context_l/mesh_drawing.py
@@ -349,9 +349,13 @@ class GPU_Indices_Mesh():
far_ += depth_offset
near += depth_offset
- fn = (far_ - near)
- winmat[2][2] = -(far_ + near) / fn
- winmat[2][3] = (-2 * far_ * near) / fn
+ range = (far_ - near)
+ if is_persp:
+ winmat[2][2] = -(far_ + near) / range
+ winmat[2][3] = (-2 * far_ * near) / range
+ else:
+ winmat[2][3] = -(far_ + near) / range
+
gpu.matrix.load_projection_matrix(winmat)
if self.draw_edges: